Author: radu
Date: Wed Sep 30 10:14:07 2015
New Revision: 1705994
URL: http://svn.apache.org/viewvc?rev=1705994&view=rev
Log:
SLING-4971 - "static" node name not allowed as a script ancestor
* defined a set of reserved Java keywords that will get escaped when detected
in Resource paths
Added:
sling/trunk/bundles/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/engine/compiled/
sling/trunk/bundles/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/engine/compiled/SourceIdentifierTest.java
Modified:
sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/compiled/SourceIdentifier.java
Modified:
sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/compiled/SourceIdentifier.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/compiled/SourceIdentifier.java?rev=1705994&r1=1705993&r2=1705994&view=diff
==============================================================================
---
sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/compiled/SourceIdentifier.java
(original)
+++
sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/compiled/SourceIdentifier.java
Wed Sep 30 10:14:07 2015
@@ -19,6 +19,9 @@
package org.apache.sling.scripting.sightly.impl.engine.compiled;
+import java.util.HashSet;
+import java.util.Set;
+
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.commons.classloader.ClassLoaderWriter;
@@ -30,6 +33,59 @@ import org.apache.sling.scripting.sightl
*/
public class SourceIdentifier {
+ private static final Set<String> reservedKeywords = 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");
+ }};
+
private final String className;
private final Resource resource;
private final String packageName;
@@ -88,10 +144,21 @@ public class SourceIdentifier {
}
private String buildPackageName(Resource resource) {
- return ResourceUtil.getParent(resource.getPath())
- .replaceAll("/", ".")
- .substring(1)
- .replaceAll("-", "_");
+ String packageName =
ResourceUtil.getParent(resource.getPath()).replaceAll("/",
".").substring(1).replaceAll("-", "_");
+ String[] packageNameElements = packageName.split("\\.");
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < packageNameElements.length; i++) {
+ String subPackage = packageNameElements[i];
+ if (reservedKeywords.contains(subPackage)) {
+ sb.append(subPackage).append("_");
+ } else {
+ sb.append(subPackage);
+ }
+ if (i != packageNameElements.length - 1) {
+ sb.append(".");
+ }
+ }
+ return sb.toString();
}
private String getExtension(String scriptName) {
Added:
sling/trunk/bundles/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/engine/compiled/SourceIdentifierTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/engine/compiled/SourceIdentifierTest.java?rev=1705994&view=auto
==============================================================================
---
sling/trunk/bundles/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/engine/compiled/SourceIdentifierTest.java
(added)
+++
sling/trunk/bundles/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/engine/compiled/SourceIdentifierTest.java
Wed Sep 30 10:14:07 2015
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+
******************************************************************************/
+package org.apache.sling.scripting.sightly.impl.engine.compiled;
+
+import org.apache.sling.api.resource.Resource;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public class SourceIdentifierTest {
+
+ private static SourceIdentifier sourceIdentifier;
+
+ @BeforeClass
+ public static void setUp() {
+ final Resource resource = mock(Resource.class);
+ when(resource.getPath()).thenReturn("/apps/blah/static/foo/foo.html");
+ sourceIdentifier = new SourceIdentifier(null, null, null, resource,
"SightlyJava_");
+ }
+
+ @Test
+ public void testGetClassName() throws Exception {
+ assertEquals("SightlyJava_foo", sourceIdentifier.getClassName());
+ }
+
+ @Test
+ public void testGetPackageName() throws Exception {
+ assertEquals("apps.blah.static_.foo",
sourceIdentifier.getPackageName());
+ }
+
+ @Test
+ public void testGetFullyQualifiedName() throws Exception {
+ assertEquals("apps.blah.static_.foo.SightlyJava_foo",
sourceIdentifier.getFullyQualifiedName());
+ }
+}
\ No newline at end of file