langtools/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java
--- a/langtools/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Mon Jul 01 14:57:03 2013 +0100
+++ b/langtools/src/share/classes/com/sun/tools/javac/processing/JavacProcessingEnvironment.java Mon Jul 01 11:58:45 2013 -0700
@@ -36,10 +36,7 @@
import javax.annotation.processing.*;
import javax.lang.model.SourceVersion;
-import javax.lang.model.element.AnnotationMirror;
-import javax.lang.model.element.Element;
-import javax.lang.model.element.PackageElement;
-import javax.lang.model.element.TypeElement;
+import javax.lang.model.element.*;
import javax.lang.model.util.*;
import javax.tools.DiagnosticListener;
import javax.tools.JavaFileManager;
@@ -762,12 +759,30 @@
}
@Override
- public Set<TypeElement> scan(Element e, Set<TypeElement> p) {
+ public Set<TypeElement> visitType(TypeElement e, Set<TypeElement> p) {
+ // Type parameters are not considered to be enclosed by a type
+ scan(e.getTypeParameters(), p);
+ return scan(e.getEnclosedElements(), p);
+ }
+
+ @Override
+ public Set<TypeElement> visitExecutable(ExecutableElement e, Set<TypeElement> p) {
+ // Type parameters are not considered to be enclosed by an executable
+ scan(e.getTypeParameters(), p);
+ return scan(e.getEnclosedElements(), p);
+ }
+
+ void addAnnotations(Element e, Set<TypeElement> p) {
for (AnnotationMirror annotationMirror :
elements.getAllAnnotationMirrors(e) ) {
Element e2 = annotationMirror.getAnnotationType().asElement();
p.add((TypeElement) e2);
}
+ }
+
+ @Override
+ public Set<TypeElement> scan(Element e, Set<TypeElement> p) {
+ addAnnotations(e, p);
return super.scan(e, p);
}
}