mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-20 02:54:35 +02:00
8065219: Deprecated warning in method reference are missing in some cases
Reviewed-by: mcimadamore
This commit is contained in:
parent
1a5c52e6c3
commit
855243b12f
4 changed files with 59 additions and 5 deletions
|
@ -3733,17 +3733,17 @@ public class Attr extends JCTree.Visitor {
|
|||
" in tree " + tree);
|
||||
}
|
||||
|
||||
// Test (1): emit a `deprecation' warning if symbol is deprecated.
|
||||
// (for constructors, the error was given when the constructor was
|
||||
// resolved)
|
||||
// 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) {
|
||||
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);
|
||||
}
|
||||
|
|
47
langtools/test/tools/javac/warnings/DeprecationSE8Test.java
Normal file
47
langtools/test/tools/javac/warnings/DeprecationSE8Test.java
Normal file
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
- compiler.note.deprecated.filename: DeprecationSE8Test.java
|
||||
- compiler.note.deprecated.recompile
|
|
@ -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
|
Loading…
Add table
Add a link
Reference in a new issue