langtools/src/share/classes/com/sun/tools/javac/code/TypeAnnotations.java
changeset 21018 95d225149128
parent 21010 5ffe0d8a5e24
child 21040 3e32f68d2151
--- a/langtools/src/share/classes/com/sun/tools/javac/code/TypeAnnotations.java	Mon Oct 14 12:38:09 2013 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/code/TypeAnnotations.java	Mon Oct 14 22:11:09 2013 +0200
@@ -50,6 +50,7 @@
 import com.sun.tools.javac.code.Symbol.MethodSymbol;
 import com.sun.tools.javac.comp.Annotate;
 import com.sun.tools.javac.comp.Annotate.Annotator;
+import com.sun.tools.javac.comp.Attr;
 import com.sun.tools.javac.comp.AttrContext;
 import com.sun.tools.javac.comp.Env;
 import com.sun.tools.javac.tree.JCTree;
@@ -95,6 +96,7 @@
     final Names names;
     final Symtab syms;
     final Annotate annotate;
+    final Attr attr;
     private final boolean typeAnnoAsserts;
 
     protected TypeAnnotations(Context context) {
@@ -103,6 +105,7 @@
         log = Log.instance(context);
         syms = Symtab.instance(context);
         annotate = Annotate.instance(context);
+        attr = Attr.instance(context);
         Options options = Options.instance(context);
         typeAnnoAsserts = options.isSet("TypeAnnotationAsserts");
     }
@@ -131,6 +134,21 @@
         } );
     }
 
+    public void validateTypeAnnotationsSignatures(final Env<AttrContext> env, final JCClassDecl tree) {
+        annotate.validate(new Annotator() { //validate annotations
+            @Override
+            public void enterAnnotation() {
+                JavaFileObject oldSource = log.useSource(env.toplevel.sourcefile);
+
+                try {
+                    attr.validateTypeAnnotations(tree, true);
+                } finally {
+                    log.useSource(oldSource);
+                }
+            }
+        } );
+    }
+
     /**
      * This version only visits types in bodies, that is, field initializers,
      * top-level blocks, and method bodies, and should be called from Attr.