You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2016/01/05 15:10:28 UTC

svn commit: r1723074 - in /sling/trunk/bundles/scripting/sightly: engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/ engine/src/main/java/org/apache/sling/scripting/sightly/impl/utils/ engine/src/test/java/org/apache/sling/scripting...

Author: radu
Date: Tue Jan  5 14:10:27 2016
New Revision: 1723074

URL: http://svn.apache.org/viewvc?rev=1723074&view=rev
Log:
SLING-5409 - Enhance the SightlyJavaCompilerService to not enforce a package name for Use objects stored in the repository

* package names are now automatically added or replaced (depending on the case) for Use objects

Added:
    sling/trunk/bundles/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/compiler/UtilsTest.java
      - copied, changed from r1723054, sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java
    sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/RepoPojoNoPkg.java
      - copied, changed from r1723054, sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java
Modified:
    sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/SightlyJavaCompilerService.java
    sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java
    sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/utils/JavaEscapeUtils.java
    sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use.html
    sling/trunk/bundles/scripting/sightly/testing/src/test/java/org/apache/sling/scripting/sightly/it/SlingSpecificsSightlyIT.java

Modified: sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/SightlyJavaCompilerService.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/SightlyJavaCompilerService.java?rev=1723074&r1=1723073&r2=1723074&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/SightlyJavaCompilerService.java (original)
+++ sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/SightlyJavaCompilerService.java Tue Jan  5 14:10:27 2016
@@ -31,6 +31,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.regex.Pattern;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.felix.scr.annotations.Activate;
@@ -66,6 +67,8 @@ public class SightlyJavaCompilerService
 
     private static final Logger LOG = LoggerFactory.getLogger(SightlyJavaCompilerService.class);
 
+    public static final Pattern PACKAGE_DECL_PATTERN = Pattern.compile("package\\s+([a-zA-Z_$][a-zA-Z\\d_$]*\\.?)*;");
+
     @Reference
     private ClassLoaderWriter classLoaderWriter = null;
 
@@ -166,6 +169,10 @@ public class SightlyJavaCompilerService
             IOUtils.write(sourceCode, os, "UTF-8");
             IOUtils.closeQuietly(os);
         }
+        sourceCode = PACKAGE_DECL_PATTERN.matcher(sourceCode).replaceFirst("");
+        sourceCode = "package " + Utils.getPackageNameFromFQCN(fqcn) + ";\n" + sourceCode;
+
+
         CompilationUnit compilationUnit = new SightlyCompilationUnit(sourceCode, fqcn);
 
         long start = System.currentTimeMillis();

Modified: sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java?rev=1723074&r1=1723073&r2=1723074&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java (original)
+++ sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java Tue Jan  5 14:10:27 2016
@@ -16,13 +16,34 @@
  ******************************************************************************/
 package org.apache.sling.scripting.sightly.impl.compiler;
 
+import org.apache.commons.lang.StringUtils;
+import org.apache.sling.scripting.sightly.impl.utils.JavaEscapeUtils;
+
 public class Utils {
 
     public static String getJavaNameFromPath(String path) {
         if (path.endsWith(".java")) {
             path = path.substring(0, path.length() - 5);
         }
-        return path.substring(1).replace("/", ".").replace("-", "_");
+        String[] parts = path.split("/");
+        StringBuilder stringBuilder = new StringBuilder();
+        for (int i = 0; i < parts.length; i++) {
+            String part = parts[i];
+            if (StringUtils.isNotEmpty(part)) {
+                stringBuilder.append(JavaEscapeUtils.getEscapedToken(parts[i]));
+                if (i != parts.length - 1) {
+                    stringBuilder.append(".");
+                }
+            }
+        }
+        return stringBuilder.toString();
+    }
+
+    public static String getPackageNameFromFQCN(String fqcn) {
+        if (StringUtils.isNotEmpty(fqcn)) {
+            return fqcn.substring(0, fqcn.lastIndexOf("."));
+        }
+        return null;
     }
 
 }

