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;
+ }
+
+}