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 <pquitslund@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
Konstantin Shcheglov
2024-12-19 13:17:19 -08:00
committed by Commit Queue
parent 6456180562
commit 143bbe0a05
5 changed files with 34 additions and 117 deletions
@@ -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<List<SearchMatch>> searchTopLevelDeclarations(String pattern) async {
var allElements = <Element2>{};
var allElements = HashSet<Element2>(
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) {
@@ -2799,6 +2799,7 @@ void f() {
}
Future<void> test_localVariable_finalCheck_shadowError() {
setPriorityFiles([testFile]);
addTestFile('''
void f() {
var newName;
+1 -39
View File
@@ -1178,10 +1178,6 @@ class CompilationUnitElementImpl extends UriReferencedElementImpl
List<TypeAliasFragment> get typeAliases2 =>
typeAliases.cast<TypeAliasFragment>();
@override
bool operator ==(Object other) =>
other is CompilationUnitElementImpl && source == other.source;
@override
T? accept<T>(ElementVisitor<T> 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<PatternVariableFragment> get variables2 =>
variables.cast<PatternVariableFragment>();
@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<T>(ElementVisitor<T> 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<T>(ElementVisitor<T> 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<T>(ElementVisitor<T> visitor) =>
visitor.visitTypeParameterElement(this);
@@ -2668,6 +2668,7 @@ enum E<T> {
}
test_searchReferences_TypeParameterElement_ofLocalFunction() async {
makeFilePriority(testFile);
await resolveTestCode('''
main() {
void foo<T>(T a) {
@@ -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);
}