From e2f736658fbd03d2dc2186dbd9ba9b13b1f1a8ac Mon Sep 17 00:00:00 2001 From: Archie Cobbs Date: Tue, 3 Jun 2025 14:35:17 +0000 Subject: [PATCH] 8329951: `var` emits deprecation warnings that do not point to the file or position Reviewed-by: vromero --- .../com/sun/tools/javac/comp/Analyzer.java | 8 ++--- .../com/sun/tools/javac/comp/Attr.java | 4 +-- .../tools/javac/tree/VarWarnPosition.java | 29 +++++++++++++++++++ .../tools/javac/tree/VarWarnPosition.out | 6 ++++ 4 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 test/langtools/tools/javac/tree/VarWarnPosition.java create mode 100644 test/langtools/tools/javac/tree/VarWarnPosition.out diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Analyzer.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Analyzer.java index 514de5e2fe8..1aea9f77a20 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Analyzer.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Analyzer.java @@ -365,10 +365,6 @@ public class Analyzer { super(AnalyzerMode.LOCAL, tag); } - boolean isImplicitlyTyped(JCVariableDecl decl) { - return decl.vartype.pos == Position.NOPOS; - } - /** * Map a variable tree into a new declaration using implicit type. */ @@ -401,7 +397,7 @@ public class Analyzer { boolean match(JCVariableDecl tree){ return tree.sym.owner.kind == Kind.MTH && - tree.init != null && !isImplicitlyTyped(tree) && + tree.init != null && !tree.declaredUsingVar() && attr.canInferLocalVarType(tree) == null; } @Override @@ -425,7 +421,7 @@ public class Analyzer { @Override boolean match(JCEnhancedForLoop tree){ - return !isImplicitlyTyped(tree.var); + return !tree.var.declaredUsingVar(); } @Override List rewrite(JCEnhancedForLoop oldTree) { diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java index a9293b2d135..9c9672151c7 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java @@ -5716,9 +5716,9 @@ public class Attr extends JCTree.Visitor { private void setSyntheticVariableType(JCVariableDecl tree, Type type) { if (type.isErroneous()) { - tree.vartype = make.at(Position.NOPOS).Erroneous(); + tree.vartype = make.at(tree.pos()).Erroneous(); } else { - tree.vartype = make.at(Position.NOPOS).Type(type); + tree.vartype = make.at(tree.pos()).Type(type); } } diff --git a/test/langtools/tools/javac/tree/VarWarnPosition.java b/test/langtools/tools/javac/tree/VarWarnPosition.java new file mode 100644 index 00000000000..7dae84f3542 --- /dev/null +++ b/test/langtools/tools/javac/tree/VarWarnPosition.java @@ -0,0 +1,29 @@ +/* + * @test /nodynamiccopyright/ + * @bug 8329951 + * @summary Check that "var" variable synthetic types have a source position + * @compile/process/ref=VarWarnPosition.out -Xlint:deprecation -XDrawDiagnostics VarWarnPosition.java + */ + +import java.util.*; +import java.util.function.*; + +public class VarWarnPosition { + + VarWarnPosition() { + + // Test 1 + @SuppressWarnings("deprecation") + List deprecatedList = null; + for (var deprValue : deprecatedList) { } + + // Test 2 + Consumer c = d -> { }; + + // Test 3 + Consumer c2 = (var d) -> { }; + } +} + +@Deprecated +class Depr {} diff --git a/test/langtools/tools/javac/tree/VarWarnPosition.out b/test/langtools/tools/javac/tree/VarWarnPosition.out new file mode 100644 index 00000000000..2200c8b4ae0 --- /dev/null +++ b/test/langtools/tools/javac/tree/VarWarnPosition.out @@ -0,0 +1,6 @@ +VarWarnPosition.java:18:14: compiler.warn.has.been.deprecated: Depr, compiler.misc.unnamed.package +VarWarnPosition.java:21:18: compiler.warn.has.been.deprecated: Depr, compiler.misc.unnamed.package +VarWarnPosition.java:21:28: compiler.warn.has.been.deprecated: Depr, compiler.misc.unnamed.package +VarWarnPosition.java:24:18: compiler.warn.has.been.deprecated: Depr, compiler.misc.unnamed.package +VarWarnPosition.java:24:30: compiler.warn.has.been.deprecated: Depr, compiler.misc.unnamed.package +5 warnings