annotation processor problems since 9b70

Victor Rudometov Victor.Rudometov at oracle.com
Thu Jul 2 16:05:26 UTC 2015


Hello.
Recent changes in jdk9b70 to annotation processor (probably 
https://jbs.oracle.com/bugs/browse/JDK-8074346) made impossible to 
process the code with types that are not declared.

F.e.:

public class ThrowsException {
     public void method() throws @Annot SomeException {}
}

Is not processed because of Annot and SomeException.

I did not have this problem with b69 - errors are reported, however the 
annotation processing is performed.

Was it done intentionally or this is a regression?
Are there any workarounds?

Below is a simple test code:

import  javax.annotation.processing.AbstractProcessor;
importjavax.annotation.processing.RoundEnvironment;
importjavax.annotation.processing.SupportedAnnotationTypes;
importjavax.annotation.processing.SupportedSourceVersion;
importjavax.lang.model.element.TypeElement;
importjavax.tools.*;
importjava.io.CharArrayWriter;
importjava.io.File;
importjava.io.IOException;
importjava.net.URISyntaxException;
importjava.net.URL;
importjava.util.*;

import staticjavax.lang.model.SourceVersion.RELEASE_9;

public classTest {
     privateList<File>sources;

     public static voidmain(String args[])throwsURISyntaxException {
         newTest().run();
     }

     public voidrun() {
         createSources().addFileToSources("c:\\data\\ThrowsException.java");

         DiagnosticCollector<JavaFileObject> diagnostics =newDiagnosticCollector<>();;
         JavaCompiler javac = ToolProvider.getSystemJavaCompiler();
         StandardJavaFileManager fileManager =
                 javac.getStandardFileManager(null,null,null);
         Iterable<?extendsJavaFileObject> compilationUnits =
                 fileManager.getJavaFileObjectsFromFiles(sources);
         CharArrayWriter errorWriter =newCharArrayWriter();
         List<String> compilerOptions = Arrays.asList(
                 "-proc:only -Xmaxerrs 0 -Xmaxwarns 0".split("\\s+"));
         JavaCompiler.CompilationTask task = javac.getTask(errorWriter,
                 fileManager, diagnostics, compilerOptions,null, compilationUnits);

         MyProcessor processor =newMyProcessor();
         task.setProcessors(Arrays.asList(processor));

         task.call();

         System.out.println(processor.wasInvoked());

         for(Diagnostic diagnostic : diagnostics.getDiagnostics())
             System.out.format("Error on line %d in %s%n : %s",
                     diagnostic.getLineNumber(),
                     diagnostic.getSource().toString(),
                     diagnostic.getMessage(Locale.US));

         try{
             fileManager.close();
         }catch(IOException e) {
             e.printStackTrace();
         }
     }

     @SupportedAnnotationTypes({"*"})
     @SupportedSourceVersion(RELEASE_9)
     public static classMyProcessorextendsAbstractProcessor  {

         private booleaninvoked=false;

         @Override
         public booleanprocess(Set<?extendsTypeElement> annotations, RoundEnvironment roundEnv) {
             invoked=true;
             return false;
         }

         public booleanwasInvoked() {
             returninvoked;
         }
     }

     privateTest createSources() {
         sources=newArrayList<>();
         return this;
     }

     privateTest addFileToSources(String path) {
         sources.add(newFile(path));
         return this;
     }
}



Thanks.
Victor.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20150702/25472118/attachment.html>


More information about the compiler-dev mailing list