You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by tc...@apache.org on 2005/08/18 21:41:26 UTC
svn commit: r233365 - in /jakarta/commons/sandbox/jci/trunk: TODO
project.xml src/java/org/apache/commons/jci/CompilingClassLoader.java
src/java/org/apache/commons/jci/compilers/janino/JaninoJavaCompiler.java
Author: tcurdt
Date: Thu Aug 18 12:41:18 2005
New Revision: 233365
URL: http://svn.apache.org/viewcvs?rev=233365&view=rev
Log:
fixed the deps,
CCL cleanups,
updated the TODO
again thanks to Joerk
Modified:
jakarta/commons/sandbox/jci/trunk/TODO
jakarta/commons/sandbox/jci/trunk/project.xml
jakarta/commons/sandbox/jci/trunk/src/java/org/apache/commons/jci/CompilingClassLoader.java
jakarta/commons/sandbox/jci/trunk/src/java/org/apache/commons/jci/compilers/janino/JaninoJavaCompiler.java
Modified: jakarta/commons/sandbox/jci/trunk/TODO
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/jci/trunk/TODO?rev=233365&r1=233364&r2=233365&view=diff
==============================================================================
--- jakarta/commons/sandbox/jci/trunk/TODO (original)
+++ jakarta/commons/sandbox/jci/trunk/TODO Thu Aug 18 12:41:18 2005
@@ -6,4 +6,5 @@
o jikes
o transformation "pipelines" (more than just one transformation)
o make suffixes matching (*.java, *.class) configurable
+o turn the JavaCompilerFactory into an interface and maybe provide a simple default impl
o documentation
Modified: jakarta/commons/sandbox/jci/trunk/project.xml
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/jci/trunk/project.xml?rev=233365&r1=233364&r2=233365&view=diff
==============================================================================
--- jakarta/commons/sandbox/jci/trunk/project.xml (original)
+++ jakarta/commons/sandbox/jci/trunk/project.xml Thu Aug 18 12:41:18 2005
@@ -104,6 +104,12 @@
</dependency>
<dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging-api</artifactId>
+ <version>1.0.4</version>
+ </dependency>
+
+ <dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.1</version>
@@ -160,6 +166,12 @@
<groupId>antlr</groupId>
<artifactId>antlr</artifactId>
<version>2.7.5</version>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
</dependency>
</dependencies>
Modified: jakarta/commons/sandbox/jci/trunk/src/java/org/apache/commons/jci/CompilingClassLoader.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/jci/trunk/src/java/org/apache/commons/jci/CompilingClassLoader.java?rev=233365&r1=233364&r2=233365&view=diff
==============================================================================
--- jakarta/commons/sandbox/jci/trunk/src/java/org/apache/commons/jci/CompilingClassLoader.java (original)
+++ jakarta/commons/sandbox/jci/trunk/src/java/org/apache/commons/jci/CompilingClassLoader.java Thu Aug 18 12:41:18 2005
@@ -20,23 +20,21 @@
import org.apache.commons.jci.compilers.eclipse.EclipseJavaCompiler;
import org.apache.commons.jci.listeners.CompilingListener;
import org.apache.commons.jci.monitor.FilesystemAlterationMonitor;
+import org.apache.commons.jci.problems.CompilationProblemHandler;
import org.apache.commons.jci.problems.ConsoleCompilationProblemHandler;
import org.apache.commons.jci.stores.MemoryResourceStore;
import org.apache.commons.jci.stores.TransactionalResourceStore;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
/**
* @author tcurdt
*
*/
public class CompilingClassLoader extends ReloadingClassLoader {
-
- private final static Log log = LogFactory.getLog(CompilingClassLoader.class);
-
+
private final TransactionalResourceStore transactionalStore;
- private final JavaCompiler compiler;
-
+ private final JavaCompiler compiler;
+ private final CompilationProblemHandler problemHandler;
+
public CompilingClassLoader(final ClassLoader pParent, final File pRepository) {
this(pParent, pRepository, new TransactionalResourceStore(
new MemoryResourceStore()) {
@@ -47,32 +45,34 @@
}
);
}
-
+
public CompilingClassLoader(final ClassLoader pParent, final File pRepository, final TransactionalResourceStore pStore) {
- this(pParent, pRepository, pStore, new EclipseJavaCompiler());
+ this(pParent, pRepository, pStore, new EclipseJavaCompiler(), new ConsoleCompilationProblemHandler());
}
-
- public CompilingClassLoader(final ClassLoader pParent, final File pRepository, final TransactionalResourceStore pStore, final JavaCompiler pCompiler) {
- super(pParent, pRepository, pStore);
+ public CompilingClassLoader(final ClassLoader pParent, final File pRepository,
+ final TransactionalResourceStore pStore, final JavaCompiler pCompiler,
+ final CompilationProblemHandler pProblemHandler) {
+ super(pParent, pRepository, pStore);
transactionalStore = pStore;
- compiler = pCompiler;
+ compiler = pCompiler;
+ problemHandler = pProblemHandler;
}
public void start() {
- fam = new FilesystemAlterationMonitor();
+ fam = new FilesystemAlterationMonitor();
fam.addListener(new CompilingListener(
reader,
compiler,
transactionalStore,
- new ConsoleCompilationProblemHandler()
+ problemHandler
) {
public void reload() {
super.reload();
CompilingClassLoader.this.reload();
}
}, repository);
- thread = new Thread(fam);
+ thread = new Thread(fam);
thread.start();
}
}
Modified: jakarta/commons/sandbox/jci/trunk/src/java/org/apache/commons/jci/compilers/janino/JaninoJavaCompiler.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/sandbox/jci/trunk/src/java/org/apache/commons/jci/compilers/janino/JaninoJavaCompiler.java?rev=233365&r1=233364&r2=233365&view=diff
==============================================================================
--- jakarta/commons/sandbox/jci/trunk/src/java/org/apache/commons/jci/compilers/janino/JaninoJavaCompiler.java (original)
+++ jakarta/commons/sandbox/jci/trunk/src/java/org/apache/commons/jci/compilers/janino/JaninoJavaCompiler.java Thu Aug 18 12:41:18 2005
@@ -15,32 +15,39 @@
*/
package org.apache.commons.jci.compilers.janino;
-import java.io.ByteArrayInputStream;
+import java.io.BufferedReader;
+import java.io.CharArrayReader;
import java.io.File;
import java.io.IOException;
+import java.io.Reader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
+
import org.apache.commons.jci.compilers.JavaCompiler;
import org.apache.commons.jci.problems.CompilationProblemHandler;
import org.apache.commons.jci.readers.ResourceReader;
import org.apache.commons.jci.stores.ResourceStore;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+
import org.codehaus.janino.ClassLoaderIClassLoader;
+import org.codehaus.janino.CompileException;
import org.codehaus.janino.DebuggingInformation;
import org.codehaus.janino.Descriptor;
import org.codehaus.janino.IClass;
import org.codehaus.janino.IClassLoader;
import org.codehaus.janino.Java;
+import org.codehaus.janino.Location;
import org.codehaus.janino.Parser;
import org.codehaus.janino.Scanner;
import org.codehaus.janino.UnitCompiler;
+import org.codehaus.janino.WarningHandler;
+import org.codehaus.janino.UnitCompiler.ErrorHandler;
import org.codehaus.janino.Scanner.LocatedException;
import org.codehaus.janino.util.ClassFile;
/**
- *
* @author art@gramlich-net.com
*/
public class JaninoJavaCompiler implements JavaCompiler {
@@ -54,18 +61,20 @@
private final CompilationProblemHandler problemHandler;
private final Map classes;
- private CompilingIClassLoader(ResourceReader resourceReader, CompilationProblemHandler problemHandler, Map classes) {
+ private CompilingIClassLoader(final ResourceReader pResourceReader,
+ final CompilationProblemHandler pProblemHandler,
+ final Map pClasses) {
super(new ClassLoaderIClassLoader());
- this.resourceReader = resourceReader;
- this.problemHandler = problemHandler;
- this.classes = classes;
+ resourceReader = pResourceReader;
+ problemHandler = pProblemHandler;
+ classes = pClasses;
super.postConstruct();
}
- protected IClass findIClass(final String type) {
- final String className = Descriptor.toClassName(type);
- if (types.containsKey(type)) {
- return (IClass) types.get(type);
+ protected IClass findIClass(final String pType) {
+ final String className = Descriptor.toClassName(pType);
+ if (types.containsKey(pType)) {
+ return (IClass) types.get(pType);
}
final String fileNameForClass = className.replace('.', File.separatorChar) + ".java";
@@ -73,12 +82,15 @@
if (content == null) {
return null;
}
- final ByteArrayInputStream instream = new ByteArrayInputStream(new String(content).getBytes());
+ final Reader reader = new BufferedReader(new CharArrayReader(content));
Scanner scanner = null;
try {
- scanner = new Scanner(fileNameForClass, instream, "UTF-8");
+ scanner = new Scanner(fileNameForClass, reader);
final Java.CompilationUnit unit = new Parser(scanner).parseCompilationUnit();
final UnitCompiler uc = new UnitCompiler(unit, this);
+ CompilationProblemHandlerAdapter adapter = new CompilationProblemHandlerAdapter(problemHandler);
+ uc.setCompileErrorHandler(adapter);
+ uc.setWarningHandler(adapter);
log.debug("compile " + className);
final ClassFile[] classFiles = uc.compileUnit(DebuggingInformation.ALL);
for (int i = 0; i < classFiles.length; i++) {
@@ -87,7 +99,7 @@
}
final IClass ic = uc.findClass(className);
if (null != ic) {
- types.put(type, ic);
+ types.put(pType, ic);
}
return ic;
} catch (final LocatedException e) {
@@ -107,19 +119,36 @@
}
}
- public void compile(final String[] classes, final ResourceReader in,
- final ResourceStore store, final CompilationProblemHandler problemHandler) {
+ public void compile(final String[] pClasses, final ResourceReader pResourceReader,
+ final ResourceStore pStore, final CompilationProblemHandler pProblemHandler) {
final Map classFilesByName = new HashMap();
- final IClassLoader icl = new CompilingIClassLoader(in, problemHandler, classFilesByName);
- for (int i = 0; i < classes.length; i++) {
- log.debug("compiling " + classes[i]);
- icl.loadIClass(Descriptor.fromClassName(classes[i]));
+ final IClassLoader icl = new CompilingIClassLoader(pResourceReader, pProblemHandler, classFilesByName);
+ for (int i = 0; i < pClasses.length; i++) {
+ log.debug("compiling " + pClasses[i]);
+ icl.loadIClass(Descriptor.fromClassName(pClasses[i]));
}
// Store all fully compiled classes
- for (Iterator i=classFilesByName.keySet().iterator(); i.hasNext();) {
- final String name = (String)i.next();
- final byte[] bytes = (byte[]) classFilesByName.get(name);
- store.write(name,bytes);
+ for (Iterator i = classFilesByName.entrySet().iterator(); i.hasNext();) {
+ final Map.Entry entry = (Map.Entry)i.next();
+ pStore.write((String)entry.getKey(), (byte[])entry.getValue());
}
}
+
+ private static final class CompilationProblemHandlerAdapter implements ErrorHandler, WarningHandler {
+ private final CompilationProblemHandler problemHandler;
+
+ public CompilationProblemHandlerAdapter(final CompilationProblemHandler pProblemHandler) {
+ problemHandler = pProblemHandler;
+ }
+
+ public void handleError(final String pMessage, final Location pOptionalLocation) throws CompileException {
+ problemHandler.handle(new JaninoCompilationProblem(pOptionalLocation, pMessage, true));
+ }
+
+ public void handleWarning(final String pHandle, final String pMessage, final Location pOptionalLocation) {
+ problemHandler.handle(new JaninoCompilationProblem(pOptionalLocation, pMessage, false));
+ }
+
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org