OpenJDK / amber / amber
changeset 32950:22315d47485b
8065219: Deprecated warning in method reference are missing in some cases.
Reviewed-by: mcimadamore
author | sadayapalam |
---|---|
date | Wed, 07 Oct 2015 16:02:57 +0530 |
parents | 7e0f345e64a8 |
children | a098b538296c |
files | langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java langtools/test/tools/javac/warnings/DeprecationSE8Test.java langtools/test/tools/javac/warnings/DeprecationSE8Test.noLint.out langtools/test/tools/javac/warnings/DeprecationSE8Test.out |
diffstat | 4 files changed, 60 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java Wed Oct 07 15:53:38 2015 +0530 +++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java Wed Oct 07 16:02:57 2015 +0530 @@ -3733,17 +3733,17 @@ " in tree " + tree); } - // Test (1): emit a `deprecation' warning if symbol is deprecated. - // (for constructors, the error was given when the constructor was - // resolved) - - if (sym.name != names.init) { + // Emit a `deprecation' warning if symbol is deprecated. + // (for constructors (but not for constructor references), the error + // was given when the constructor was resolved) + + if (sym.name != names.init || tree.hasTag(REFERENCE)) { chk.checkDeprecated(tree.pos(), env.info.scope.owner, sym); chk.checkSunAPI(tree.pos(), sym); chk.checkProfile(tree.pos(), sym); } - // Test (3): if symbol is a variable, check that its type and + // If symbol is a variable, check that its type and // kind are compatible with the prototype and protokind. return check(tree, owntype, sym.kind.toSelector(), resultInfo); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/warnings/DeprecationSE8Test.java Wed Oct 07 16:02:57 2015 +0530 @@ -0,0 +1,47 @@ +/** + * @test /nodynamiccopyright/ + * @bug 8065219 + * @summary Deprecated warning in method reference are missing in some cases. + * @compile/ref=DeprecationSE8Test.noLint.out -XDrawDiagnostics DeprecationSE8Test.java + * @compile/ref=DeprecationSE8Test.out -Xlint:deprecation,-options -source 8 -XDrawDiagnostics DeprecationSE8Test.java + */ + + +class DeprecationSE8Test { + @FunctionalInterface + interface I { + DeprecationSE8Test meth(); + } + + @FunctionalInterface + interface J { + int meth(); + } + + @Deprecated + public DeprecationSE8Test() { + } + + @Deprecated + public static int foo() { + return 1; + } + + // Using deprecated entities from within one's own top level class does not merit warning. + void notBadUsages() { + I i = DeprecationSE8Test::new; + new DeprecationSE8Test(); + J j = DeprecationSE8Test::foo; + foo(); + } +} + +class DeprecationSE8_01 { + // Using deprecated entities from outside one's own top level class deserves warning. + void badUsages() { + DeprecationSE8Test.I i = DeprecationSE8Test::new; + new DeprecationSE8Test(); + DeprecationSE8Test.foo(); + DeprecationSE8Test.J j = DeprecationSE8Test::foo; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/warnings/DeprecationSE8Test.noLint.out Wed Oct 07 16:02:57 2015 +0530 @@ -0,0 +1,2 @@ +- compiler.note.deprecated.filename: DeprecationSE8Test.java +- compiler.note.deprecated.recompile
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/langtools/test/tools/javac/warnings/DeprecationSE8Test.out Wed Oct 07 16:02:57 2015 +0530 @@ -0,0 +1,5 @@ +DeprecationSE8Test.java:42:34: compiler.warn.has.been.deprecated: DeprecationSE8Test(), DeprecationSE8Test +DeprecationSE8Test.java:43:9: compiler.warn.has.been.deprecated: DeprecationSE8Test(), DeprecationSE8Test +DeprecationSE8Test.java:44:27: compiler.warn.has.been.deprecated: foo(), DeprecationSE8Test +DeprecationSE8Test.java:45:34: compiler.warn.has.been.deprecated: foo(), DeprecationSE8Test +4 warnings