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:
committed by
Commit Queue
parent
6456180562
commit
143bbe0a05
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user