From 143bbe0a055bdc0394454056b461fa4ca35d7edb Mon Sep 17 00:00:00 2001 From: Konstantin Shcheglov Date: Thu, 19 Dec 2024 13:17:19 -0800 Subject: [PATCH] Elements. Use identical() to compare ElementImpl(s), other elements. Change-Id: If2abddeaea0551fa4646027ad8aa1bb4fd255660 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/401760 Reviewed-by: Phil Quitslund Commit-Queue: Konstantin Shcheglov Reviewed-by: Brian Wilkerson --- .../search/search_engine_internal.dart | 10 +- .../test/edit/refactoring_test.dart | 1 + .../lib/src/dart/element/element.dart | 40 +------- .../test/src/dart/analysis/search_test.dart | 1 + .../element/type_parameter_element_test.dart | 99 +++++-------------- 5 files changed, 34 insertions(+), 117 deletions(-) diff --git a/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart b/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart index 9ae427cc8a8..3513b15a8f0 100644 --- a/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart +++ b/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart @@ -2,6 +2,8 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. +import 'dart:collection'; + import 'package:analysis_server/src/services/search/search_engine.dart'; import 'package:analyzer/dart/element/element2.dart'; import 'package:analyzer/source/source.dart'; @@ -182,7 +184,13 @@ class SearchEngineImpl implements SearchEngine { @override Future> searchTopLevelDeclarations(String pattern) async { - var allElements = {}; + var allElements = HashSet( + hashCode: (e) => e.name3.hashCode, + equals: (a, b) { + return a.lookupName == b.lookupName && + a.library2?.uri == b.library2?.uri; + }, + ); var regExp = RegExp(pattern); var drivers = _drivers.toList(); for (var driver in drivers) { diff --git a/pkg/analysis_server/test/edit/refactoring_test.dart b/pkg/analysis_server/test/edit/refactoring_test.dart index 96a10d704db..a364dab4864 100644 --- a/pkg/analysis_server/test/edit/refactoring_test.dart +++ b/pkg/analysis_server/test/edit/refactoring_test.dart @@ -2799,6 +2799,7 @@ void f() { } Future test_localVariable_finalCheck_shadowError() { + setPriorityFiles([testFile]); addTestFile(''' void f() { var newName; diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart index 010315869ec..4f79009aa7a 100644 --- a/pkg/analyzer/lib/src/dart/element/element.dart +++ b/pkg/analyzer/lib/src/dart/element/element.dart @@ -1178,10 +1178,6 @@ class CompilationUnitElementImpl extends UriReferencedElementImpl List get typeAliases2 => typeAliases.cast(); - @override - bool operator ==(Object other) => - other is CompilationUnitElementImpl && source == other.source; - @override T? accept(ElementVisitor visitor) => visitor.visitCompilationUnitElement(this); @@ -3393,14 +3389,7 @@ abstract class ElementImpl2 implements Element2 { @override bool operator ==(Object other) { - if (identical(this, other)) { - return true; - } - return other is ElementImpl2 && - other.kind == kind && - other.location == location && - other.nonSynthetic2.firstFragment.nameOffset2 == - nonSynthetic2.firstFragment.nameOffset2; + return identical(this, other); } /// Append a textual representation of this element to the given [builder]. @@ -6593,9 +6582,6 @@ class JoinPatternVariableElementImpl extends PatternVariableElementImpl @override List get variables2 => variables.cast(); - - @override - bool operator ==(Object other) => identical(other, this); } class JoinPatternVariableElementImpl2 extends PatternVariableElementImpl2 @@ -7296,11 +7282,6 @@ class LibraryExportElementImpl extends _ExistingElementImpl @override ElementKind get kind => ElementKind.EXPORT; - @override - bool operator ==(Object other) { - return identical(this, other); - } - @override T? accept(ElementVisitor visitor) { return visitor.visitLibraryExportElement(this); @@ -7390,11 +7371,6 @@ class LibraryImportElementImpl extends _ExistingElementImpl return Namespace.EMPTY; } - @override - bool operator ==(Object other) { - return identical(this, other); - } - @override T? accept(ElementVisitor visitor) { return visitor.visitLibraryImportElement(this); @@ -10939,20 +10915,6 @@ class TypeParameterElementImpl extends ElementImpl set variance(shared.Variance? newVariance) => _variance = newVariance; - @override - bool operator ==(Object other) { - if (identical(other, this)) { - return true; - } - if (other is TypeParameterElement) { - if (other.enclosingElement3 == null || enclosingElement3 == null) { - return identical(other, this); - } - return other.location == location; - } - return false; - } - @override T? accept(ElementVisitor visitor) => visitor.visitTypeParameterElement(this); diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart index 20b3092b789..86c13157df8 100644 --- a/pkg/analyzer/test/src/dart/analysis/search_test.dart +++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart @@ -2668,6 +2668,7 @@ enum E { } test_searchReferences_TypeParameterElement_ofLocalFunction() async { + makeFilePriority(testFile); await resolveTestCode(''' main() { void foo(T a) { diff --git a/pkg/analyzer/test/src/dart/element/type_parameter_element_test.dart b/pkg/analyzer/test/src/dart/element/type_parameter_element_test.dart index 6bc70b8c777..0dec2ea5556 100644 --- a/pkg/analyzer/test/src/dart/element/type_parameter_element_test.dart +++ b/pkg/analyzer/test/src/dart/element/type_parameter_element_test.dart @@ -17,28 +17,13 @@ main() { @reflectiveTest class TypeParameterElementTest extends AbstractTypeSystemTest { - test_equal_elementElement_sameLocation() { + test_equal() { var T1 = typeParameter('T'); var T2 = typeParameter('T'); - var U = typeParameter('U'); - class_(name: 'A', typeParameters: [T1, T2, U]); expect(T1 == T1, isTrue); expect(T2 == T2, isTrue); - expect(U == U, isTrue); - expect(T1 == T2, isTrue); - expect(T2 == T1, isTrue); - - expect(U == T1, isFalse); - expect(T1 == U, isFalse); - } - - test_equal_elementElement_synthetic() { - var T1 = typeParameter('T'); - var T2 = typeParameter('T'); - expect(T1 == T1, isTrue); - expect(T2 == T2, isTrue); expect(T1 == T2, isFalse); expect(T2 == T1, isFalse); } @@ -46,59 +31,47 @@ class TypeParameterElementTest extends AbstractTypeSystemTest { @reflectiveTest class TypeParameterTypeTest extends AbstractTypeSystemTest { - test_equal_equalElements() { + test_equal_differentElements() { var T1 = typeParameter('T'); var T2 = typeParameter('T'); - class_(name: 'A', typeParameters: [T1, T2]); - - _assertEqual(typeParameterTypeNone(T1), typeParameterTypeNone(T2), isTrue); - _assertEqual(typeParameterTypeNone(T2), typeParameterTypeNone(T1), isTrue); _assertEqual( typeParameterTypeNone(T1), - typeParameterTypeQuestion(T2), - isFalse, - ); - _assertEqual( - typeParameterTypeNone(T1), - typeParameterTypeQuestion(T2), + typeParameterTypeNone(T2), isFalse, ); } - test_equal_equalElements_withRecursiveBounds() { - var A = class_(name: 'A', typeParameters: [typeParameter('E')]); - - var T1 = typeParameter('T'); - T1.bound = interfaceTypeNone(A, typeArguments: [ - typeParameterTypeNone(T1), - ]); - - var T2 = typeParameter('T'); - T2.bound = interfaceTypeNone(A, typeArguments: [ - typeParameterTypeNone(T2), - ]); - - class_(name: 'B', typeParameters: [T1, T2]); - - _assertEqual(typeParameterTypeNone(T1), typeParameterTypeNone(T2), isTrue); - _assertEqual(typeParameterTypeNone(T2), typeParameterTypeNone(T1), isTrue); + test_equal_sameElement() { + var T = typeParameter('T'); _assertEqual( - typeParameterTypeNone(T1), - typeParameterTypeQuestion(T2), + typeParameterTypeNone(T), + typeParameterTypeNone(T), + isTrue, + ); + + _assertEqual( + typeParameterTypeNone(T), + typeParameterTypeQuestion(T), isFalse, ); + _assertEqual( - typeParameterTypeQuestion(T1), - typeParameterTypeNone(T2), + typeParameterTypeQuestion(T), + typeParameterTypeNone(T), isFalse, ); + + _assertEqual( + typeParameterTypeQuestion(T), + typeParameterTypeQuestion(T), + isTrue, + ); } test_equal_sameElement_promotedBounds() { var T = typeParameter('T'); - class_(name: 'A', typeParameters: [T]); _assertEqual( promotedTypeParameterTypeNone(T, intNone), @@ -125,34 +98,6 @@ class TypeParameterTypeTest extends AbstractTypeSystemTest { ); } - test_equal_sameElements() { - var T = typeParameter('T'); - - _assertEqual( - typeParameterTypeNone(T), - typeParameterTypeNone(T), - isTrue, - ); - - _assertEqual( - typeParameterTypeNone(T), - typeParameterTypeQuestion(T), - isFalse, - ); - - _assertEqual( - typeParameterTypeQuestion(T), - typeParameterTypeNone(T), - isFalse, - ); - - _assertEqual( - typeParameterTypeQuestion(T), - typeParameterTypeQuestion(T), - isTrue, - ); - } - void _assertEqual(DartType T1, DartType T2, matcher) { expect(T1 == T2, matcher); }