SLING-9142 - Deprecate JavaEscapeUtils and switch to JavaEscapeHelper
diff --git a/pom.xml b/pom.xml
index f1134a7..41b39d7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -108,6 +108,12 @@
             <version>1.1.3-1.4.0-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.commons.compiler</artifactId>
+            <version>2.3.7-SNAPSHOT</version>
+            <scope>provided</scope>
+        </dependency>
 
         <!-- OSGi -->
         <dependency>
diff --git a/src/main/java/org/apache/sling/scripting/sightly/java/compiler/JavaEscapeUtils.java b/src/main/java/org/apache/sling/scripting/sightly/java/compiler/JavaEscapeUtils.java
index e22390a..ae5dcfb 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/java/compiler/JavaEscapeUtils.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/java/compiler/JavaEscapeUtils.java
@@ -16,70 +16,17 @@
  ******************************************************************************/
 package org.apache.sling.scripting.sightly.java.compiler;
 
-import java.util.HashSet;
-import java.util.Set;
-
-import org.apache.commons.lang3.StringUtils;
+import org.apache.sling.commons.compiler.source.JavaEscapeHelper;
 
 /**
  * The {@code JavaEscapeUtils} provides useful methods for escaping or transforming invalid Java tokens to valid ones that could be used in
  * generated Java source code.
+ *
+ * @deprecated since version 2.1.0 of the API; see {@link JavaEscapeHelper} for a replacement.
  */
+@Deprecated
 public class JavaEscapeUtils {
 
-    private static final Set<String> javaKeywords = new HashSet<String>() {{
-        add("abstract");
-        add("assert");
-        add("boolean");
-        add("break");
-        add("byte");
-        add("case");
-        add("catch");
-        add("char");
-        add("class");
-        add("const");
-        add("continue");
-        add("default");
-        add("do");
-        add("double");
-        add("else");
-        add("enum");
-        add("extends");
-        add("final");
-        add("finally");
-        add("float");
-        add("for");
-        add("goto");
-        add("if");
-        add("implements");
-        add("import");
-        add("instanceof");
-        add("int");
-        add("interface");
-        add("long");
-        add("native");
-        add("new");
-        add("package");
-        add("private");
-        add("protected");
-        add("public");
-        add("return");
-        add("short");
-        add("static");
-        add("strictfp");
-        add("super");
-        add("switch");
-        add("synchronized");
-        add("this");
-        add("throw");
-        add("throws");
-        add("transient");
-        add("try");
-        add("void");
-        add("volatile");
-        add("while");
-    }};
-
     /**
      * Converts the given identifier to a legal Java identifier
      *
@@ -87,24 +34,7 @@
      * @return legal Java identifier corresponding to the given identifier
      */
     public static String makeJavaIdentifier(String identifier) {
-        StringBuilder modifiedIdentifier = new StringBuilder(identifier.length());
-        if (!Character.isJavaIdentifierStart(identifier.charAt(0))) {
-            modifiedIdentifier.append('_');
-        }
-        for (int i = 0; i < identifier.length(); i++) {
-            char ch = identifier.charAt(i);
-            if (Character.isJavaIdentifierPart(ch)) {
-                modifiedIdentifier.append(ch);
-            } else if (ch == '.') {
-                modifiedIdentifier.append('_');
-            } else {
-                modifiedIdentifier.append(mangleChar(ch));
-            }
-        }
-        if (isJavaKeyword(modifiedIdentifier.toString())) {
-            modifiedIdentifier.append('_');
-        }
-        return modifiedIdentifier.toString();
+        return JavaEscapeHelper.getJavaIdentifier(identifier);
     }
 
     /**
@@ -114,7 +44,7 @@
      * @return the mangled
      */
     public static String mangleChar(char ch) {
-        return String.format("__%04x__", (int) ch);
+        return JavaEscapeHelper.escapeChar(ch);
     }
 
     /**
@@ -124,8 +54,7 @@
      * @return the original character
      */
     public static char unmangle(String mangled) {
-        String toProcess = mangled.replaceAll("__", "");
-        return (char) Integer.parseInt(toProcess, 16);
+        return JavaEscapeHelper.unescape(mangled);
     }
 
     /**
@@ -135,15 +64,7 @@
      * @return Java package corresponding to the given scriptName
      */
     public static String makeJavaPackage(String scriptName) {
-        String classNameComponents[] = StringUtils.split(scriptName, "/\\");
-        StringBuilder legalClassNames = new StringBuilder();
-        for (int i = 0; i < classNameComponents.length; i++) {
-            legalClassNames.append(makeJavaIdentifier(classNameComponents[i]));
-            if (i < classNameComponents.length - 1) {
-                legalClassNames.append('.');
-            }
-        }
-        return legalClassNames.toString();
+        return JavaEscapeHelper.makeJavaPackage(scriptName);
     }
 
     /**
@@ -153,7 +74,7 @@
      * @return {@code true} if the String is a Java keyword, {@code false} otherwise
      */
     public static boolean isJavaKeyword(String key) {
-        return javaKeywords.contains(key);
+        return JavaEscapeHelper.isJavaKeyword(key);
     }
 
 }
