commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From tcu...@apache.org
Subject svn commit: r510650 - in /jakarta/commons/sandbox/jci/trunk: compilers/eclipse/src/test/java/org/apache/commons/jci/compilers/ compilers/groovy/src/main/java/org/apache/commons/jci/compilers/ compilers/groovy/src/test/ compilers/groovy/src/test/java/ c...
Date Thu, 22 Feb 2007 21:01:59 GMT
Author: tcurdt
Date: Thu Feb 22 13:01:57 2007
New Revision: 510650

URL: http://svn.apache.org/viewvc?view=rev&rev=510650
Log:
move test into the compilers / core,
still problems with the javac


Added:
    jakarta/commons/sandbox/jci/trunk/compilers/groovy/src/test/
    jakarta/commons/sandbox/jci/trunk/compilers/groovy/src/test/java/
    jakarta/commons/sandbox/jci/trunk/compilers/groovy/src/test/java/org/
    jakarta/commons/sandbox/jci/trunk/compilers/groovy/src/test/java/org/apache/
    jakarta/commons/sandbox/jci/trunk/compilers/groovy/src/test/java/org/apache/commons/
    jakarta/commons/sandbox/jci/trunk/compilers/groovy/src/test/java/org/apache/commons/jci/
    jakarta/commons/sandbox/jci/trunk/compilers/groovy/src/test/java/org/apache/commons/jci/compilers/
    jakarta/commons/sandbox/jci/trunk/compilers/groovy/src/test/java/org/apache/commons/jci/compilers/GroovyJavaCompilerTestCase.java
  (with props)
    jakarta/commons/sandbox/jci/trunk/compilers/javac/src/test/
    jakarta/commons/sandbox/jci/trunk/compilers/javac/src/test/java/
    jakarta/commons/sandbox/jci/trunk/compilers/javac/src/test/java/org/
    jakarta/commons/sandbox/jci/trunk/compilers/javac/src/test/java/org/apache/
    jakarta/commons/sandbox/jci/trunk/compilers/javac/src/test/java/org/apache/commons/
    jakarta/commons/sandbox/jci/trunk/compilers/javac/src/test/java/org/apache/commons/jci/
    jakarta/commons/sandbox/jci/trunk/compilers/javac/src/test/java/org/apache/commons/jci/compilers/
    jakarta/commons/sandbox/jci/trunk/compilers/javac/src/test/java/org/apache/commons/jci/compilers/JavacJavaCompilerTestCase.java
  (with props)
Removed:
    jakarta/commons/sandbox/jci/trunk/tests/src/test/java/org/apache/commons/jci/compilers/AbstractCompilerTestCase.java
    jakarta/commons/sandbox/jci/trunk/tests/src/test/java/org/apache/commons/jci/compilers/GroovySources.java
    jakarta/commons/sandbox/jci/trunk/tests/src/test/java/org/apache/commons/jci/compilers/JavaCompilerFactoryTestCase.java
    jakarta/commons/sandbox/jci/trunk/tests/src/test/java/org/apache/commons/jci/compilers/JavaSources.java
Modified:
    jakarta/commons/sandbox/jci/trunk/compilers/eclipse/src/test/java/org/apache/commons/jci/compilers/EclipseJavaCompilerTestCase.java
    jakarta/commons/sandbox/jci/trunk/compilers/groovy/src/main/java/org/apache/commons/jci/compilers/GroovyJavaCompiler.java
    jakarta/commons/sandbox/jci/trunk/compilers/janino/src/test/java/org/apache/commons/jci/compilers/JaninoJavaCompilerTestCase.java
    jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/FileInputStreamProxy.java
    jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/FileOutputStreamProxy.java
    jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/JavacClassLoader.java
    jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/JavacJavaCompiler.java
    jakarta/commons/sandbox/jci/trunk/core/src/test/java/org/apache/commons/jci/AbstractTestCase.java
    jakarta/commons/sandbox/jci/trunk/core/src/test/java/org/apache/commons/jci/compilers/AbstractCompilerTestCase.java

