You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2019/06/05 01:25:34 UTC
[groovy] branch master updated: Refactor and allow default
CompilerConfiguration as parent allows
This is an automated email from the ASF dual-hosted git repository.
sunlan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new 4b497ea Refactor and allow default CompilerConfiguration as parent allows
4b497ea is described below
commit 4b497ea2be8688a0807fb3c39d6dc80ef90fc018
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Thu May 30 12:54:00 2019 -0500
Refactor and allow default CompilerConfiguration as parent allows
---
.../codehaus/groovy/control/CompilationUnit.java | 125 +++++++++------------
.../tools/javac/JavaAwareCompilationUnit.java | 39 ++++---
.../tools/javac/JavaStubCompilationUnit.java | 8 +-
3 files changed, 79 insertions(+), 93 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/control/CompilationUnit.java b/src/main/java/org/codehaus/groovy/control/CompilationUnit.java
index 205431c..8e67cc7 100644
--- a/src/main/java/org/codehaus/groovy/control/CompilationUnit.java
+++ b/src/main/java/org/codehaus/groovy/control/CompilationUnit.java
@@ -54,6 +54,7 @@ import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import javax.tools.JavaFileObject;
+
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -64,6 +65,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -77,7 +79,6 @@ import java.util.Set;
* You can also add PhaseOperations to this compilation using the addPhaseOperation method.
* This is commonly used when you want to wire a new AST Transformation into the compilation.
*/
-
public class CompilationUnit extends ProcessingUnit {
//---------------------------------------------------------------------------
@@ -89,7 +90,6 @@ public class CompilationUnit extends ProcessingUnit {
protected Map summariesBySourceName; // Summary of each SourceUnit
protected Map summariesByPublicClassName; // Summary of each SourceUnit
protected Map classSourcesByPublicClassName; // Summary of each Class
- protected List<String> names; // Names for each SourceUnit in sources.
protected LinkedList<SourceUnit> queuedSources;
protected CompileUnit ast; // The overall AST for this CompilationUnit.
@@ -112,7 +112,6 @@ public class CompilationUnit extends ProcessingUnit {
private Set<JavaFileObject> javaCompilationUnitSet = new HashSet<>();
-
/**
* Initializes the CompilationUnit with defaults.
*/
@@ -120,7 +119,6 @@ public class CompilationUnit extends ProcessingUnit {
this(null, null, null);
}
-
/**
* Initializes the CompilationUnit with defaults except for class loader.
*/
@@ -128,7 +126,6 @@ public class CompilationUnit extends ProcessingUnit {
this(null, null, loader);
}
-
/**
* Initializes the CompilationUnit with no security considerations.
*/
@@ -162,15 +159,14 @@ public class CompilationUnit extends ProcessingUnit {
super(configuration, loader, null);
this.astTransformationsContext = new ASTTransformationsContext(this, transformLoader);
- this.names = new ArrayList<String>();
- this.queuedSources = new LinkedList<SourceUnit>();
- this.sources = new HashMap<String, SourceUnit>();
- this.summariesBySourceName = new HashMap();
- this.summariesByPublicClassName = new HashMap();
- this.classSourcesByPublicClassName = new HashMap();
+ this.queuedSources = new LinkedList<>();
+ this.sources = new LinkedHashMap<>();
+ this.summariesBySourceName = new HashMap<>();
+ this.summariesByPublicClassName = new HashMap<>();
+ this.classSourcesByPublicClassName = new HashMap<>();
this.ast = new CompileUnit(this.classLoader, security, this.configuration);
- this.generatedClasses = new ArrayList<GroovyClass>();
+ this.generatedClasses = new ArrayList<>();
this.verifier = new Verifier();
this.resolveVisitor = new ResolveVisitor(this);
@@ -180,7 +176,7 @@ public class CompilationUnit extends ProcessingUnit {
initPhaseOperations();
addPhaseOperations();
- applyCompilationCustomizers(configuration);
+ applyCompilationCustomizers();
this.classgenCallback = null;
this.classNodeResolver = new ClassNodeResolver();
@@ -191,19 +187,21 @@ public class CompilationUnit extends ProcessingUnit {
phaseOperations = new LinkedList[cnt];
newPhaseOperations = new LinkedList[cnt];
for (int i = 0; i < phaseOperations.length; i++) {
- phaseOperations[i] = new LinkedList();
- newPhaseOperations[i] = new LinkedList();
+ phaseOperations[i] = new LinkedList<>();
+ newPhaseOperations[i] = new LinkedList<>();
}
}
private void addPhaseOperations() {
addPhaseOperation(new SourceUnitOperation() {
+ @Override
public void call(SourceUnit source) throws CompilationFailedException {
source.parse();
}
}, Phases.PARSING);
addPhaseOperation(convert, Phases.CONVERSION);
addPhaseOperation(new PrimaryClassNodeOperation() {
+ @Override
public void call(SourceUnit source, GeneratorContext context,
ClassNode classNode) throws CompilationFailedException {
EnumVisitor ev = new EnumVisitor(CompilationUnit.this, source);
@@ -231,6 +229,7 @@ public class CompilationUnit extends ProcessingUnit {
}
}, Phases.SEMANTIC_ANALYSIS);
addPhaseOperation(new PrimaryClassNodeOperation() {
+ @Override
public void call(SourceUnit source, GeneratorContext context,
ClassNode classNode) throws CompilationFailedException {
TraitComposer.doExtendTraits(classNode, source, CompilationUnit.this);
@@ -238,6 +237,7 @@ public class CompilationUnit extends ProcessingUnit {
}, Phases.CANONICALIZATION);
addPhaseOperation(compileCompleteCheck, Phases.CANONICALIZATION);
addPhaseOperation(classgen, Phases.CLASS_GENERATION);
+
addPhaseOperation(output);
addPhaseOperation(new PrimaryClassNodeOperation() {
@@ -266,6 +266,7 @@ public class CompilationUnit extends ProcessingUnit {
}
}, Phases.CANONICALIZATION);
addPhaseOperation(new PrimaryClassNodeOperation() {
+ @Override
public void call(SourceUnit source, GeneratorContext context,
ClassNode classNode) throws CompilationFailedException {
EnumCompletionVisitor ecv = new EnumCompletionVisitor(CompilationUnit.this, source);
@@ -285,16 +286,12 @@ public class CompilationUnit extends ProcessingUnit {
}, Phases.INSTRUCTION_SELECTION);
}
- private void applyCompilationCustomizers(CompilerConfiguration configuration) {
- // apply configuration customizers if any
- if (configuration != null) {
- final List<CompilationCustomizer> customizers = configuration.getCompilationCustomizers();
- for (CompilationCustomizer customizer : customizers) {
- if (customizer instanceof CompilationUnitAware) {
- ((CompilationUnitAware) customizer).setCompilationUnit(this);
- }
- addPhaseOperation(customizer, customizer.getPhase().getPhaseNumber());
+ private void applyCompilationCustomizers() {
+ for (CompilationCustomizer customizer : configuration.getCompilationCustomizers()) {
+ if (customizer instanceof CompilationUnitAware) {
+ ((CompilationUnitAware) customizer).setCompilationUnit(this);
}
+ addPhaseOperation(customizer, customizer.getPhase().getPhaseNumber());
}
}
@@ -306,7 +303,6 @@ public class CompilationUnit extends ProcessingUnit {
return astTransformationsContext.getTransformLoader() == null ? getClassLoader() : astTransformationsContext.getTransformLoader();
}
-
public void addPhaseOperation(SourceUnitOperation op, int phase) {
validatePhase(phase);
phaseOperations[phase].add(op);
@@ -339,9 +335,10 @@ public class CompilationUnit extends ProcessingUnit {
* Configures its debugging mode and classloader classpath from a given compiler configuration.
* This cannot be done more than once due to limitations in {@link java.net.URLClassLoader URLClassLoader}.
*/
+ @Override
public void configure(CompilerConfiguration configuration) {
super.configure(configuration);
- this.debug = configuration.getDebug();
+ this.debug = this.configuration.getDebug();
this.configured = true;
}
@@ -374,7 +371,7 @@ public class CompilationUnit extends ProcessingUnit {
/**
* Get the GroovyClasses generated by compile().
*/
- public List getClasses() {
+ public List<GroovyClass> getClasses() {
return generatedClasses;
}
@@ -390,8 +387,9 @@ public class CompilationUnit extends ProcessingUnit {
* Convenience routine to get the named ClassNode.
*/
public ClassNode getClassNode(final String name) {
- final ClassNode[] result = new ClassNode[]{null};
+ final ClassNode[] result = new ClassNode[1];
PrimaryClassNodeOperation handler = new PrimaryClassNodeOperation() {
+ @Override
public void call(SourceUnit source, GeneratorContext context, ClassNode classNode) {
if (classNode.getName().equals(name)) {
result[0] = classNode;
@@ -417,7 +415,6 @@ public class CompilationUnit extends ProcessingUnit {
//---------------------------------------------------------------------------
// SOURCE CREATION
-
/**
* Adds a set of file paths to the unit.
*/
@@ -427,7 +424,6 @@ public class CompilationUnit extends ProcessingUnit {
}
}
-
/**
* Adds a set of source files to the unit.
*/
@@ -437,7 +433,6 @@ public class CompilationUnit extends ProcessingUnit {
}
}
-
/**
* Adds a source file to the unit.
*/
@@ -452,7 +447,6 @@ public class CompilationUnit extends ProcessingUnit {
return addSource(new SourceUnit(url, configuration, classLoader, getErrorCollector()));
}
-
/**
* Adds a InputStream source to the unit.
*/
@@ -478,30 +472,28 @@ public class CompilationUnit extends ProcessingUnit {
return source;
}
-
/**
* Returns an iterator on the unit's SourceUnits.
*/
public Iterator<SourceUnit> iterator() {
return new Iterator<SourceUnit>() {
- Iterator<String> nameIterator = names.iterator();
-
+ Iterator<String> nameIterator = sources.keySet().iterator();
+ @Override
public boolean hasNext() {
return nameIterator.hasNext();
}
-
+ @Override
public SourceUnit next() {
String name = nameIterator.next();
return sources.get(name);
}
-
+ @Override
public void remove() {
throw new UnsupportedOperationException();
}
};
}
-
/**
* Adds a ClassNode directly to the unit (ie. without source).
* WARNING: the source is needed for error reporting, using
@@ -517,48 +509,48 @@ public class CompilationUnit extends ProcessingUnit {
//---------------------------------------------------------------------------
// EXTERNAL CALLBACKS
-
/**
* A callback interface you can use to "accompany" the classgen()
* code as it traverses the ClassNode tree. You will be called-back
* for each primary and inner class. Use setClassgenCallback() before
* running compile() to set your callback.
*/
+ // TODO: Convert to functional interface?
public abstract static class ClassgenCallback {
public abstract void call(ClassVisitor writer, ClassNode node) throws CompilationFailedException;
}
/**
* Sets a ClassgenCallback. You can have only one, and setting
- * it to null removes any existing setting.
+ * it to {@code null} removes any existing setting.
*/
public void setClassgenCallback(ClassgenCallback visitor) {
this.classgenCallback = visitor;
}
+ public ClassgenCallback getClassgenCallback() {
+ return classgenCallback;
+ }
+
/**
* A callback interface you can use to get a callback after every
* unit of the compile process. You will be called-back with a
* ProcessingUnit and a phase indicator. Use setProgressCallback()
* before running compile() to set your callback.
*/
+ // TODO: Convert to functional interface?
public abstract static class ProgressCallback {
-
public abstract void call(ProcessingUnit context, int phase) throws CompilationFailedException;
}
/**
* Sets a ProgressCallback. You can have only one, and setting
- * it to null removes any existing setting.
+ * it to {@code null} removes any existing setting.
*/
public void setProgressCallback(ProgressCallback callback) {
this.progressCallback = callback;
}
- public ClassgenCallback getClassgenCallback() {
- return classgenCallback;
- }
-
public ProgressCallback getProgressCallback() {
return progressCallback;
}
@@ -566,7 +558,6 @@ public class CompilationUnit extends ProcessingUnit {
//---------------------------------------------------------------------------
// ACTIONS
-
/**
* Synonym for compile(Phases.ALL).
*/
@@ -632,7 +623,6 @@ public class CompilationUnit extends ProcessingUnit {
recordPhaseOpsInAllOtherPhases(currPhase);
currentPhaseNewOps = newPhaseOperations[currPhase];
}
-
}
private void doPhaseOperation(Object operation) {
@@ -661,7 +651,6 @@ public class CompilationUnit extends ProcessingUnit {
}
}
-
/**
* Dequeues any source units add through addSource and resets the compiler phase
* to initialization.
@@ -677,7 +666,6 @@ public class CompilationUnit extends ProcessingUnit {
while (!queuedSources.isEmpty()) {
SourceUnit su = queuedSources.removeFirst();
String name = su.getName();
- names.add(name);
sources.put(name, su);
}
if (dequeue) {
@@ -756,8 +744,8 @@ public class CompilationUnit extends ProcessingUnit {
List<ClassNode> classes = source.ast.getClasses();
for (ClassNode node : classes) {
CompileUnit cu = node.getCompileUnit();
- for (Iterator iter = cu.iterateClassNodeToCompile(); iter.hasNext();) {
- String name = (String) iter.next();
+ for (Iterator<String> iter = cu.iterateClassNodeToCompile(); iter.hasNext();) {
+ String name = iter.next();
SourceUnit su = ast.getScriptSourceLocation(name);
List<ClassNode> classesInSourceUnit = su.ast.getClasses();
StringBuilder message = new StringBuilder();
@@ -790,17 +778,16 @@ public class CompilationUnit extends ProcessingUnit {
}
};
-
/**
* Runs classgen() on a single ClassNode.
*/
private final PrimaryClassNodeOperation classgen = new PrimaryClassNodeOperation() {
+ @Override
public boolean needSortedInput() {
return true;
}
-
+ @Override
public void call(SourceUnit source, GeneratorContext context, ClassNode classNode) throws CompilationFailedException {
-
optimizer.visitClass(classNode, source); // GROOVY-4272: repositioned it here from staticImport
//
@@ -833,14 +820,12 @@ public class CompilationUnit extends ProcessingUnit {
// Prep the generator machinery
//
ClassVisitor visitor = createClassVisitor();
-
+
String sourceName = (source == null ? classNode.getModule().getDescription() : source.getName());
// only show the file name and its extension like javac does in its stacktraces rather than the full path
// also takes care of both \ and / depending on the host compiling environment
if (sourceName != null)
sourceName = sourceName.substring(Math.max(sourceName.lastIndexOf('\\'), sourceName.lastIndexOf('/')) + 1);
- //TraceClassVisitor tracer = new TraceClassVisitor(visitor, new PrintWriter(System.err,true));
- //AsmClassGenerator generator = new AsmClassGenerator(source, context, tracer, sourceName);
AsmClassGenerator generator = new AsmClassGenerator(source, context, visitor, sourceName);
//
@@ -861,9 +846,9 @@ public class CompilationUnit extends ProcessingUnit {
//
// Recurse for inner classes
//
- LinkedList innerClasses = generator.getInnerClasses();
+ LinkedList<ClassNode> innerClasses = generator.getInnerClasses();
while (!innerClasses.isEmpty()) {
- classgen.call(source, context, (ClassNode) innerClasses.removeFirst());
+ classgen.call(source, context, innerClasses.removeFirst());
}
}
};
@@ -871,8 +856,7 @@ public class CompilationUnit extends ProcessingUnit {
protected ClassVisitor createClassVisitor() {
CompilerConfiguration config = getConfiguration();
int computeMaxStackAndFrames = ClassWriter.COMPUTE_MAXS;
- if (CompilerConfiguration.isPostJDK7(config.getTargetBytecode())
- || Boolean.TRUE.equals(config.getOptimizationOptions().get("indy"))) {
+ if (CompilerConfiguration.isPostJDK7(config.getTargetBytecode()) || config.isIndyEnabled()) {
computeMaxStackAndFrames += ClassWriter.COMPUTE_FRAMES;
}
return new ClassWriter(computeMaxStackAndFrames) {
@@ -900,14 +884,13 @@ public class CompilationUnit extends ProcessingUnit {
}
@Override
protected String getCommonSuperClass(String arg1, String arg2) {
- ClassNode a = getClassNode(arg1.replace('/', '.'));
+ ClassNode a = getClassNode(arg1.replace('/', '.'));
ClassNode b = getClassNode(arg2.replace('/', '.'));
return getCommonSuperClassNode(a,b).getName().replace('.','/');
}
-
};
}
-
+
//---------------------------------------------------------------------------
// PHASE HANDLING
@@ -918,7 +901,6 @@ public class CompilationUnit extends ProcessingUnit {
applyToSourceUnits(mark);
}
-
/**
* Marks a single SourceUnit with the current phase,
* if it isn't already there yet.
@@ -938,7 +920,6 @@ public class CompilationUnit extends ProcessingUnit {
//---------------------------------------------------------------------------
// LOOP SIMPLIFICATION FOR SourceUnit OPERATIONS
-
/**
* An callback interface for use in the applyToSourceUnits loop driver.
*/
@@ -946,14 +927,13 @@ public class CompilationUnit extends ProcessingUnit {
public abstract void call(SourceUnit source) throws CompilationFailedException;
}
-
/**
* A loop driver for applying operations to all SourceUnits.
* Automatically skips units that have already been processed
* through the current phase.
*/
public void applyToSourceUnits(SourceUnitOperation body) throws CompilationFailedException {
- for (String name : names) {
+ for (String name : sources.keySet()) {
SourceUnit source = sources.get(name);
if ((source.phase < phase) || (source.phase == phase && !source.phaseComplete)) {
try {
@@ -971,14 +951,12 @@ public class CompilationUnit extends ProcessingUnit {
}
}
-
getErrorCollector().failIfErrors();
}
//---------------------------------------------------------------------------
// LOOP SIMPLIFICATION FOR PRIMARY ClassNode OPERATIONS
-
/**
* An callback interface for use in the applyToPrimaryClassNodes loop driver.
*/
@@ -1081,7 +1059,7 @@ public class CompilationUnit extends ProcessingUnit {
} catch (CompilationFailedException e) {
// fall through, getErrorReporter().failIfErrors() will trigger
} catch (NullPointerException npe) {
- GroovyBugError gbe = new GroovyBugError("unexpected NullpointerException", npe);
+ GroovyBugError gbe = new GroovyBugError("unexpected NullPointerException", npe);
changeBugText(gbe, context);
throw gbe;
} catch (GroovyBugError e) {
@@ -1144,12 +1122,11 @@ public class CompilationUnit extends ProcessingUnit {
private void changeBugText(GroovyBugError e, SourceUnit context) {
e.setBugText("exception in phase '" + getPhaseDescription() + "' in source unit '" + ((context != null) ? context.getName() : "?") + "' " + e.getBugText());
}
-
+
public ClassNodeResolver getClassNodeResolver() {
return classNodeResolver;
}
-
public void setClassNodeResolver(ClassNodeResolver classNodeResolver) {
this.classNodeResolver = classNodeResolver;
}
diff --git a/src/main/java/org/codehaus/groovy/tools/javac/JavaAwareCompilationUnit.java b/src/main/java/org/codehaus/groovy/tools/javac/JavaAwareCompilationUnit.java
index dccc80d..de646aa 100644
--- a/src/main/java/org/codehaus/groovy/tools/javac/JavaAwareCompilationUnit.java
+++ b/src/main/java/org/codehaus/groovy/tools/javac/JavaAwareCompilationUnit.java
@@ -41,14 +41,18 @@ import java.util.Map;
* Compilation Unit capable of compiling Java source files.
*/
public class JavaAwareCompilationUnit extends CompilationUnit {
- private final List<String> javaSources;
+
private final JavaStubGenerator stubGenerator;
+ private final List<String> javaSources = new LinkedList<String>();
private JavaCompilerFactory compilerFactory = new JavacCompilerFactory();
private final File generationGoal;
private final boolean keepStubs;
- private final CompilerConfiguration configuration;
private final boolean memStubEnabled;
+ public JavaAwareCompilationUnit() {
+ this(null, null, null);
+ }
+
public JavaAwareCompilationUnit(CompilerConfiguration configuration) {
this(configuration, null, null);
}
@@ -60,18 +64,19 @@ public class JavaAwareCompilationUnit extends CompilationUnit {
public JavaAwareCompilationUnit(CompilerConfiguration configuration, GroovyClassLoader groovyClassLoader,
GroovyClassLoader transformClassLoader) {
super(configuration, null, groovyClassLoader, transformClassLoader);
- this.configuration = configuration;
- this.memStubEnabled = configuration.isMemStubEnabled();
- this.javaSources = new LinkedList<String>();
- Map options = configuration.getJointCompilationOptions();
+
+ this.memStubEnabled = this.configuration.isMemStubEnabled();
+ Map<String, Object> options = this.configuration.getJointCompilationOptions();
this.generationGoal = memStubEnabled ? null : (File) options.get("stubDir");
- boolean useJava5 = CompilerConfiguration.isPostJDK5(configuration.getTargetBytecode());
- String encoding = configuration.getSourceEncoding();
+
+ boolean useJava5 = CompilerConfiguration.isPostJDK5(this.configuration.getTargetBytecode());
+ String encoding = this.configuration.getSourceEncoding();
this.stubGenerator = new JavaStubGenerator(generationGoal, false, useJava5, encoding);
this.keepStubs = Boolean.TRUE.equals(options.get("keepStubs"));
addPhaseOperation(new PrimaryClassNodeOperation() {
+ @Override
public void call(SourceUnit source, GeneratorContext context, ClassNode node) throws CompilationFailedException {
if (!javaSources.isEmpty()) {
VariableScopeVisitor scopeVisitor = new VariableScopeVisitor(source);
@@ -83,6 +88,7 @@ public class JavaAwareCompilationUnit extends CompilationUnit {
}
}, Phases.CONVERSION);
addPhaseOperation(new CompilationUnit.PrimaryClassNodeOperation() {
+ @Override
public void call(SourceUnit source, GeneratorContext context, ClassNode classNode) throws CompilationFailedException {
ASTTransformationCollectorCodeVisitor collector =
new ASTTransformationCollectorCodeVisitor(source, JavaAwareCompilationUnit.this.getTransformLoader());
@@ -91,6 +97,7 @@ public class JavaAwareCompilationUnit extends CompilationUnit {
}, Phases.CONVERSION);
addPhaseOperation(new PrimaryClassNodeOperation() {
+ @Override
public void call(SourceUnit source, GeneratorContext context, ClassNode classNode) throws CompilationFailedException {
try {
if (!javaSources.isEmpty()) stubGenerator.generateClass(classNode);
@@ -101,6 +108,7 @@ public class JavaAwareCompilationUnit extends CompilationUnit {
}, Phases.CONVERSION);
}
+ @Override
public void gotoPhase(int phase) throws CompilationFailedException {
super.gotoPhase(phase);
// compile Java and clean up
@@ -109,9 +117,8 @@ public class JavaAwareCompilationUnit extends CompilationUnit {
module.setImportsResolved(false);
}
try {
- this.addJavaCompilationUnits(stubGenerator.getJavaStubCompilationUnitSet()); // add java stubs
-
- JavaCompiler compiler = compilerFactory.createCompiler(getConfiguration());
+ addJavaCompilationUnits(stubGenerator.getJavaStubCompilationUnitSet()); // add java stubs
+ JavaCompiler compiler = compilerFactory.createCompiler(configuration);
compiler.compile(javaSources, this);
} finally {
if (!keepStubs) stubGenerator.clean();
@@ -120,10 +127,11 @@ public class JavaAwareCompilationUnit extends CompilationUnit {
}
}
+ @Override
public void configure(CompilerConfiguration configuration) {
super.configure(configuration);
// GroovyClassLoader should be able to find classes compiled from java sources
- File targetDir = configuration.getTargetDirectory();
+ File targetDir = this.configuration.getTargetDirectory();
if (targetDir != null) {
final String classOutput = targetDir.getAbsolutePath();
getClassLoader().addClasspath(classOutput);
@@ -139,12 +147,14 @@ public class JavaAwareCompilationUnit extends CompilationUnit {
javaSources.add(path);
}
+ @Override
public void addSources(String[] paths) {
for (String path : paths) {
addJavaOrGroovySource(new File(path));
}
}
+ @Override
public void addSources(File[] files) {
for (File file : files) {
addJavaOrGroovySource(file);
@@ -152,10 +162,11 @@ public class JavaAwareCompilationUnit extends CompilationUnit {
}
private void addJavaOrGroovySource(File file) {
- if (file.getName().endsWith(".java"))
+ if (file.getName().endsWith(".java")) {
addJavaSource(file);
- else
+ } else {
addSource(file);
+ }
}
public JavaCompilerFactory getCompilerFactory() {
diff --git a/src/main/java/org/codehaus/groovy/tools/javac/JavaStubCompilationUnit.java b/src/main/java/org/codehaus/groovy/tools/javac/JavaStubCompilationUnit.java
index ea38520..e5aefae 100644
--- a/src/main/java/org/codehaus/groovy/tools/javac/JavaStubCompilationUnit.java
+++ b/src/main/java/org/codehaus/groovy/tools/javac/JavaStubCompilationUnit.java
@@ -37,7 +37,6 @@ import java.util.Map;
* Compilation unit to only generate stubs.
*/
public class JavaStubCompilationUnit extends CompilationUnit {
- private static final String DOT_GROOVY = ".groovy";
private final JavaStubGenerator stubGenerator;
@@ -45,14 +44,13 @@ public class JavaStubCompilationUnit extends CompilationUnit {
public JavaStubCompilationUnit(final CompilerConfiguration config, final GroovyClassLoader gcl, File destDir) {
super(config, null, gcl);
- assert config != null;
- Map options = config.getJointCompilationOptions();
if (destDir == null) {
+ Map<String, Object> options = configuration.getJointCompilationOptions();
destDir = (File) options.get("stubDir");
}
boolean useJava5 = CompilerConfiguration.isPostJDK5(configuration.getTargetBytecode());
- String encoding = configuration.getSourceEncoding();
+ String encoding = configuration.getSourceEncoding();
stubGenerator = new JavaStubGenerator(destDir, false, useJava5, encoding);
addPhaseOperation(new PrimaryClassNodeOperation() {
@@ -94,7 +92,7 @@ public class JavaStubCompilationUnit extends CompilationUnit {
public void configure(final CompilerConfiguration config) {
super.configure(config);
// GroovyClassLoader should be able to find classes compiled from java sources
- File targetDir = config.getTargetDirectory();
+ File targetDir = configuration.getTargetDirectory();
if (targetDir != null) {
final String classOutput = targetDir.getAbsolutePath();
getClassLoader().addClasspath(classOutput);