Author: tcurdt
Date: Sat Mar  5 19:54:25 2011
New Revision: 1078336

URL: http://svn.apache.org/viewvc?rev=1078336&view=rev
Log:
much closer to a working compiler ... classpath stuff is still missing


Modified:
    
commons/proper/jci/trunk/compilers/jsr199/src/main/java/org/apache/commons/jci/compilers/Jsr199JavaCompiler.java

Modified: 
commons/proper/jci/trunk/compilers/jsr199/src/main/java/org/apache/commons/jci/compilers/Jsr199JavaCompiler.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jci/trunk/compilers/jsr199/src/main/java/org/apache/commons/jci/compilers/Jsr199JavaCompiler.java?rev=1078336&r1=1078335&r2=1078336&view=diff
==============================================================================
--- 
commons/proper/jci/trunk/compilers/jsr199/src/main/java/org/apache/commons/jci/compilers/Jsr199JavaCompiler.java
 (original)
+++ 
commons/proper/jci/trunk/compilers/jsr199/src/main/java/org/apache/commons/jci/compilers/Jsr199JavaCompiler.java
 Sat Mar  5 19:54:25 2011
@@ -26,6 +26,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
+import java.util.ServiceLoader;
 import java.util.Set;
 
 import javax.tools.Diagnostic;
@@ -36,6 +37,7 @@ import javax.tools.JavaFileManager;
 import javax.tools.JavaFileObject;
 import javax.tools.SimpleJavaFileObject;
 import javax.tools.ToolProvider;
+import javax.tools.JavaCompiler.CompilationTask;
 
 import org.apache.commons.jci.problems.CompilationProblem;
 import org.apache.commons.jci.readers.ResourceReader;
