You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by we...@apache.org on 2009/09/23 13:06:43 UTC

svn commit: r818054 - in /myfaces/extensions/scripting/trunk/core: core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/ core/src/main/java/org/apache/myfaces/scripting/loaders/java/ core/src/main/java/org/apache/myfaces/scripting/...

Author: werpu
Date: Wed Sep 23 11:06:42 2009
New Revision: 818054

URL: http://svn.apache.org/viewvc?rev=818054&view=rev
Log:
https://issues.apache.org/jira/browse/EXTSCRIPT-22
adding a new compiler facade to isolate the new api

Added:
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/RecompiledClassLoader.java   (contents, props changed)
      - copied, changed from r818046, myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/RecompiledClassLoader.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/ContainerFileManager.java
      - copied, changed from r818046, myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/ContainerFileManager.java
Removed:
    myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/RecompiledClassLoader.java
Modified:
    myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/CompilerFacade.java
    myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/ContainerFileManager.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilerFacade.java

Modified: myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/CompilerFacade.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/CompilerFacade.java?rev=818054&r1=818053&r2=818054&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/CompilerFacade.java (original)
+++ myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/CompilerFacade.java Wed Sep 23 11:06:42 2009
@@ -20,6 +20,8 @@
 
 import org.apache.myfaces.scripting.api.DynamicCompiler;
 import org.apache.myfaces.scripting.core.util.ClassUtils;
+import org.apache.myfaces.scripting.loaders.java.RecompiledClassLoader;
+import org.apache.myfaces.scripting.loaders.java.jsr199.ContainerFileManager;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.logging.Log;
 

Modified: myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/ContainerFileManager.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/ContainerFileManager.java?rev=818054&r1=818053&r2=818054&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/ContainerFileManager.java (original)
+++ myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/ContainerFileManager.java Wed Sep 23 11:06:42 2009
@@ -21,6 +21,7 @@
 
 
 import org.apache.myfaces.scripting.core.util.ClassUtils;
+import org.apache.myfaces.scripting.loaders.java.RecompiledClassLoader;
 
 import javax.tools.FileObject;
 import javax.tools.ForwardingJavaFileManager;

