From 79f49983d3597e8ab1ffb30b23ce41ae5f298c4e Mon Sep 17 00:00:00 2001 From: Joe Darcy Date: Thu, 30 May 2024 19:57:21 +0000 Subject: [PATCH] 8321314: Reinstate disabling the compiler's default active annotation processing Reviewed-by: vromero --- .../sun/tools/javac/main/JavaCompiler.java | 17 +++----- .../tools/javac/6341866/T6341866.java | 12 ++---- .../tools/javac/diags/examples.not-yet.txt | 4 ++ .../ProcUseProcOrImplicit.java | 2 - .../options/TestNoteOnImplicitProcessing.java | 43 ++++++++++++------- 5 files changed, 43 insertions(+), 35 deletions(-) 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 9d5def3f78133..a12271c790419 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 @@ -1142,21 +1142,18 @@ public void initProcessAnnotations(Iterable processors, 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); - processAnnotations = procEnvImpl.atLeastOneProcessor(); - if (processAnnotations) { - if (!explicitAnnotationProcessingRequested() && - !optionsCheckingInitiallyDisabled) { - log.note(Notes.ImplicitAnnotationProcessing); - } + // Process annotations if processing is requested and there + // is at least one Processor available. + processAnnotations = procEnvImpl.atLeastOneProcessor() && + explicitAnnotationProcessingRequested(); + if (processAnnotations) { options.put("parameters", "parameters"); reader.saveParameterNames = true; keepComments = true; @@ -1165,9 +1162,9 @@ public void initProcessAnnotations(Iterable processors, 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 33df081c6ba76..c04653ed58d0c 100644 --- a/test/langtools/tools/javac/6341866/T6341866.java +++ b/test/langtools/tools/javac/6341866/T6341866.java @@ -67,7 +67,6 @@ enum ImplicitType { enum AnnoType { NONE, // no annotation processing - SERVICE, // implicit annotation processing, via ServiceLoader SPECIFY // explicit annotation processing }; @@ -99,14 +98,14 @@ static boolean test(ImplicitType implicitType, AnnoType annoType) throws IOExcep processorServices.delete(); List opts = new ArrayList(); - opts.addAll(Arrays.asList("-d", ".", "-sourcepath", testSrc, "-classpath", testClasses, "-Xlint:-options")); + opts.addAll(Arrays.asList("-d", ".", + "-sourcepath", testSrc, + "-classpath", testClasses, + "-proc:full")); 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; @@ -145,9 +144,6 @@ static boolean test(ImplicitType implicitType, AnnoType annoType) throws IOExcep 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 c1c0a0fc9acb5..9a447927761e8 100644 --- a/test/langtools/tools/javac/diags/examples.not-yet.txt +++ b/test/langtools/tools/javac/diags/examples.not-yet.txt @@ -216,3 +216,7 @@ 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 3a697d40cf838..6d9d9a70ee919 100644 --- a/test/langtools/tools/javac/diags/examples/ProcUseProcOrImplicit/ProcUseProcOrImplicit.java +++ b/test/langtools/tools/javac/diags/examples/ProcUseProcOrImplicit/ProcUseProcOrImplicit.java @@ -21,8 +21,6 @@ * 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 81efbce05aa20..9d23707c61890 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 - * @summary Verify a note is issued for implicit annotation processing + * @bug 8310061 8315534 8306819 + * @summary Verify behavior around implicit annotation processing * * @library /tools/lib /tools/javac/lib * @modules @@ -59,19 +59,27 @@ import toolbox.JarTask; /* - * Generates note and the processor runs: + * Does not generates a note and the processor does not run: * $ javac -cp ImplicitProcTestProc.jar HelloWorldTest.java * - * Does _not_ generate a note and the processor runs: + * Does _not_ generate a note and the processor does run: * $ 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 { @@ -165,8 +173,8 @@ public void generateWarning(Path base, Path jarFile) { .run(Expect.SUCCESS) .writeAll(); - checkForProcessorMessage(javacResult, true); - checkForCompilerNote(javacResult, true); + checkForProcessorMessage(javacResult, false); + checkForCompilerNote(javacResult, false); } @Test @@ -239,7 +247,7 @@ public void lintOptions(Path base, Path jarFile) { .run(Expect.SUCCESS) .writeAll(); - checkForProcessorMessage(javacResult, true); + checkForProcessorMessage(javacResult, false); checkForCompilerNote(javacResult, false); } @@ -254,7 +262,7 @@ public void lintNone(Path base, Path jarFile) { .run(Expect.SUCCESS) .writeAll(); - checkForProcessorMessage(javacResult, true); + checkForProcessorMessage(javacResult, false); checkForCompilerNote(javacResult, false); } @@ -317,7 +325,7 @@ public void processorsViaAPI(Path base, Path jarFile) throws Exception { task.call(); - verifyMessages(out, compilerOut, true); + verifyMessages(out, compilerOut, false, false); } { @@ -329,7 +337,7 @@ public void processorsViaAPI(Path base, Path jarFile) throws Exception { task.setProcessors(List.of(processor)); task.call(); - verifyMessages(out, compilerOut, false); + verifyMessages(out, compilerOut, false, true); } { @@ -339,7 +347,7 @@ public void processorsViaAPI(Path base, Path jarFile) throws Exception { task.analyze(); - verifyMessages(out, compilerOut, true); + verifyMessages(out, compilerOut, false, false); } { @@ -353,16 +361,21 @@ public void processorsViaAPI(Path base, Path jarFile) throws Exception { task.setProcessors(List.of(processor)); task.analyze(); - verifyMessages(out, compilerOut, false); + verifyMessages(out, compilerOut, false, true); } } finally { System.setOut(oldOut); } } - 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"); + 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"); } out.reset();