@@ -46,7 +48,7 @@ import org.apache.commons.logging.LogFac
 public final class Jsr199JavaCompiler extends AbstractJavaCompiler {
 
     private final Log log = LogFactory.getLog(Jsr199JavaCompiler.class);
-
+    
     private class CompilationUnit extends SimpleJavaFileObject {
         final private ResourceReader reader;
         final private String name;
@@ -62,17 +64,12 @@ public final class Jsr199JavaCompiler ex
             return super.delete();
         }
 
-        public CharSequence getCharContent(boolean arg0) throws IOException {
+        public CharSequence getCharContent(boolean encodingErrors) throws 
IOException {
             log.debug("getCharContent of " + name);
             byte[] content = reader.getBytes(name);
             return new String(content);
         }
 
-        public Kind getKind() {
-            log.debug("getKind" + super.getKind());
-            return super.getKind();
-        }
-
         public long getLastModified() {
             log.debug("getLastModified");
             return super.getLastModified();
@@ -83,9 +80,10 @@ public final class Jsr199JavaCompiler ex
             return super.getName();
         }
 
-        public boolean isNameCompatible(String arg0, Kind arg1) {
-            log.debug("isNameCompatible " + arg0);
-            return super.isNameCompatible(arg0, arg1);
+        public boolean isNameCompatible(String simpleName, Kind kind) {
+            log.debug("isNameCompatible " + simpleName + " " + kind);
+            // return super.isNameCompatible(simpleName, kind);
+            return true;
         }
 
         public InputStream openInputStream() throws IOException {
@@ -109,21 +107,19 @@ public final class Jsr199JavaCompiler ex
         }
 
         public URI toUri() {
-            log.debug("toUri " + super.toUri());
+            // log.debug("toUri " + super.toUri());
             return super.toUri();
         }
-
-
     }
-    
-    private class JciJavaFileManager implements JavaFileManager {
-        private final ResourceStore store;
+
+    private class JciJavaFileManager implements JavaFileManager  {
+        // private final ResourceStore store;
         final Collection<JavaFileObject> units;
 
-       public JciJavaFileManager( final Collection<JavaFileObject> pUnits, 
final ResourceStore pStore ) {
-               store = pStore;
-               units = pUnits;
-       }
+        public JciJavaFileManager( final Collection<JavaFileObject> pUnits, 
final ResourceStore pStore ) {
+          // store = pStore;
+          units = pUnits;
+        }
 
         public void close() {
             log.debug("close");
@@ -152,32 +148,36 @@ public final class Jsr199JavaCompiler ex
             return null;
         }
         public int isSupportedOption(String option) {
-            log.debug("isSupportedOption");
+            log.debug("isSupportedOption " + option);
             return 0;
         }
         public boolean handleOption(String current, Iterator<String> 
remaining) {
-            log.debug("handleOption");
+            log.debug("handleOption " + current);
             return false;
         }
         public boolean hasLocation(JavaFileManager.Location location) {
-            log.debug("hasLocation");
+            log.debug("hasLocation " + location);
             return false;
         }
         public String inferBinaryName(JavaFileManager.Location location, 
JavaFileObject file) {
-            log.debug("inferBinaryName " + file.getName());
-            return file.getName().replaceFirst(".java", ".class");
+            String s = file.getName().replaceFirst(".java", ".class"); 
+            log.debug("inferBinaryName " + file.getName() + " -> " + s);
+            return s;
         }
         public Iterable<JavaFileObject> list(JavaFileManager.Location 
location, String packageName, Set<JavaFileObject.Kind> kinds, boolean recurse) {
+            if (packageName.startsWith("java.")) {
+                return new ArrayList<JavaFileObject>();
+            }
             log.debug("list " + location + packageName + kinds + recurse);
             return units;
         }
-               public boolean isSameFile(FileObject fileobject, FileObject 
fileobject1) {
-                       return false;
-               }
+        public boolean isSameFile(FileObject fileobject, FileObject 
fileobject1) {
+          return false;
+        }
     }
-    
+
     private final Jsr199JavaCompilerSettings settings;
-    
+
     public Jsr199JavaCompiler() {
         settings = new Jsr199JavaCompilerSettings();
     }
@@ -185,7 +185,7 @@ public final class Jsr199JavaCompiler ex
     public Jsr199JavaCompiler( final Jsr199JavaCompilerSettings pSettings ) {
         settings = pSettings;
     }
-    
+
     public CompilationResult compile( final String[] pResourcePaths, final 
ResourceReader pReader, final ResourceStore pStore, final ClassLoader 
classLoader, JavaCompilerSettings settings) {
 
         final Collection<JavaFileObject> units = new 
ArrayList<JavaFileObject>();
@@ -195,19 +195,24 @@ public final class Jsr199JavaCompiler ex
             units.add(new CompilationUnit(sourcePath, pReader));
         }
 
-        final JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
-//        final JavaFileManager fileManager = 
compiler.getStandardFileManager(diagnostics);
+        JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
+
+        if (compiler == null) {
+            ServiceLoader<javax.tools.JavaCompiler> loader = 
ServiceLoader.load(javax.tools.JavaCompiler.class);
+            compiler = loader.iterator().next();
+        }
+
+        if (compiler == null) {
+            throw new RuntimeException("No java compiler in class path");
+        }
+
         final JavaFileManager fileManager = new JciJavaFileManager(units, 
pStore);
         final DiagnosticCollector<JavaFileObject> diagnostics = new 
DiagnosticCollector<JavaFileObject>();
 
+        CompilationTask task = compiler.getTask(null, fileManager, 
diagnostics, null, null, units);
 
-        compiler.getTask(null, fileManager, diagnostics, null, null, 
units).call();
-
-        try {
-            fileManager.close();
-        } catch (IOException e) {
-            // TODO Auto-generated catch block
-            e.printStackTrace();
+        if (task.call()) {
+            log.debug("compiled");
         }
 
         final List<Diagnostic<? extends JavaFileObject>> jsrProblems = 
diagnostics.getDiagnostics();
@@ -220,8 +225,8 @@ public final class Jsr199JavaCompiler ex
         return new CompilationResult(problems);
     }
 
-       public JavaCompilerSettings createDefaultSettings() {
-               return this.settings;
-       }
+    public JavaCompilerSettings createDefaultSettings() {
+        return this.settings;
+    }
 
 }


Reply via email to