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"));
}
}