Author: radu
Date: Fri Jan  8 17:45:30 2016
New Revision: 1723769

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

* corrected source alignment after processing the class' package name

Modified:
    
sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/SightlyJavaCompilerService.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=1723769&r1=1723768&r2=1723769&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
 Fri Jan  8 17:45:30 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.Matcher;
 import java.util.regex.Pattern;
 
 import org.apache.commons.io.IOUtils;
@@ -67,7 +68,7 @@ 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_$]*\\.?)*;");
+    public static final Pattern PACKAGE_DECL_PATTERN = 
Pattern.compile("(.*)(package\\s+([a-zA-Z_$][a-zA-Z\\d_$]*\\.?)*;)(.*)");
 
     @Reference
     private ClassLoaderWriter classLoaderWriter = null;
@@ -169,11 +170,24 @@ 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;
 
+        StringBuilder sourceCodeSB = new StringBuilder();
+        String[] sourceCodeLines = sourceCode.split("\n");
+        boolean foundPackageDeclaration = false;
+        for (String line : sourceCodeLines) {
+            Matcher matcher = PACKAGE_DECL_PATTERN.matcher(line);
+            if (matcher.matches()) {
+                line = matcher.group(1) + "package " + 
Utils.getPackageNameFromFQCN(fqcn) + ";" + matcher.group(4);
+                foundPackageDeclaration = true;
+            }
+            sourceCodeSB.append(line).append("\n");
+        }
+
+        if (!foundPackageDeclaration) {
+            sourceCodeSB.insert(0, "package " + 
Utils.getPackageNameFromFQCN(fqcn) + ";\n");
+        }
 
-        CompilationUnit compilationUnit = new 
SightlyCompilationUnit(sourceCode, fqcn);
+        CompilationUnit compilationUnit = new 
SightlyCompilationUnit(sourceCodeSB.toString(), fqcn);
 
         long start = System.currentTimeMillis();
         CompilationResult compilationResult = javaCompiler.compile(new 
CompilationUnit[]{compilationUnit}, options);


Reply via email to