src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java

Print this page




  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package com.sun.tools.javac.processing;
  27 
  28 import java.io.Closeable;
  29 import java.io.File;
  30 import java.io.PrintWriter;
  31 import java.io.StringWriter;
  32 import java.net.MalformedURLException;
  33 import java.net.URL;
  34 import java.util.*;
  35 import java.util.regex.*;
  36 
  37 import javax.annotation.processing.*;
  38 import javax.lang.model.SourceVersion;
  39 import javax.lang.model.element.AnnotationMirror;
  40 import javax.lang.model.element.Element;
  41 import javax.lang.model.element.PackageElement;
  42 import javax.lang.model.element.TypeElement;
  43 import javax.lang.model.util.*;
  44 import javax.tools.DiagnosticListener;
  45 import javax.tools.JavaFileManager;
  46 import javax.tools.JavaFileObject;
  47 import javax.tools.StandardJavaFileManager;
  48 import static javax.tools.StandardLocation.*;
  49 
  50 import com.sun.source.util.JavacTask;
  51 import com.sun.source.util.TaskEvent;
  52 import com.sun.tools.javac.api.BasicJavacTask;
  53 import com.sun.tools.javac.api.JavacTrees;
  54 import com.sun.tools.javac.api.MultiTaskListener;
  55 import com.sun.tools.javac.code.*;
  56 import com.sun.tools.javac.code.Symbol.*;
  57 import com.sun.tools.javac.file.FSInfo;
  58 import com.sun.tools.javac.file.JavacFileManager;
  59 import com.sun.tools.javac.jvm.*;
  60 import com.sun.tools.javac.jvm.ClassReader.BadClassFile;
  61 import com.sun.tools.javac.main.JavaCompiler;
  62 import com.sun.tools.javac.main.JavaCompiler.CompileState;


 743     /**
 744      * Computes the set of annotations on the symbol in question.
 745      * Leave class public for external testing purposes.
 746      */
 747     public static class ComputeAnnotationSet extends
 748         ElementScanner8<Set<TypeElement>, Set<TypeElement>> {
 749         final Elements elements;
 750 
 751         public ComputeAnnotationSet(Elements elements) {
 752             super();
 753             this.elements = elements;
 754         }
 755 
 756         @Override
 757         public Set<TypeElement> visitPackage(PackageElement e, Set<TypeElement> p) {
 758             // Don't scan enclosed elements of a package
 759             return p;
 760         }
 761 
 762         @Override
 763         public Set<TypeElement> scan(Element e, Set<TypeElement> p) {













 764             for (AnnotationMirror annotationMirror :
 765                      elements.getAllAnnotationMirrors(e) ) {
 766                 Element e2 = annotationMirror.getAnnotationType().asElement();
 767                 p.add((TypeElement) e2);
 768             }





 769             return super.scan(e, p);
 770         }
 771     }
 772 
 773     private boolean callProcessor(Processor proc,
 774                                          Set<? extends TypeElement> tes,
 775                                          RoundEnvironment renv) {
 776         try {
 777             return proc.process(tes, renv);
 778         } catch (BadClassFile ex) {
 779             log.error("proc.cant.access.1", ex.sym, ex.getDetailValue());
 780             return false;
 781         } catch (CompletionFailure ex) {
 782             StringWriter out = new StringWriter();
 783             ex.printStackTrace(new PrintWriter(out));
 784             log.error("proc.cant.access", ex.sym, ex.getDetailValue(), out.toString());
 785             return false;
 786         } catch (ClientCodeException e) {
 787             throw e;
 788         } catch (Throwable t) {




  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package com.sun.tools.javac.processing;
  27 
  28 import java.io.Closeable;
  29 import java.io.File;
  30 import java.io.PrintWriter;
  31 import java.io.StringWriter;
  32 import java.net.MalformedURLException;
  33 import java.net.URL;
  34 import java.util.*;
  35 import java.util.regex.*;
  36 
  37 import javax.annotation.processing.*;
  38 import javax.lang.model.SourceVersion;
  39 import javax.lang.model.element.*;



  40 import javax.lang.model.util.*;
  41 import javax.tools.DiagnosticListener;
  42 import javax.tools.JavaFileManager;
  43 import javax.tools.JavaFileObject;
  44 import javax.tools.StandardJavaFileManager;
  45 import static javax.tools.StandardLocation.*;
  46 
  47 import com.sun.source.util.JavacTask;
  48 import com.sun.source.util.TaskEvent;
  49 import com.sun.tools.javac.api.BasicJavacTask;
  50 import com.sun.tools.javac.api.JavacTrees;
  51 import com.sun.tools.javac.api.MultiTaskListener;
  52 import com.sun.tools.javac.code.*;
  53 import com.sun.tools.javac.code.Symbol.*;
  54 import com.sun.tools.javac.file.FSInfo;
  55 import com.sun.tools.javac.file.JavacFileManager;
  56 import com.sun.tools.javac.jvm.*;
  57 import com.sun.tools.javac.jvm.ClassReader.BadClassFile;
  58 import com.sun.tools.javac.main.JavaCompiler;
  59 import com.sun.tools.javac.main.JavaCompiler.CompileState;


 740     /**
 741      * Computes the set of annotations on the symbol in question.
 742      * Leave class public for external testing purposes.
 743      */
 744     public static class ComputeAnnotationSet extends
 745         ElementScanner8<Set<TypeElement>, Set<TypeElement>> {
 746         final Elements elements;
 747 
 748         public ComputeAnnotationSet(Elements elements) {
 749             super();
 750             this.elements = elements;
 751         }
 752 
 753         @Override
 754         public Set<TypeElement> visitPackage(PackageElement e, Set<TypeElement> p) {
 755             // Don't scan enclosed elements of a package
 756             return p;
 757         }
 758 
 759          @Override
 760          public Set<TypeElement> visitType(TypeElement e, Set<TypeElement> p) {
 761              // Type parameters are not considered to be enclosed by a type
 762              scan(e.getTypeParameters(), p);
 763              return scan(e.getEnclosedElements(), p);
 764          }
 765 
 766          @Override
 767          public Set<TypeElement> visitExecutable(ExecutableElement e, Set<TypeElement> p) {
 768              // Type parameters are not considered to be enclosed by an executable
 769              scan(e.getTypeParameters(), p);
 770              return scan(e.getEnclosedElements(), p);
 771          }
 772 
 773         void addAnnotations(Element e, Set<TypeElement> p) {
 774             for (AnnotationMirror annotationMirror :
 775                      elements.getAllAnnotationMirrors(e) ) {
 776                 Element e2 = annotationMirror.getAnnotationType().asElement();
 777                 p.add((TypeElement) e2);
 778             }
 779         }
 780 
 781         @Override
 782         public Set<TypeElement> scan(Element e, Set<TypeElement> p) {
 783             addAnnotations(e, p);
 784             return super.scan(e, p);
 785         }
 786     }
 787 
 788     private boolean callProcessor(Processor proc,
 789                                          Set<? extends TypeElement> tes,
 790                                          RoundEnvironment renv) {
 791         try {
 792             return proc.process(tes, renv);
 793         } catch (BadClassFile ex) {
 794             log.error("proc.cant.access.1", ex.sym, ex.getDetailValue());
 795             return false;
 796         } catch (CompletionFailure ex) {
 797             StringWriter out = new StringWriter();
 798             ex.printStackTrace(new PrintWriter(out));
 799             log.error("proc.cant.access", ex.sym, ex.getDetailValue(), out.toString());
 800             return false;
 801         } catch (ClientCodeException e) {
 802             throw e;
 803         } catch (Throwable t) {