Modified: jakarta/commons/sandbox/jci/trunk/compilers/eclipse/src/test/java/org/apache/commons/jci/compilers/EclipseJavaCompilerTestCase.java
URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/compilers/eclipse/src/test/java/org/apache/commons/jci/compilers/EclipseJavaCompilerTestCase.java?view=diff&rev=510650&r1=510649&r2=510650
==============================================================================
--- jakarta/commons/sandbox/jci/trunk/compilers/eclipse/src/test/java/org/apache/commons/jci/compilers/EclipseJavaCompilerTestCase.java
(original)
+++ jakarta/commons/sandbox/jci/trunk/compilers/eclipse/src/test/java/org/apache/commons/jci/compilers/EclipseJavaCompilerTestCase.java
Thu Feb 22 13:01:57 2007
@@ -2,6 +2,10 @@
 
 public final class EclipseJavaCompilerTestCase extends AbstractCompilerTestCase {
 
+	public String getCompilerName() {
+		return "eclipse";
+	}
+
 	public JavaCompiler createJavaCompiler() {
 		return new EclipseJavaCompiler();
 	}

Modified: jakarta/commons/sandbox/jci/trunk/compilers/groovy/src/main/java/org/apache/commons/jci/compilers/GroovyJavaCompiler.java
URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/compilers/groovy/src/main/java/org/apache/commons/jci/compilers/GroovyJavaCompiler.java?view=diff&rev=510650&r1=510649&r2=510650
==============================================================================
--- jakarta/commons/sandbox/jci/trunk/compilers/groovy/src/main/java/org/apache/commons/jci/compilers/GroovyJavaCompiler.java
(original)
+++ jakarta/commons/sandbox/jci/trunk/compilers/groovy/src/main/java/org/apache/commons/jci/compilers/GroovyJavaCompiler.java
Thu Feb 22 13:01:57 2007
@@ -26,7 +26,7 @@
 
 public final class GroovyJavaCompiler extends AbstractJavaCompiler {
 
-    private final static Log log = LogFactory.getLog(GroovyJavaCompiler.class);
+    private final Log log = LogFactory.getLog(GroovyJavaCompiler.class);
     
     public CompilationResult compile(
             final String[] pResourceNames,
@@ -42,7 +42,7 @@
         for (int i = 0; i < source.length; i++) {
             final String resourceName = pResourceNames[i];
             source[i] = new SourceUnit(
-                    ClassUtils.convertResourceNameToClassName(resourceName),
+                    ClassUtils.convertResourceToClassName(resourceName),
                     new String(pReader.getBytes(resourceName)), // FIXME delay the read
                     configuration,
                     groovyClassLoader,
@@ -61,7 +61,7 @@
             for (final Iterator it = classes.iterator(); it.hasNext();) {
                 final GroovyClass clazz = (GroovyClass) it.next();
                 final byte[] bytes = clazz.getBytes();
-                pStore.write(clazz.getName(), bytes);
+                pStore.write(ClassUtils.convertClassToResourcePath(clazz.getName()), bytes);
             }
         } catch (final MultipleCompilationErrorsException e) {
             final ErrorCollector col = e.getErrorCollector();

Added: jakarta/commons/sandbox/jci/trunk/compilers/groovy/src/test/java/org/apache/commons/jci/compilers/GroovyJavaCompilerTestCase.java
URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/compilers/groovy/src/test/java/org/apache/commons/jci/compilers/GroovyJavaCompilerTestCase.java?view=auto&rev=510650
==============================================================================
--- jakarta/commons/sandbox/jci/trunk/compilers/groovy/src/test/java/org/apache/commons/jci/compilers/GroovyJavaCompilerTestCase.java
(added)
+++ jakarta/commons/sandbox/jci/trunk/compilers/groovy/src/test/java/org/apache/commons/jci/compilers/GroovyJavaCompilerTestCase.java
Thu Feb 22 13:01:57 2007
@@ -0,0 +1,19 @@
+package org.apache.commons.jci.compilers;
+
+
+public final class GroovyJavaCompilerTestCase extends AbstractCompilerTestCase {
+
+	public String getCompilerName() {
+		return "groovy";
+	}
+
+	public JavaCompiler createJavaCompiler() {
+		return new GroovyJavaCompiler();
+	}
+
+	public void testInternalClassCompile() throws Exception {
+		// FIXME: inner classes not supported in groovy?
+	}
+
+	
+}

Propchange: jakarta/commons/sandbox/jci/trunk/compilers/groovy/src/test/java/org/apache/commons/jci/compilers/GroovyJavaCompilerTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/commons/sandbox/jci/trunk/compilers/groovy/src/test/java/org/apache/commons/jci/compilers/GroovyJavaCompilerTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: jakarta/commons/sandbox/jci/trunk/compilers/groovy/src/test/java/org/apache/commons/jci/compilers/GroovyJavaCompilerTestCase.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: jakarta/commons/sandbox/jci/trunk/compilers/janino/src/test/java/org/apache/commons/jci/compilers/JaninoJavaCompilerTestCase.java
URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/compilers/janino/src/test/java/org/apache/commons/jci/compilers/JaninoJavaCompilerTestCase.java?view=diff&rev=510650&r1=510649&r2=510650
==============================================================================
--- jakarta/commons/sandbox/jci/trunk/compilers/janino/src/test/java/org/apache/commons/jci/compilers/JaninoJavaCompilerTestCase.java
(original)
+++ jakarta/commons/sandbox/jci/trunk/compilers/janino/src/test/java/org/apache/commons/jci/compilers/JaninoJavaCompilerTestCase.java
Thu Feb 22 13:01:57 2007
@@ -2,6 +2,10 @@
 
 public final class JaninoJavaCompilerTestCase extends AbstractCompilerTestCase {
 
+	public String getCompilerName() {
+		return "janino";
+	}
+	
 	public JavaCompiler createJavaCompiler() {
 		return new JaninoJavaCompiler();
 	}

Modified: jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/FileInputStreamProxy.java
URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/FileInputStreamProxy.java?view=diff&rev=510650&r1=510649&r2=510650
==============================================================================
--- jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/FileInputStreamProxy.java
(original)
+++ jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/FileInputStreamProxy.java
Thu Feb 22 13:01:57 2007
@@ -3,113 +3,89 @@
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileDescriptor;
-import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
-import java.nio.channels.FileChannel;
+
 import org.apache.commons.jci.readers.ResourceReader;
 
-public class FileInputStreamProxy extends InputStream
-{
-	private InputStream inputStream = null;
-
-	ResourceReader reader = null;
-
-	public FileInputStreamProxy(File file) throws FileNotFoundException
-	{
-		if (getReader().isAvailable(file.getName()))
-			inputStream = new ByteArrayInputStream(getReader().getBytes(file.getName()));
-		else
-			inputStream = new FileInputStream(file);
-	}
-
-	public FileInputStreamProxy(FileDescriptor fdObj)
-	{
-		inputStream = new FileInputStream(fdObj);
-	}
-
-	public FileInputStreamProxy(String name) throws FileNotFoundException
-	{
-		if (getReader().isAvailable(name))
-			inputStream = new ByteArrayInputStream(getReader().getBytes(name));
-		else
-		inputStream = new FileInputStream(name);
-	}
-
-	private ResourceReader getReader()
-	{
-		if (reader == null)
-		{
-			JavacClassLoader loader = (JavacClassLoader)Thread.currentThread().getContextClassLoader();
-			reader = loader.getReader();
+public class FileInputStreamProxy extends InputStream {
+	
+	private final static ThreadLocal readerThreadLocal = new ThreadLocal() {
+		public void set(Object o) {
+			System.out.println("writing " + o + " for " + Thread.currentThread().hashCode());
+			super.set(o);
+			System.out.println("reading1 " + super.get() + " for " + Thread.currentThread().hashCode());
+		}
+		
+		public Object get() {
+			final Object o = super.get();
+			System.out.println("reading2 " + o + " for " + Thread.currentThread().hashCode());
+			return o;
 		}
-		return reader;
+	};
+	
+	private final InputStream in;
+	
+	private final String name;
+	
+	public static void setResourceReader( final ResourceReader pReader ) {
+		readerThreadLocal.set(pReader);
 	}
-
-	public int available() throws IOException
-	{
-		return inputStream.available();
+	
+	public FileInputStreamProxy(File pFile) throws FileNotFoundException {
+		this("" + pFile);
 	}
 
-	public void close() throws IOException
-	{
-		inputStream.close();
+	public FileInputStreamProxy(FileDescriptor fdObj) {
+		throw new RuntimeException();
 	}
 
-	public boolean equals(Object obj)
-	{
-		return inputStream.equals(obj);
-	}
+	public FileInputStreamProxy(String pName) throws FileNotFoundException {
+		name = pName;
 
-	public FileChannel getChannel()
-	{
-		// TODO
-		throw new RuntimeException(":(");
-	}
+		final ResourceReader reader = (ResourceReader) readerThreadLocal.get();
 
-	public int hashCode()
-	{
-		return inputStream.hashCode();
+		if (reader == null) {
+			throw new RuntimeException("forgot to set the ResourceReader for this thread?");
+		}
+		
+		in = new ByteArrayInputStream(reader.getBytes(name));
+	}
+	
+	public int read() throws IOException {
+		return in.read();
 	}
 
-	public void mark(int readlimit)
-	{
-		inputStream.mark(readlimit);
+	public int available() throws IOException {
+		return in.available();			
 	}
 
-	public boolean markSupported()
-	{
-		return inputStream.markSupported();
+	public void close() throws IOException {
+		in.close();
 	}
 
-	public int read() throws IOException
-	{
-		return inputStream.read();
+	public synchronized void mark(int readlimit) {
+		in.mark(readlimit);
 	}
 
-	public int read(byte[] b, int off, int len) throws IOException
-	{
-		return inputStream.read(b, off, len);
+	public boolean markSupported() {
+		return in.markSupported();
 	}
 
-	public int read(byte[] b) throws IOException
-	{
-		return inputStream.read(b);
+	public int read(byte[] b, int off, int len) throws IOException {
+		return in.read(b, off, len);
 	}
 
-	public void reset() throws IOException
-	{
-		inputStream.reset();
+	public int read(byte[] b) throws IOException {
+		return in.read(b);
 	}
 
-	public long skip(long n) throws IOException
-	{
-		return inputStream.skip(n);
+	public synchronized void reset() throws IOException {
+		in.reset();
 	}
 
-	public String toString()
-	{
-		return inputStream.toString();
+	public long skip(long n) throws IOException {
+		return in.skip(n);
 	}
 }

Modified: jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/FileOutputStreamProxy.java
URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/FileOutputStreamProxy.java?view=diff&rev=510650&r1=510649&r2=510650
==============================================================================
--- jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/FileOutputStreamProxy.java
(original)
+++ jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/FileOutputStreamProxy.java
Thu Feb 22 13:01:57 2007
@@ -6,111 +6,52 @@
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.OutputStream;
-import org.apache.commons.jci.stores.ResourceStore;
 
-public class FileOutputStreamProxy extends OutputStream
-{
-	private ByteArrayOutputStream out = null;
-
-	private ResourceStore store = null;
+public class FileOutputStreamProxy extends OutputStream {
 	
-	private String fileName;
 	
-	public FileOutputStreamProxy(File file, boolean append)
-			throws FileNotFoundException
-	{
-		fileName = file.getName();
-		out = new ByteArrayOutputStream();
-		if(append)
-			try
-			{
-				out.write(getStore().read(fileName));
-			}
-			catch (IOException e)
-			{
-			}
-	}
-
-	public FileOutputStreamProxy(File file) throws FileNotFoundException
-	{
-		fileName = file.getName();
-		out = new ByteArrayOutputStream();
-	}
-
-	public FileOutputStreamProxy(FileDescriptor fdObj)
-	{
-		throw new RuntimeException(":(");
-	}
-
-	public FileOutputStreamProxy(String name, boolean append)
-			throws FileNotFoundException
-	{
-		fileName = name;
-		out = new ByteArrayOutputStream();
-		if(append)
-			try
-			{
-				out.write(getStore().read(fileName));
-			}
-			catch (IOException e)
-			{
-			}
-	}
-
-	public FileOutputStreamProxy(String name) throws FileNotFoundException
-	{
-		fileName = name;
-		out = new ByteArrayOutputStream();
-	}
+	private final ByteArrayOutputStream out = new ByteArrayOutputStream();
+	private final String name;	
 	
-	private ResourceStore getStore()
-	{
-		if (store == null)
-		{
-			JavacClassLoader loader = (JavacClassLoader)Thread.currentThread().getContextClassLoader();
-			store = loader.getStore();
-		}
-		return store;
+	public FileOutputStreamProxy(File pFile, boolean append) throws FileNotFoundException {
+		name = pFile.getName();
 	}
 
-	public void close() throws IOException
-	{
-		getStore().write(fileName, out.toByteArray());
-		out.close();
+	public FileOutputStreamProxy(File pFile) throws FileNotFoundException {
+		System.out.println("Writing to file " + pFile);
+		name = pFile.getName();
 	}
 
-	public boolean equals(Object obj)
-	{
-		return out.equals(obj);
+	public FileOutputStreamProxy(FileDescriptor fdObj) {
+		throw new RuntimeException();
 	}
 
-	public void flush() throws IOException
-	{
-		out.flush();
+	public FileOutputStreamProxy(String pName, boolean append) throws FileNotFoundException
{
+		name = pName;
 	}
 
-	public int hashCode()
-	{
-		return out.hashCode();
+	public FileOutputStreamProxy(String pName) throws FileNotFoundException {
+		name = pName;
+	}
+	
+	public void write(int value) throws IOException {
+		out.write(value);
 	}
 
-	public String toString()
-	{
-		return out.toString();
+	public void close() throws IOException {
+		System.out.println("Wrote " + out.size() + " bytes");
+		out.close();
 	}
 
-	public void write(byte[] b, int off, int len) throws IOException
-	{
-		out.write(b, off, len);
+	public void flush() throws IOException {
+		out.flush();
 	}
 
-	public void write(byte[] b) throws IOException
-	{
-		out.write(b);
+	public void write(byte[] b, int off, int len) throws IOException {
+		out.write(b, off, len);
 	}
 
-	public void write(int b) throws IOException
-	{
+	public void write(byte[] b) throws IOException {
 		out.write(b);
 	}
 }

Modified: jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/JavacClassLoader.java
URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/JavacClassLoader.java?view=diff&rev=510650&r1=510649&r2=510650
==============================================================================
--- jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/JavacClassLoader.java
(original)
+++ jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/JavacClassLoader.java
Thu Feb 22 13:01:57 2007
@@ -2,65 +2,81 @@
 
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
-import javassist.ClassMap;
-import javassist.ClassPool;
-import javassist.CtClass;
-import org.apache.commons.jci.readers.ResourceReader;
-import org.apache.commons.jci.stores.ResourceStore;
-
-public class JavacClassLoader extends ClassLoader
-{
-	private ClassPool classPool;
-
-	private ResourceReader reader;
-
-	private ResourceStore store;
-
-	public JavacClassLoader(ClassPool classPool, ResourceReader reader,
-			ResourceStore store, ClassLoader parent)
-	{
-		super(parent);
-		this.classPool = classPool;
-		this.reader = reader;
-		this.store = store;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.commons.io.IOUtils;
+import org.objectweb.asm.ClassReader;
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.util.CheckClassAdapter;
+import org.vafer.dependency.asm.RenamingVisitor;
+import org.vafer.dependency.utils.ResourceRenamer;
+
+public final class JavacClassLoader extends ClassLoader {
+	
+	public JavacClassLoader( final ClassLoader pParent ) {
+		super(pParent);
 	}
+	
+	protected Class findClass( final String name ) throws ClassNotFoundException {
 
-	protected Class findClass(String name) throws ClassNotFoundException
-	{
-		try
-		{
-			CtClass jc = classPool.get(name);
-			if (jc != null)
-			{
-				if (name.startsWith("com.sun.tools.javac"))
-				{
-					ClassMap classMap = new ClassMap();
-					classMap.put(FileOutputStream.class.getName(),
-							FileOutputStreamProxy.class.getName());
-					classMap.put(FileInputStream.class.getName(),
-							FileInputStreamProxy.class.getName());
-					jc.replaceClassName(classMap);
-				}
-				return jc.toClass();
-			}
-			else
-			{
-				return getParent().loadClass(name);
-			}
+		//System.out.println("findClass " + name);
+		
+		if (name.startsWith("java.")) {
+			return super.findClass(name);
 		}
-		catch (Exception e)
-		{
+		
+		final InputStream classStream = getResourceAsStream(name.replace('.', '/') + ".class");
+		
+		try {
+			
+			final byte[] classBytes;
+
+			if (name.startsWith("")) {
+		        final ClassWriter renamedCw = new ClassWriter(true, false);
+		        new ClassReader(classStream).accept(new RenamingVisitor(new CheckClassAdapter(renamedCw),
new ResourceRenamer() {
+					public String getNewNameFor(final String pOldName) {
+						if (pOldName.startsWith(FileOutputStream.class.getName())) {
+							//System.out.println("rewriting FOS" + name);
+							return FileOutputStreamProxy.class.getName();
+						}
+						if (pOldName.startsWith(FileInputStream.class.getName())) {
+							//System.out.println("rewriting FIS" + name);
+							return FileInputStreamProxy.class.getName();
+						}
+						return pOldName;
+					}        		
+	        	}), false);
+
+	        	classBytes = renamedCw.toByteArray();
+				
+			} else {
+				classBytes = IOUtils.toByteArray(classStream);						
+			}
+			
+			return defineClass(name, classBytes, 0, classBytes.length);
+		} catch (IOException e) {
+			throw new ClassNotFoundException("", e);
 		}
-		return super.findClass(name);
 	}
 
-	public ResourceReader getReader()
-	{
-		return reader;
-	}
+	protected synchronized Class loadClass( final String classname, final boolean resolve )
throws ClassNotFoundException {
+
+		Class theClass = findLoadedClass(classname);
+		if (theClass != null) {
+			return theClass;
+		}
+
+		try {
+			theClass = findClass(classname);
+		} catch (ClassNotFoundException cnfe) {
+			theClass = getParent().loadClass(classname);
+		}
+
+		if (resolve) {
+			resolveClass(theClass);
+		}
 
-	public ResourceStore getStore()
-	{
-		return store;
+		return theClass;
 	}
 }

Modified: jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/JavacJavaCompiler.java
URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/JavacJavaCompiler.java?view=diff&rev=510650&r1=510649&r2=510650
==============================================================================
--- jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/JavacJavaCompiler.java
(original)
+++ jakarta/commons/sandbox/jci/trunk/compilers/javac/src/main/java/org/apache/commons/jci/compilers/JavacJavaCompiler.java
Thu Feb 22 13:01:57 2007
@@ -10,258 +10,234 @@
 import java.util.List;
 import java.util.NoSuchElementException;
 import java.util.StringTokenizer;
-import javassist.ClassPool;
-import javassist.NotFoundException;
+
 import org.apache.commons.jci.problems.CompilationProblem;
 import org.apache.commons.jci.readers.ResourceReader;
 import org.apache.commons.jci.stores.ResourceStore;
 
-public class JavacJavaCompiler extends AbstractJavaCompiler
-{
-	protected static final String EOL = System.getProperty("line.separator");;
+public final class JavacJavaCompiler extends AbstractJavaCompiler {
 
+	private static final String EOL = System.getProperty("line.separator");;
 	private static final String WARNING_PREFIX = "warning: ";
-
 	private static final String NOTE_PREFIX = "Note: ";
-
 	private static final String ERROR_PREFIX = "error: ";
 
 	private final JavacJavaCompilerSettings settings;
 
-	public JavacJavaCompiler(final JavacJavaCompilerSettings settings)
-	{
-		super();
-		this.settings = settings;
+	public JavacJavaCompiler() {
+		settings = null;
+	}
+	
+	
+	public JavacJavaCompiler( final JavacJavaCompilerSettings pSettings ) {
+		settings = pSettings;
 	}
 
-	public CompilationResult compile(String[] resourcePaths,
-			ResourceReader reader, ResourceStore store,
-			ClassLoader baseClassLoader)
-	{
-		ClassPool classPool = ClassPool.getDefault();
-		try
-		{
-			classPool.appendClassPath(System.getProperty("java.home")
-					+ "/../lib/tools.jar");
-		}
-		catch (NotFoundException e)
-		{
-			return new CompilationResult(
-					new CompilationProblem[] { new JavacCompilationProblem(
-							"tools.jar not fount", true) });
-		}
-		JavacClassLoader javacClassLoader = new JavacClassLoader(classPool,
-				reader, store, baseClassLoader);
-		ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
-		Thread.currentThread().setContextClassLoader(javacClassLoader);
-		try
-		{
-			Class javacMain = javacClassLoader
-					.loadClass("com.sun.tools.javac.Main");
-			Method compile = javacMain.getMethod("compile", new Class[] {
-					String[].class, PrintWriter.class });
-			StringWriter out = new StringWriter();
-			Integer ok = (Integer) compile.invoke(null,
-					new Object[] { buildCompilerArguments(resourcePaths),
-							new PrintWriter(out) });
-			CompilationResult result = parseModernStream(new BufferedReader(
-					new StringReader(out.toString())));
-			if (result.getErrors().length == 0 && ok.intValue() != 0)
-				return new CompilationResult(
-						new CompilationProblem[] { new JavacCompilationProblem(
-								"Failure executing javac, but could not parse the error: "
-										+ out.toString(), true) });
+	public CompilationResult compile( final String[] pSourcePaths, final ResourceReader pReader,
ResourceStore pStore, final ClassLoader pClasspathClassLoader) {
+
+		try {
+			final ClassLoader cl = new JavacClassLoader(pClasspathClassLoader);
+	        final Class renamedClass = cl.loadClass("com.sun.tools.javac.Main");
+	
+	        FileInputStreamProxy.setResourceReader(pReader);
+	        
+			final Method compile = renamedClass.getMethod("compile", new Class[] { String[].class,
PrintWriter.class });
+			final StringWriter out = new StringWriter();
+			final Integer ok = (Integer) compile.invoke(null, new Object[] { pSourcePaths, new PrintWriter(out)
});
+
+			final CompilationResult result = parseModernStream(new BufferedReader(new StringReader(out.toString())));
+
+			if (result.getErrors().length == 0 && ok.intValue() != 0) {
+				return new CompilationResult(new CompilationProblem[] {
+						new JavacCompilationProblem("Failure executing javac, but could not parse the error:
" + out.toString(), true) });
+			}
+			
 			return result;
-		}
-		catch (Exception e)
-		{
-			return new CompilationResult(
-					new CompilationProblem[] { new JavacCompilationProblem(
-							"Error while executing the compiler: "
-									+ e.toString(), true) });
-		}
-		finally
-		{
-			Thread.currentThread().setContextClassLoader(oldLoader);
-		}
+			
+		} catch(Exception e) {
+			return new CompilationResult(new CompilationProblem[] {
+					new JavacCompilationProblem("Error while executing the compiler: " + e.toString(), true)
});
+		}
+
+		
+		
+
+//		JavacClassLoader javacClassLoader = new JavacClassLoader(classPool,
+//				reader, store, baseClassLoader);
+//		ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
+//		Thread.currentThread().setContextClassLoader(javacClassLoader);
+//		try
+//		{
+//		}
+//		catch (Exception e)
+//		{
+//		}
+//		finally
+//		{
+//			Thread.currentThread().setContextClassLoader(oldLoader);
+//		}
 	}
 
-	private CompilationResult parseModernStream(BufferedReader input)
-			throws IOException
-	{
-		List problems = new ArrayList();
+	private CompilationResult parseModernStream( final BufferedReader pReader ) throws IOException
{
+		final List problems = new ArrayList();
 		String line;
-		StringBuffer buffer;
-		while (true)
-		{
+
+		while (true) {
 			// cleanup the buffer
-			buffer = new StringBuffer(); // this is quicker than clearing it
+			final StringBuffer buffer = new StringBuffer();
+
 			// most errors terminate with the '^' char
-			do
-			{
-				line = input.readLine();
-				if (line == null)
-				{
-					return new CompilationResult(
-							(CompilationProblem[]) problems
-									.toArray(new CompilationProblem[problems
-											.size()]));
+			do {
+				line = pReader.readLine();
+				if (line == null) {
+					return new CompilationResult((CompilationProblem[]) problems.toArray(new CompilationProblem[problems.size()]));
 				}
+				
 				// TODO: there should be a better way to parse these
-				if (buffer.length() == 0 && line.startsWith(ERROR_PREFIX))
-				{
+				if (buffer.length() == 0 && line.startsWith(ERROR_PREFIX)) {
 					problems.add(new JavacCompilationProblem(line, true));
 				}
-				else
-					if (buffer.length() == 0 && line.startsWith(NOTE_PREFIX))
-					{
-						// skip this one - it is JDK 1.5 telling us that the
-						// interface is deprecated.
-					}
-					else
-					{
-						buffer.append(line);
-						buffer.append(EOL);
-					}
-			}
-			while (!line.endsWith("^"));
-			// add the error bean
+				else if (buffer.length() == 0 && line.startsWith(NOTE_PREFIX)) {
+					// skip this one - it is JDK 1.5 telling us that the
+					// interface is deprecated.
+				} else {
+					buffer.append(line);
+					buffer.append(EOL);
+				}
+			} while (!line.endsWith("^"));
+
+			// add the error
 			problems.add(parseModernError(buffer.toString()));
 		}
 	}
 
-	private CompilationProblem parseModernError(String error)
-	{
-		StringTokenizer tokens = new StringTokenizer(error, ":");
+	private CompilationProblem parseModernError( final String pError ) {
+		final StringTokenizer tokens = new StringTokenizer(pError, ":");
 		boolean isError = true;
-		StringBuffer msgBuffer;
-		try
-		{
+		try {
 			String file = tokens.nextToken();
 			// When will this happen?
-			if (file.length() == 1)
-			{
+			if (file.length() == 1) {
 				file = new StringBuffer(file).append(":").append(
 						tokens.nextToken()).toString();
 			}
-			int line = Integer.parseInt(tokens.nextToken());
-			msgBuffer = new StringBuffer();
+			final int line = Integer.parseInt(tokens.nextToken());
+			final StringBuffer msgBuffer = new StringBuffer();
+
 			String msg = tokens.nextToken(EOL).substring(2);
 			isError = !msg.startsWith(WARNING_PREFIX);
+
 			// Remove the 'warning: ' prefix
-			if (!isError)
-			{
+			if (!isError) {
 				msg = msg.substring(WARNING_PREFIX.length());
 			}
 			msgBuffer.append(msg);
+			
 			String context = tokens.nextToken(EOL);
 			String pointer = tokens.nextToken(EOL);
-			if (tokens.hasMoreTokens())
-			{
+
+			if (tokens.hasMoreTokens()) {
 				msgBuffer.append(EOL);
 				msgBuffer.append(context); // 'symbol' line
 				msgBuffer.append(EOL);
 				msgBuffer.append(pointer); // 'location' line
 				msgBuffer.append(EOL);
+
 				context = tokens.nextToken(EOL);
-				try
-				{
+
+				try {
 					pointer = tokens.nextToken(EOL);
-				}
-				catch (NoSuchElementException e)
-				{
+				} catch (NoSuchElementException e) {
 					pointer = context;
 					context = null;
 				}
 			}
-			String message = msgBuffer.toString();
+			final String message = msgBuffer.toString();
 			int startcolumn = pointer.indexOf("^");
-			int endcolumn = context == null ? startcolumn : context.indexOf(
-					" ", startcolumn);
-			if (endcolumn == -1)
-			{
+			int endcolumn = context == null ? startcolumn : context.indexOf(" ", startcolumn);
+			if (endcolumn == -1) {
 				endcolumn = context.length();
 			}
-			return new JavacCompilationProblem(file, isError, line,
-					startcolumn, line, endcolumn, message);
+			return new JavacCompilationProblem(file, isError, line, startcolumn, line, endcolumn,
message);
 		}
-		catch (NoSuchElementException e)
-		{
-			return new JavacCompilationProblem(
-					"no more tokens - could not parse error message: " + error,
-					isError);
-		}
-		catch (NumberFormatException e)
-		{
-			return new JavacCompilationProblem(
-					"could not parse error message: " + error, isError);
-		}
-		catch (Exception e)
-		{
-			return new JavacCompilationProblem(
-					"could not parse error message: " + error, isError);
+		catch (NoSuchElementException e) {
+			return new JavacCompilationProblem("no more tokens - could not parse error message: "
+ pError, isError);
+		}
+		catch (NumberFormatException e) {
+			return new JavacCompilationProblem("could not parse error message: " + pError, isError);
+		}
+		catch (Exception e) {
+			return new JavacCompilationProblem("could not parse error message: " + pError, isError);
 		}
 	}
 
-	private String[] buildCompilerArguments(String[] resourcePaths)
+	private String[] buildCompilerArguments( final String[] resourcePaths )
 	{
-		List args = new ArrayList();
-		for (int i = 0; i < resourcePaths.length; i++)
-		{
+		final List args = new ArrayList();
+		for (int i = 0; i < resourcePaths.length; i++) {
 			args.add(resourcePaths[i]);
 		}
-		if (settings != null)
-		{
-			if (settings.isOptimize())
+
+		if (settings != null) {
+			if (settings.isOptimize()) {
 				args.add("-O");
-			if (settings.isDebug())
+			}
+			
+			if (settings.isDebug()) {
 				args.add("-g");
-			if (settings.isVerbose())
+			}
+			
+			if (settings.isVerbose()) {
 				args.add("-verbose");
-			if (settings.isShowDeprecation())
-			{
+			}
+			
+			if (settings.isShowDeprecation()) {
 				args.add("-deprecation");
 				// This is required to actually display the deprecation messages
 				settings.setShowWarnings(true);
 			}
-			if (settings.getMaxmem() != null)
+			
+			if (settings.getMaxmem() != null) {
 				args.add("-J-Xmx" + settings.getMaxmem());
-			if (settings.getMeminitial() != null)
+			}
+			
+			if (settings.getMeminitial() != null) {
 				args.add("-J-Xms" + settings.getMeminitial());
-			if (!settings.isShowWarnings())
+			}
+			
+			if (!settings.isShowWarnings()) {
 				args.add("-nowarn");
+			}
+			
 			// TODO: this could be much improved
-			if (settings.getTargetVersion() != null)
-			{
+			if (settings.getTargetVersion() != null) {
 				// Required, or it defaults to the target of your JDK (eg 1.5)
 				args.add("-target");
 				args.add("1.1");
-			}
-			else
-			{
+			} else {
 				args.add("-target");
 				args.add(settings.getTargetVersion());
 			}
+			
 			// TODO suppressSource
-			if (settings.getSourceVersion() != null)
-			{
+			if (settings.getSourceVersion() != null) {
 				// If omitted, later JDKs complain about a 1.1 target
 				args.add("-source");
 				args.add("1.3");
-			}
-			else
-			{
+			} else {
 				args.add("-source");
 				args.add(settings.getSourceVersion());
 			}
+			
 			// TODO suppressEncoding
-			if (settings.getSourceEncoding() != null)
-			{
+			if (settings.getSourceEncoding() != null) {
 				args.add("-encoding");
 				args.add(settings.getSourceEncoding());
 			}
+
 			// TODO CustomCompilerArguments
 		}
+		
 		return (String[]) args.toArray(new String[args.size()]);
 	}
 }

Added: jakarta/commons/sandbox/jci/trunk/compilers/javac/src/test/java/org/apache/commons/jci/compilers/JavacJavaCompilerTestCase.java
URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/compilers/javac/src/test/java/org/apache/commons/jci/compilers/JavacJavaCompilerTestCase.java?view=auto&rev=510650
==============================================================================
--- jakarta/commons/sandbox/jci/trunk/compilers/javac/src/test/java/org/apache/commons/jci/compilers/JavacJavaCompilerTestCase.java
(added)
+++ jakarta/commons/sandbox/jci/trunk/compilers/javac/src/test/java/org/apache/commons/jci/compilers/JavacJavaCompilerTestCase.java
Thu Feb 22 13:01:57 2007
@@ -0,0 +1,13 @@
+package org.apache.commons.jci.compilers;
+
+public class JavacJavaCompilerTestCase extends AbstractCompilerTestCase {
+
+	public JavaCompiler createJavaCompiler() {
+		return new JavacJavaCompiler();
+	}
+
+	public String getCompilerName() {
+		return "javac";
+	}
+
+}

Propchange: jakarta/commons/sandbox/jci/trunk/compilers/javac/src/test/java/org/apache/commons/jci/compilers/JavacJavaCompilerTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/commons/sandbox/jci/trunk/compilers/javac/src/test/java/org/apache/commons/jci/compilers/JavacJavaCompilerTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision Author HeadURL Id

Propchange: jakarta/commons/sandbox/jci/trunk/compilers/javac/src/test/java/org/apache/commons/jci/compilers/JavacJavaCompilerTestCase.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: jakarta/commons/sandbox/jci/trunk/core/src/test/java/org/apache/commons/jci/AbstractTestCase.java
URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/core/src/test/java/org/apache/commons/jci/AbstractTestCase.java?view=diff&rev=510650&r1=510649&r2=510650
==============================================================================
--- jakarta/commons/sandbox/jci/trunk/core/src/test/java/org/apache/commons/jci/AbstractTestCase.java
(original)
+++ jakarta/commons/sandbox/jci/trunk/core/src/test/java/org/apache/commons/jci/AbstractTestCase.java
Thu Feb 22 13:01:57 2007
@@ -30,21 +30,8 @@
 
     private final Log log = LogFactory.getLog(AbstractTestCase.class);
     
-    protected String extension = "java";
-
     protected File directory;
 
-    /*
-    public void runBare() throws Throwable {
-        try {
-            setUp();
-            runTest();
-        } finally {
-            tearDown();
-        }
-    }
-    */
-    
     protected void setUp() throws Exception {
     	
     	System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");

Modified: jakarta/commons/sandbox/jci/trunk/core/src/test/java/org/apache/commons/jci/compilers/AbstractCompilerTestCase.java
URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/core/src/test/java/org/apache/commons/jci/compilers/AbstractCompilerTestCase.java?view=diff&rev=510650&r1=510649&r2=510650
==============================================================================
--- jakarta/commons/sandbox/jci/trunk/core/src/test/java/org/apache/commons/jci/compilers/AbstractCompilerTestCase.java
(original)
+++ jakarta/commons/sandbox/jci/trunk/core/src/test/java/org/apache/commons/jci/compilers/AbstractCompilerTestCase.java
Thu Feb 22 13:01:57 2007
@@ -3,15 +3,26 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import junit.framework.TestCase;
+
+import org.apache.commons.jci.problems.CompilationProblem;
 import org.apache.commons.jci.readers.ResourceReader;
 import org.apache.commons.jci.stores.MemoryResourceStore;
 
-import junit.framework.TestCase;
-
 public abstract class AbstractCompilerTestCase extends TestCase {
 
 	public abstract JavaCompiler createJavaCompiler();
 	
+	public abstract String getCompilerName();
+	
+	public void testFactoryCreation() {
+    	final JavaCompiler factoryCompiler = new JavaCompilerFactory().createCompiler(getCompilerName());
+    	assertNotNull(factoryCompiler);
+    	
+    	final JavaCompiler compiler = createJavaCompiler();
+    	assertEquals(factoryCompiler.getClass().getName(), compiler.getClass().getName()); 
  	
+	}
+	
 	public void testSimpleCompile() throws Exception {
 		final JavaCompiler compiler = createJavaCompiler(); 
 		
@@ -42,8 +53,8 @@
 						"jci/Simple.java"
 				}, reader, store);
 		
-		assertEquals(0, result.getErrors().length);
-		assertEquals(0, result.getWarnings().length);
+		assertEquals(toString(result.getErrors()), 0, result.getErrors().length);		
+		assertEquals(toString(result.getWarnings()), 0, result.getWarnings().length);
 		
 		final byte[] clazzBytes = store.read("jci/Simple.class");		
 		assertNotNull(clazzBytes);
@@ -84,12 +95,12 @@
 		final MemoryResourceStore store = new MemoryResourceStore();
 		final CompilationResult result = compiler.compile(
 				new String[] {
-						"jci/Simple.java",
-						"jci/Extended.java"
+						"jci/Extended.java",
+						"jci/Simple.java"
 				}, reader, store);
 		
-		assertEquals(0, result.getErrors().length);
-		assertEquals(0, result.getWarnings().length);
+		assertEquals(toString(result.getErrors()), 0, result.getErrors().length);		
+		assertEquals(toString(result.getWarnings()), 0, result.getWarnings().length);
 		
 		final byte[] clazzBytesSimple = store.read("jci/Simple.class");		
 		assertNotNull(clazzBytesSimple);
@@ -100,4 +111,101 @@
 		assertTrue(clazzBytesExtended.length > 0);
 	}
 
+	public void testInternalClassCompile() throws Exception {
+		final JavaCompiler compiler = createJavaCompiler(); 
+		
+		final ResourceReader reader = new ResourceReader() {
+			final private Map sources = new HashMap() {{
+				put("jci/Simple.java", (
+					"package jci;\n" +
+					"public class Simple {\n" +
+					"  private class Sub {\n" +
+					"  }\n" +					
+					"  public String toString() {\n" +
+					"    new Sub();\n" +
+					"    return \"Simple\";\n" +
+					"  }\n" +
+					"}").getBytes());
+			}};
+			
+			public byte[] getBytes( final String pResourceName ) {
+				return (byte[]) sources.get(pResourceName);
+			}
+
+			public boolean isAvailable( final String pResourceName ) {
+				return sources.containsKey(pResourceName);
+			}
+			
+		};
+		
+		final MemoryResourceStore store = new MemoryResourceStore();
+		final CompilationResult result = compiler.compile(
+				new String[] {
+						"jci/Simple.java"
+				}, reader, store);
+		
+		assertEquals(toString(result.getErrors()), 0, result.getErrors().length);		
+		assertEquals(toString(result.getWarnings()), 0, result.getWarnings().length);
+		
+		final byte[] clazzBytes = store.read("jci/Simple.class");		
+		assertNotNull(clazzBytes);
+		assertTrue(clazzBytes.length > 0);
+
+		final byte[] subClazzBytes = store.read("jci/Simple$Sub.class");		
+		assertNotNull(subClazzBytes);
+		assertTrue(subClazzBytes.length > 0);
+
+	}
+
+	public void testUppercasePackageNameCompile() throws Exception {
+		final JavaCompiler compiler = createJavaCompiler(); 
+		
+		final ResourceReader reader = new ResourceReader() {
+			final private Map sources = new HashMap() {{
+				put("Jci/Simple.java", (
+					"package Jci;\n" +
+					"public class Simple {\n" +
+					"  public String toString() {\n" +
+					"    return \"Simple\";\n" +
+					"  }\n" +
+					"}").getBytes());
+			}};
+			
+			public byte[] getBytes( final String pResourceName ) {
+				return (byte[]) sources.get(pResourceName);
+			}
+
+			public boolean isAvailable( final String pResourceName ) {
+				return sources.containsKey(pResourceName);
+			}
+			
+		};
+		
+		final MemoryResourceStore store = new MemoryResourceStore();
+		final CompilationResult result = compiler.compile(
+				new String[] {
+						"Jci/Simple.java"
+				}, reader, store);
+		
+		assertEquals(toString(result.getErrors()), 0, result.getErrors().length);		
+		assertEquals(toString(result.getWarnings()), 0, result.getWarnings().length);
+		
+		final byte[] clazzBytes = store.read("Jci/Simple.class");		
+		assertNotNull(clazzBytes);
+		assertTrue(clazzBytes.length > 0);
+	}
+	
+	
+	
+	private final String toString( final CompilationProblem[] pProblems ) {
+		final StringBuffer sb = new StringBuffer();
+		
+		for (int i = 0; i < pProblems.length; i++) {
+			final CompilationProblem problem = pProblems[i];
+			sb.append(problem.getMessage()).append(", ");
+		}
+		
+		return sb.toString();
+	}
+	
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org


Mime
View raw message