diff --git a/src/main/java/org/apache/sling/scripting/sightly/java/compiler/impl/VariableAnalyzer.java b/src/main/java/org/apache/sling/scripting/sightly/java/compiler/impl/VariableAnalyzer.java
index b0fb3e3..35b9686 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/java/compiler/impl/VariableAnalyzer.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/java/compiler/impl/VariableAnalyzer.java
@@ -22,9 +22,9 @@
 import java.util.HashMap;
 import java.util.List;
 
-import org.apache.sling.scripting.sightly.java.compiler.SightlyJavaCompilerException;
-import org.apache.sling.scripting.sightly.java.compiler.JavaEscapeUtils;
+import org.apache.sling.commons.compiler.source.JavaEscapeHelper;
 import org.apache.sling.scripting.sightly.compiler.util.VariableTracker;
+import org.apache.sling.scripting.sightly.java.compiler.SightlyJavaCompilerException;
 
 /**
  * Data structure used in the analysis of variables
@@ -47,8 +47,8 @@
      */
     public VariableDescriptor declareVariable(String originalName, Type type) {
         originalName = originalName.toLowerCase();
-        String assignedName = findSafeName(originalName);
-        VariableDescriptor descriptor = new VariableDescriptor(originalName, assignedName, type, VariableScope.SCOPED);
+        VariableDescriptor descriptor =
+                new VariableDescriptor(originalName, JavaEscapeHelper.getJavaIdentifier(originalName), type, VariableScope.SCOPED);
         tracker.pushVariable(originalName, descriptor);
         variables.add(descriptor);
         return descriptor;
@@ -140,21 +140,11 @@
     }
 
     private String findDynamicName(String original) {
-        return DYNAMIC_PREFIX + JavaEscapeUtils.makeJavaIdentifier(original);
+        return DYNAMIC_PREFIX + JavaEscapeHelper.getJavaIdentifier(original);
     }
 
     private String findGlobalName(String original) {
-        return GLOBAL_PREFIX + JavaEscapeUtils.makeJavaIdentifier(original);
-    }
-
-    private String findSafeName(String original) {
-        int occurrenceCount = tracker.getOccurrenceCount(original);
-        String syntaxSafe = JavaEscapeUtils.makeJavaIdentifier(original);
-        if (occurrenceCount == 0) {
-            return syntaxSafe; //no other declarations in scope. Use this very name
-        } else {
-            return original + "_" + occurrenceCount;
-        }
+        return GLOBAL_PREFIX + JavaEscapeHelper.getJavaIdentifier(original);
     }
 
     private String validName(String name) {
diff --git a/src/test/java/org/apache/sling/scripting/sightly/java/compiler/JavaEscapeUtilsTest.java b/src/test/java/org/apache/sling/scripting/sightly/java/compiler/JavaEscapeUtilsTest.java
index 8766b3d..06b29ed 100644
--- a/src/test/java/org/apache/sling/scripting/sightly/java/compiler/JavaEscapeUtilsTest.java
+++ b/src/test/java/org/apache/sling/scripting/sightly/java/compiler/JavaEscapeUtilsTest.java
@@ -26,9 +26,9 @@
 
     @Test
     public void testMakeJavaPackage() {
-        assertEquals("apps.projects.script_html", JavaEscapeUtils.makeJavaPackage("/apps/projects/script.html"));
+        assertEquals("apps.projects.script__002e__html", JavaEscapeUtils.makeJavaPackage("/apps/projects/script.html"));
         // test also with windows path names
-        assertEquals("apps.projects.script_html", JavaEscapeUtils.makeJavaPackage("\\apps\\projects\\script.html"));
+        assertEquals("apps.projects.script__002e__html", JavaEscapeUtils.makeJavaPackage("\\apps\\projects\\script.html"));
     }
 
 }