From f8d6ad7e4bab52eca455d0bee06e222fec641f20 Mon Sep 17 00:00:00 2001 From: Danny Tuppeny Date: Mon, 14 Jul 2025 08:16:00 -0700 Subject: [PATCH] [analysis_server] Don't generate inline values inside function types We shouldn't treat parameter names inside function types as if they are references to other parameters/variables of that name. Fixes https://github.com/dart-lang/sdk/issues/61099 Change-Id: Iadc97723a87af1ddbbde618d1c9c8e5b51499a6f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/440160 Commit-Queue: Keerti Parthasarathy Reviewed-by: Keerti Parthasarathy Reviewed-by: Brian Wilkerson --- .../lib/src/lsp/handlers/handler_inline_value.dart | 6 ++++++ .../test/lsp/inline_value_test.dart | 14 ++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_inline_value.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_inline_value.dart index 58816cd9b6c..2492c3c1e09 100644 --- a/pkg/analysis_server/lib/src/lsp/handlers/handler_inline_value.dart +++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_inline_value.dart @@ -335,6 +335,12 @@ class _InlineValueVisitor extends GeneralizingAstVisitor { super.visitFunctionExpression(node); } + @override + void visitGenericFunctionType(GenericFunctionType node) { + // Don't descent into function types or we may generate values + // for their parameters. + } + @override void visitPrefixedIdentifier(PrefixedIdentifier node) { if (experimentalInlineValuesProperties) { diff --git a/pkg/analysis_server/test/lsp/inline_value_test.dart b/pkg/analysis_server/test/lsp/inline_value_test.dart index 5a8004f4acd..b6c275e830b 100644 --- a/pkg/analysis_server/test/lsp/inline_value_test.dart +++ b/pkg/analysis_server/test/lsp/inline_value_test.dart @@ -120,6 +120,20 @@ void f(List list1, List /*[0*/list2/*0]*/, Iterable iterable1, Iterable ite await verify_values(code, ofType: InlineValueVariableLookup); } + Future test_parameter_nestedInFunctionType() async { + // A parameter nested inside a function type should not produce a value. + code = TestCode.parse(r''' +void f( + int /*[0*/value/*0]*/, { + required void Function(int value) /*[1*/func/*1]*/, +}) { + ^ +} +'''); + + await verify_values(code, ofType: InlineValueVariableLookup); + } + Future test_parameter_read() async { code = TestCode.parse(r''' void f(int aaa, int bbb) {