Skip to content

Commit 1e3835f

Browse files
fjalvingholamy
authored andcommitted
Try to add annotation processing to Eclipse compiler. This fails because the plugin uses an internal Eclipse API 8-(.
1 parent 84e41c9 commit 1e3835f

File tree

1 file changed

+64
-1
lines changed

1 file changed

+64
-1
lines changed

plexus-compilers/plexus-compiler-eclipse/src/main/java/org/codehaus/plexus/compiler/eclipse/EclipseJavaCompiler.java

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,16 @@
3434
import org.codehaus.plexus.util.IOUtil;
3535
import org.codehaus.plexus.util.StringUtils;
3636
import org.eclipse.jdt.core.compiler.IProblem;
37+
import org.eclipse.jdt.core.compiler.batch.BatchCompiler;
3738
import org.eclipse.jdt.internal.compiler.ClassFile;
3839
import org.eclipse.jdt.internal.compiler.CompilationResult;
3940
import org.eclipse.jdt.internal.compiler.Compiler;
4041
import org.eclipse.jdt.internal.compiler.DefaultErrorHandlingPolicies;
4142
import org.eclipse.jdt.internal.compiler.ICompilerRequestor;
4243
import org.eclipse.jdt.internal.compiler.IErrorHandlingPolicy;
4344
import org.eclipse.jdt.internal.compiler.IProblemFactory;
45+
import org.eclipse.jdt.internal.compiler.apt.dispatch.BatchAnnotationProcessorManager;
46+
import org.eclipse.jdt.internal.compiler.batch.CompilationUnit;
4447
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader;
4548
import org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException;
4649
import org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
@@ -62,10 +65,10 @@
6265
import java.util.ArrayList;
6366
import java.util.HashMap;
6467
import java.util.Iterator;
68+
import java.util.LinkedHashMap;
6569
import java.util.LinkedList;
6670
import java.util.List;
6771
import java.util.Locale;
68-
import java.util.LinkedHashMap;
6972
import java.util.Map;
7073
import java.util.Properties;
7174
import java.util.Set;
@@ -231,6 +234,55 @@ public CompilerResult performCompile( CompilerConfiguration config )
231234
CompilerOptions options = new CompilerOptions( settings );
232235
Compiler compiler = new Compiler( env, policy, options, requestor, problemFactory );
233236

237+
// Annotation processors defined?
238+
if ( !isPreJava16( config ) )
239+
{
240+
//now add jdk 1.6 annotation processing related parameters
241+
242+
243+
String[] annotationProcessors = config.getAnnotationProcessors();
244+
List<String> processorPathEntries = config.getProcessorPathEntries();
245+
if((annotationProcessors != null && annotationProcessors.length > 0) || (processorPathEntries != null && processorPathEntries.size() > 0))
246+
{
247+
List<String> args = new ArrayList<>();
248+
if (annotationProcessors != null && annotationProcessors.length > 0) {
249+
args.add("-processor");
250+
StringBuilder sb = new StringBuilder();
251+
for(String ap : annotationProcessors) {
252+
if(sb.length() > 0)
253+
sb.append(',');
254+
sb.append(ap);
255+
}
256+
args.add(sb.toString());
257+
}
258+
259+
if(processorPathEntries != null && processorPathEntries.size() > 0) {
260+
args.add("-processorpath");
261+
args.add(getPathString(processorPathEntries));
262+
}
263+
264+
File generatedSourcesDir = config.getGeneratedSourcesDirectory();
265+
if ( generatedSourcesDir != null )
266+
{
267+
generatedSourcesDir.mkdirs();
268+
269+
//args.add( "-s" );
270+
//args.add( generatedSourcesDir.getAbsolutePath() );
271+
}
272+
if ( config.getProc() != null )
273+
{
274+
args.add("-proc:" + config.getProc());
275+
}
276+
277+
BatchAnnotationProcessorManager bapm = new BatchAnnotationProcessorManager();
278+
bapm.configure(compiler, args.toArray(new String[args.size()]));
279+
compiler.annotationProcessorManager = bapm;
280+
}
281+
}
282+
283+
BatchCompiler bc = BatchCompiler.
284+
285+
234286
ICompilationUnit[] units = compilationUnits.toArray( new ICompilationUnit[compilationUnits.size()] );
235287

236288
compiler.compile( units );
@@ -249,6 +301,17 @@ public CompilerResult performCompile( CompilerConfiguration config )
249301
return compilerResult;
250302
}
251303

304+
private boolean isPreJava16(CompilerConfiguration config) {
305+
String s = config.getSourceVersion();
306+
if ( s == null )
307+
{
308+
//now return true, as the 1.6 version is not the default - 1.4 is.
309+
return true;
310+
}
311+
return s.startsWith( "1.5" ) || s.startsWith( "1.4" ) || s.startsWith( "1.3" ) || s.startsWith( "1.2" )
312+
|| s.startsWith( "1.1" ) || s.startsWith( "1.0" );
313+
}
314+
252315
// The compiler mojo adds a dash to all keys which does not make sense for the eclipse compiler
253316
Map<String, String> cleanKeyNames( Map<String, String> customCompilerArgumentsAsMap )
254317
{

0 commit comments

Comments
 (0)