Copied: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/RecompiledClassLoader.java (from r818046, myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/RecompiledClassLoader.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/RecompiledClassLoader.java?p2=myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/RecompiledClassLoader.java&p1=myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/RecompiledClassLoader.java&r1=818046&r2=818054&rev=818054&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/RecompiledClassLoader.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/RecompiledClassLoader.java Wed Sep 23 11:06:42 2009
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.myfaces.scripting.loaders.java.jsr199;
+package org.apache.myfaces.scripting.loaders.java;
 
 import org.apache.myfaces.scripting.core.util.ClassUtils;
 import org.apache.myfaces.scripting.core.util.FileUtils;
@@ -34,7 +34,7 @@
     static double _tempMarker = Math.random();
 
 
-    RecompiledClassLoader(ClassLoader classLoader) {
+    public RecompiledClassLoader(ClassLoader classLoader) {
         super(classLoader);
         if (tempDir == null) {
             synchronized (this.getClass()) {

Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/RecompiledClassLoader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/RecompiledClassLoader.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilerFacade.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilerFacade.java?rev=818054&r1=818053&r2=818054&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilerFacade.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilerFacade.java Wed Sep 23 11:06:42 2009
@@ -18,18 +18,75 @@
  */
 package org.apache.myfaces.scripting.loaders.java.jdk5;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.myfaces.scripting.api.DynamicCompiler;
+import org.apache.myfaces.scripting.core.util.ClassUtils;
+import org.apache.myfaces.scripting.loaders.java.RecompiledClassLoader;
+
+import java.io.File;
 
 /**
  * @author Werner Punz (latest modification by $Author$)
  * @version $Revision$ $Date$
- *
- * Custom compiler call for jdk5
- * we can call javac directly
+ *          <p/>
+ *          Custom compiler call for jdk5
+ *          we can call javac directly
  */
 
 public class CompilerFacade implements DynamicCompiler {
+    JavacCompiler compiler = null;
+
+    Log log = LogFactory.getLog(this.getClass());
+    ContainerFileManager fileManager = null;
+
+
+    public CompilerFacade() {
+        super();
+
+        compiler = new JavacCompiler();
+        fileManager = new ContainerFileManager();
+    }
+
+
     public Class compileFile(String sourceRoot, String classPath, String filePath) throws ClassNotFoundException {
+
+        String className = filePath.replaceAll(File.separator, ".");
+        className = ClassUtils.relativeFileToClassName(className);
+
+        try {
+            CompilationResult result = compiler.compile(new File(sourceRoot), fileManager.getTempDir(), filePath);
+
+            displayMessages(result);
+
+            if (result.getErrors().size() == 0) {
+                ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
+                if (!(oldClassLoader instanceof RecompiledClassLoader)) {
+                    try {
+                        RecompiledClassLoader classLoader = (RecompiledClassLoader) fileManager.getClassLoader();
+                        Thread.currentThread().setContextClassLoader(classLoader);
+
+                        ClassUtils.markAsDynamicJava(fileManager.getTempDir().getAbsolutePath(), className);
+
+                        return classLoader.loadClass(className);
+                    } finally {
+                        Thread.currentThread().setContextClassLoader(oldClassLoader);
+                    }
+                }
+            }
+
+        } catch (CompilationException e) {
+            log.error(e);
+        }
         return null;
     }
+
+    private void displayMessages(CompilationResult result) {
+        for (CompilationResult.CompilationMessage error : result.getErrors()) {
+            log.error(error.getMessage());
+        }
+        for (CompilationResult.CompilationMessage error : result.getWarnings()) {
+            log.error(error.getMessage());
+        }
+    }
 }

Copied: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/ContainerFileManager.java (from r818046, myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/ContainerFileManager.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/ContainerFileManager.java?p2=myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/ContainerFileManager.java&p1=myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/ContainerFileManager.java&r1=818046&r2=818054&rev=818054&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core-java6/src/main/java/org/apache/myfaces/scripting/loaders/java/jsr199/ContainerFileManager.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/ContainerFileManager.java Wed Sep 23 11:06:42 2009
@@ -16,79 +16,43 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.myfaces.scripting.loaders.java.jsr199;
-
-
+package org.apache.myfaces.scripting.loaders.java.jdk5;
 
 import org.apache.myfaces.scripting.core.util.ClassUtils;
+import org.apache.myfaces.scripting.loaders.java.RecompiledClassLoader;
 
-import javax.tools.FileObject;
-import javax.tools.ForwardingJavaFileManager;
-import javax.tools.JavaFileObject;
-import javax.tools.StandardJavaFileManager;
 import java.io.File;
-import java.io.IOException;
 import java.net.URL;
 import java.net.URLClassLoader;
 
-
 /**
  * @author Werner Punz (latest modification by $Author$)
  * @version $Revision$ $Date$
+ *          <p/>
+ *          Compatibility class to keep the api between java5 and java6 as close as possible
  */
 
-public class ContainerFileManager extends ForwardingJavaFileManager<StandardJavaFileManager> {
 
-    StandardJavaFileManager _delegate = null;
+public class ContainerFileManager {
     String _classPath = null;
     RecompiledClassLoader classLoader = null;
 
-
-    public ContainerFileManager(StandardJavaFileManager standardJavaFileManager) {
-        super(standardJavaFileManager);
-        _delegate = standardJavaFileManager;
+    public ContainerFileManager() {
         classLoader = new RecompiledClassLoader(ClassUtils.getContextClassLoader());
     }
 
-
-    @Override
-    public JavaFileObject getJavaFileForOutput(Location location, String s, JavaFileObject.Kind kind, FileObject fileObject) throws IOException {
-        return super.getJavaFileForOutput(location, s, kind, fileObject);
-    }
-
-    @Override
-    public ClassLoader getClassLoader(Location location) {
-        return classLoader;
-    }
-     public ClassLoader getClassLoader() {
-        return classLoader;
-    }
-
-    public Iterable<? extends JavaFileObject> getJavaFileObjects(File... files) {
-        return _delegate.getJavaFileObjects(files);
-    }
-
-    public Iterable<? extends JavaFileObject> getJavaFileObjects(String... files) {
-        return _delegate.getJavaFileObjects(files);
-    }
-
-    public Iterable<? extends JavaFileObject> getJavaFileObjectsSingle(String files) {
-        return _delegate.getJavaFileObjects(files);
-    }
-
-
     public String getClassPath() {
         if (_classPath != null) {
             return _classPath;
         }
-        ClassLoader cls = getClassLoader(null);
+        ClassLoader cls = getClassLoader();
 
         StringBuilder retVal = new StringBuilder(500);
         while (cls != null) {
-            if(cls instanceof URLClassLoader ) {
+            if (cls instanceof URLClassLoader) {
                 URL[] urls = ((URLClassLoader) cls).getURLs();
                 int len = urls.length;
-                
+
                 for (int cnt = 0; cnt < len; cnt++) {
 
                     retVal.append(urls[cnt].getFile());
@@ -102,17 +66,20 @@
         }
 
         String retStr = retVal.toString();
-        if(retStr.length()>1) {
+        if (retStr.length() > 1) {
             retStr = retStr.substring(0, retStr.length() - 1);
         }
 
         return (_classPath = retStr);
     }
 
-
     public File getTempDir() {
         return classLoader.getTempDir();
     }
-}
 
 
+    public ClassLoader getClassLoader() {
+        return classLoader;
+    }
+
+}