From 8bf801f8f763d56cbf6fdbefae161cdcd79fe8d2 Mon Sep 17 00:00:00 2001 From: FMorschel Date: Thu, 27 Mar 2025 11:09:09 -0700 Subject: [PATCH] [DAS] Fixes pattern variable with multiple declarations highlight Bug: https://github.com/dart-lang/sdk/issues/60398 Change-Id: Ifd7c29db38bb2ee048d2b7d0de1e050e1e3e9bc2 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/417964 Reviewed-by: Samuel Rawlins Commit-Queue: Phil Quitslund Auto-Submit: Felipe Morschel Reviewed-by: Phil Quitslund --- .../lib/src/domains/analysis/occurrences_dart.dart | 6 +++++- .../test/analysis/notification_occurrences_test.dart | 12 ++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart b/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart index 80a965d10aa..27b17ac5f7d 100644 --- a/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart +++ b/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart @@ -100,7 +100,11 @@ class DartUnitOccurrencesComputerVisitor extends RecursiveAstVisitor { @override void visitDeclaredVariablePattern(DeclaredVariablePattern node) { - _addOccurrence(node.declaredElement2!, node.name); + if (node.declaredElement2 case BindPatternVariableElement2(:var join2?)) { + _addOccurrence(join2.baseElement, node.name); + } else { + _addOccurrence(node.declaredElement2!, node.name); + } super.visitDeclaredVariablePattern(node); } diff --git a/pkg/analysis_server/test/analysis/notification_occurrences_test.dart b/pkg/analysis_server/test/analysis/notification_occurrences_test.dart index 0fa59d663af..c152dab72e6 100644 --- a/pkg/analysis_server/test/analysis/notification_occurrences_test.dart +++ b/pkg/analysis_server/test/analysis/notification_occurrences_test.dart @@ -576,6 +576,18 @@ String f(int char) { '''); } + Future test_patternVariable_ifCase_logicalOr() async { + await assertOccurrences(kind: ElementKind.LOCAL_VARIABLE, ''' +void f(Object? x) { + if (x case int /*[0*/test/*0]*/ || [int /*[1*/test/*1]*/] when /*[2*/test/*2]*/ > 0) { + /*[3*/test/*3]*/; + /*[4*/test/*4]*/ = 1; + /*[5*/test/*5]*/ += 2; + } +} +'''); + } + Future test_prefix() async { await assertOccurrences(kind: ElementKind.PREFIX, ''' import '' as /*[0*/p/*0]*/;