|
24 | 24 | * SOFTWARE.
|
25 | 25 | */
|
26 | 26 |
|
27 |
| -import org.codehaus.plexus.compiler.AbstractCompiler; |
28 |
| -import org.codehaus.plexus.compiler.Compiler; |
29 |
| -import org.codehaus.plexus.compiler.CompilerConfiguration; |
30 |
| -import org.codehaus.plexus.compiler.CompilerException; |
31 |
| -import org.codehaus.plexus.compiler.CompilerMessage; |
32 |
| -import org.codehaus.plexus.compiler.CompilerOutputStyle; |
33 |
| -import org.codehaus.plexus.compiler.CompilerResult; |
34 |
| -import org.codehaus.plexus.component.annotations.Component; |
35 |
| -import org.codehaus.plexus.util.DirectoryScanner; |
36 |
| -import org.codehaus.plexus.util.StringUtils; |
37 |
| -import org.eclipse.jdt.core.compiler.CompilationProgress; |
38 |
| -import org.eclipse.jdt.core.compiler.batch.BatchCompiler; |
39 |
| - |
40 | 27 | import javax.tools.Diagnostic;
|
41 | 28 | import javax.tools.DiagnosticListener;
|
42 | 29 | import javax.tools.JavaCompiler;
|
43 | 30 | import javax.tools.JavaFileObject;
|
44 | 31 | import javax.tools.StandardJavaFileManager;
|
| 32 | + |
45 | 33 | import java.io.File;
|
46 | 34 | import java.io.PrintWriter;
|
47 | 35 | import java.io.StringWriter;
|
|
56 | 44 | import java.util.ServiceLoader;
|
57 | 45 | import java.util.Set;
|
58 | 46 |
|
| 47 | +import org.codehaus.plexus.compiler.AbstractCompiler; |
| 48 | +import org.codehaus.plexus.compiler.Compiler; |
| 49 | +import org.codehaus.plexus.compiler.CompilerConfiguration; |
| 50 | +import org.codehaus.plexus.compiler.CompilerException; |
| 51 | +import org.codehaus.plexus.compiler.CompilerMessage; |
| 52 | +import org.codehaus.plexus.compiler.CompilerOutputStyle; |
| 53 | +import org.codehaus.plexus.compiler.CompilerResult; |
| 54 | +import org.codehaus.plexus.component.annotations.Component; |
| 55 | +import org.codehaus.plexus.util.DirectoryScanner; |
| 56 | +import org.codehaus.plexus.util.StringUtils; |
| 57 | +import org.eclipse.jdt.core.compiler.CompilationProgress; |
| 58 | +import org.eclipse.jdt.core.compiler.batch.BatchCompiler; |
| 59 | + |
59 | 60 | /**
|
60 | 61 | *
|
61 | 62 | */
|
@@ -206,7 +207,14 @@ public CompilerResult performCompile( CompilerConfiguration config )
|
206 | 207 |
|
207 | 208 | if ( processorPathEntries != null && processorPathEntries.size() > 0 )
|
208 | 209 | {
|
209 |
| - args.add( "-processorpath" ); |
| 210 | + if ( isReplaceProcessorPath( config ) ) |
| 211 | + { |
| 212 | + args.add( "--processor-module-path" ); |
| 213 | + } |
| 214 | + else |
| 215 | + { |
| 216 | + args.add( "-processorpath" ); |
| 217 | + } |
210 | 218 | args.add( getPathString( processorPathEntries ) );
|
211 | 219 | }
|
212 | 220 |
|
@@ -478,6 +486,22 @@ public void worked( int i, int i1 )
|
478 | 486 | }
|
479 | 487 | }
|
480 | 488 |
|
| 489 | + private static final String OPT_REPLACE_PROCESSOR_PATH = "replaceProcessorPathWithProcessorModulePath"; |
| 490 | + private static final String OPT_REPLACE_PROCESSOR_PATH_ = "-" + OPT_REPLACE_PROCESSOR_PATH; |
| 491 | + |
| 492 | + static boolean isReplaceProcessorPath( CompilerConfiguration config ) |
| 493 | + { |
| 494 | + for ( Entry<String, String> entry : config.getCustomCompilerArgumentsEntries() ) |
| 495 | + { |
| 496 | + String opt = entry.getKey(); |
| 497 | + if ( opt.equals( OPT_REPLACE_PROCESSOR_PATH ) || opt.equals( OPT_REPLACE_PROCESSOR_PATH_ ) ) |
| 498 | + { |
| 499 | + return true; |
| 500 | + } |
| 501 | + } |
| 502 | + return false; |
| 503 | + } |
| 504 | + |
481 | 505 | static List<String> resortSourcesToPutModuleInfoFirst( List<String> allSources )
|
482 | 506 | {
|
483 | 507 | ArrayList<String> resorted = new ArrayList<>();
|
@@ -538,46 +562,49 @@ static boolean processCustomArguments( CompilerConfiguration config, List<String
|
538 | 562 | continue;
|
539 | 563 | }
|
540 | 564 |
|
541 |
| - /* |
542 |
| - * The compiler mojo makes quite a mess of passing arguments, depending on exactly WHICH |
543 |
| - * way is used to pass them. The method method using <compilerArguments> uses the tag names |
544 |
| - * of its contents to denote option names, and so the compiler mojo happily adds a '-' to |
545 |
| - * all of the names there and adds them to the "custom compiler arguments" map as a |
546 |
| - * name, value pair where the name always contains a single '-'. The Eclipse compiler (and |
547 |
| - * javac too, btw) has options with two dashes (like --add-modules for java 9). These cannot |
548 |
| - * be passed using a <compilerArguments> tag. |
549 |
| - * |
550 |
| - * The other method is to use <compilerArgs>, where each SINGLE argument needs to be passed |
551 |
| - * using an <arg>xxxx</arg> tag. In there the xxx is not manipulated by the compiler mojo, so |
552 |
| - * if it starts with a dash or more dashes these are perfectly preserved. But of course these |
553 |
| - * single <arg> entries are not a pair. So the compiler mojo adds them as pairs of (xxxx, null). |
554 |
| - * |
555 |
| - * We use that knowledge here: if a pair has a null value then do not mess up the key but |
556 |
| - * render it as a single value. This should ensure that something like: |
557 |
| - * <compilerArgs> |
558 |
| - * <arg>--add-modules</arg> |
559 |
| - * <arg>java.se.ee</arg> |
560 |
| - * </compilerArgs> |
561 |
| - * |
562 |
| - * is actually added to the command like as such. |
563 |
| - * |
564 |
| - * (btw: the above example will still give an error when using ecj <= 4.8M6: |
565 |
| - * invalid module name: java.se.ee |
566 |
| - * but that seems to be a bug in ecj). |
567 |
| - */ |
568 |
| - if ( null == optionValue ) |
569 |
| - { |
570 |
| - //-- We have an option from compilerArgs: use the key as-is as a single option value |
571 |
| - args.add( opt ); |
572 |
| - } |
573 |
| - else |
| 565 | + if ( !opt.equals( OPT_REPLACE_PROCESSOR_PATH ) && !opt.equals( OPT_REPLACE_PROCESSOR_PATH_ ) ) |
574 | 566 | {
|
575 |
| - if ( !opt.startsWith( "-" ) ) |
| 567 | + /* |
| 568 | + * The compiler mojo makes quite a mess of passing arguments, depending on exactly WHICH |
| 569 | + * way is used to pass them. The method method using <compilerArguments> uses the tag names |
| 570 | + * of its contents to denote option names, and so the compiler mojo happily adds a '-' to |
| 571 | + * all of the names there and adds them to the "custom compiler arguments" map as a |
| 572 | + * name, value pair where the name always contains a single '-'. The Eclipse compiler (and |
| 573 | + * javac too, btw) has options with two dashes (like --add-modules for java 9). These cannot |
| 574 | + * be passed using a <compilerArguments> tag. |
| 575 | + * |
| 576 | + * The other method is to use <compilerArgs>, where each SINGLE argument needs to be passed |
| 577 | + * using an <arg>xxxx</arg> tag. In there the xxx is not manipulated by the compiler mojo, so |
| 578 | + * if it starts with a dash or more dashes these are perfectly preserved. But of course these |
| 579 | + * single <arg> entries are not a pair. So the compiler mojo adds them as pairs of (xxxx, null). |
| 580 | + * |
| 581 | + * We use that knowledge here: if a pair has a null value then do not mess up the key but |
| 582 | + * render it as a single value. This should ensure that something like: |
| 583 | + * <compilerArgs> |
| 584 | + * <arg>--add-modules</arg> |
| 585 | + * <arg>java.se.ee</arg> |
| 586 | + * </compilerArgs> |
| 587 | + * |
| 588 | + * is actually added to the command like as such. |
| 589 | + * |
| 590 | + * (btw: the above example will still give an error when using ecj <= 4.8M6: |
| 591 | + * invalid module name: java.se.ee |
| 592 | + * but that seems to be a bug in ecj). |
| 593 | + */ |
| 594 | + if ( null == optionValue ) |
| 595 | + { |
| 596 | + //-- We have an option from compilerArgs: use the key as-is as a single option value |
| 597 | + args.add( opt ); |
| 598 | + } |
| 599 | + else |
576 | 600 | {
|
577 |
| - opt = "-" + opt; |
| 601 | + if ( !opt.startsWith( "-" ) ) |
| 602 | + { |
| 603 | + opt = "-" + opt; |
| 604 | + } |
| 605 | + args.add( opt ); |
| 606 | + args.add( optionValue ); |
578 | 607 | }
|
579 |
| - args.add( opt ); |
580 |
| - args.add( optionValue ); |
581 | 608 | }
|
582 | 609 | }
|
583 | 610 | return result;
|
|
0 commit comments