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) {
|