Skip to content

Commit 79d9e91

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Migrate ClassHierarchy.
Change-Id: I10560227b6124849f905e4cd4669280d76751595 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/407181 Reviewed-by: Samuel Rawlins <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 150c791 commit 79d9e91

File tree

7 files changed

+38
-38
lines changed

7 files changed

+38
-38
lines changed

pkg/analyzer/lib/src/dart/element/class_hierarchy.dart

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
// ignore_for_file: analyzer_use_new_elements
6-
7-
import 'package:analyzer/dart/element/element.dart';
85
import 'package:analyzer/dart/element/nullability_suffix.dart';
96
import 'package:analyzer/dart/element/type.dart';
107
import 'package:analyzer/src/dart/element/element.dart';
@@ -14,36 +11,33 @@ import 'package:analyzer/src/dart/element/type_system.dart';
1411
import 'package:analyzer/src/utilities/extensions/collection.dart';
1512

1613
class ClassHierarchy {
17-
final Map<InterfaceElementImpl, _Hierarchy> _map = {};
14+
final Map<InterfaceElementImpl2, _Hierarchy> _map = {};
1815

19-
List<ClassHierarchyError> errors(InterfaceElementImpl element) {
16+
List<ClassHierarchyError> errors(InterfaceElementImpl2 element) {
2017
return _getHierarchy(element).errors;
2118
}
2219

23-
List<InterfaceType> implementedInterfaces(InterfaceElementImpl element) {
20+
List<InterfaceType> implementedInterfaces(InterfaceElementImpl2 element) {
2421
return _getHierarchy(element).interfaces;
2522
}
2623

27-
void remove(InterfaceElementImpl element) {
28-
assert(element.augmentationTarget == null);
24+
void remove(InterfaceElementImpl2 element) {
2925
element.resetCachedAllSupertypes();
3026
_map.remove(element);
3127
}
3228

3329
/// Remove hierarchies for classes defined in specified libraries.
3430
void removeOfLibraries(Set<Uri> uriSet) {
3531
_map.removeWhere((element, _) {
36-
if (uriSet.contains(element.librarySource.uri)) {
32+
if (uriSet.contains(element.library2.uri)) {
3733
element.resetCachedAllSupertypes();
3834
return true;
3935
}
4036
return false;
4137
});
4238
}
4339

44-
_Hierarchy _getHierarchy(InterfaceElementImpl element) {
45-
var augmented = element.augmented;
46-
40+
_Hierarchy _getHierarchy(InterfaceElementImpl2 element) {
4741
var hierarchy = _map[element];
4842
if (hierarchy != null) {
4943
return hierarchy;
@@ -55,8 +49,7 @@ class ClassHierarchy {
5549
);
5650
_map[element] = hierarchy;
5751

58-
var library = element.library;
59-
var typeSystem = library.typeSystem;
52+
var typeSystem = element.library2.typeSystem;
6053
var interfacesMerger = InterfacesMerger(typeSystem);
6154

6255
void append(InterfaceTypeImpl? type) {
@@ -67,7 +60,7 @@ class ClassHierarchy {
6760
interfacesMerger.add(type);
6861

6962
var substitution = Substitution.fromInterfaceType(type);
70-
var element = type.element;
63+
var element = type.element3;
7164
var rawInterfaces = implementedInterfaces(element);
7265
for (var rawInterface in rawInterfaces) {
7366
var newInterface =
@@ -77,15 +70,15 @@ class ClassHierarchy {
7770
}
7871

7972
append(element.supertype);
80-
if (augmented is MixinElementImpl2) {
81-
for (var type in augmented.superclassConstraints) {
73+
if (element is MixinElementImpl2) {
74+
for (var type in element.superclassConstraints) {
8275
append(type);
8376
}
8477
}
85-
for (var type in augmented.interfaces) {
78+
for (var type in element.interfaces) {
8679
append(type);
8780
}
88-
for (var type in augmented.mixins) {
81+
for (var type in element.mixins) {
8982
append(type);
9083
}
9184

@@ -127,7 +120,7 @@ class IncompatibleInterfacesClassHierarchyError extends ClassHierarchyError {
127120

128121
class InterfacesMerger {
129122
final TypeSystemImpl _typeSystem;
130-
final Map<InterfaceElement, _ClassInterfaceType> _map = {};
123+
final Map<InterfaceElementImpl2, _ClassInterfaceType> _map = {};
131124

132125
InterfacesMerger(this._typeSystem);
133126

@@ -136,12 +129,12 @@ class InterfacesMerger {
136129
}
137130

138131
void add(InterfaceTypeImpl type) {
139-
var element = type.element;
132+
var element = type.element3;
140133
var classResult = _map[element];
141134
if (classResult == null) {
142135
classResult = _ClassInterfaceType(
143136
_typeSystem,
144-
element is ClassElementImpl && element.isDartCoreObject,
137+
element is ClassElementImpl2 && element.isDartCoreObject,
145138
);
146139
_map[element] = classResult;
147140
}

pkg/analyzer/lib/src/dart/element/element.dart

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3022,7 +3022,7 @@ abstract class ElementImpl implements Element, Element2 {
30223022
LibraryElementImpl? get library => thisOrAncestorOfType();
30233023

30243024
@override
3025-
LibraryElement2? get library2 => thisOrAncestorOfType2();
3025+
LibraryElementImpl? get library2 => thisOrAncestorOfType2();
30263026

30273027
@override
30283028
Source? get librarySource => library?.source;
@@ -5802,7 +5802,7 @@ abstract class InstanceElementImpl2 extends ElementImpl2
58025802
ElementKind get kind => firstFragment.kind;
58035803

58045804
@override
5805-
LibraryElement2 get library2 => firstFragment.library2!;
5805+
LibraryElementImpl get library2 => firstFragment.library2!;
58065806

58075807
@override
58085808
List<ElementAnnotation> get metadata => firstFragment.metadata;
@@ -6147,7 +6147,7 @@ abstract class InterfaceElementImpl extends InstanceElementImpl
61476147
@override
61486148
List<InterfaceType> get allSupertypes {
61496149
return _allSupertypes ??=
6150-
library.session.classHierarchy.implementedInterfaces(this);
6150+
library.session.classHierarchy.implementedInterfaces(element);
61516151
}
61526152

61536153
@override
@@ -6605,8 +6605,7 @@ abstract class InterfaceElementImpl2 extends InstanceElementImpl2
66056605
}
66066606

66076607
InheritanceManager3 get inheritanceManager {
6608-
var library = library2 as LibraryElementImpl;
6609-
return library.session.inheritanceManager;
6608+
return library2.session.inheritanceManager;
66106609
}
66116610

66126611
@override
@@ -6785,6 +6784,10 @@ abstract class InterfaceElementImpl2 extends InstanceElementImpl2
67856784
)
67866785
.ifTypeOrNull();
67876786
}
6787+
6788+
void resetCachedAllSupertypes() {
6789+
firstFragment._allSupertypes = null;
6790+
}
67886791
}
67896792

67906793
class JoinPatternVariableElementImpl extends PatternVariableElementImpl
@@ -6951,12 +6954,12 @@ class LabelElementImpl extends ElementImpl
69516954
ElementKind get kind => ElementKind.LABEL;
69526955

69536956
@override
6954-
LibraryElement2 get library2 {
6957+
LibraryElementImpl get library2 {
69556958
return libraryFragment.element;
69566959
}
69576960

69586961
@override
6959-
LibraryFragment get libraryFragment => enclosingUnit as LibraryFragment;
6962+
CompilationUnitElementImpl get libraryFragment => enclosingUnit;
69606963

69616964
@override
69626965
String get name => super.name!;
@@ -7295,7 +7298,7 @@ class LibraryElementImpl extends ElementImpl
72957298
LibraryElementImpl get library => this;
72967299

72977300
@override
7298-
LibraryElement2 get library2 => this;
7301+
LibraryElementImpl get library2 => this;
72997302

73007303
LibraryDeclarations get libraryDeclarations {
73017304
return _libraryDeclarations ??= LibraryDeclarations(this);
@@ -7832,12 +7835,12 @@ class LocalVariableElementImpl extends NonParameterVariableElementImpl
78327835
ElementKind get kind => ElementKind.LOCAL_VARIABLE;
78337836

78347837
@override
7835-
LibraryElement2 get library2 {
7838+
LibraryElementImpl get library2 {
78367839
return libraryFragment.element;
78377840
}
78387841

78397842
@override
7840-
LibraryFragment get libraryFragment => enclosingUnit as LibraryFragment;
7843+
CompilationUnitElementImpl get libraryFragment => enclosingUnit;
78417844

78427845
@override
78437846
// TODO(scheglov): make it a nullable field
@@ -9767,7 +9770,7 @@ class PrefixElementImpl extends _ExistingElementImpl implements PrefixElement {
97679770
ElementKind get kind => ElementKind.PREFIX;
97689771

97699772
@override
9770-
LibraryElement2 get library2 => library as LibraryElement2;
9773+
LibraryElementImpl get library2 => library;
97719774

97729775
@override
97739776
String get name {

pkg/analyzer/lib/src/error/correct_override.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import 'package:analyzer/src/dart/element/type_algebra.dart';
1818
import 'package:analyzer/src/dart/element/type_system.dart';
1919
import 'package:analyzer/src/diagnostic/diagnostic_factory.dart';
2020
import 'package:analyzer/src/error/codes.dart';
21+
import 'package:analyzer/src/utilities/extensions/element.dart';
2122

2223
class CorrectOverrideHelper {
2324
final TypeSystemImpl _typeSystem;
@@ -147,7 +148,8 @@ class CovariantParametersVerifier {
147148
List<_SuperMember> _superMembers() {
148149
var classHierarchy = _session.classHierarchy;
149150
var classElement = _thisMember.enclosingElement3 as InterfaceElementImpl;
150-
var interfaces = classHierarchy.implementedInterfaces(classElement);
151+
var interfaces =
152+
classHierarchy.implementedInterfaces(classElement.asElement2);
151153

152154
var superMembers = <_SuperMember>[];
153155
for (var interface in interfaces) {

pkg/analyzer/lib/src/generated/error_verifier.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2683,7 +2683,7 @@ class ErrorVerifier extends RecursiveAstVisitor<void>
26832683
}
26842684

26852685
var analysisSession = _currentLibrary.session;
2686-
var errors = analysisSession.classHierarchy.errors(element);
2686+
var errors = analysisSession.classHierarchy.errors(element.asElement2);
26872687

26882688
for (var error in errors) {
26892689
if (error is IncompatibleInterfacesClassHierarchyError) {

pkg/analyzer/lib/src/summary2/types_builder.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -707,7 +707,7 @@ class _MixinsInference {
707707
void _resetHierarchies() {
708708
for (var declaration in _declarations.values) {
709709
var element = declaration.element;
710-
element.library.session.classHierarchy.remove(element);
710+
element.library.session.classHierarchy.remove(element.asElement2);
711711
}
712712
}
713713
}

pkg/analyzer/test/generated/elements_types_mixin.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ mixin ElementsTypesMixin {
120120
TypeImpl get unknownInferredType => UnknownInferredType.instance;
121121

122122
VoidTypeImpl get voidNone => VoidTypeImpl.instance;
123+
123124
ClassElementImpl class_({
124125
required String name,
125126
bool isAbstract = false,

pkg/analyzer/test/src/dart/element/class_hierarchy_test.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:analyzer/dart/element/type.dart';
77
import 'package:analyzer/src/dart/element/class_hierarchy.dart';
88
import 'package:analyzer/src/dart/element/element.dart';
99
import 'package:analyzer/src/dart/element/type.dart';
10+
import 'package:analyzer/src/utilities/extensions/element.dart';
1011
import 'package:test/test.dart';
1112
import 'package:test_reflective_loader/test_reflective_loader.dart';
1213

@@ -96,10 +97,10 @@ mixin _AbstractClassHierarchyMixin on ElementsTypesMixin {
9697

9798
var classHierarchy = ClassHierarchy();
9899

99-
var actualInterfaces = classHierarchy.implementedInterfaces(X);
100+
var actualInterfaces = classHierarchy.implementedInterfaces(X.asElement2);
100101
_assertInterfaces(actualInterfaces, interfaces);
101102

102-
var actualErrors = classHierarchy.errors(X);
103+
var actualErrors = classHierarchy.errors(X.asElement2);
103104
_assertErrors(actualErrors, errors);
104105
}
105106

0 commit comments

Comments
 (0)