diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java index 82a7465821d..10f4d609c68 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/main/JavaCompiler.java @@ -1144,18 +1144,21 @@ public class JavaCompiler { if (processors != null && processors.iterator().hasNext()) explicitAnnotationProcessingRequested = true; + // Process annotations if processing is not disabled and there + // is at least one Processor available. if (options.isSet(PROC, "none")) { processAnnotations = false; } else if (procEnvImpl == null) { procEnvImpl = JavacProcessingEnvironment.instance(context); procEnvImpl.setProcessors(processors); - - // Process annotations if processing is requested and there - // is at least one Processor available. - processAnnotations = procEnvImpl.atLeastOneProcessor() && - explicitAnnotationProcessingRequested(); + processAnnotations = procEnvImpl.atLeastOneProcessor(); if (processAnnotations) { + if (!explicitAnnotationProcessingRequested() && + !optionsCheckingInitiallyDisabled) { + log.note(Notes.ImplicitAnnotationProcessing); + } + options.put("parameters", "parameters"); reader.saveParameterNames = true; keepComments = true; @@ -1164,9 +1167,9 @@ public class JavaCompiler { taskListener.started(new TaskEvent(TaskEvent.Kind.ANNOTATION_PROCESSING)); deferredDiagnosticHandler = new Log.DeferredDiagnosticHandler(log); procEnvImpl.getFiler().setInitialState(initialFiles, initialClassNames); + } else { // free resources + procEnvImpl.close(); } - } else { // free resources - procEnvImpl.close(); } } diff --git a/test/langtools/tools/javac/6341866/T6341866.java b/test/langtools/tools/javac/6341866/T6341866.java index c04653ed58d..33df081c6ba 100644 --- a/test/langtools/tools/javac/6341866/T6341866.java +++ b/test/langtools/tools/javac/6341866/T6341866.java @@ -67,6 +67,7 @@ public class T6341866 { enum AnnoType { NONE, // no annotation processing + SERVICE, // implicit annotation processing, via ServiceLoader SPECIFY // explicit annotation processing }; @@ -98,14 +99,14 @@ public class T6341866 { processorServices.delete(); List<String> opts = new ArrayList<String>(); - opts.addAll(Arrays.asList("-d", ".", - "-sourcepath", testSrc, - "-classpath", testClasses, - "-proc:full")); + opts.addAll(Arrays.asList("-d", ".", "-sourcepath", testSrc, "-classpath", testClasses, "-Xlint:-options")); if (implicitType.opt != null) opts.add(implicitType.opt); switch (annoType) { + case SERVICE: + createProcessorServices(Anno.class.getName()); + break; case SPECIFY: opts.addAll(Arrays.asList("-processor", Anno.class.getName())); break; @@ -144,6 +145,9 @@ public class T6341866 { String expectKey = null; if (implicitType == ImplicitType.OPT_UNSET) { switch (annoType) { + case SERVICE: + expectKey = "compiler.warn.proc.use.proc.or.implicit"; + break; case SPECIFY: expectKey = "compiler.warn.proc.use.implicit"; break; diff --git a/test/langtools/tools/javac/diags/examples.not-yet.txt b/test/langtools/tools/javac/diags/examples.not-yet.txt index a9ba23fa374..716301a913f 100644 --- a/test/langtools/tools/javac/diags/examples.not-yet.txt +++ b/test/langtools/tools/javac/diags/examples.not-yet.txt @@ -217,7 +217,3 @@ compiler.err.annotation.unrecognized.attribute.name # this one is transitional (waiting for FFM API to exit preview) compiler.warn.restricted.method - -# Pending removal -compiler.note.implicit.annotation.processing -compiler.warn.proc.use.proc.or.implicit diff --git a/test/langtools/tools/javac/diags/examples/ProcUseProcOrImplicit/ProcUseProcOrImplicit.java b/test/langtools/tools/javac/diags/examples/ProcUseProcOrImplicit/ProcUseProcOrImplicit.java index 6d9d9a70ee9..3a697d40cf8 100644 --- a/test/langtools/tools/javac/diags/examples/ProcUseProcOrImplicit/ProcUseProcOrImplicit.java +++ b/test/langtools/tools/javac/diags/examples/ProcUseProcOrImplicit/ProcUseProcOrImplicit.java @@ -21,6 +21,8 @@ * questions. */ +// key: compiler.warn.proc.use.proc.or.implicit +// key: compiler.note.implicit.annotation.processing // options: -Xprefer:source import p.SomeClass; diff --git a/test/langtools/tools/javac/processing/options/TestNoteOnImplicitProcessing.java b/test/langtools/tools/javac/processing/options/TestNoteOnImplicitProcessing.java index 9d23707c618..81efbce05aa 100644 --- a/test/langtools/tools/javac/processing/options/TestNoteOnImplicitProcessing.java +++ b/test/langtools/tools/javac/processing/options/TestNoteOnImplicitProcessing.java @@ -23,8 +23,8 @@ /* * @test - * @bug 8310061 8315534 8306819 - * @summary Verify behavior around implicit annotation processing + * @bug 8310061 8315534 + * @summary Verify a note is issued for implicit annotation processing * * @library /tools/lib /tools/javac/lib * @modules @@ -59,27 +59,19 @@ import toolbox.ToolBox; import toolbox.JarTask; /* - * Does not generates a note and the processor does not run: + * Generates note and the processor runs: * $ javac -cp ImplicitProcTestProc.jar HelloWorldTest.java * - * Does _not_ generate a note and the processor does run: + * Does _not_ generate a note and the processor runs: * $ javac -processorpath ImplicitProcTestProc.jar HelloWorldTest.java * $ javac -cp ImplicitProcTestProc.jar -processor ImplicitProcTestProc.jar HelloWorldTest.java * $ javac -cp ImplicitProcTestProc.jar -proc:full HelloWorldTest.java * $ javac -cp ImplicitProcTestProc.jar -proc:only HelloWorldTest.java - * - * Does _not_ generate a note and the processor does _not_run: * $ javac -cp ImplicitProcTestProc.jar -Xlint:-options HelloWorldTest.java * $ javac -cp ImplicitProcTestProc.jar -Xlint:none HelloWorldTest.java * * Does _not_ generate a note and the processor _doesn't_ run. * $ javac -cp ImplicitProcTestProc.jar -proc:none HelloWorldTest.java - * - * (Previously, annotation processing was implicitly enabled and the - * the class path was searched for processors. This test was - * originally written to probe around a note warning of a potential - * future policy change to disable such implicit processing, a policy - * change now implemented and this test has been updated accordingly.) */ public class TestNoteOnImplicitProcessing extends TestRunner { @@ -173,8 +165,8 @@ public class TestNoteOnImplicitProcessing extends TestRunner { .run(Expect.SUCCESS) .writeAll(); - checkForProcessorMessage(javacResult, false); - checkForCompilerNote(javacResult, false); + checkForProcessorMessage(javacResult, true); + checkForCompilerNote(javacResult, true); } @Test @@ -247,7 +239,7 @@ public class TestNoteOnImplicitProcessing extends TestRunner { .run(Expect.SUCCESS) .writeAll(); - checkForProcessorMessage(javacResult, false); + checkForProcessorMessage(javacResult, true); checkForCompilerNote(javacResult, false); } @@ -262,7 +254,7 @@ public class TestNoteOnImplicitProcessing extends TestRunner { .run(Expect.SUCCESS) .writeAll(); - checkForProcessorMessage(javacResult, false); + checkForProcessorMessage(javacResult, true); checkForCompilerNote(javacResult, false); } @@ -325,7 +317,7 @@ public class TestNoteOnImplicitProcessing extends TestRunner { task.call(); - verifyMessages(out, compilerOut, false, false); + verifyMessages(out, compilerOut, true); } { @@ -337,7 +329,7 @@ public class TestNoteOnImplicitProcessing extends TestRunner { task.setProcessors(List.of(processor)); task.call(); - verifyMessages(out, compilerOut, false, true); + verifyMessages(out, compilerOut, false); } { @@ -347,7 +339,7 @@ public class TestNoteOnImplicitProcessing extends TestRunner { task.analyze(); - verifyMessages(out, compilerOut, false, false); + verifyMessages(out, compilerOut, true); } { @@ -361,21 +353,16 @@ public class TestNoteOnImplicitProcessing extends TestRunner { task.setProcessors(List.of(processor)); task.analyze(); - verifyMessages(out, compilerOut, false, true); + verifyMessages(out, compilerOut, false); } } finally { System.setOut(oldOut); } } - private void verifyMessages(ByteArrayOutputStream out, StringWriter compilerOut, boolean expectedNotePresent, - boolean processorRunExpected) { - boolean processorRun = out.toString(StandardCharsets.UTF_8).contains("ImplicitProcTestProc run"); - - if (processorRun != processorRunExpected) { - throw new RuntimeException(processorRunExpected ? - "Expected processor message not printed" : - "Unexpected processor message printed"); + private void verifyMessages(ByteArrayOutputStream out, StringWriter compilerOut, boolean expectedNotePresent) { + if (!out.toString(StandardCharsets.UTF_8).contains("ImplicitProcTestProc run")) { + throw new RuntimeException("Expected processor message not printed"); } out.reset();