# HG changeset patch # User jlahoda # Date 1421751625 -3600 # Node ID 9069a3bf59009c0368eb4c322cf9461f921be859 # Parent cbf8df1949576e9b11c23ca8e68dd91602d29902 8069094: SuppressWarnings(\"deprecation\") not respected on default clause on annotation declarations Summary: Properly deferring warnings that are reported during entering of annotation's default value. Reviewed-by: mcimadamore diff -r cbf8df194957 -r 9069a3bf5900 langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/MemberEnter.java --- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/MemberEnter.java Tue Jan 20 09:51:17 2015 +0100 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/MemberEnter.java Tue Jan 20 12:00:25 2015 +0100 @@ -227,7 +227,7 @@ annotate.annotateTypeLater(tree, localEnv, m, tree.pos()); if (tree.defaultValue != null) - annotateDefaultValueLater(tree.defaultValue, localEnv, m); + annotateDefaultValueLater(tree.defaultValue, localEnv, m, tree.pos()); } /** Create a fresh environment for method bodies. @@ -438,7 +438,8 @@ /** Queue processing of an attribute default value. */ void annotateDefaultValueLater(final JCExpression defaultValue, final Env localEnv, - final MethodSymbol m) { + final MethodSymbol m, + final DiagnosticPosition deferPos) { annotate.normal(new Annotate.Worker() { @Override public String toString() { @@ -449,9 +450,11 @@ @Override public void run() { JavaFileObject prev = log.useSource(localEnv.toplevel.sourcefile); + DiagnosticPosition prevLintPos = deferredLintHandler.setPos(deferPos); try { enterDefaultValue(defaultValue, localEnv, m); } finally { + deferredLintHandler.setPos(prevLintPos); log.useSource(prev); } } diff -r cbf8df194957 -r 9069a3bf5900 langtools/test/tools/javac/warnings/suppress/T8069094.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/warnings/suppress/T8069094.java Tue Jan 20 12:00:25 2015 +0100 @@ -0,0 +1,17 @@ +/** + * @test /nodynamiccopyright/ + * @bug 8069094 + * @summary Verify that \\@SuppressWarnings("unchecked") works correctly for annotation default values + * @build VerifySuppressWarnings + * @compile/ref=T8069094.out -XDrawDiagnostics -Xlint:unchecked,deprecation,cast T8069094.java + * @run main VerifySuppressWarnings T8069094.java + */ + +@interface T8069094 { + T8069094A foo() default T8069094A.Bar; +} + +@Deprecated +enum T8069094A { + Bar +} diff -r cbf8df194957 -r 9069a3bf5900 langtools/test/tools/javac/warnings/suppress/T8069094.out --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/warnings/suppress/T8069094.out Tue Jan 20 12:00:25 2015 +0100 @@ -0,0 +1,3 @@ +T8069094.java:11:5: compiler.warn.has.been.deprecated: T8069094A, compiler.misc.unnamed.package +T8069094.java:11:29: compiler.warn.has.been.deprecated: T8069094A, compiler.misc.unnamed.package +2 warnings