Modified: sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/utils/JavaEscapeUtils.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/utils/JavaEscapeUtils.java?rev=1723074&r1=1723073&r2=1723074&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/utils/JavaEscapeUtils.java (original)
+++ sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/utils/JavaEscapeUtils.java Tue Jan  5 14:10:27 2016
@@ -85,7 +85,7 @@ public class JavaEscapeUtils {
      * @return a valid Java token
      */
     public static String getEscapedToken(String token) {
-        String result = token.toLowerCase();
+        String result = token;
         if (reservedKeywords.contains(result)) {
             result = "_" + result;
         }

Copied: sling/trunk/bundles/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/compiler/UtilsTest.java (from r1723054, sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java)
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/compiler/UtilsTest.java?p2=sling/trunk/bundles/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/compiler/UtilsTest.java&p1=sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java&r1=1723054&r2=1723074&rev=1723074&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java (original)
+++ sling/trunk/bundles/scripting/sightly/engine/src/test/java/org/apache/sling/scripting/sightly/impl/compiler/UtilsTest.java Tue Jan  5 14:10:27 2016
@@ -16,13 +16,23 @@
  ******************************************************************************/
 package org.apache.sling.scripting.sightly.impl.compiler;
 
-public class Utils {
+import org.junit.Test;
 
-    public static String getJavaNameFromPath(String path) {
-        if (path.endsWith(".java")) {
-            path = path.substring(0, path.length() - 5);
-        }
-        return path.substring(1).replace("/", ".").replace("-", "_");
+import static org.junit.Assert.assertEquals;
+
+public class UtilsTest {
+
+    @Test
+    public void testGetJavaNameFromPath() throws Exception {
+        assertEquals("apps.project.components.A", Utils.getJavaNameFromPath("/apps/project/components/A.java"));
+        assertEquals("apps.pro_ject.components.A", Utils.getJavaNameFromPath("/apps/pro-ject/components/A.java"));
+        assertEquals("apps._static.project.components.A", Utils.getJavaNameFromPath("/apps/static/project/components/A.java"));
     }
 
+    @Test
+    public void testGetPackageNameFromFQCN() throws Exception {
+        assertEquals("apps.project.components", Utils.getPackageNameFromFQCN("apps.project.components.A"));
+        assertEquals("apps.pro_ject.components", Utils.getPackageNameFromFQCN("apps.pro_ject.components.A"));
+        assertEquals("apps._static.project.components", Utils.getPackageNameFromFQCN("apps._static.project.components.A"));
+    }
 }

Copied: sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/RepoPojoNoPkg.java (from r1723054, sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java)
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/RepoPojoNoPkg.java?p2=sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/RepoPojoNoPkg.java&p1=sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java&r1=1723054&r2=1723074&rev=1723074&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/Utils.java (original)
+++ sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/RepoPojoNoPkg.java Tue Jan  5 14:10:27 2016
@@ -14,15 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  ******************************************************************************/
-package org.apache.sling.scripting.sightly.impl.compiler;
-
-public class Utils {
-
-    public static String getJavaNameFromPath(String path) {
-        if (path.endsWith(".java")) {
-            path = path.substring(0, path.length() - 5);
-        }
-        return path.substring(1).replace("/", ".").replace("-", "_");
-    }
-
+public class RepoPojoNoPkg {
+    public static final String FIELD = "nopkg";
 }

Modified: sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use.html
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use.html?rev=1723074&r1=1723073&r2=1723074&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use.html (original)
+++ sling/trunk/bundles/scripting/sightly/testing-content/src/main/resources/SLING-INF/apps/sightly/scripts/use/use.html Tue Jan  5 14:10:27 2016
@@ -31,5 +31,6 @@
         <div id="resadapt"
              data-sly-use.resadapt="org.apache.sling.scripting.sightly.testing.adaptable.ResourceAdapterUseObject">${resadapt.title}</div>
         <div id="osgi" data-sly-use.osgi="org.apache.sling.scripting.sightly.testing.use.TestService">${osgi.sayHello}</div>
+        <div id="repopojo-nopkg" data-sly-use.repoNoPkg="RepoPojoNoPkg">${repoNoPkg.FIELD}</div>
     </body>
-</html>
\ No newline at end of file
+</html>

Modified: sling/trunk/bundles/scripting/sightly/testing/src/test/java/org/apache/sling/scripting/sightly/it/SlingSpecificsSightlyIT.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/testing/src/test/java/org/apache/sling/scripting/sightly/it/SlingSpecificsSightlyIT.java?rev=1723074&r1=1723073&r2=1723074&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/sightly/testing/src/test/java/org/apache/sling/scripting/sightly/it/SlingSpecificsSightlyIT.java (original)
+++ sling/trunk/bundles/scripting/sightly/testing/src/test/java/org/apache/sling/scripting/sightly/it/SlingSpecificsSightlyIT.java Tue Jan  5 14:10:27 2016
@@ -169,6 +169,13 @@ public class SlingSpecificsSightlyIT {
         assertEquals("original", HTMLExtractor.innerHTML(url + System.currentTimeMillis(), pageContent, "#repopojo"));
     }
 
+    @Test
+    public void testRepositoryPojoNoPkg() {
+        String url = launchpadURL + SLING_USE;
+        String pageContent = client.getStringContent(url, 200);
+        assertEquals("nopkg", HTMLExtractor.innerHTML(url, pageContent, "#repopojo-nopkg"));
+    }
+
     private void uploadFile(String fileName, String serverFileName, String url) throws IOException {
         HttpClient httpClient = HttpClientBuilder.create().build();
         HttpPost post = new HttpPost(launchpadURL + url);