Author: cziegeler
Date: Thu Jan 13 13:44:06 2011
New Revision: 1058553

URL: http://svn.apache.org/viewvc?rev=1058553&view=rev
Log:
SLING-1931 : Compiler message contain only class name but not resource path

Modified:
    
sling/trunk/contrib/jcr/compiler/src/main/java/org/apache/sling/jcr/compiler/impl/JcrJavaCompilerImpl.java

Modified: 
sling/trunk/contrib/jcr/compiler/src/main/java/org/apache/sling/jcr/compiler/impl/JcrJavaCompilerImpl.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/contrib/jcr/compiler/src/main/java/org/apache/sling/jcr/compiler/impl/JcrJavaCompilerImpl.java?rev=1058553&r1=1058552&r2=1058553&view=diff
==============================================================================
--- 
sling/trunk/contrib/jcr/compiler/src/main/java/org/apache/sling/jcr/compiler/impl/JcrJavaCompilerImpl.java
 (original)
+++ 
sling/trunk/contrib/jcr/compiler/src/main/java/org/apache/sling/jcr/compiler/impl/JcrJavaCompilerImpl.java
 Thu Jan 13 13:44:06 2011
@@ -24,6 +24,10 @@ import java.io.InputStreamReader;
 import java.io.Reader;
 import java.io.StringReader;
 import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import javax.jcr.Item;
 import javax.jcr.Node;
@@ -37,6 +41,7 @@ import org.apache.felix.scr.annotations.
 import org.apache.sling.commons.classloader.ClassLoaderWriter;
 import org.apache.sling.commons.compiler.CompilationResult;
 import org.apache.sling.commons.compiler.CompilationUnit;
+import org.apache.sling.commons.compiler.CompilerMessage;
 import org.apache.sling.commons.compiler.JavaCompiler;
 import org.apache.sling.commons.compiler.Options;
 import org.apache.sling.jcr.api.SlingRepository;
@@ -117,7 +122,7 @@ public class JcrJavaCompilerImpl impleme
             }
 
             // and compile
-            return compiler.compile(units, options);
+            return mapResult(compiler.compile(units, options), srcFiles, 
units);
         } finally {
             if ( session != null ) {
                 session.logout();
@@ -125,6 +130,56 @@ public class JcrJavaCompilerImpl impleme
         }
     }
 
+    /**
+     * Map the source information of the errors
+     */
+    private CompilationResult mapResult(final CompilationResult result,
+            final String[] srcFiles,
+            final CompilationUnit[] units) {
+        if ( result == null || (result.getErrors() == null && 
result.getWarnings() == null ) ) {
+            return result;
+        }
+
+        final Map<String, String> mapping = new HashMap<String, String>();
+        for(int i=0;i<srcFiles.length;i++) {
+            mapping.put(units[i].getMainClassName() + ".java", srcFiles[i]);
+        }
+        return new CompilationResult() {
+
+            private List<CompilerMessage> mapMessages(final 
List<CompilerMessage> msgs) {
+                if ( msgs == null || msgs.size() == 0 ) {
+                    return msgs;
+                }
+                final List<CompilerMessage> newMsgs = new 
ArrayList<CompilerMessage>();
+                for(final CompilerMessage msg : msgs) {
+                    final String mapped = mapping.get(msg.getFile());
+
+                    newMsgs.add(new CompilerMessage(
+                            mapped == null ? msg.getFile() : mapped,
+                            msg.getLine(), msg.getColumn(), msg.getMessage()));
+                }
+                return newMsgs;
+            }
+
+            public Class<?> loadCompiledClass(String className)
+                    throws ClassNotFoundException {
+                return result.loadCompiledClass(className);
+            }
+
+            public List<CompilerMessage> getWarnings() {
+                return mapMessages(result.getWarnings());
+            }
+
+            public List<CompilerMessage> getErrors() {
+                return mapMessages(result.getErrors());
+            }
+
+            public boolean didCompile() {
+                return result.didCompile();
+            }
+        };
+    }
+
     //--------------------------------------------------------< misc. helpers >
 
     private CompilationUnit createCompileUnit(final String sourceFile, final 
Session session)


Reply via email to