34 import java.util.*; |
34 import java.util.*; |
35 import java.util.regex.*; |
35 import java.util.regex.*; |
36 |
36 |
37 import javax.annotation.processing.*; |
37 import javax.annotation.processing.*; |
38 import javax.lang.model.SourceVersion; |
38 import javax.lang.model.SourceVersion; |
39 import javax.lang.model.element.AnnotationMirror; |
39 import javax.lang.model.element.*; |
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.*; |
40 import javax.lang.model.util.*; |
44 import javax.tools.DiagnosticListener; |
41 import javax.tools.DiagnosticListener; |
45 import javax.tools.JavaFileManager; |
42 import javax.tools.JavaFileManager; |
46 import javax.tools.JavaFileObject; |
43 import javax.tools.JavaFileObject; |
47 import javax.tools.StandardJavaFileManager; |
44 import javax.tools.StandardJavaFileManager; |
760 // Don't scan enclosed elements of a package |
757 // Don't scan enclosed elements of a package |
761 return p; |
758 return p; |
762 } |
759 } |
763 |
760 |
764 @Override |
761 @Override |
765 public Set<TypeElement> scan(Element e, Set<TypeElement> p) { |
762 public Set<TypeElement> visitType(TypeElement e, Set<TypeElement> p) { |
|
763 // Type parameters are not considered to be enclosed by a type |
|
764 scan(e.getTypeParameters(), p); |
|
765 return scan(e.getEnclosedElements(), p); |
|
766 } |
|
767 |
|
768 @Override |
|
769 public Set<TypeElement> visitExecutable(ExecutableElement e, Set<TypeElement> p) { |
|
770 // Type parameters are not considered to be enclosed by an executable |
|
771 scan(e.getTypeParameters(), p); |
|
772 return scan(e.getEnclosedElements(), p); |
|
773 } |
|
774 |
|
775 void addAnnotations(Element e, Set<TypeElement> p) { |
766 for (AnnotationMirror annotationMirror : |
776 for (AnnotationMirror annotationMirror : |
767 elements.getAllAnnotationMirrors(e) ) { |
777 elements.getAllAnnotationMirrors(e) ) { |
768 Element e2 = annotationMirror.getAnnotationType().asElement(); |
778 Element e2 = annotationMirror.getAnnotationType().asElement(); |
769 p.add((TypeElement) e2); |
779 p.add((TypeElement) e2); |
770 } |
780 } |
|
781 } |
|
782 |
|
783 @Override |
|
784 public Set<TypeElement> scan(Element e, Set<TypeElement> p) { |
|
785 addAnnotations(e, p); |
771 return super.scan(e, p); |
786 return super.scan(e, p); |
772 } |
787 } |
773 } |
788 } |
774 |
789 |
775 private boolean callProcessor(Processor proc, |
790 private boolean callProcessor(Processor proc, |