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 2010/01/15 17:28:24 UTC
svn commit: r899684 - 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/extensions/scripting/compiler/
core/src/main/java/org/apache/myfaces/scr...
Author: werpu
Date: Fri Jan 15 16:28:22 2010
New Revision: 899684
URL: http://svn.apache.org/viewvc?rev=899684&view=rev
Log:
https://issues.apache.org/jira/browse/EXTSCRIPT-43
change to groovy compile instead of interpretation
Added:
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyRecompiledClassloader.java (with props)
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyScriptingWeaver.java (with props)
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyCompilerFacade.java
- copied, changed from r899683, myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilerFacade.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyContainerFileManager.java (with props)
myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/groovyCompiler/
myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/groovyCompiler/GroovyCompilerTest.java (with props)
myfaces/extensions/scripting/trunk/core/core/src/test/resources/compiler/TestProbe1Groovy.groovy
myfaces/extensions/scripting/trunk/core/core/src/test/resources/compiler/TestProbe2Groovy.groovy
Modified:
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/extensions/scripting/compiler/GroovyCompiler.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingConst.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyDependencyScanner.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/ScanningGroovyClassloader.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScannerMT.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaScriptingWeaver.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/RecompiledClassLoader.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilationException.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilationResult.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilerFacade.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/ContainerFileManager.java
myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java
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=899684&r1=899683&r2=899684&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 Fri Jan 15 16:28:22 2010
@@ -53,7 +53,7 @@
}
public void refreshClassloader() {
- classLoader = new RecompiledClassLoader(ClassUtils.getContextClassLoader(), ScriptingConst.ENGINE_TYPE_JAVA);
+ classLoader = new RecompiledClassLoader(ClassUtils.getContextClassLoader(), ScriptingConst.ENGINE_TYPE_JAVA,".java");
}
@Override
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/compiler/GroovyCompiler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/compiler/GroovyCompiler.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/compiler/GroovyCompiler.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/extensions/scripting/compiler/GroovyCompiler.java Fri Jan 15 16:28:22 2010
@@ -21,6 +21,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.myfaces.extensions.scripting.loader.ClassLoaderUtils;
+import org.apache.myfaces.scripting.core.util.FileUtils;
import org.codehaus.groovy.control.CompilationFailedException;
import org.codehaus.groovy.control.CompilationUnit;
import org.codehaus.groovy.control.CompilerConfiguration;
@@ -32,6 +33,7 @@
import java.io.File;
import java.io.PrintWriter;
import java.io.StringWriter;
+import java.util.List;
/**
* <p>A compiler implementation that can be used to compile Groovy source files.</p>
@@ -59,6 +61,44 @@
return compile(sourcePath, targetPath, new File(sourcePath, file), classLoader);
}
+ public CompilationResult compile(File sourcePath, File targetPath, ClassLoader classLoader) {
+
+ List<File> sourceFiles = FileUtils.fetchSourceFiles(sourcePath, "*.groovy");
+
+ StringWriter compilerOutput = new StringWriter();
+
+ CompilationUnit compilationUnit = new CompilationUnit(
+ buildCompilerConfiguration(sourcePath, targetPath, classLoader));
+ compilationUnit.getConfiguration().setOutput(new PrintWriter(compilerOutput));
+
+ for (File sourceFile : sourceFiles) {
+ compilationUnit.addSource(sourceFile);
+ }
+
+ CompilationResult result;
+
+ try {
+ compilationUnit.compile();
+
+ result = new CompilationResult(compilerOutput.toString());
+ } catch (CompilationFailedException ex) {
+ // Register all collected error messages from the Groovy compiler
+ result = new CompilationResult(compilerOutput.toString());
+ ErrorCollector collector = compilationUnit.getErrorCollector();
+ for (int i = 0; i < collector.getErrorCount(); ++i) {
+ result.registerError(convertMessage(collector.getError(i)));
+ }
+ }
+
+ // Register all collected warnings from the Groovy compiler
+ ErrorCollector collector = compilationUnit.getErrorCollector();
+ for (int i = 0; i < collector.getWarningCount(); ++i) {
+ result.registerWarning(convertMessage(collector.getWarning(i)));
+ }
+
+ return result;
+ }
+
/**
* <p>Compiles the given file and creates an according class file in the given target path.</p>
*
@@ -73,7 +113,7 @@
StringWriter compilerOutput = new StringWriter();
CompilationUnit compilationUnit = new CompilationUnit(
- buildCompilerConfiguration(sourcePath, targetPath, file, classLoader));
+ buildCompilerConfiguration(sourcePath, targetPath, classLoader));
compilationUnit.getConfiguration().setOutput(new PrintWriter(compilerOutput));
compilationUnit.addSource(file);
@@ -133,11 +173,10 @@
*
* @param sourcePath the path to the source directory
* @param targetPath the path to the target directory
- * @param file the file of the class you want to compile
* @param classLoader the class loader to use to determine the classpath
* @return the compiler configuration
*/
- protected CompilerConfiguration buildCompilerConfiguration(File sourcePath, File targetPath, File file, ClassLoader classLoader) {
+ protected CompilerConfiguration buildCompilerConfiguration(File sourcePath, File targetPath, ClassLoader classLoader) {
CompilerConfiguration configuration = new CompilerConfiguration();
// Set the destination / target directory for the compiled .class files.
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingConst.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingConst.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingConst.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/api/ScriptingConst.java Fri Jan 15 16:28:22 2010
@@ -66,4 +66,5 @@
public static final String CTX_REQUEST_CNT = "RequestCnt";
public static final String CTX_CONFIGURATION = "ExtScriptingConfig";
public static final String INIT_PARAM_RESOURCE_PATH = "org.apache.myfaces.scripting.resources.LOADER_PATHS";
+ public static final String FILE_EXTENSION_GROOVY = ".groovy";
}
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyDependencyScanner.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyDependencyScanner.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyDependencyScanner.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyDependencyScanner.java Fri Jan 15 16:28:22 2010
@@ -18,13 +18,7 @@
@Override
protected ClassLoader getClassLoader() {
- //TODO return the groovy classloader here
- //which has to serve the groovy resources
-
- GroovyClassLoader gcl = new GroovyClassLoader(Thread.currentThread().getContextClassLoader());
- for (String sourceDir : WeavingContext.getConfiguration().getSourceDirs(ScriptingConst.ENGINE_TYPE_GROOVY)) {
- gcl.addClasspath(sourceDir);
- }
- return gcl;
+ return new GroovyRecompiledClassloader(Thread.currentThread().getContextClassLoader(), ScriptingConst.ENGINE_TYPE_GROOVY, ScriptingConst.FILE_EXTENSION_GROOVY);
}
+
}
Added: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyRecompiledClassloader.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyRecompiledClassloader.java?rev=899684&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyRecompiledClassloader.java (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyRecompiledClassloader.java Fri Jan 15 16:28:22 2010
@@ -0,0 +1,16 @@
+package org.apache.myfaces.scripting.loaders.groovy;
+
+import org.apache.myfaces.scripting.loaders.java.RecompiledClassLoader;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: werpu2
+ * Date: 12.01.2010
+ * Time: 20:08:18
+ * To change this template use File | Settings | File Templates.
+ */
+public class GroovyRecompiledClassloader extends RecompiledClassLoader {
+ public GroovyRecompiledClassloader(ClassLoader classLoader, int scriptingEngine, String engineExtension) {
+ super(classLoader, scriptingEngine, engineExtension);
+ }
+}
Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyRecompiledClassloader.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyRecompiledClassloader.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyScriptingWeaver.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyScriptingWeaver.java?rev=899684&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyScriptingWeaver.java (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyScriptingWeaver.java Fri Jan 15 16:28:22 2010
@@ -0,0 +1,190 @@
+package org.apache.myfaces.scripting.loaders.groovy;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.scripting.api.BaseWeaver;
+import org.apache.myfaces.scripting.api.ClassScanner;
+import org.apache.myfaces.scripting.api.ScriptingConst;
+import org.apache.myfaces.scripting.api.ScriptingWeaver;
+import org.apache.myfaces.scripting.core.util.Cast;
+import org.apache.myfaces.scripting.core.util.ClassUtils;
+import org.apache.myfaces.scripting.core.util.ReflectUtil;
+import org.apache.myfaces.scripting.core.util.WeavingContext;
+
+import javax.faces.context.FacesContext;
+import javax.servlet.ServletContext;
+import java.io.File;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: werpu2
+ * Date: 12.01.2010
+ * Time: 18:25:27
+ * To change this template use File | Settings | File Templates.
+ */
+public class GroovyScriptingWeaver extends BaseWeaver {
+
+ Log log = LogFactory.getLog(GroovyScriptingWeaver.class);
+ String classPath = "";
+ org.apache.myfaces.scripting.loaders.groovy.DynamicClassIdentifier identifier = new org.apache.myfaces.scripting.loaders.groovy.DynamicClassIdentifier();
+
+ private static final String GROOVY_FILE_ENDING = ".groovy";
+
+ ClassScanner _annotationScanner = null;
+ ClassScanner _dependencyScanner = null;
+
+ org.apache.myfaces.extensions.scripting.loaders.groovy.compiler.GroovyCompilerFacade compiler = null;
+
+ /**
+ * helper to allow initial compiler classpath scanning
+ *
+ * @param servletContext
+ */
+ public GroovyScriptingWeaver(ServletContext servletContext) {
+ super(GROOVY_FILE_ENDING, ScriptingConst.ENGINE_TYPE_GROOVY);
+ //init classpath removed we can resolve that over the
+ //url classloader at the time myfaces is initialized
+ try {
+ Class scanner = ClassUtils.getContextClassLoader().loadClass("org.apache.myfaces.scripting.jsf2.annotation.GenericAnnotationScanner");
+ this._annotationScanner = (ClassScanner) ReflectUtil.instantiate(scanner, new Cast(ScriptingWeaver.class, this));
+
+ } catch (ClassNotFoundException e) {
+ //we do nothing here
+ }
+
+ this._dependencyScanner = new GroovyDependencyScanner(this);
+
+
+ }
+
+ @Override
+ public void appendCustomScriptPath(String scriptPath) {
+ super.appendCustomScriptPath(scriptPath);
+ if (_annotationScanner != null) {
+ _annotationScanner.addScanPath(scriptPath);
+ }
+ _dependencyScanner.addScanPath(scriptPath);
+ }
+
+ public GroovyScriptingWeaver() {
+ super(ScriptingConst.FILE_EXTENSION_GROOVY, ScriptingConst.ENGINE_TYPE_GROOVY);
+ }
+
+
+ /**
+ * loads a class from a given sourceroot and filename
+ * note this method does not have to be thread safe
+ * it is called in a thread safe manner by the base class
+ * <p/>
+ * //TODO eliminate the source root we have the roots now somewhere else
+ *
+ * @param sourceRoot the source search lookup path
+ * @param file the filename to be compiled and loaded
+ * @return a valid class if it could be found, null if none was found
+ */
+ @Override
+ protected Class loadScriptingClassFromFile(String sourceRoot, String file) {
+ //we load the scripting class from the given className
+
+ File currentClassFile = new File(sourceRoot + File.separator + file);
+ if (!currentClassFile.exists()) {
+ return null;
+ }
+
+ if (log.isInfoEnabled()) {
+ log.info("[EXT-SCRIPTING] Loading Groovy file:" + file);
+ }
+
+ Iterator<String> it = WeavingContext.getConfiguration().getSourceDirs(getScriptingEngine()).iterator();
+ Class retVal = null;
+
+ try {
+ //we initialize the compiler lazy
+ //because the facade itself is lazy
+ if (compiler == null) {
+ compiler = new org.apache.myfaces.extensions.scripting.loaders.groovy.compiler.GroovyCompilerFacade();
+ }
+ retVal = compiler.compileFile(sourceRoot, classPath, file);
+
+ if (retVal == null) {
+ return retVal;
+ }
+ } catch (ClassNotFoundException e) {
+ //can be safely ignored
+ }
+
+
+ if (_annotationScanner != null && retVal != null) {
+ _annotationScanner.scanClass(retVal);
+ }
+
+ return retVal;
+ }
+
+
+
+ public boolean isDynamic(Class clazz) {
+ return identifier.isDynamic(clazz); //To change body of implemented methods use File | Settings | File Templates.
+ }
+
+
+ /**
+ * full scan, scans for all artefacts in all files
+ */
+ public void fullClassScan() {
+ _dependencyScanner.scanPaths();
+
+
+ if (_annotationScanner == null || FacesContext.getCurrentInstance() == null) {
+ return;
+ }
+ _annotationScanner.scanPaths();
+
+ }
+
+ public void fullRecompile() {
+ if (isFullyRecompiled()) {
+ return;
+ }
+
+ if (compiler == null) {
+ compiler = new org.apache.myfaces.extensions.scripting.loaders.groovy.compiler.GroovyCompilerFacade();//new ReflectCompilerFacade();
+ }
+
+ for (String scriptPath : WeavingContext.getConfiguration().getSourceDirs(getScriptingEngine())) {
+ //compile via javac dynamically, also after this block dynamic compilation
+ //for the entire length of the request,
+ try {
+ compiler.compileAllFiles(scriptPath, classPath);
+ } catch (ClassNotFoundException e) {
+ log.error(e);
+ }
+
+ }
+
+ markAsFullyRecompiled();
+ }
+
+
+ private void markAsFullyRecompiled() {
+ FacesContext context = FacesContext.getCurrentInstance();
+ if (context != null) {
+ //mark the request as tainted with recompile
+ if (context != null) {
+ Map<String, Object> requestMap = context.getExternalContext().getRequestMap();
+ requestMap.put(GroovyScriptingWeaver.class.getName() + "_recompiled", Boolean.TRUE);
+ }
+ }
+ WeavingContext.getRefreshContext().setRecompileRecommended(ScriptingConst.ENGINE_TYPE_GROOVY, Boolean.FALSE);
+ }
+
+ private boolean isFullyRecompiled() {
+ FacesContext context = FacesContext.getCurrentInstance();
+ if (context != null) {
+ return context.getExternalContext().getRequestMap().containsKey(GroovyScriptingWeaver.class.getName() + "_recompiled");
+ }
+ return false;
+ }
+}
Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyScriptingWeaver.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/GroovyScriptingWeaver.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/ScanningGroovyClassloader.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/ScanningGroovyClassloader.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/ScanningGroovyClassloader.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/ScanningGroovyClassloader.java Fri Jan 15 16:28:22 2010
@@ -23,6 +23,7 @@
*
* that way we can properly add artefact refreshing
* to avoid classcast exceptions also on groovy level
+ * @deprecated
*/
public class ScanningGroovyClassloader extends GroovyClassLoader {
public ScanningGroovyClassloader() {
Copied: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyCompilerFacade.java (from r899683, 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/groovy/compiler/GroovyCompilerFacade.java?p2=myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyCompilerFacade.java&p1=myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilerFacade.java&r1=899683&r2=899684&rev=899684&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/groovy/compiler/GroovyCompilerFacade.java Fri Jan 15 16:28:22 2010
@@ -16,14 +16,19 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.myfaces.scripting.loaders.java.jdk5;
+package org.apache.myfaces.extensions.scripting.loaders.groovy.compiler;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.myfaces.extensions.scripting.compiler.CompilationException;
+import org.apache.myfaces.extensions.scripting.compiler.CompilationResult;
+import org.apache.myfaces.extensions.scripting.compiler.GroovyCompiler;
import org.apache.myfaces.scripting.api.DynamicCompiler;
import org.apache.myfaces.scripting.core.util.ClassUtils;
import org.apache.myfaces.scripting.core.util.FileUtils;
+import org.apache.myfaces.scripting.loaders.groovy.compiler.GroovyContainerFileManager;
import org.apache.myfaces.scripting.loaders.java.RecompiledClassLoader;
+import org.apache.myfaces.scripting.loaders.java.jdk5.ContainerFileManager;
import java.io.File;
@@ -35,60 +40,39 @@
* we can call javac directly
*/
-public class CompilerFacade implements DynamicCompiler {
- JavacCompiler compiler = null;
+public class GroovyCompilerFacade implements DynamicCompiler {
- Log log = LogFactory.getLog(this.getClass());
ContainerFileManager fileManager = null;
+ Log log = LogFactory.getLog(this.getClass());
+ GroovyCompiler compiler;
- public CompilerFacade() {
+ public GroovyCompilerFacade() {
super();
- compiler = new JavacCompiler();
- fileManager = new ContainerFileManager();
- }
-
-
- /**
- * does a compilation of all files one compile per request
- * is allowed for performance reasons, the request blocking will be done
- * probably on the caller side of things
- *
- * @param sourceRoot
- * @param classPath
- */
- public void compileAll(String sourceRoot, String classPath) {
- try {
- //TODO do a full compile and block the compile for the rest of the request
- //so that we do not run into endless compile cycles
-
- CompilationResult result = compiler.compile(new File(sourceRoot), fileManager.getTempDir(), fileManager.getClassPath());
- displayMessages(result);
- if (result.hasErrors()) {
- log.error("Compiler output:" + result.getCompilerOutput());
- }
-
- } catch (CompilationException e) {
- log.error(e);
- }
+ compiler = new GroovyCompiler();
+ fileManager = new GroovyContainerFileManager();
}
-
public Class compileFile(String sourceRoot, String classPath, String filePath) throws ClassNotFoundException {
String separator = FileUtils.getFileSeparatorForRegex();
String className = filePath.replaceAll(separator, ".");
className = ClassUtils.relativeFileToClassName(className);
- try {
- CompilationResult result = compiler.compile(new File(sourceRoot), fileManager.getTempDir(), filePath, fileManager.getClassPath());
+ // try {
+ //no need we do a full recompile at the beginning
+ //CompilationResult result = compiler.compile(new File(sourceRoot), fileManager.getTempDir(), filePath, fileManager.getClassLoader());
- displayMessages(result);
+ //displayMessages(result);
- if (!result.hasErrors()) {
+ //if (!result.hasErrors()) {
+ fileManager.refreshClassloader();
ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
- if (!(oldClassLoader instanceof RecompiledClassLoader)) {
+ //we now quickly check for the groovy classloader being, set we cannot deal with instances here
+
+ //TODO change the check as well for java
+ if (!(oldClassLoader.equals(fileManager.getClassLoader()))) {
try {
RecompiledClassLoader classLoader = (RecompiledClassLoader) fileManager.getClassLoader();
classLoader.setSourceRoot(sourceRoot);
@@ -102,13 +86,14 @@
Thread.currentThread().setContextClassLoader(oldClassLoader);
}
}
- } else {
- log.error("Compiler output:" + result.getCompilerOutput());
- }
-
- } catch (CompilationException e) {
- log.error(e);
- }
+ //} else {
+ // log.error("Compiler errors");
+ // displayMessages(result);
+ //}
+
+ //} catch (CompilationException e) {
+ // log.error(e);
+ //}
return null;
}
@@ -122,16 +107,11 @@
* @throws ClassNotFoundException
*/
public File compileAllFiles(String sourceRoot, String classPath) throws ClassNotFoundException {
- try {
- CompilationResult result = compiler.compile(new File(sourceRoot), fileManager.getTempDir(), fileManager.getClassPath());
- fileManager.refreshClassloader();
- ((RecompiledClassLoader) fileManager.getClassLoader()).setSourceRoot(sourceRoot);
- displayMessages(result);
- return fileManager.getTempDir();
- } catch (CompilationException e) {
- log.error(e);
- }
- return null;
+ CompilationResult result = compiler.compile(new File(sourceRoot), fileManager.getTempDir(), fileManager.getClassLoader());
+ fileManager.refreshClassloader();
+ ((RecompiledClassLoader) fileManager.getClassLoader()).setSourceRoot(sourceRoot);
+ displayMessages(result);
+ return fileManager.getTempDir();
}
private void displayMessages(CompilationResult result) {
Added: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyContainerFileManager.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyContainerFileManager.java?rev=899684&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyContainerFileManager.java (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyContainerFileManager.java Fri Jan 15 16:28:22 2010
@@ -0,0 +1,22 @@
+package org.apache.myfaces.scripting.loaders.groovy.compiler;
+
+import org.apache.myfaces.scripting.api.ScriptingConst;
+import org.apache.myfaces.scripting.core.util.ClassUtils;
+import org.apache.myfaces.scripting.loaders.groovy.GroovyRecompiledClassloader;
+import org.apache.myfaces.scripting.loaders.java.RecompiledClassLoader;
+import org.apache.myfaces.scripting.loaders.java.jdk5.ContainerFileManager;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: werpu2
+ * Date: 12.01.2010
+ * Time: 18:19:17
+ * To change this template use File | Settings | File Templates.
+ */
+public class GroovyContainerFileManager extends ContainerFileManager {
+
+ public void refreshClassloader() {
+ classLoader = new GroovyRecompiledClassloader(ClassUtils.getContextClassLoader(), ScriptingConst.ENGINE_TYPE_GROOVY, ".groovy");
+ }
+
+}
Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyContainerFileManager.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/groovy/compiler/GroovyContainerFileManager.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java Fri Jan 15 16:28:22 2010
@@ -27,10 +27,8 @@
import org.apache.myfaces.scripting.core.dependencyScan.DefaultDependencyScanner;
import org.apache.myfaces.scripting.core.dependencyScan.DependencyScanner;
import org.apache.myfaces.scripting.core.util.WeavingContext;
-import org.apache.myfaces.scripting.loaders.java.util.ExtendedLoopCnt;
import java.util.*;
-import java.util.concurrent.Semaphore;
/**
* @author Werner Punz (latest modification by $Author$)
@@ -55,7 +53,6 @@
}
-
public synchronized void scanPaths() {
if (log.isInfoEnabled()) {
log.info("[EXT-SCRITPING] starting class dependency scan");
@@ -90,7 +87,7 @@
protected ClassLoader getClassLoader() {
- return new RecompiledClassLoader(Thread.currentThread().getContextClassLoader(), ScriptingConst.ENGINE_TYPE_JAVA);
+ return new RecompiledClassLoader(Thread.currentThread().getContextClassLoader(), ScriptingConst.ENGINE_TYPE_JAVA, ".java");
}
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScannerMT.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScannerMT.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScannerMT.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScannerMT.java Fri Jan 15 16:28:22 2010
@@ -138,7 +138,7 @@
protected ClassLoader getClassLoader() {
- return new RecompiledClassLoader(Thread.currentThread().getContextClassLoader(), ScriptingConst.ENGINE_TYPE_JAVA);
+ return new RecompiledClassLoader(Thread.currentThread().getContextClassLoader(), ScriptingConst.ENGINE_TYPE_JAVA, ".java");
}
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaScriptingWeaver.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaScriptingWeaver.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaScriptingWeaver.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaScriptingWeaver.java Fri Jan 15 16:28:22 2010
@@ -176,7 +176,7 @@
//jsr199 compliant jdk
return JSR199_COMPILER;
}
- //otherwise
+ //otherwise
return JAVA5_COMPILER;
}
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/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?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/RecompiledClassLoader.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/RecompiledClassLoader.java Fri Jan 15 16:28:22 2010
@@ -44,10 +44,11 @@
static File tempDir = null;
static double _tempMarker = Math.random();
int _scriptingEngine;
+ String _engineExtension;
String sourceRoot;
- public RecompiledClassLoader(ClassLoader classLoader, int scriptingEngine) {
+ public RecompiledClassLoader(ClassLoader classLoader, int scriptingEngine, String engineExtension) {
super(classLoader);
if (tempDir == null) {
synchronized (this.getClass()) {
@@ -59,6 +60,7 @@
}
}
_scriptingEngine = scriptingEngine;
+ _engineExtension = engineExtension;
}
RecompiledClassLoader() {
@@ -66,7 +68,7 @@
/*
- * TODO the classcast excepton is caused by a loadClassIntrnal triggered
+ * TODO the classcast exception is caused by a loadClassInternal triggered
* at the time the referencing class is loaded and then by another classload
* at the time the bean is refreshed
*
@@ -144,7 +146,7 @@
}
- return super.loadClass(className); //To change body of overridden methods use File | Settings | File Templates.
+ return super.loadClass(className);
}
private Class<?> storeReloadableDefinitions(String className, File target, int fileLength, byte[] fileContent) {
@@ -155,8 +157,8 @@
//find the source for the given class and then
//store the filename
String separator = FileUtils.getFileSeparatorForRegex();
- String fileName = className.replaceAll("\\.", separator) + ".java";
- Collection<String> sourceDirs = WeavingContext.getConfiguration().getSourceDirs(ScriptingConst.ENGINE_TYPE_JAVA);
+ String fileName = className.replaceAll("\\.", separator) + getStandardFileExtension();
+ Collection<String> sourceDirs = WeavingContext.getConfiguration().getSourceDirs(_scriptingEngine);
String rootDir = null;
File sourceFile = null;
for (String sourceDir : sourceDirs) {
@@ -186,6 +188,9 @@
return retVal;
}
+ protected String getStandardFileExtension() {
+ return _engineExtension;
+ }
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilationException.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilationException.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilationException.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilationException.java Fri Jan 15 16:28:22 2010
@@ -3,7 +3,7 @@
/**
*
*/
-class CompilationException extends Exception {
+public class CompilationException extends Exception {
// ------------------------------------------ Constructors
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilationResult.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilationResult.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilationResult.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/CompilationResult.java Fri Jan 15 16:28:22 2010
@@ -6,7 +6,7 @@
/**
*
*/
-class CompilationResult {
+public class CompilationResult {
/**
* The compiler output
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=899684&r1=899683&r2=899684&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 Fri Jan 15 16:28:22 2010
@@ -36,11 +36,11 @@
*/
public class CompilerFacade implements DynamicCompiler {
- JavacCompiler compiler = null;
+ protected Compiler compiler = null;
- Log log = LogFactory.getLog(this.getClass());
ContainerFileManager fileManager = null;
+ Log log = LogFactory.getLog(this.getClass());
public CompilerFacade() {
super();
@@ -49,7 +49,6 @@
fileManager = new ContainerFileManager();
}
-
/**
* does a compilation of all files one compile per request
* is allowed for performance reasons, the request blocking will be done
@@ -74,7 +73,6 @@
}
}
-
public Class compileFile(String sourceRoot, String classPath, String filePath) throws ClassNotFoundException {
String separator = FileUtils.getFileSeparatorForRegex();
@@ -88,7 +86,7 @@
if (!result.hasErrors()) {
ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
- if (!(oldClassLoader instanceof RecompiledClassLoader)) {
+ if (!(oldClassLoader.getClass().equals(RecompiledClassLoader.class))) {
try {
RecompiledClassLoader classLoader = (RecompiledClassLoader) fileManager.getClassLoader();
classLoader.setSourceRoot(sourceRoot);
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/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?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/ContainerFileManager.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/jdk5/ContainerFileManager.java Fri Jan 15 16:28:22 2010
@@ -35,15 +35,15 @@
public class ContainerFileManager {
- String _classPath = null;
- RecompiledClassLoader classLoader = null;
+ protected String _classPath = null;
+ protected RecompiledClassLoader classLoader = null;
public ContainerFileManager() {
refreshClassloader();
}
public void refreshClassloader() {
- classLoader = new RecompiledClassLoader(ClassUtils.getContextClassLoader(), ScriptingConst.ENGINE_TYPE_JAVA);
+ classLoader = new RecompiledClassLoader(ClassUtils.getContextClassLoader(), ScriptingConst.ENGINE_TYPE_JAVA, ".java");
}
public String getClassPath() {
Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java?rev=899684&r1=899683&r2=899684&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/servlet/CustomChainLoader.java Fri Jan 15 16:28:22 2010
@@ -22,6 +22,7 @@
import org.apache.myfaces.scripting.api.ScriptingWeaver;
import org.apache.myfaces.scripting.core.util.WeavingContext;
import org.apache.myfaces.scripting.core.CoreWeaver;
+import org.apache.myfaces.scripting.loaders.groovy.GroovyScriptingWeaver;
import org.apache.myfaces.scripting.loaders.java.JavaScriptingWeaver;
import org.apache.myfaces.shared_impl.util.ClassLoaderExtension;
import org.apache.commons.lang.StringUtils;
@@ -59,7 +60,7 @@
//every weaver should know itself how to initialize itself
public CustomChainLoader(ServletContext servletContext) {
- ScriptingWeaver groovyWeaver = new GroovyWeaver();
+ ScriptingWeaver groovyWeaver = new GroovyScriptingWeaver(servletContext);
ScriptingWeaver javaWeaver = new JavaScriptingWeaver(servletContext);
setupScriptingPaths(servletContext, groovyWeaver, GROOVY_SOURCE_ROOT, CUSTOM_LOADER_PATHS);
@@ -114,6 +115,9 @@
else if (name.startsWith("org.apache") && !name.startsWith("org.apache.myfaces")) {
return null;
}
+ if(name.contains(".Blog")) {
+ log.debug("Debugpoint found for Blog");
+ }
return scriptingWeaver.loadScriptingClassFromName(name);
}
Added: myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/groovyCompiler/GroovyCompilerTest.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/groovyCompiler/GroovyCompilerTest.java?rev=899684&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/groovyCompiler/GroovyCompilerTest.java (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/groovyCompiler/GroovyCompilerTest.java Fri Jan 15 16:28:22 2010
@@ -0,0 +1,123 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.extensions.scripting.groovyCompiler;
+
+import org.apache.commons.io.FilenameUtils;
+import org.apache.myfaces.extensions.scripting.compiler.CompilationException;
+import org.apache.myfaces.extensions.scripting.compiler.CompilationResult;
+import org.apache.myfaces.extensions.scripting.compiler.GroovyCompiler;
+import org.apache.myfaces.scripting.core.util.FileUtils;
+import org.junit.Test;
+
+import java.io.File;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/**
+ * Another testcase for the groovy compiler which
+ * picks up the probes given in src/main/resources
+ * <p/>
+ * the advantage over our old groovy compiler testcase simply
+ * is that the probes are separate files which already exist
+ * the pattern already works on java files so it ought to work
+ * on groovy files as well
+ */
+
+public class GroovyCompilerTest {
+
+ private static final String PROBE1 = "../../src/test/resources/compiler/TestProbe1Groovy.groovy";
+ private static final String PROBE2 = "../../src/test/resources/compiler/TestProbe2Groovy.groovy";
+ private static final String RESOURCES = "../../src/test/resources/";
+
+ File probe1;
+ File probe2;
+ File root;
+
+ GroovyCompiler compiler = new GroovyCompiler();
+
+ public GroovyCompilerTest() {
+ //we use a location relative to our current root one to reach the sources
+ //because the test also has to be performed outside of maven
+ //and the ide cannot cope with resource paths for now
+ ClassLoader loader = Thread.currentThread().getContextClassLoader();
+
+ String currentPath = loader.getResource("./").getPath();
+ String sourcePath1 = currentPath + PROBE1;
+ String sourcePath2 = currentPath + PROBE2;
+ String rootPath = currentPath + RESOURCES;
+
+ sourcePath1 = FilenameUtils.normalize(sourcePath1);
+ sourcePath2 = FilenameUtils.normalize(sourcePath2);
+ rootPath = FilenameUtils.normalize(rootPath);
+
+ probe1 = new File(sourcePath1);
+ probe2 = new File(sourcePath2);
+ root = new File(rootPath);
+ }
+
+ @Test
+ public void testCompileSingleFile() {
+
+ try {
+ File targetDir = FileUtils.getTempDir();
+ ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ targetDir.mkdirs();
+ targetDir.deleteOnExit();
+ File sourceFile = new File(root.getAbsolutePath() + File.separator + "compiler" + File.separator + "TestProbe1Groovy.groovy");
+
+ CompilationResult result = null;
+
+ result = compiler.compile(root, targetDir, sourceFile, loader);
+
+ assertTrue("result has no errors", !result.hasErrors());
+
+ assertTrue("targetDir exists files are compiled into the targetDir", targetDir != null);
+ File classFile1 = new File(targetDir.getAbsolutePath() + "/compiler/TestProbe1Groovy.class");
+
+ assertTrue("Classfile1 is compiled into the targetDir", classFile1.exists());
+
+ } catch (CompilationException e) {
+ fail(e.toString());
+ }
+ }
+
+ @Test
+ public void testFullCompile() {
+ File targetDir = null;
+
+ File target = FileUtils.getTempDir();
+ ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ target.mkdirs();
+ target.deleteOnExit();
+
+ CompilationResult result = compiler.compile(root, target, loader);
+
+ assertTrue("result has no errors", !result.hasErrors());
+
+ assertTrue("target exists files are compiled into the target", target != null);
+ File classFile1 = new File(target.getAbsolutePath() + "/compiler/TestProbe1Groovy.class");
+ File classFile2 = new File(target.getAbsolutePath() + "/compiler/TestProbe2Groovy.class");
+
+ assertTrue("Classfile1 is compiled into the target", classFile1.exists());
+ assertTrue("Classfile2 is compiled into the target", classFile2.exists());
+
+ }
+
+}
Propchange: myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/groovyCompiler/GroovyCompilerTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/groovyCompiler/GroovyCompilerTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added: myfaces/extensions/scripting/trunk/core/core/src/test/resources/compiler/TestProbe1Groovy.groovy
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/test/resources/compiler/TestProbe1Groovy.groovy?rev=899684&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/test/resources/compiler/TestProbe1Groovy.groovy (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/test/resources/compiler/TestProbe1Groovy.groovy Fri Jan 15 16:28:22 2010
@@ -0,0 +1,9 @@
+package compiler;
+
+/**
+ * a simple testprobe to check if the compiler api works
+ */
+
+public class TestProbe1Groovy {
+
+}
\ No newline at end of file
Added: myfaces/extensions/scripting/trunk/core/core/src/test/resources/compiler/TestProbe2Groovy.groovy
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/test/resources/compiler/TestProbe2Groovy.groovy?rev=899684&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/test/resources/compiler/TestProbe2Groovy.groovy (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/test/resources/compiler/TestProbe2Groovy.groovy Fri Jan 15 16:28:22 2010
@@ -0,0 +1,10 @@
+package compiler;
+
+/**
+ * a simple testprobe to check if the compiler api works
+ */
+
+public class TestProbe2Groovy {
+
+}
+