Version 2.19.0-66.0.dev
Merge commit '09bcc1f4ae9ba1c09d2ce9d55fa8f1bcef66379e' into 'dev'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2038914..4d88f6f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -55,6 +55,11 @@
non-final variable.
- fix`use_build_context_synchronously` to handle `await`s in `if` conditions.
+#### Pub
+
+- Remove remaining support for `.packages` files. The flag
+ `--legacy-packages-file` is no longer supported.
+
### Core libraries
#### `dart:io`
diff --git a/DEPS b/DEPS
index eb586c2..bf153a9 100644
--- a/DEPS
+++ b/DEPS
@@ -136,7 +136,7 @@
"ply_rev": "604b32590ffad5cbb82e4afef1d305512d06ae93",
"pool_rev": "fa84ddd0e39f45bf3f09dcc5d6b9fbdda7820fef",
"protobuf_rev": "504eefeae9892602ea50c20159db1db3768012a9",
- "pub_rev": "9bf4289d6fd5d6872a8929d6312bbd7098f3ea9c", # manually rev'd
+ "pub_rev": "ac7db6c07318efa4a8712110275eaf70f96a6d00", # manually rev'd
"pub_semver_rev": "9fd28757ba45961ac5449e0f2b0020670e921475",
"root_certificates_rev": "692f6d6488af68e0121317a9c2c9eb393eb0ee50",
"shelf_rev": "0371a64bd3b99044ee3158bacf8813bba735a9c7",
diff --git a/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart b/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart
index c97b898..e3675de 100644
--- a/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart
+++ b/pkg/analysis_server/lib/plugin/protocol/protocol_dart.dart
@@ -114,12 +114,10 @@
/// Return an [ElementKind] corresponding to the given [engine.Element].
ElementKind convertElementToElementKind(engine.Element element) {
- if (element is engine.ClassElement) {
- if (element.isEnum) {
- return ElementKind.ENUM;
- } else if (element.isMixin) {
- return ElementKind.MIXIN;
- }
+ if (element is engine.EnumElement) {
+ return ElementKind.ENUM;
+ } else if (element is engine.MixinElement) {
+ return ElementKind.MIXIN;
}
if (element is engine.FieldElement && element.isEnumConstant) {
return ElementKind.ENUM_CONSTANT;
diff --git a/pkg/analysis_server/lib/src/computer/computer_highlights.dart b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
index 36715bb..2be2073 100644
--- a/pkg/analysis_server/lib/src/computer/computer_highlights.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_highlights.dart
@@ -174,7 +174,7 @@
type = HighlightRegionType.CONSTRUCTOR;
semanticType = SemanticTokenTypes.class_;
semanticModifiers = {CustomSemanticTokenModifiers.constructor};
- } else if (element.isEnum) {
+ } else if (element is EnumElement) {
type = HighlightRegionType.ENUM;
} else {
type = HighlightRegionType.CLASS;
diff --git a/pkg/analysis_server/lib/src/computer/computer_overrides.dart b/pkg/analysis_server/lib/src/computer/computer_overrides.dart
index 9b7736e..df05205 100644
--- a/pkg/analysis_server/lib/src/computer/computer_overrides.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_overrides.dart
@@ -106,7 +106,7 @@
final List<Element> _superElements = <Element>[];
final List<Element> _interfaceElements = <Element>[];
- final Set<ClassElement> _visited = <ClassElement>{};
+ final Set<InterfaceElement> _visited = {};
factory _OverriddenElementsFinder(Element seed) {
var class_ = seed.enclosingElement3 as ClassElement;
@@ -143,7 +143,7 @@
return OverriddenElements(_seed, _superElements, _interfaceElements);
}
- void _addInterfaceOverrides(ClassElement? class_, bool checkType) {
+ void _addInterfaceOverrides(InterfaceElement? class_, bool checkType) {
if (class_ == null) {
return;
}
@@ -159,13 +159,16 @@
}
// interfaces
for (var interfaceType in class_.interfaces) {
- _addInterfaceOverrides(interfaceType.element, true);
+ _addInterfaceOverrides(interfaceType.element2, true);
}
// super
- _addInterfaceOverrides(class_.supertype?.element, checkType);
+ if (class_ is ClassElement) {
+ _addInterfaceOverrides(class_.supertype?.element2, checkType);
+ }
}
- void _addSuperOverrides(ClassElement? class_, {bool withThisType = true}) {
+ void _addSuperOverrides(InterfaceElement? class_,
+ {bool withThisType = true}) {
if (class_ == null) {
return;
}
@@ -180,16 +183,20 @@
}
}
- _addSuperOverrides(class_.supertype?.element);
- for (var mixin_ in class_.mixins) {
- _addSuperOverrides(mixin_.element);
+ if (class_ is ClassElement) {
+ _addSuperOverrides(class_.supertype?.element2);
}
- for (var constraint in class_.superclassConstraints) {
- _addSuperOverrides(constraint.element);
+ for (var mixin_ in class_.mixins) {
+ _addSuperOverrides(mixin_.element2);
+ }
+ if (class_ is MixinElement) {
+ for (var constraint in class_.superclassConstraints) {
+ _addSuperOverrides(constraint.element2);
+ }
}
}
- Element? _lookupMember(ClassElement classElement) {
+ Element? _lookupMember(InterfaceElement classElement) {
Element? member;
// method
if (_kinds.contains(ElementKind.METHOD)) {
diff --git a/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart b/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart
index 8c3dd26..c6548ab 100644
--- a/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart
+++ b/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart
@@ -9,6 +9,7 @@
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
/// Computer for Flutter specific outlines.
class FlutterOutlineComputer {
@@ -131,10 +132,10 @@
/// a widget reference outline item.
protocol.FlutterOutline? _createOutline(Expression node, bool withGeneric) {
var type = node.staticType;
- if (type == null || !_flutter.isWidgetType(type)) {
+ if (type is! InterfaceType || !_flutter.isWidgetType(type)) {
return null;
}
- var className = type.element!.displayName;
+ var className = type.element2.displayName;
if (node is InstanceCreationExpression) {
var attributes = <protocol.FlutterOutlineAttribute>[];
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_type_definition.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_type_definition.dart
index 929a960..5cc0646 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_type_definition.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_type_definition.dart
@@ -7,11 +7,12 @@
import 'package:analysis_server/src/lsp/mapping.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/element.dart' as analyzer;
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/source/line_info.dart';
import 'package:analyzer/src/dart/ast/extensions.dart';
import 'package:analyzer/src/dart/ast/utilities.dart';
-import 'package:analyzer/src/dart/element/element.dart' show ElementImpl;
+import 'package:analyzer/src/dart/element/element.dart' as analyzer;
import 'package:analyzer_plugin/protocol/protocol_common.dart' as plugin;
import 'package:analyzer_plugin/utilities/analyzer_converter.dart';
@@ -69,8 +70,13 @@
}
final type = node is Expression ? _getType(node) : null;
- final element = type?.element;
- if (element is! ElementImpl) {
+ analyzer.Element? element;
+ if (type is InterfaceType) {
+ element = type.element2;
+ } else if (type is TypeParameterType) {
+ element = type.element;
+ }
+ if (element is! analyzer.ElementImpl) {
return success(_emptyResult);
}
@@ -118,7 +124,7 @@
LineInfo originLineInfo,
LineInfo targetLineInfo,
AstNode originNode,
- ElementImpl targetElement,
+ analyzer.ElementImpl targetElement,
plugin.Location targetLocation,
) {
final nameRange =
diff --git a/pkg/analysis_server/lib/src/search/type_hierarchy.dart b/pkg/analysis_server/lib/src/search/type_hierarchy.dart
index f532954..0ca5a6b 100644
--- a/pkg/analysis_server/lib/src/search/type_hierarchy.dart
+++ b/pkg/analysis_server/lib/src/search/type_hierarchy.dart
@@ -23,7 +23,7 @@
ClassElement? _pivotClass;
final List<TypeHierarchyItem> _items = <TypeHierarchyItem>[];
- final List<ClassElement> _itemClassElements = <ClassElement>[];
+ final List<InterfaceElement> _itemClassElements = [];
final Map<Element, TypeHierarchyItem> _elementItemMap =
HashMap<Element, TypeHierarchyItem>();
@@ -81,7 +81,7 @@
}
Future _createSubclasses(
- TypeHierarchyItem item, int itemId, ClassElement classElement) async {
+ TypeHierarchyItem item, int itemId, InterfaceElement classElement) async {
var subElements = await getDirectSubClasses(_searchEngine, classElement);
var subItemIds = <int>[];
for (var subElement in subElements) {
@@ -120,7 +120,7 @@
}
int _createSuperItem(
- ClassElement classElement, List<DartType>? typeArguments) {
+ InterfaceElement classElement, List<DartType>? typeArguments) {
// check for recursion
var cachedItem = _elementItemMap[classElement];
if (cachedItem != null) {
@@ -154,30 +154,30 @@
_itemClassElements.add(classElement);
}
// superclass
- {
+ if (classElement is ClassElement) {
var superType = classElement.supertype;
if (superType != null) {
item.superclass = _createSuperItem(
- superType.element,
+ superType.element2,
superType.typeArguments,
);
}
}
// mixins
for (var type in classElement.mixins) {
- var id = _createSuperItem(type.element, type.typeArguments);
+ var id = _createSuperItem(type.element2, type.typeArguments);
item.mixins.add(id);
}
// interfaces
for (var type in classElement.interfaces) {
- var id = _createSuperItem(type.element, type.typeArguments);
+ var id = _createSuperItem(type.element2, type.typeArguments);
item.interfaces.add(id);
}
// done
return itemId;
}
- ExecutableElement? _findMemberElement(ClassElement clazz) {
+ ExecutableElement? _findMemberElement(InterfaceElement clazz) {
var pivotName = _pivotName;
if (pivotName == null) {
return null;
@@ -201,7 +201,7 @@
}
// try to find in the class mixin
for (var mixin in clazz.mixins.reversed) {
- var mixinElement = mixin.element;
+ var mixinElement = mixin.element2;
if (_pivotKind == ElementKind.METHOD) {
result = mixinElement.lookUpMethod(pivotName, _pivotLibrary);
} else if (_pivotKind == ElementKind.GETTER) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
index 363121d..4026a57 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
@@ -251,9 +251,9 @@
var type = request.contextType;
if (type is InterfaceType) {
- var element = type.element;
+ var element = type.element2;
var tag = '${element.librarySource.uri}::${element.name}';
- if (element.isEnum) {
+ if (element is EnumElement) {
includedSuggestionRelevanceTags.add(
IncludedSuggestionRelevanceTag(
tag,
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/extension_member_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/extension_member_contributor.dart
index fca2f3c..32db9fc 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/extension_member_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/extension_member_contributor.dart
@@ -44,7 +44,7 @@
for (var type in types) {
var inheritanceDistance = memberBuilder.request.featureComputer
.inheritanceDistanceFeature(
- thisExtendedType.element, type.element);
+ thisExtendedType.element2, type.element2);
_addTypeMembers(type, defaultKind, inheritanceDistance);
}
_addExtensionMembers(extensions, defaultKind, thisExtendedType);
@@ -114,7 +114,7 @@
var inheritanceDistance = 0.0;
if (type is InterfaceType && extendedType is InterfaceType) {
inheritanceDistance = memberBuilder.request.featureComputer
- .inheritanceDistanceFeature(type.element, extendedType.element);
+ .inheritanceDistanceFeature(type.element2, extendedType.element2);
}
// TODO(brianwilkerson) We might want to apply the substitution to the
// members of the extension for display purposes.
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart b/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
index df5b7456..03420db 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
@@ -175,12 +175,11 @@
protocol.ElementKind computeElementKind(Element element) {
if (element is LibraryElement) {
return protocol.ElementKind.PREFIX;
+ } else if (element is EnumElement) {
+ return protocol.ElementKind.ENUM;
+ } else if (element is MixinElement) {
+ return protocol.ElementKind.MIXIN;
} else if (element is ClassElement) {
- if (element.isEnum) {
- return protocol.ElementKind.ENUM;
- } else if (element.isMixin) {
- return protocol.ElementKind.MIXIN;
- }
return protocol.ElementKind.CLASS;
} else if (element is FieldElement && element.isEnumConstant) {
return protocol.ElementKind.ENUM_CONSTANT;
@@ -276,7 +275,8 @@
/// must be traversed in the type graph to get from the subtype to the
/// supertype if the two types are not the same. Return `-1` if the [subclass]
/// is not a subclass of the [superclass].
- int inheritanceDistance(ClassElement subclass, ClassElement superclass) {
+ int inheritanceDistance(
+ InterfaceElement subclass, InterfaceElement superclass) {
// This method is only visible for the metrics computation and might be made
// private at some future date.
return _inheritanceDistance(subclass, superclass, {});
@@ -286,7 +286,7 @@
/// defined in the [superclass] that is being accessed through an expression
/// whose static type is the [subclass].
double inheritanceDistanceFeature(
- ClassElement subclass, ClassElement superclass) {
+ InterfaceElement subclass, InterfaceElement superclass) {
var distance = _inheritanceDistance(subclass, superclass, {});
return _distanceToPercent(distance);
}
@@ -460,8 +460,8 @@
/// cycles in the type graph.
///
/// This is the implementation of [inheritanceDistance].
- int _inheritanceDistance(ClassElement? subclass, ClassElement superclass,
- Set<ClassElement> visited) {
+ int _inheritanceDistance(InterfaceElement? subclass,
+ InterfaceElement superclass, Set<InterfaceElement> visited) {
if (subclass == null) {
return -1;
} else if (subclass == superclass) {
@@ -469,19 +469,24 @@
} else if (!visited.add(subclass)) {
return -1;
}
- var minDepth =
- _inheritanceDistance(subclass.supertype?.element, superclass, visited);
+ var minDepth = 0;
+ if (subclass is ClassElement) {
+ minDepth = _inheritanceDistance(
+ subclass.supertype?.element2, superclass, visited);
+ }
void visitTypes(List<InterfaceType> types) {
for (var type in types) {
- var depth = _inheritanceDistance(type.element, superclass, visited);
+ var depth = _inheritanceDistance(type.element2, superclass, visited);
if (minDepth < 0 || (depth >= 0 && depth < minDepth)) {
minDepth = depth;
}
}
}
- visitTypes(subclass.superclassConstraints);
+ if (subclass is MixinElement) {
+ visitTypes(subclass.superclassConstraints);
+ }
visitTypes(subclass.mixins);
visitTypes(subclass.interfaces);
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
index b8a7122..bdc06f4 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_library_contributor.dart
@@ -140,7 +140,7 @@
/// Add constructor suggestions for the given class.
void _addConstructorSuggestions(ClassElement element) {
- if (element.isEnum) {
+ if (element is EnumElement) {
return;
}
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
index 5389353..78c6b1b 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/local_reference_contributor.dart
@@ -149,7 +149,7 @@
: CompletionSuggestionKind.INVOCATION;
for (var type in classElement.allSupertypes) {
var inheritanceDistance = request.featureComputer
- .inheritanceDistanceFeature(classElement, type.element);
+ .inheritanceDistanceFeature(classElement, type.element2);
_addSuggestionsForType(type, inheritanceDistance,
isFunctionalArgument: isFunctionalArgument);
}
@@ -419,7 +419,7 @@
if (!opType.isPrefixed &&
opType.includeConstructorSuggestions &&
- !class_.isEnum) {
+ class_ is! EnumElement) {
for (final constructor in class_.constructors) {
if (!class_.isAbstract || constructor.isFactory) {
builder.suggestConstructor(constructor);
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/named_constructor_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/named_constructor_contributor.dart
index 83cc7a1..4730873 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/named_constructor_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/named_constructor_contributor.dart
@@ -22,13 +22,13 @@
if (node is ConstructorName) {
if (node.parent is ConstructorReference) {
var element = node.type.name.staticElement;
- if (element is ClassElement) {
+ if (element is InterfaceElement) {
_buildSuggestions(element);
}
} else {
var type = node.type.type;
if (type is InterfaceType) {
- var element = type.element;
+ var element = type.element2;
_buildSuggestions(element);
}
}
@@ -40,7 +40,11 @@
}
}
- void _buildSuggestions(ClassElement element) {
+ void _buildSuggestions(InterfaceElement element) {
+ if (element is! ClassElement) {
+ return;
+ }
+
var tearOff = request.shouldSuggestTearOff(element);
var isLocalClassDecl = element.library == request.libraryElement;
for (var constructor in element.constructors) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/redirecting_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/redirecting_contributor.dart
index 9105538..15c1c55 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/redirecting_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/redirecting_contributor.dart
@@ -38,7 +38,7 @@
var containingClass =
parent.thisOrAncestorOfType<ClassOrMixinDeclaration>();
var superclassElement =
- containingClass?.declaredElement?.supertype?.element;
+ containingClass?.declaredElement?.supertype?.element2;
if (superclassElement != null) {
for (var constructor in superclassElement.constructors) {
if (constructor.isAccessibleIn2(request.libraryElement)) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart
index 727aa03..c19440f 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart
@@ -7,6 +7,7 @@
import 'package:analysis_server/src/utilities/extensions/completion_request.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
/// A contributor that produces suggestions based on the static members of a
/// given class, enum, or extension. More concretely, this class produces
@@ -24,9 +25,11 @@
var element = targetId.staticElement;
if (element is TypeAliasElement) {
var aliasedType = element.aliasedType;
- element = aliasedType.element;
+ if (aliasedType is InterfaceType) {
+ element = aliasedType.element2;
+ }
}
- if (element is ClassElement) {
+ if (element is InterfaceElement) {
for (var accessor in element.accessors) {
if (accessor.isStatic &&
!accessor.isSynthetic &&
@@ -34,7 +37,7 @@
builder.suggestAccessor(accessor, inheritanceDistance: 0.0);
}
}
- if (!request.shouldSuggestTearOff(element)) {
+ if (element is ClassElement && !request.shouldSuggestTearOff(element)) {
for (var constructor in element.constructors) {
if (isVisible(constructor)) {
if (!element.isAbstract || constructor.isFactory) {
@@ -45,7 +48,7 @@
}
for (var field in element.fields) {
if (field.isStatic &&
- (!field.isSynthetic || element.isEnum) &&
+ (!field.isSynthetic || element is EnumElement) &&
isVisible(field)) {
builder.suggestField(field, inheritanceDistance: 0.0);
}
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart
index be909a3..482a4cd 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart
@@ -2,8 +2,6 @@
// 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/protocol_server.dart' as protocol;
import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
@@ -251,7 +249,7 @@
}
for (var targetType in types) {
var inheritanceDistance = request.featureComputer
- .inheritanceDistanceFeature(type.element, targetType.element);
+ .inheritanceDistanceFeature(type.element2, targetType.element2);
for (var method in targetType.methods) {
// Exclude static methods when completion on an instance.
if (!method.isStatic) {
@@ -288,11 +286,11 @@
// classes seen (not the interfaces) so that we won't be fooled by nonsense
// like "class C<T> extends C<List<T>> {}"
var result = <InterfaceType>[];
- Set<ClassElement> classesSeen = HashSet<ClassElement>();
+ final classesSeen = <InterfaceElement>{};
var typesToVisit = <InterfaceType>[type];
while (typesToVisit.isNotEmpty) {
var nextType = typesToVisit.removeLast();
- if (!classesSeen.add(nextType.element)) {
+ if (!classesSeen.add(nextType.element2)) {
// Class had already been seen, so ignore this type.
continue;
}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart b/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart
index a890ab1..9352788 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/abstract_producer.dart
@@ -54,7 +54,7 @@
/// Return the class, enum or mixin declaration for the given [element].
Future<ClassOrMixinDeclaration?> getClassOrMixinDeclaration(
- ClassElement element) async {
+ InterfaceElement element) async {
var result = await sessionHelper.getElementDeclaration(element);
var node = result?.node;
if (node is ClassOrMixinDeclaration) {
@@ -76,10 +76,10 @@
/// Return the class element associated with the [target], or `null` if there
/// is no such class element.
- ClassElement? getTargetClassElement(Expression target) {
+ InterfaceElement? getTargetClassElement(Expression target) {
var type = target.staticType;
if (type is InterfaceType) {
- return type.element;
+ return type.element2;
} else if (target is Identifier) {
var element = target.staticElement;
if (element is ClassElement) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_diagnostic_property_reference.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_diagnostic_property_reference.dart
index f33b3e7..aa2aa6a 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_diagnostic_property_reference.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_diagnostic_property_reference.dart
@@ -209,8 +209,7 @@
}
bool _isEnum(DartType type) {
- final element = type.element;
- return element is ClassElement && element.isEnum;
+ return type is InterfaceType && type.element2 is EnumElement;
}
bool _isIterable(DartType type) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_case_clauses.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_case_clauses.dart
index f2046c1..b6d4ac3 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_case_clauses.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_case_clauses.dart
@@ -35,8 +35,8 @@
var enumConstantNames = <String>[];
var expressionType = statement.expression.staticType;
if (expressionType is InterfaceType) {
- var enumElement = expressionType.element;
- if (enumElement.isEnum) {
+ var enumElement = expressionType.element2;
+ if (enumElement is EnumElement) {
enumName = enumElement.name;
for (var field in enumElement.fields) {
if (field.isEnumConstant) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_like_case_clauses.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_like_case_clauses.dart
index a6fb1cd..3e89593 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_like_case_clauses.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_enum_like_case_clauses.dart
@@ -26,7 +26,7 @@
if (expressionType is! InterfaceType) {
return;
}
- var classElement = expressionType.element;
+ var classElement = expressionType.element2;
var className = classElement.name;
var caseNames = _caseNames(node);
var missingNames = _constantNames(classElement)
@@ -86,7 +86,7 @@
}
/// Return the names of the constants defined in [classElement].
- List<String> _constantNames(ClassElement classElement) {
+ List<String> _constantNames(InterfaceElement classElement) {
var type = classElement.thisType;
var constantNames = <String>[];
for (var field in classElement.fields) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart b/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
index b704649..dd30630 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
@@ -320,7 +320,7 @@
}
void _updateFinderWithClassMembers(
- _ClosestElementFinder finder, ClassElement clazz) {
+ _ClosestElementFinder finder, InterfaceElement clazz) {
var members = getMembers(clazz);
finder._updateList(members);
}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_enum.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_enum.dart
index fe203e6..3ebbb8f7 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_enum.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_enum.dart
@@ -560,7 +560,7 @@
// class.
if (fieldElement.isConst &&
fieldType is InterfaceType &&
- fieldType.element == classElement) {
+ fieldType.element2 == classElement) {
var initializer = field.initializer;
if (initializer is InstanceCreationExpression) {
var constructorElement =
@@ -728,13 +728,13 @@
throw _CannotConvertException('Unresolved');
}
if (element != classElement) {
- if (element.supertype?.element == classElement) {
+ if (element.supertype?.element2 == classElement) {
throw _CannotConvertException('Class is extended');
} else if (element.interfaces
- .map((e) => e.element)
+ .map((e) => e.element2)
.contains(classElement)) {
throw _CannotConvertException('Class is implemented');
- } else if (element.mixins.map((e) => e.element).contains(classElement)) {
+ } else if (element.mixins.map((e) => e.element2).contains(classElement)) {
// This case won't occur unless there's an error in the source code, but
// it's easier to check for the condition than it is to check for the
// diagnostic.
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_mixin.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_mixin.dart
index 37d5c4d..2f73d89 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_mixin.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_class_to_mixin.dart
@@ -38,7 +38,7 @@
var classElement = classDeclaration.declaredElement!;
for (var type in classElement.mixins) {
- if (referencedClasses.contains(type.element)) {
+ if (referencedClasses.contains(type.element2)) {
superclassConstraints.add(type);
} else {
interfaces.add(type);
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_into_for_index.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_into_for_index.dart
index 0982c01..498bd7f 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_into_for_index.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_into_for_index.dart
@@ -52,7 +52,7 @@
{
var iterableType = iterable.staticType;
if (iterableType is! InterfaceType ||
- iterableType.element != typeProvider.listElement) {
+ iterableType.element2 != typeProvider.listElement) {
return;
}
}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_list_literal.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_list_literal.dart
index 62d6308..e21fdfc 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_list_literal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_list_literal.dart
@@ -41,7 +41,7 @@
var type = creation.staticType;
if (node.offset > creation.argumentList.offset ||
type is! InterfaceType ||
- type.element != typeProvider.listElement ||
+ type.element2 != typeProvider.listElement ||
creation.constructorName.name != null ||
creation.argumentList.arguments.isNotEmpty) {
return;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_map_literal.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_map_literal.dart
index 1502cd0..3197d24 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_map_literal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_map_literal.dart
@@ -45,7 +45,7 @@
creation.constructorName.name != null ||
creation.argumentList.arguments.isNotEmpty ||
type is! InterfaceType ||
- !_isMapClass(type.element)) {
+ !_isMapClass(type.element2)) {
return;
}
//
@@ -67,7 +67,7 @@
/// Return `true` if the [element] represents either the class `Map` or
/// `LinkedHashMap`.
- bool _isMapClass(ClassElement element) =>
+ bool _isMapClass(InterfaceElement element) =>
element == typeProvider.mapElement ||
(element.name == 'LinkedHashMap' &&
element.library.name == 'dart.collection');
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_set_literal.dart b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_set_literal.dart
index 2ba09b0..2dccd1e 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/convert_to_set_literal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/convert_to_set_literal.dart
@@ -145,7 +145,7 @@
}
// TODO(brianwilkerson) Consider also accepting uses of LinkedHashSet.
- if (type.element != typeProvider.setElement) {
+ if (type.element2 != typeProvider.setElement) {
return null;
}
return creation;
@@ -195,13 +195,16 @@
var parent = creation.parent!;
if (parent is VariableDeclaration) {
var parent2 = parent.parent;
- if (parent2 is VariableDeclarationList &&
- parent2.type?.type?.element == typeProvider.setElement) {
- return true;
+ if (parent2 is VariableDeclarationList) {
+ final type = parent2.type?.type;
+ if (type is InterfaceType && type.element2 == typeProvider.setElement) {
+ return true;
+ }
}
} else if (parent.parent is InvocationExpression) {
var parameterElement = creation.staticParameterElement;
- if (parameterElement?.type.element == typeProvider.setElement) {
+ final type = parameterElement?.type;
+ if (type is InterfaceType && type.element2 == typeProvider.setElement) {
return true;
}
}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
index b6b921c..064a881 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
@@ -77,7 +77,7 @@
}
// prepare target ClassDeclaration
- var targetElement = targetType.element;
+ var targetElement = targetType.element2;
var targetResult = await sessionHelper.getElementDeclaration(targetElement);
if (targetResult == null) {
return;
@@ -202,7 +202,7 @@
Future<void> _write(
ChangeBuilder builder,
Token name,
- ClassElement targetElement,
+ InterfaceElement targetElement,
InsertionLocation targetLocation, {
Token? constructorName,
bool isConst = false,
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_field.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_field.dart
index 4da661d..5d3b40f 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_field.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_field.dart
@@ -76,7 +76,7 @@
}
// prepare target ClassElement
var staticModifier = false;
- ClassElement? targetClassElement;
+ InterfaceElement? targetClassElement;
if (target != null) {
targetClassElement = getTargetClassElement(target);
// maybe static
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_getter.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_getter.dart
index ad72979..9900a1e 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_getter.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_getter.dart
@@ -55,7 +55,7 @@
if (targetType is! InterfaceType) {
return;
}
- targetElement = targetType.element;
+ targetElement = targetType.element2;
// maybe static
if (target is Identifier) {
var targetIdentifier = target;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_method_or_function.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_method_or_function.dart
index 9eb4968..6c77773 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_method_or_function.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_method_or_function.dart
@@ -30,14 +30,14 @@
var nameNode = node;
if (nameNode is SimpleIdentifier) {
// prepare argument expression (to get parameter)
- ClassElement? targetElement;
+ InterfaceElement? targetElement;
Expression argument;
{
var target = getQualifiedPropertyTarget(node);
if (target != null) {
var targetType = target.staticType;
if (targetType is InterfaceType) {
- targetElement = targetType.element;
+ targetElement = targetType.element2;
argument = target.parent as Expression;
} else {
return;
@@ -140,7 +140,7 @@
/// Adds proposal for creating method corresponding to the given
/// [FunctionType] in the given [ClassElement].
Future<void> _createMethod(ChangeBuilder builder,
- ClassElement targetClassElement, FunctionType functionType) async {
+ InterfaceElement targetClassElement, FunctionType functionType) async {
var name = (node as SimpleIdentifier).name;
// prepare environment
var targetSource = targetClassElement.source;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_setter.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_setter.dart
index 5133d6a..3198c16 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_setter.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_setter.dart
@@ -54,7 +54,7 @@
if (targetType is! InterfaceType) {
return;
}
- targetElement = targetType.element;
+ targetElement = targetType.element2;
// maybe static
if (target is Identifier) {
var targetIdentifier = target;
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_stateless_widget.dart b/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_stateless_widget.dart
index 0280d715..e6c8d34 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_stateless_widget.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/flutter_convert_to_stateless_widget.dart
@@ -16,6 +16,7 @@
import 'package:analyzer_plugin/utilities/assist/assist.dart';
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
import 'package:analyzer_plugin/utilities/range_factory.dart';
+import 'package:collection/collection.dart';
class FlutterConvertToStatelessWidget extends CorrectionProducer {
@override
@@ -250,15 +251,15 @@
}
static bool _isState(ClassElement widgetClassElement, DartType? type) {
- if (type is! ParameterizedType) return false;
+ if (type is! InterfaceType) return false;
- var typeArguments = type.typeArguments;
- if (typeArguments.length != 1 ||
- typeArguments[0].element != widgetClassElement) {
+ final firstArgument = type.typeArguments.singleOrNull;
+ if (firstArgument is! InterfaceType ||
+ firstArgument.element2 != widgetClassElement) {
return false;
}
- var classElement = type.element;
+ var classElement = type.element2;
return classElement is ClassElement &&
Flutter.instance.isExactState(classElement);
}
@@ -381,7 +382,8 @@
@override
void visitInstanceCreationExpression(InstanceCreationExpression node) {
super.visitInstanceCreationExpression(node);
- if (node.staticType?.element != stateClassElement) {
+ final type = node.staticType;
+ if (type is! InterfaceType || type.element2 != stateClassElement) {
return;
}
var methodDeclaration = node.thisOrAncestorOfType<MethodDeclaration>();
@@ -397,9 +399,10 @@
@override
void visitMethodInvocation(MethodInvocation node) {
var type = node.staticType;
- if (node.methodName.name == 'createState' &&
+ if (type is InterfaceType &&
+ node.methodName.name == 'createState' &&
(FlutterConvertToStatelessWidget._isState(widgetClassElement, type) ||
- type?.element == stateClassElement)) {
+ type.element2 == stateClassElement)) {
used = true;
}
}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/move_type_arguments_to_class.dart b/pkg/analysis_server/lib/src/services/correction/dart/move_type_arguments_to_class.dart
index 9f1cc96..a255bf5 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/move_type_arguments_to_class.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/move_type_arguments_to_class.dart
@@ -5,7 +5,7 @@
import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
import 'package:analysis_server/src/services/correction/fix.dart';
import 'package:analyzer/dart/ast/ast.dart';
-import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/src/dart/ast/extensions.dart';
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
@@ -32,14 +32,16 @@
return;
}
- var element = namedType.typeOrThrow.element;
- if (element is ClassElement &&
- element.typeParameters.length == typeArguments.arguments.length) {
- await builder.addDartFileEdit(file, (builder) {
- var argumentText = utils.getNodeText(typeArguments);
- builder.addSimpleInsertion(namedType.end, argumentText);
- builder.addDeletion(range.node(typeArguments));
- });
+ final type = namedType.typeOrThrow;
+ if (type is InterfaceType) {
+ final element = type.element2;
+ if (element.typeParameters.length == typeArguments.arguments.length) {
+ await builder.addDartFileEdit(file, (builder) {
+ var argumentText = utils.getNodeText(typeArguments);
+ builder.addSimpleInsertion(namedType.end, argumentText);
+ builder.addDeletion(range.node(typeArguments));
+ });
+ }
}
}
}
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_descriptor.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_descriptor.dart
index 0157194..0ea7777 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_descriptor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_descriptor.dart
@@ -153,12 +153,12 @@
// that the method might have been in the element's class.
return true;
}
- if (components[1] == type.element?.name) {
- return true;
- }
if (type is InterfaceType) {
+ if (components[1] == type.element2.name) {
+ return true;
+ }
for (var supertype in type.allSupertypes) {
- if (components[1] == supertype.element.name) {
+ if (components[1] == supertype.element2.name) {
return true;
}
}
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_matcher.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_matcher.dart
index f430cad..3bb402a 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_matcher.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/element_matcher.dart
@@ -381,7 +381,7 @@
var targetType = node.prefix.staticType;
if (targetType is InterfaceType) {
_addMatcher(
- components: [node.identifier.name, targetType.element.name],
+ components: [node.identifier.name, targetType.element2.name],
kinds: const [
ElementKind.constantKind,
ElementKind.fieldKind,
@@ -527,7 +527,7 @@
var type = target.staticType;
if (type != null) {
if (type is InterfaceType) {
- return type.element.name;
+ return type.element2.name;
} else if (type.isDynamic) {
// The name is likely to be undefined.
return target.name;
@@ -538,7 +538,7 @@
} else if (target != null) {
var type = target.staticType;
if (type is InterfaceType) {
- return type.element.name;
+ return type.element2.name;
}
return null;
}
diff --git a/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart b/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart
index 63b84f6..e231951 100644
--- a/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart
+++ b/pkg/analysis_server/lib/src/services/correction/name_suggestion.dart
@@ -66,7 +66,7 @@
} else if (expectedType.isDartCoreString) {
_addSingleCharacterName(excluded, res, 0x73);
} else if (expectedType is InterfaceType) {
- var className = expectedType.element.name;
+ var className = expectedType.element2.name;
_addAll(excluded, res, getCamelWordCombinations(className));
}
}
diff --git a/pkg/analysis_server/lib/src/services/correction/util.dart b/pkg/analysis_server/lib/src/services/correction/util.dart
index 05db61d..fa3cf96 100644
--- a/pkg/analysis_server/lib/src/services/correction/util.dart
+++ b/pkg/analysis_server/lib/src/services/correction/util.dart
@@ -530,7 +530,7 @@
/// The [ClassElement] the generated code is inserted to, so we can decide if
/// a type parameter may or may not be used.
- ClassElement? targetClassElement;
+ InterfaceElement? targetClassElement;
ExecutableElement? targetExecutableElement;
@@ -914,7 +914,7 @@
if (type is InterfaceType) {
return _getTypeCodeElementArguments(
librariesToImport: librariesToImport,
- element: type.element,
+ element: type.element2,
isNullable: type.nullabilitySuffix == NullabilitySuffix.question,
typeArguments: type.typeArguments,
);
diff --git a/pkg/analysis_server/lib/src/services/flutter/class_description.dart b/pkg/analysis_server/lib/src/services/flutter/class_description.dart
index a592206..0bdd780 100644
--- a/pkg/analysis_server/lib/src/services/flutter/class_description.dart
+++ b/pkg/analysis_server/lib/src/services/flutter/class_description.dart
@@ -38,7 +38,11 @@
/// If we know how to materialize the [element], return [ClassDescription].
/// Otherwise return `null`.
- ClassDescription? get(ClassElement element) {
+ ClassDescription? get(InterfaceElement element) {
+ if (element is! ClassElement) {
+ return null;
+ }
+
var description = _map[element];
if (description == null) {
description = _classDescription(element);
@@ -52,7 +56,7 @@
/// Return `true` if properties should be created for instances of [type].
bool hasNestedProperties(DartType type) {
if (type is InterfaceType) {
- return _isOptedInClass(type.element);
+ return _isOptedInClass(type.element2);
}
return false;
}
@@ -72,7 +76,11 @@
return ClassDescription(element, constructor);
}
- bool _isOptedInClass(ClassElement element) {
+ bool _isOptedInClass(InterfaceElement element) {
+ if (element is! ClassElement) {
+ return false;
+ }
+
return _isClass(
element,
'package:flutter/src/widgets/container.dart',
diff --git a/pkg/analysis_server/lib/src/services/flutter/widget_descriptions.dart b/pkg/analysis_server/lib/src/services/flutter/widget_descriptions.dart
index 7e79982..417fa0b 100644
--- a/pkg/analysis_server/lib/src/services/flutter/widget_descriptions.dart
+++ b/pkg/analysis_server/lib/src/services/flutter/widget_descriptions.dart
@@ -390,7 +390,7 @@
var type = parameter.type;
if (type is InterfaceType) {
var classDescription = classRegistry.get(
- type.element,
+ type.element2,
);
if (classDescription != null) {
_addProperties(
@@ -404,7 +404,7 @@
}
List<protocol.FlutterWidgetPropertyValueEnumItem> _enumItemsForEnum(
- ClassElement element,
+ EnumElement element,
) {
return element.fields
.where((field) => field.isStatic && field.isEnumConstant)
@@ -462,8 +462,8 @@
);
}
if (type is InterfaceType) {
- var classElement = type.element;
- if (classElement.isEnum) {
+ var classElement = type.element2;
+ if (classElement is EnumElement) {
return protocol.FlutterWidgetPropertyEditor(
protocol.FlutterWidgetPropertyEditorKind.ENUM,
enumItems: _enumItemsForEnum(classElement),
diff --git a/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart b/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
index e411d2d..1a1b226 100644
--- a/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
+++ b/pkg/analysis_server/lib/src/services/kythe/kythe_visitors.dart
@@ -305,7 +305,7 @@
// extends
var supertype = _enclosingClassElement!.supertype;
- var supertypeElement = supertype?.element;
+ var supertypeElement = supertype?.element2;
if (supertypeElement != null) {
var recordSupertypeVName =
_vNameFromElement(supertypeElement, schema.RECORD_KIND);
@@ -317,7 +317,7 @@
var interfaces = _enclosingClassElement!.interfaces;
for (var interface in interfaces) {
var recordInterfaceVName =
- _vNameFromElement(interface.element, schema.RECORD_KIND);
+ _vNameFromElement(interface.element2, schema.RECORD_KIND);
addEdge(
_enclosingClassVName!, schema.EXTENDS_EDGE, recordInterfaceVName);
}
@@ -326,7 +326,7 @@
var mixins = _enclosingClassElement!.mixins;
for (var mixin in mixins) {
var recordMixinVName =
- _vNameFromElement(mixin.element, schema.RECORD_KIND);
+ _vNameFromElement(mixin.element2, schema.RECORD_KIND);
addEdge(_enclosingClassVName!, schema.EXTENDS_EDGE, recordMixinVName);
}
@@ -383,7 +383,7 @@
var interfaces = _enclosingClassElement!.interfaces;
for (var interface in interfaces) {
var recordInterfaceVName =
- _vNameFromElement(interface.element, schema.RECORD_KIND);
+ _vNameFromElement(interface.element2, schema.RECORD_KIND);
addEdge(
_enclosingClassVName!, schema.EXTENDS_EDGE, recordInterfaceVName);
}
@@ -392,7 +392,7 @@
var mixins = _enclosingClassElement!.mixins;
for (var mixin in mixins) {
var recordMixinVName =
- _vNameFromElement(mixin.element, schema.RECORD_KIND);
+ _vNameFromElement(mixin.element2, schema.RECORD_KIND);
addEdge(_enclosingClassVName!, schema.EXTENDS_EDGE, recordMixinVName);
}
@@ -1023,18 +1023,18 @@
void _handleThisOrSuper(Expression thisOrSuperNode) {
var type = thisOrSuperNode.staticType;
- if (type != null && type.element != null) {
+ if (type is InterfaceType) {
// Expected SuperExpression.staticType to return the type of the
// supertype, but it returns the type of the enclosing class (same as
// ThisExpression), do some additional work to correct assumption:
- if (thisOrSuperNode is SuperExpression && type.element is ClassElement) {
- var supertype = (type.element as ClassElement).supertype;
+ if (thisOrSuperNode is SuperExpression && type.element2 is ClassElement) {
+ var supertype = (type.element2 as ClassElement).supertype;
if (supertype != null) {
type = supertype;
}
}
// vname
- var vName = _vNameFromElement(type.element, schema.RECORD_KIND);
+ var vName = _vNameFromElement(type.element2, schema.RECORD_KIND);
// anchor
var anchorVName = addAnchorEdgesContainingEdge(
@@ -1318,8 +1318,8 @@
var paramTypeVName = dynamicBuiltin;
var declaredElement = paramNode.declaredElement!;
var type = declaredElement.type;
- if (!type.isDynamic) {
- paramTypeVName = _vNameFromElement(type.element, schema.TAPP_KIND);
+ if (type is InterfaceType) {
+ paramTypeVName = _vNameFromElement(type.element2, schema.TAPP_KIND);
}
addEdge(funcTypeVName, schema.PARAM_EDGE, paramTypeVName,
ordinalIntValue: i++);
@@ -1395,8 +1395,8 @@
return dynamicBuiltin;
} else if (type.isVoid) {
return voidBuiltin;
- } else if (type.element is ClassElement) {
- return _vNameFromElement(type.element, schema.RECORD_KIND);
+ } else if (type is InterfaceType) {
+ return _vNameFromElement(type.element2, schema.RECORD_KIND);
} else {
return dynamicBuiltin;
}
diff --git a/pkg/analysis_server/lib/src/services/refactoring/framework/refactoring_context.dart b/pkg/analysis_server/lib/src/services/refactoring/framework/refactoring_context.dart
new file mode 100644
index 0000000..4d5fa5f
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/refactoring/framework/refactoring_context.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// 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 'package:analyzer/dart/analysis/results.dart';
+import 'package:analyzer/dart/analysis/session.dart';
+import 'package:analyzer/src/dart/analysis/session_helper.dart';
+
+/// The context in which a refactoring was requested.
+class RefactoringContext {
+ /// The result of resolving the compilation unit in which a refactoring was
+ /// requested.
+ final ResolvedUnitResult resolvedResult;
+
+ /// The offset to the beginning of the selection range.
+ final int selectionOffset;
+
+ /// The number of selected characters.
+ final int selectionLength;
+
+ /// The helper used to efficiently access resolved units.
+ late final AnalysisSessionHelper sessionHelper =
+ AnalysisSessionHelper(session);
+
+ /// Initialize a newly created context based on the [resolvedResult].
+ RefactoringContext({
+ required this.resolvedResult,
+ required this.selectionOffset,
+ required this.selectionLength,
+ });
+
+ /// Return the analysis session in which additional resolution can occur.
+ AnalysisSession get session => resolvedResult.session;
+}
diff --git a/pkg/analysis_server/lib/src/services/refactoring/framework/refactoring_processor.dart b/pkg/analysis_server/lib/src/services/refactoring/framework/refactoring_processor.dart
new file mode 100644
index 0000000..9d21427
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/refactoring/framework/refactoring_processor.dart
@@ -0,0 +1,50 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// 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 'package:analysis_server/lsp_protocol/protocol_generated.dart';
+import 'package:analysis_server/src/services/refactoring/framework/refactoring_context.dart';
+import 'package:analysis_server/src/services/refactoring/framework/refactoring_producer.dart';
+
+/// A function that can be executed to create a refactoring producer.
+typedef ProducerGenerator = RefactoringProducer Function(RefactoringContext);
+
+class RefactoringProcessor {
+ /// A list of the generators used to produce refactorings.
+ static const List<ProducerGenerator> generators = [
+ // MoveTopLevelToFile.new,
+ ];
+
+ /// The context in which the refactorings could be applied.
+ final RefactoringContext context;
+
+ RefactoringProcessor(this.context);
+
+ /// Return a list containing one code action for each of the refactorings that
+ /// are available in the current context.
+ Future<List<CodeAction>> compute() async {
+ var refactorings = <CodeAction>[];
+ for (var i = 0; i < generators.length; i++) {
+ var generator = generators[i];
+ var producer = generator(context);
+ if (producer.isAvailable()) {
+ refactorings.add(
+ CodeAction(
+ title: producer.title,
+ kind: producer.kind,
+ command: Command(
+ command: producer.commandName,
+ title: producer.title,
+ ),
+ data: {
+ 'filePath': context.resolvedResult.path,
+ 'selectionOffset': context.selectionOffset,
+ 'selectionLength': context.selectionLength,
+ 'parameters': producer.parameters,
+ }),
+ );
+ }
+ }
+ return refactorings;
+ }
+}
diff --git a/pkg/analysis_server/lib/src/services/refactoring/framework/refactoring_producer.dart b/pkg/analysis_server/lib/src/services/refactoring/framework/refactoring_producer.dart
new file mode 100644
index 0000000..c45f0f0
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/refactoring/framework/refactoring_producer.dart
@@ -0,0 +1,53 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// 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 'package:analysis_server/lsp_protocol/protocol_custom_generated.dart';
+import 'package:analysis_server/lsp_protocol/protocol_generated.dart';
+import 'package:analysis_server/src/services/refactoring/framework/refactoring_context.dart';
+import 'package:analyzer/src/dart/analysis/session_helper.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
+
+/// An object that can compute a refactoring in a Dart file.
+abstract class RefactoringProducer {
+ /// The context in which the refactoring was requested.
+ final RefactoringContext _context;
+
+ /// Initialize a newly created refactoring producer to create a refactoring in
+ /// the given [_context].
+ RefactoringProducer(this._context);
+
+ /// Return the command name used to apply this refactoring.
+ String get commandName;
+
+ /// Return the kind of refactoring this producer produces. Subclasses should
+ /// override this method if they produce a subtype of the type
+ /// [CodeActionKind.Refactor], such as [CodeActionKind.RefactorExtract],
+ /// [CodeActionKind.RefactorInline], or [CodeActionKind.RefactorRewrite].
+ CodeActionKind get kind => CodeActionKind.Refactor;
+
+ /// Return a list of the parameters to send to the client.
+ List<CommandParameter> get parameters;
+
+ /// Return the offset of the first character after the selection range.
+ int get selectionEnd => selectionOffset + selectionLength;
+
+ /// Return the number of selected characters.
+ int get selectionLength => _context.selectionLength;
+
+ /// Return the offset of the beginning of the selection range.
+ int get selectionOffset => _context.selectionOffset;
+
+ /// Return the helper used to efficiently access resolved units.
+ AnalysisSessionHelper get sessionHelper => _context.sessionHelper;
+
+ /// Return the title of this refactoring.
+ String get title;
+
+ /// Given the [commandArguments] associated with the command, use the
+ /// [builder] to generate the edits necessary to apply this refactoring.
+ Future<void> compute(List<String> commandArguments, ChangeBuilder builder);
+
+ /// Return `true` if this refactoring is available in the given context.
+ bool isAvailable();
+}
diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_method.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_method.dart
index c18f88f..3bf7ff6 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_method.dart
@@ -794,7 +794,8 @@
} else {
variableType = _getTypeCode(returnTypeObj);
if (_hasAwait) {
- if (returnTypeObj.element != typeProvider.futureElement) {
+ if (returnTypeObj is InterfaceType &&
+ returnTypeObj.element2 != typeProvider.futureElement) {
returnType = _getTypeCode(typeProvider.futureType(returnTypeObj));
}
} else {
diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_widget.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_widget.dart
index 85bbc24..2110a70 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_widget.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/extract_widget.dart
@@ -617,7 +617,7 @@
final Set<Element> uniqueElements = <Element>{};
final List<_Parameter> parameters = [];
- List<ClassElement>? enclosingClasses;
+ List<InterfaceElement>? enclosingClasses;
_ParametersCollector(this.enclosingClass, this.expressionRange);
@@ -665,9 +665,9 @@
bool _isMemberOfEnclosingClass(Element element) {
final enclosingClass = this.enclosingClass;
if (enclosingClass != null) {
- final enclosingClasses = this.enclosingClasses ??= <ClassElement>[
+ final enclosingClasses = this.enclosingClasses ??= <InterfaceElement>[
enclosingClass,
- ...enclosingClass.allSupertypes.map((t) => t.element)
+ ...enclosingClass.allSupertypes.map((t) => t.element2)
];
return enclosingClasses.contains(element.enclosingElement3);
}
diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/inline_method.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/inline_method.dart
index c44741a..3de049d 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/legacy/inline_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/inline_method.dart
@@ -162,7 +162,7 @@
var enclosingClassElement = getEnclosingClassElement(node);
if (enclosingClassElement != null) {
var elements = [
- ...enclosingClassElement.allSupertypes.map((e) => e.element),
+ ...enclosingClassElement.allSupertypes.map((e) => e.element2),
enclosingClassElement,
];
for (var classElement in elements) {
diff --git a/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_class_member.dart b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_class_member.dart
index cafd967..cbd303c 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_class_member.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/legacy/rename_class_member.dart
@@ -161,9 +161,10 @@
Future<void> _checkHierarchy({
required bool isRename,
- required Set<ClassElement> subClasses,
+ required Set<InterfaceElement> subClasses,
}) async {
- var superClasses = elementClass.allSupertypes.map((e) => e.element).toSet();
+ var superClasses =
+ elementClass.allSupertypes.map((e) => e.element2).toSet();
// check shadowing in the hierarchy
var declarations = await searchEngine.searchMemberDeclarations(name);
for (var declaration in declarations) {
diff --git a/pkg/analysis_server/lib/src/services/refactoring/move_top_level_to_file.dart b/pkg/analysis_server/lib/src/services/refactoring/move_top_level_to_file.dart
new file mode 100644
index 0000000..0c0bb5b
--- /dev/null
+++ b/pkg/analysis_server/lib/src/services/refactoring/move_top_level_to_file.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// 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 'package:analysis_server/lsp_protocol/protocol_custom_generated.dart';
+import 'package:analysis_server/src/services/refactoring/framework/refactoring_producer.dart';
+import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
+
+/// An object that can compute a refactoring in a Dart file.
+class MoveTopLevelToFile extends RefactoringProducer {
+ @override
+ late String title;
+
+ /// The default path of the file to which the declaration should be moved.
+ late String defaultFilePath;
+
+ /// Initialize a newly created refactoring producer to use the given
+ /// [context].
+ MoveTopLevelToFile(super.context);
+
+ @override
+ String get commandName => 'move_top_level_to_file';
+
+ @override
+ List<CommandParameter> get parameters => [
+ CommandParameter(
+ label: 'Move to:',
+ type: CommandParameterType.filePath,
+ defaultValue: defaultFilePath,
+ ),
+ ];
+
+ @override
+ Future<void> compute(List<String> commandArguments, ChangeBuilder builder) {
+ // TODO: implement compute
+ throw UnimplementedError();
+ }
+
+ @override
+ bool isAvailable() {
+ // TODO: implement isAvailable
+ // TODO: initialize `title` to "Move '$name' to file"
+ // TODO: initialize `defaultFilePath` to a path based on the name of the
+ // declaration.
+ return false;
+ }
+}
diff --git a/pkg/analysis_server/lib/src/services/search/hierarchy.dart b/pkg/analysis_server/lib/src/services/search/hierarchy.dart
index e54709d..6fb64ec 100644
--- a/pkg/analysis_server/lib/src/services/search/hierarchy.dart
+++ b/pkg/analysis_server/lib/src/services/search/hierarchy.dart
@@ -24,7 +24,7 @@
///
/// Includes: fields, accessors and methods.
/// Excludes: constructors and synthetic elements.
-List<Element> getClassMembers(ClassElement clazz, [String? name]) {
+List<Element> getClassMembers(InterfaceElement clazz, [String? name]) {
var members = <Element>[];
visitChildren(clazz, (Element element) {
if (element.isSynthetic) {
@@ -49,7 +49,7 @@
/// Returns a [Set] with direct subclasses of [seed].
Future<Set<ClassElement>> getDirectSubClasses(
- SearchEngine searchEngine, ClassElement seed) async {
+ SearchEngine searchEngine, InterfaceElement seed) async {
var matches = await searchEngine.searchSubtypes(seed);
return matches.map((match) => match.element).cast<ClassElement>().toSet();
}
@@ -96,7 +96,7 @@
if (enclosingElement is ClassElement) {
var name = member.displayName;
var searchClasses = [
- ...enclosingElement.allSupertypes.map((e) => e.element),
+ ...enclosingElement.allSupertypes.map((e) => e.element2),
enclosingElement,
];
for (var superClass in searchClasses) {
@@ -153,9 +153,9 @@
/// Includes: fields, accessors and methods.
///
/// Excludes: constructors and synthetic elements.
-List<Element> getMembers(ClassElement clazz) {
+List<Element> getMembers(InterfaceElement clazz) {
var classElements = [
- ...clazz.allSupertypes.map((e) => e.element),
+ ...clazz.allSupertypes.map((e) => e.element2),
clazz,
];
var members = <Element>[];
diff --git a/pkg/analysis_server/lib/src/services/search/search_engine.dart b/pkg/analysis_server/lib/src/services/search/search_engine.dart
index 850822d..71a3321 100644
--- a/pkg/analysis_server/lib/src/services/search/search_engine.dart
+++ b/pkg/analysis_server/lib/src/services/search/search_engine.dart
@@ -53,8 +53,8 @@
/// Returns all subtypes of the given [type].
///
- /// [type] - the [ClassElement] being subtyped by the found matches.
- Future<Set<ClassElement>> searchAllSubtypes(ClassElement type);
+ /// [type] - the [InterfaceElement] being subtyped by the found matches.
+ Future<Set<InterfaceElement>> searchAllSubtypes(InterfaceElement type);
/// Returns declarations of class members with the given name.
///
@@ -75,7 +75,7 @@
/// Returns direct subtypes of the given [type].
///
/// [type] - the [ClassElement] being subtyped by the found matches.
- Future<List<SearchMatch>> searchSubtypes(ClassElement type);
+ Future<List<SearchMatch>> searchSubtypes(InterfaceElement type);
/// Returns all the top-level declarations matching the given pattern.
///
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 9ed9114..ea6f36c 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
@@ -51,13 +51,13 @@
}
@override
- Future<Set<ClassElement>> searchAllSubtypes(ClassElement type) async {
- var allSubtypes = <ClassElement>{};
+ Future<Set<InterfaceElement>> searchAllSubtypes(InterfaceElement type) async {
+ var allSubtypes = <InterfaceElement>{};
- Future<void> addSubtypes(ClassElement type) async {
+ Future<void> addSubtypes(InterfaceElement type) async {
var directResults = await _searchDirectSubtypes(type);
for (var directResult in directResults) {
- var directSubtype = directResult.enclosingElement as ClassElement;
+ var directSubtype = directResult.enclosingElement as InterfaceElement;
if (allSubtypes.add(directSubtype)) {
await addSubtypes(directSubtype);
}
@@ -106,7 +106,7 @@
}
@override
- Future<List<SearchMatch>> searchSubtypes(ClassElement type) async {
+ Future<List<SearchMatch>> searchSubtypes(InterfaceElement type) async {
var results = await _searchDirectSubtypes(type);
return results.map(SearchMatchImpl.forSearchResult).toList();
}
@@ -133,7 +133,8 @@
return searchedFiles;
}
- Future<List<SearchResult>> _searchDirectSubtypes(ClassElement type) async {
+ Future<List<SearchResult>> _searchDirectSubtypes(
+ InterfaceElement type) async {
var allResults = <SearchResult>[];
var drivers = _drivers.toList();
var searchedFiles = _createSearchedFiles(drivers);
diff --git a/pkg/analysis_server/lib/src/status/diagnostics.dart b/pkg/analysis_server/lib/src/status/diagnostics.dart
index 9255b71..1be0245 100644
--- a/pkg/analysis_server/lib/src/status/diagnostics.dart
+++ b/pkg/analysis_server/lib/src/status/diagnostics.dart
@@ -516,8 +516,12 @@
h3('Pub files');
buf.writeln('<p>');
+
+ var packageConfig = folder
+ .getChildAssumingFolder(file_paths.dotDartTool)
+ .getChildAssumingFile(file_paths.packageConfigJson);
buf.writeln(
- writeOption('Has .packages file', folder.getChild('.packages').exists));
+ writeOption('Has package_config.json file', packageConfig.exists));
buf.writeln(writeOption('Has pubspec.yaml file',
folder.getChild(file_paths.pubspecYaml).exists));
buf.writeln('</p>');
diff --git a/pkg/analysis_server/lib/src/status/element_writer.dart b/pkg/analysis_server/lib/src/status/element_writer.dart
index 8b034ed..61fbaef 100644
--- a/pkg/analysis_server/lib/src/status/element_writer.dart
+++ b/pkg/analysis_server/lib/src/status/element_writer.dart
@@ -41,7 +41,7 @@
properties['hasNonFinalField'] = element.hasNonFinalField;
properties['interfaces'] = element.interfaces;
properties['isAbstract'] = element.isAbstract;
- properties['isEnum'] = element.isEnum;
+ properties['isEnum'] = element is EnumElement;
properties['isMixinApplication'] = element.isMixinApplication;
properties['isValidMixin'] = element.isValidMixin;
properties['mixins'] = element.mixins;
diff --git a/pkg/analysis_server/lib/src/utilities/extensions/completion_request.dart b/pkg/analysis_server/lib/src/utilities/extensions/completion_request.dart
index 85066d4..81ca349 100644
--- a/pkg/analysis_server/lib/src/utilities/extensions/completion_request.dart
+++ b/pkg/analysis_server/lib/src/utilities/extensions/completion_request.dart
@@ -15,7 +15,7 @@
///
/// TODO(scheglov) Validate that suggesting a tear-off instead of invocation
/// is statistically a good choice.
- bool shouldSuggestTearOff(ClassElement element) {
+ bool shouldSuggestTearOff(InterfaceElement element) {
if (!libraryElement.featureSet.isEnabled(Feature.constructor_tearoffs)) {
return false;
}
diff --git a/pkg/analysis_server/lib/src/utilities/flutter.dart b/pkg/analysis_server/lib/src/utilities/flutter.dart
index 04f94a6..26d5fb8 100644
--- a/pkg/analysis_server/lib/src/utilities/flutter.dart
+++ b/pkg/analysis_server/lib/src/utilities/flutter.dart
@@ -293,22 +293,22 @@
return false;
}
- bool isColorElement(ClassElement element) {
- bool isExactColor(ClassElement element) =>
+ bool isColorElement(InterfaceElement element) {
+ bool isExactColor(InterfaceElement element) =>
element.name == 'Color' && element.library.name == 'dart.ui';
if (isExactColor(element)) {
return true;
}
for (var type in element.allSupertypes) {
- if (isExactColor(type.element)) {
+ if (isExactColor(type.element2)) {
return true;
}
}
return false;
}
- return isColorElement(type.element);
+ return isColorElement(type.element2);
}
/// Return `true` if the given [type] is the flutter mixin `Diagnosticable`
@@ -318,8 +318,8 @@
return false;
}
- bool isDiagnosticableElement(ClassElement element) {
- bool isExactDiagnosticable(ClassElement element) =>
+ bool isDiagnosticableElement(InterfaceElement element) {
+ bool isExactDiagnosticable(InterfaceElement element) =>
element.name == 'Diagnosticable' &&
element.source.uri == _uriDiagnostics;
@@ -327,14 +327,14 @@
return true;
}
for (var type in element.allSupertypes) {
- if (isExactDiagnosticable(type.element)) {
+ if (isExactDiagnosticable(type.element2)) {
return true;
}
}
return false;
}
- return isDiagnosticableElement(type.element);
+ return isDiagnosticableElement(type.element2);
}
/// Return `true` if the [element] is the Flutter class `Alignment`.
@@ -349,14 +349,14 @@
}
/// Return `true` if the [element] is the Flutter class `AlignmentGeometry`.
- bool isExactAlignmentGeometry(ClassElement element) {
+ bool isExactAlignmentGeometry(InterfaceElement element) {
return _isExactWidget(element, 'AlignmentGeometry', _uriAlignment);
}
/// Return `true` if the [type] is the Flutter type `EdgeInsetsGeometry`.
bool isExactEdgeInsetsGeometryType(DartType type) {
return type is InterfaceType &&
- _isExactWidget(type.element, 'EdgeInsetsGeometry', _uriEdgeInsets);
+ _isExactWidget(type.element2, 'EdgeInsetsGeometry', _uriEdgeInsets);
}
/// Return `true` if the [node] is creation of `Align`.
@@ -380,13 +380,13 @@
/// Return `true` if the given [type] is the Flutter class `StatefulWidget`.
bool isExactlyStatefulWidgetType(DartType? type) {
return type is InterfaceType &&
- _isExactWidget(type.element, _nameStatefulWidget, _uriFramework);
+ _isExactWidget(type.element2, _nameStatefulWidget, _uriFramework);
}
/// Return `true` if the given [type] is the Flutter class `StatelessWidget`.
bool isExactlyStatelessWidgetType(DartType type) {
return type is InterfaceType &&
- _isExactWidget(type.element, _nameStatelessWidget, _uriFramework);
+ _isExactWidget(type.element2, _nameStatelessWidget, _uriFramework);
}
/// Return `true` if the given [element] is the Flutter class `State`.
@@ -397,43 +397,43 @@
/// Return `true` if the given [type] is the Flutter class `Align`.
bool isExactWidgetTypeAlign(DartType? type) {
return type is InterfaceType &&
- _isExactWidget(type.element, _nameAlign, _uriBasic);
+ _isExactWidget(type.element2, _nameAlign, _uriBasic);
}
/// Return `true` if the given [type] is the Flutter class `StreamBuilder`.
bool isExactWidgetTypeBuilder(DartType type) {
return type is InterfaceType &&
- _isExactWidget(type.element, _nameBuilder, _uriBasic);
+ _isExactWidget(type.element2, _nameBuilder, _uriBasic);
}
/// Return `true` if the given [type] is the Flutter class `Center`.
bool isExactWidgetTypeCenter(DartType type) {
return type is InterfaceType &&
- _isExactWidget(type.element, _nameCenter, _uriBasic);
+ _isExactWidget(type.element2, _nameCenter, _uriBasic);
}
/// Return `true` if the given [type] is the Flutter class `Container`.
bool isExactWidgetTypeContainer(DartType? type) {
return type is InterfaceType &&
- _isExactWidget(type.element, _nameContainer, _uriContainer);
+ _isExactWidget(type.element2, _nameContainer, _uriContainer);
}
/// Return `true` if the given [type] is the Flutter class `Padding`.
bool isExactWidgetTypePadding(DartType? type) {
return type is InterfaceType &&
- _isExactWidget(type.element, _namePadding, _uriBasic);
+ _isExactWidget(type.element2, _namePadding, _uriBasic);
}
/// Return `true` if the given [type] is the Flutter class `SizedBox`.
bool isExactWidgetTypeSizedBox(DartType type) {
return type is InterfaceType &&
- _isExactWidget(type.element, _nameSizedBox, _uriBasic);
+ _isExactWidget(type.element2, _nameSizedBox, _uriBasic);
}
/// Return `true` if the given [type] is the Flutter class `StreamBuilder`.
bool isExactWidgetTypeStreamBuilder(DartType type) {
return type is InterfaceType &&
- _isExactWidget(type.element, _nameStreamBuilder, _uriAsync);
+ _isExactWidget(type.element2, _nameStreamBuilder, _uriAsync);
}
/// Return `true` if the given [type] is the Flutter class `Widget`, or its
@@ -451,22 +451,22 @@
return false;
}
- bool isMatrix4Element(ClassElement element) {
- bool isExactMatrix4(ClassElement element) =>
+ bool isMatrix4Element(InterfaceElement element) {
+ bool isExactMatrix4(InterfaceElement element) =>
element.name == 'Matrix4' && element.library.name == 'vector_math_64';
if (isExactMatrix4(element)) {
return true;
}
for (var type in element.allSupertypes) {
- if (isExactMatrix4(type.element)) {
+ if (isExactMatrix4(type.element2)) {
return true;
}
}
return false;
}
- return isMatrix4Element(type.element);
+ return isMatrix4Element(type.element2);
}
/// Return `true` if the given [element] has the Flutter class `State` as
@@ -494,7 +494,7 @@
return true;
}
for (var type in element.allSupertypes) {
- if (_isExactWidget(type.element, _nameWidget, _uriFramework)) {
+ if (_isExactWidget(type.element2, _nameWidget, _uriFramework)) {
return true;
}
}
@@ -532,7 +532,7 @@
/// Return `true` if the given [type] is the Flutter class `Widget`, or its
/// subtype.
bool isWidgetType(DartType? type) {
- return type is InterfaceType && isWidget(type.element);
+ return type is InterfaceType && isWidget(type.element2);
}
/// Return `true` if the given [element] has a supertype with the
@@ -543,8 +543,8 @@
return false;
}
for (var type in element.allSupertypes) {
- if (type.element.name == requiredName) {
- var uri = type.element.source.uri;
+ if (type.element2.name == requiredName) {
+ var uri = type.element2.source.uri;
if (uri == requiredUri) {
return true;
}
diff --git a/pkg/analysis_server/test/services/search/search_engine_test.dart b/pkg/analysis_server/test/services/search/search_engine_test.dart
index 71b35a2..754cb95 100644
--- a/pkg/analysis_server/test/services/search/search_engine_test.dart
+++ b/pkg/analysis_server/test/services/search/search_engine_test.dart
@@ -585,8 +585,14 @@
}
}
- static void _assertContainsClass(Set<ClassElement> subtypes, String name) {
- expect(subtypes, contains(predicate((ClassElement e) => e.name == name)));
+ static void _assertContainsClass(
+ Set<InterfaceElement> subtypes, String name) {
+ expect(
+ subtypes,
+ contains(
+ predicate((InterfaceElement e) => e.name == name),
+ ),
+ );
}
}
diff --git a/pkg/analysis_server/tool/bulk_fix/parse_utils.dart b/pkg/analysis_server/tool/bulk_fix/parse_utils.dart
index 033dc78..ab93c6f 100644
--- a/pkg/analysis_server/tool/bulk_fix/parse_utils.dart
+++ b/pkg/analysis_server/tool/bulk_fix/parse_utils.dart
@@ -32,7 +32,7 @@
var classElement = classDecl.declaredElement;
if (classElement != null &&
classElement.allSupertypes.any(
- (element) => element.element.name == 'CorrectionProducer')) {
+ (element) => element.element2.name == 'CorrectionProducer')) {
var correctionName = classDecl.name2.lexeme;
for (var method in classDecl.members.whereType<MethodDeclaration>()) {
diff --git a/pkg/analysis_server/tool/code_completion/completion_metrics.dart b/pkg/analysis_server/tool/code_completion/completion_metrics.dart
index cf0c112..c651b9e 100644
--- a/pkg/analysis_server/tool/code_completion/completion_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/completion_metrics.dart
@@ -28,11 +28,13 @@
ClassMemberElement,
CompilationUnitElement,
Element,
+ EnumElement,
ExecutableElement,
ExtensionElement,
FieldElement,
FunctionElement,
LocalVariableElement,
+ MixinElement,
ParameterElement,
PrefixElement,
TypeParameterElement,
@@ -1711,12 +1713,12 @@
element is! ExtensionElement) {
return CompletionGroup.topLevelMember;
}
- if (element is ClassElement) {
- if (element.isEnum) {
- return CompletionGroup.enumElement;
- } else if (element.isMixin) {
- return CompletionGroup.mixinElement;
- }
+
+ if (element is EnumElement) {
+ return CompletionGroup.enumElement;
+ } else if (element is MixinElement) {
+ return CompletionGroup.mixinElement;
+ } else if (element is ClassElement) {
if (entity is SimpleIdentifier &&
entity.parent is NamedType &&
entity.parent!.parent is ConstructorName &&
diff --git a/pkg/analysis_server/tool/code_completion/relevance_metrics.dart b/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
index 34fb4a9..d74f7f7 100644
--- a/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
+++ b/pkg/analysis_server/tool/code_completion/relevance_metrics.dart
@@ -22,6 +22,7 @@
Element,
ExecutableElement,
ExtensionElement,
+ InterfaceElement,
LibraryElement,
LocalVariableElement,
ParameterElement,
@@ -1570,7 +1571,7 @@
return;
}
if (targetType is InterfaceType) {
- var targetClass = targetType.element;
+ var targetClass = targetType.element2;
var extension = member.thisOrAncestorOfType<ExtensionElement>();
if (extension != null) {
_recordDistance('member (extension)', 0);
@@ -1585,19 +1586,23 @@
/// superclasses caused by mixins.
int getSuperclassDepth() {
var depth = 0;
- ClassElement? currentClass = targetClass;
+ InterfaceElement? currentClass = targetClass;
while (currentClass != null) {
if (currentClass == memberClass) {
return depth;
}
for (var mixin in currentClass.mixins.reversed) {
depth++;
- if (mixin.element == memberClass) {
+ if (mixin.element2 == memberClass) {
return depth;
}
}
depth++;
- currentClass = currentClass.supertype?.element;
+ if (currentClass is ClassElement) {
+ currentClass = currentClass.supertype?.element2;
+ } else {
+ currentClass = null;
+ }
}
return -1;
}
@@ -1606,10 +1611,14 @@
/// includes all of the implicit superclasses caused by mixins.
int getTargetDepth() {
var depth = 0;
- ClassElement? currentClass = targetClass;
+ InterfaceElement? currentClass = targetClass;
while (currentClass != null) {
depth += currentClass.mixins.length + 1;
- currentClass = currentClass.supertype?.element;
+ if (currentClass is ClassElement) {
+ currentClass = currentClass.supertype?.element2;
+ } else {
+ break;
+ }
}
return depth;
}
@@ -1816,20 +1825,20 @@
argumentType is InterfaceType &&
parameterType is InterfaceType) {
int distance;
- if (parameterType.element == typeProvider.futureOrElement) {
+ if (parameterType.element2 == typeProvider.futureOrElement) {
var typeArgument = parameterType.typeArguments[0];
distance = featureComputer.inheritanceDistance(
- argumentType.element, typeProvider.futureElement);
+ argumentType.element2, typeProvider.futureElement);
if (typeArgument is InterfaceType) {
var argDistance = featureComputer.inheritanceDistance(
- argumentType.element, typeArgument.element);
+ argumentType.element2, typeArgument.element2);
if (distance < 0 || (argDistance >= 0 && argDistance < distance)) {
distance = argDistance;
}
}
} else {
distance = featureComputer.inheritanceDistance(
- argumentType.element, parameterType.element);
+ argumentType.element2, parameterType.element2);
}
data.recordDistance('Subtype of context type ($descriptor)', distance);
data.recordDistance('Subtype of context type (all)', distance);
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 17610dd..49105bc 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -18,6 +18,8 @@
* Deprecated `Element.enclosingElement2`, use `enclosingElement3` instead. The meaningful change is that
`ConstructorElement.enclosingElement3` returns now `IntefaceElement`, not `ClassElement`.
* Deprecated `get enums/mixin`, use `get enums2/mixins2` instead.
+* Deprecated `DartType.element`, check for `InterfaceType`, `TypeParameterType`, and then ask the element.
+* Deprecated `ClassElement.isEnum` and `isMixin`. Check for `is EnumElement` and `is MixinElement` instead.
## 4.3.1
* Fix `identifier` for `LibraryExportElement` and `LibraryImportElement`.
diff --git a/pkg/analyzer/lib/dart/element/element.dart b/pkg/analyzer/lib/dart/element/element.dart
index 76ea504..b389c48 100644
--- a/pkg/analyzer/lib/dart/element/element.dart
+++ b/pkg/analyzer/lib/dart/element/element.dart
@@ -82,24 +82,12 @@
/// The result of applying augmentations to a [ClassElement].
///
/// Clients may not extend, implement or mix-in this class.
-abstract class AugmentedClassElement implements AugmentedInterfaceElement {
- /// Returns mixins applied by this class or in its augmentations.
- ///
- /// This is a union of mixins applied by the class declaration and all its
- /// augmentations.
- List<InterfaceType> get mixins;
-}
+abstract class AugmentedClassElement implements AugmentedInterfaceElement {}
/// The result of applying augmentations to a [EnumElement].
///
/// Clients may not extend, implement or mix-in this class.
-abstract class AugmentedEnumElement implements AugmentedInterfaceElement {
- /// Returns mixins applied by this class or in its augmentations.
- ///
- /// This is a union of mixins applied by the class declaration and all its
- /// augmentations.
- List<InterfaceType> get mixins;
-}
+abstract class AugmentedEnumElement implements AugmentedInterfaceElement {}
/// The result of applying augmentations to a [InterfaceElement].
///
@@ -141,6 +129,12 @@
/// [MethodElement]s are appended.
List<MethodElement> get methods;
+ /// Returns mixins applied by this class or in its augmentations.
+ ///
+ /// This is a union of mixins applied by the class declaration and all its
+ /// augmentations.
+ List<InterfaceType> get mixins;
+
/// Returns the unnamed constructor from [constructors].
ConstructorElement? get unnamedConstructor;
@@ -197,18 +191,6 @@
_TmpSharedClassElement {
/// Returns the result of applying augmentations to this class.
AugmentedClassElement get augmented;
-
- /// Return the superclass of this class, or `null` if either the class
- /// represents the class 'Object'. If the superclass was not explicitly
- /// declared then the implicit superclass 'Object' will be returned.
- ///
- /// <b>Note:</b> Because the element model represents the state of the code,
- /// it is possible for it to be semantically invalid. In particular, it is not
- /// safe to assume that the inheritance structure of a class does not contain
- /// a cycle. Clients that traverse the inheritance structure must explicitly
- /// guard against infinite loops.
- @override
- InterfaceType? get supertype;
}
/// An element that is contained within a [ClassElement].
@@ -1103,10 +1085,6 @@
_TmpSharedClassElement {
/// Returns the result of applying augmentations to this element.
AugmentedEnumElement get augmented;
-
- /// Returns `Enum` from `dart:core`.
- @override
- InterfaceType? get supertype;
}
/// Shared interface between [EnumElement] and [EnumAugmentationElement].
@@ -1405,6 +1383,23 @@
/// superclass constraints.
List<InterfaceType> get allSupertypes;
+ /// Return the superclass of this element.
+ ///
+ /// For [ClassElement] returns `null` only if this class is `Object`. If the
+ /// superclass is not explicitly specified, or the superclass cannot be
+ /// resolved, then the implicit superclass `Object` is returned.
+ ///
+ /// For [EnumElement] returns `Enum` from `dart:core`.
+ ///
+ /// For [MixinElement] always returns `null`.
+ ///
+ /// <b>Note:</b> Because the element model represents the state of the code,
+ /// it is possible for it to be semantically invalid. In particular, it is not
+ /// safe to assume that the inheritance structure of a class does not contain
+ /// a cycle. Clients that traverse the inheritance structure must explicitly
+ /// guard against infinite loops.
+ InterfaceType? get supertype;
+
/// Return the type of `this` expression for this element.
///
/// For a class like `class MyClass<T, U> {}` the returned type is equivalent
@@ -1452,6 +1447,24 @@
required NullabilitySuffix nullabilitySuffix,
});
+ /// Return the element representing the method that results from looking up
+ /// the given [methodName] in this class with respect to the given [library],
+ /// ignoring abstract methods, or `null` if the look up fails. The behavior of
+ /// this method is defined by the Dart Language Specification in section
+ /// 16.15.1:
+ /// <blockquote>
+ /// The result of looking up method <i>m</i> in class <i>C</i> with respect to
+ /// library <i>L</i> is: If <i>C</i> declares an instance method named
+ /// <i>m</i> that is accessible to <i>L</i>, then that method is the result of
+ /// the lookup. Otherwise, if <i>C</i> has a superclass <i>S</i>, then the
+ /// result of the lookup is the result of looking up method <i>m</i> in
+ /// <i>S</i> with respect to <i>L</i>. Otherwise, we say that the lookup has
+ /// failed.
+ /// </blockquote>
+ /// TODO(scheglov) Deprecate and remove it.
+ MethodElement? lookUpConcreteMethod(
+ String methodName, LibraryElement library);
+
/// Return the element representing the getter that results from looking up
/// the given [getterName] in this class with respect to the given [library],
/// or `null` if the look up fails. The behavior of this method is defined by
@@ -1502,6 +1515,24 @@
/// </blockquote>
/// TODO(scheglov) Deprecate and remove it.
MethodElement? lookUpMethod(String methodName, LibraryElement library);
+
+ /// Return the element representing the setter that results from looking up
+ /// the given [setterName] in this class with respect to the given [library],
+ /// or `null` if the look up fails. The behavior of this method is defined by
+ /// the Dart Language Specification in section 16.15.2:
+ /// <blockquote>
+ /// The result of looking up getter (respectively setter) <i>m</i> in class
+ /// <i>C</i> with respect to library <i>L</i> is: If <i>C</i> declares an
+ /// instance getter (respectively setter) named <i>m</i> that is accessible to
+ /// <i>L</i>, then that getter (respectively setter) is the result of the
+ /// lookup. Otherwise, if <i>C</i> has a superclass <i>S</i>, then the result
+ /// of the lookup is the result of looking up getter (respectively setter)
+ /// <i>m</i> in <i>S</i> with respect to <i>L</i>. Otherwise, we say that the
+ /// lookup has failed.
+ /// </blockquote>
+ /// TODO(scheglov) Deprecate and remove it.
+ PropertyAccessorElement? lookUpSetter(
+ String setterName, LibraryElement library);
}
/// Shared interface between [InterfaceElement] and augmentations.
@@ -1551,6 +1582,10 @@
/// Return a list containing all of the mixins that are applied to the class
/// being extended in order to derive the superclass of this class.
///
+ /// [ClassElement] and [EnumElement] can have mixins.
+ ///
+ /// [MixinElement] cannot have mixins, so the empty list is returned.
+ ///
/// <b>Note:</b> Because the element model represents the state of the code,
/// it is possible for it to be semantically invalid. In particular, it is not
/// safe to assume that the inheritance structure of a class does not contain
@@ -2454,9 +2489,11 @@
bool get isDartCoreObject;
/// Return `true` if this class is defined by an enum declaration.
+ @Deprecated('Use `is EnumElement` instead')
bool get isEnum;
/// Return `true` if this class is defined by a mixin declaration.
+ @Deprecated('Use `is MixinElement` instead')
bool get isMixin;
/// Return `true` if this class is a mixin application. A class is a mixin
@@ -2491,37 +2528,6 @@
/// TODO(scheglov) Deprecate and remove it.
List<InterfaceType> get superclassConstraints;
- /// Return the superclass of this class, or `null` if either the class
- /// represents the class 'Object' or if the class represents a mixin
- /// declaration. All other classes will have a non-`null` superclass. If the
- /// superclass was not explicitly declared then the implicit superclass
- /// 'Object' will be returned.
- ///
- /// <b>Note:</b> Because the element model represents the state of the code,
- /// it is possible for it to be semantically invalid. In particular, it is not
- /// safe to assume that the inheritance structure of a class does not contain
- /// a cycle. Clients that traverse the inheritance structure must explicitly
- /// guard against infinite loops.
- InterfaceType? get supertype;
-
- /// Return the element representing the method that results from looking up
- /// the given [methodName] in this class with respect to the given [library],
- /// ignoring abstract methods, or `null` if the look up fails. The behavior of
- /// this method is defined by the Dart Language Specification in section
- /// 16.15.1:
- /// <blockquote>
- /// The result of looking up method <i>m</i> in class <i>C</i> with respect to
- /// library <i>L</i> is: If <i>C</i> declares an instance method named
- /// <i>m</i> that is accessible to <i>L</i>, then that method is the result of
- /// the lookup. Otherwise, if <i>C</i> has a superclass <i>S</i>, then the
- /// result of the lookup is the result of looking up method <i>m</i> in
- /// <i>S</i> with respect to <i>L</i>. Otherwise, we say that the lookup has
- /// failed.
- /// </blockquote>
- /// TODO(scheglov) Deprecate and remove it.
- MethodElement? lookUpConcreteMethod(
- String methodName, LibraryElement library);
-
/// Return the element representing the getter that results from looking up
/// the given [getterName] in the superclass of this class with respect to the
/// given [library], ignoring abstract getters, or `null` if the look up
@@ -2577,22 +2583,4 @@
/// TODO(scheglov) Deprecate and remove it.
PropertyAccessorElement? lookUpInheritedConcreteSetter(
String setterName, LibraryElement library);
-
- /// Return the element representing the setter that results from looking up
- /// the given [setterName] in this class with respect to the given [library],
- /// or `null` if the look up fails. The behavior of this method is defined by
- /// the Dart Language Specification in section 16.15.2:
- /// <blockquote>
- /// The result of looking up getter (respectively setter) <i>m</i> in class
- /// <i>C</i> with respect to library <i>L</i> is: If <i>C</i> declares an
- /// instance getter (respectively setter) named <i>m</i> that is accessible to
- /// <i>L</i>, then that getter (respectively setter) is the result of the
- /// lookup. Otherwise, if <i>C</i> has a superclass <i>S</i>, then the result
- /// of the lookup is the result of looking up getter (respectively setter)
- /// <i>m</i> in <i>S</i> with respect to <i>L</i>. Otherwise, we say that the
- /// lookup has failed.
- /// </blockquote>
- /// TODO(scheglov) Deprecate and remove it.
- PropertyAccessorElement? lookUpSetter(
- String setterName, LibraryElement library);
}
diff --git a/pkg/analyzer/lib/dart/element/type.dart b/pkg/analyzer/lib/dart/element/type.dart
index 806186f..c38d702 100644
--- a/pkg/analyzer/lib/dart/element/type.dart
+++ b/pkg/analyzer/lib/dart/element/type.dart
@@ -44,6 +44,7 @@
/// the type has not, or cannot, be associated with an element. The former
/// case will occur if the element model is not yet complete; the latter case
/// will occur if this object represents an undefined type.
+ @Deprecated('Check for specific DartType subtype and use element2 instead')
Element? get element;
/// Return `true` if this type represents the bottom type.
@@ -155,7 +156,7 @@
///
/// For a [TypeParameterType] with a bound (declared or promoted), returns
/// the interface implemented by the bound.
- InterfaceType? asInstanceOf(ClassElement element);
+ InterfaceType? asInstanceOf(InterfaceElement element);
/// Return the presentation of this type as it should appear when presented
/// to users in contexts such as error messages.
@@ -277,9 +278,13 @@
/// Return a list containing all of the constructors declared in this type.
List<ConstructorElement> get constructors;
+ @Deprecated('Use element2 instead')
@override
ClassElement get element;
+ /// Return the element representing the declaration of this type.
+ InterfaceElement get element2;
+
/// Return a list containing all of the interfaces that are implemented by
/// this interface. Note that this is <b>not</b>, in general, equivalent to
/// getting the interfaces from this type's element because the types returned
@@ -391,7 +396,10 @@
}
/// The type `Never` represents the uninhabited bottom type.
-abstract class NeverType implements DartType {}
+abstract class NeverType implements DartType {
+ @override
+ Element get element;
+}
/// A type that can track substituted type parameters, either for itself after
/// instantiation, or from a surrounding context.
diff --git a/pkg/analyzer/lib/dart/element/type_provider.dart b/pkg/analyzer/lib/dart/element/type_provider.dart
index e75d460..a9d39d9 100644
--- a/pkg/analyzer/lib/dart/element/type_provider.dart
+++ b/pkg/analyzer/lib/dart/element/type_provider.dart
@@ -82,7 +82,7 @@
InterfaceType get mapObjectObjectType;
/// Return the type representing the built-in type `Never`.
- DartType get neverType;
+ NeverType get neverType;
/// Return the element representing the built-in class `Null`.
ClassElement get nullElement;
@@ -138,7 +138,7 @@
InterfaceType futureType(DartType valueType);
/// Return `true` if [element] cannot be extended, implemented, or mixed in.
- bool isNonSubtypableClass(ClassElement element);
+ bool isNonSubtypableClass(InterfaceElement element);
/// Return 'true' if [id] is the name of a getter on the `Object` type.
bool isObjectGetter(String id);
diff --git a/pkg/analyzer/lib/error/listener.dart b/pkg/analyzer/lib/error/listener.dart
index 5cb89c2..4dc82be 100644
--- a/pkg/analyzer/lib/error/listener.dart
+++ b/pkg/analyzer/lib/error/listener.dart
@@ -299,7 +299,7 @@
addElementsFrom(parameter.type);
}
} else if (type is InterfaceType) {
- if (elements.add(type.element)) {
+ if (elements.add(type.element2)) {
for (DartType typeArgument in type.typeArguments) {
addElementsFrom(typeArgument);
}
diff --git a/pkg/analyzer/lib/src/dart/analysis/index.dart b/pkg/analyzer/lib/src/dart/analysis/index.dart
index e0ab233..b83db32 100644
--- a/pkg/analyzer/lib/src/dart/analysis/index.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/index.dart
@@ -153,7 +153,7 @@
elementKind == ElementKind.SETTER) {
var accessor = element as PropertyAccessorElement;
Element enclosing = element.enclosingElement3;
- bool isEnumGetter = enclosing is ClassElement && enclosing.isEnum;
+ bool isEnumGetter = enclosing is EnumElement;
if (isEnumGetter && accessor.name == 'index') {
kind = IndexSyntheticElementKind.enumIndex;
element = enclosing;
@@ -168,7 +168,7 @@
}
} else if (element is MethodElement) {
Element enclosing = element.enclosingElement3;
- bool isEnumMethod = enclosing is ClassElement && enclosing.isEnum;
+ bool isEnumMethod = enclosing is EnumElement;
if (isEnumMethod && element.name == 'toString') {
kind = IndexSyntheticElementKind.enumToString;
element = enclosing;
@@ -563,7 +563,7 @@
_addSubtypeForClassDeclaration(node);
var declaredElement = node.declaredElement!;
if (node.extendsClause == null) {
- ClassElement? objectElement = declaredElement.supertype?.element;
+ final objectElement = declaredElement.supertype?.element2;
recordRelationOffset(objectElement, IndexRelationKind.IS_EXTENDED_BY,
node.name2.offset, 0, true);
}
@@ -1024,8 +1024,8 @@
return parent is Combinator || parent is Label;
}
- void _recordIsAncestorOf(Element descendant, ClassElement ancestor,
- bool includeThis, List<ClassElement> visitedElements) {
+ void _recordIsAncestorOf(Element descendant, InterfaceElement ancestor,
+ bool includeThis, List<InterfaceElement> visitedElements) {
if (visitedElements.contains(ancestor)) {
return;
}
@@ -1037,21 +1037,26 @@
ancestor, IndexRelationKind.IS_ANCESTOR_OF, offset, length, false);
}
{
- var superType = ancestor.supertype;
- if (superType != null) {
- _recordIsAncestorOf(
- descendant, superType.element, true, visitedElements);
+ if (ancestor is ClassElement) {
+ var superType = ancestor.supertype;
+ if (superType != null) {
+ _recordIsAncestorOf(
+ descendant, superType.element2, true, visitedElements);
+ }
}
}
for (InterfaceType mixinType in ancestor.mixins) {
- _recordIsAncestorOf(descendant, mixinType.element, true, visitedElements);
+ _recordIsAncestorOf(
+ descendant, mixinType.element2, true, visitedElements);
}
- for (InterfaceType type in ancestor.superclassConstraints) {
- _recordIsAncestorOf(descendant, type.element, true, visitedElements);
+ if (ancestor is MixinElement) {
+ for (InterfaceType type in ancestor.superclassConstraints) {
+ _recordIsAncestorOf(descendant, type.element2, true, visitedElements);
+ }
}
for (InterfaceType implementedType in ancestor.interfaces) {
_recordIsAncestorOf(
- descendant, implementedType.element, true, visitedElements);
+ descendant, implementedType.element2, true, visitedElements);
}
}
}
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index 6a385ff..d166d04 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -31,12 +31,18 @@
}
DeclarationKind? _getSearchElementKind(Element element) {
+ if (element is EnumElement) {
+ return DeclarationKind.ENUM;
+ }
+
+ if (element is MixinElement) {
+ return DeclarationKind.MIXIN;
+ }
+
if (element is ClassElement) {
- if (element.isEnum) {
- return DeclarationKind.ENUM;
+ if (element.isMixinApplication) {
+ return DeclarationKind.CLASS_TYPE_ALIAS;
}
- if (element.isMixin) return DeclarationKind.MIXIN;
- if (element.isMixinApplication) return DeclarationKind.CLASS_TYPE_ALIAS;
return DeclarationKind.CLASS;
}
@@ -286,7 +292,7 @@
/// [Search] object, so should be only searched by it to avoid duplicate
/// results; and updated to take ownership if the file is not owned yet.
Future<List<SearchResult>> subTypes(
- ClassElement? type, SearchedFiles searchedFiles) async {
+ InterfaceElement? type, SearchedFiles searchedFiles) async {
if (type == null) {
return const <SearchResult>[];
}
@@ -918,14 +924,12 @@
String? className;
String? mixinName;
- if (enclosing is ClassElement) {
- if (enclosing.isEnum) {
- // skip
- } else if (enclosing.isMixin) {
- mixinName = enclosing.name;
- } else {
- className = enclosing.name;
- }
+ if (enclosing is EnumElement) {
+ // skip
+ } else if (enclosing is MixinElement) {
+ mixinName = enclosing.name;
+ } else if (enclosing is ClassElement) {
+ className = enclosing.name;
}
var kind = _getSearchElementKind(element);
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index cd5207b..6011235 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -3530,14 +3530,16 @@
Token semicolon;
/// Initialize a newly created do loop.
- DoStatementImpl(
- this.doKeyword,
- this._body,
- this.whileKeyword,
- this.leftParenthesis,
- this._condition,
- this.rightParenthesis,
- this.semicolon) {
+ DoStatementImpl({
+ required this.doKeyword,
+ required StatementImpl body,
+ required this.whileKeyword,
+ required this.leftParenthesis,
+ required ExpressionImpl condition,
+ required this.rightParenthesis,
+ required this.semicolon,
+ }) : _body = body,
+ _condition = condition {
_becomeParentOf(_body);
_becomeParentOf(_condition);
}
@@ -3591,7 +3593,9 @@
final NodeListImpl<SimpleIdentifier> _components = NodeListImpl._();
/// Initialize a newly created dotted name.
- DottedNameImpl(List<SimpleIdentifier> components) {
+ DottedNameImpl({
+ required List<SimpleIdentifier> components,
+ }) {
_components._initialize(this, components);
}
@@ -3636,7 +3640,10 @@
double value;
/// Initialize a newly created floating point literal.
- DoubleLiteralImpl(this.literal, this.value);
+ DoubleLiteralImpl({
+ required this.literal,
+ required this.value,
+ });
@override
Token get beginToken => literal;
@@ -3675,7 +3682,9 @@
Token semicolon;
/// Initialize a newly created function body.
- EmptyFunctionBodyImpl(this.semicolon);
+ EmptyFunctionBodyImpl({
+ required this.semicolon,
+ });
@override
Token get beginToken => semicolon;
@@ -3710,7 +3719,9 @@
Token semicolon;
/// Initialize a newly created empty statement.
- EmptyStatementImpl(this.semicolon);
+ EmptyStatementImpl({
+ required this.semicolon,
+ });
@override
Token get beginToken => semicolon;
@@ -4093,8 +4104,13 @@
/// Initialize a newly created function body consisting of a block of
/// statements. The [keyword] can be `null` if the function body is not an
/// async function body.
- ExpressionFunctionBodyImpl(this.keyword, this.star, this.functionDefinition,
- this._expression, this.semicolon) {
+ ExpressionFunctionBodyImpl({
+ required this.keyword,
+ required this.star,
+ required this.functionDefinition,
+ required ExpressionImpl expression,
+ required this.semicolon,
+ }) : _expression = expression {
_becomeParentOf(_expression);
}
diff --git a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
index e75df71..acd41d7 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast_factory.dart
@@ -37,53 +37,9 @@
CommentImpl.createDocumentationCommentWithReferences(
tokens, references ?? <CommentReference>[]);
- DoStatementImpl doStatement(
- Token doKeyword,
- Statement body,
- Token whileKeyword,
- Token leftParenthesis,
- Expression condition,
- Token rightParenthesis,
- Token semicolon) =>
- DoStatementImpl(
- doKeyword,
- body as StatementImpl,
- whileKeyword,
- leftParenthesis,
- condition as ExpressionImpl,
- rightParenthesis,
- semicolon);
-
- DottedNameImpl dottedName(List<SimpleIdentifier> components) =>
- DottedNameImpl(components);
-
- DoubleLiteralImpl doubleLiteral(Token literal, double value) =>
- DoubleLiteralImpl(literal, value);
-
- EmptyFunctionBodyImpl emptyFunctionBody(Token semicolon) =>
- EmptyFunctionBodyImpl(semicolon);
-
- EmptyStatementImpl emptyStatement(Token semicolon) =>
- EmptyStatementImpl(semicolon);
-
CommentImpl endOfLineComment(List<Token> tokens) =>
CommentImpl.createEndOfLineComment(tokens);
- ExpressionFunctionBodyImpl expressionFunctionBody(Token? keyword,
- Token functionDefinition, Expression expression, Token? semicolon) =>
- ExpressionFunctionBodyImpl(keyword, null, functionDefinition,
- expression as ExpressionImpl, semicolon);
-
- ExpressionFunctionBodyImpl expressionFunctionBody2({
- Token? keyword,
- Token? star,
- required Token functionDefinition,
- required Expression expression,
- Token? semicolon,
- }) =>
- ExpressionFunctionBodyImpl(keyword, star, functionDefinition,
- expression as ExpressionImpl, semicolon);
-
ExpressionStatementImpl expressionStatement(
Expression expression, Token? semicolon) =>
ExpressionStatementImpl(expression as ExpressionImpl, semicolon);
diff --git a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
index e197e85..ba54b14 100644
--- a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
+++ b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
@@ -369,7 +369,7 @@
}
// prepare ClassElement
if (type is InterfaceType) {
- var element = type.element;
+ var element = type.element2;
// lookup for ==
var method = element.lookUpConcreteMethod("==", _currentLibrary);
if (method == null ||
diff --git a/pkg/analyzer/lib/src/dart/constant/evaluation.dart b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
index 2f0dfe0..ef918ea 100644
--- a/pkg/analyzer/lib/src/dart/constant/evaluation.dart
+++ b/pkg/analyzer/lib/src/dart/constant/evaluation.dart
@@ -252,7 +252,7 @@
var superclass = constant.returnType.superclass;
if (superclass != null && !superclass.isDartCoreObject) {
var unnamedConstructor =
- superclass.element.unnamedConstructor?.declaration;
+ superclass.element2.unnamedConstructor?.declaration;
if (unnamedConstructor != null && unnamedConstructor.isConst) {
callback(unnamedConstructor);
}
@@ -1423,7 +1423,9 @@
/// [identifier] is "length".
bool _isStringLength(
DartObjectImpl targetResult, SimpleIdentifier identifier) {
- if (targetResult.type.element != _typeProvider.stringElement) {
+ final targetType = targetResult.type;
+ if (!(targetType is InterfaceType &&
+ targetType.element2 == _typeProvider.stringElement)) {
return false;
}
return identifier.name == 'length' &&
diff --git a/pkg/analyzer/lib/src/dart/element/class_hierarchy.dart b/pkg/analyzer/lib/src/dart/element/class_hierarchy.dart
index 2d8db79..5a30ab4 100644
--- a/pkg/analyzer/lib/src/dart/element/class_hierarchy.dart
+++ b/pkg/analyzer/lib/src/dart/element/class_hierarchy.dart
@@ -9,13 +9,13 @@
import 'package:analyzer/src/dart/element/type_system.dart';
class ClassHierarchy {
- final Map<ClassElement, _Hierarchy> _map = {};
+ final Map<InterfaceElement, _Hierarchy> _map = {};
List<ClassHierarchyError> errors(ClassElement element) {
return _getHierarchy(element).errors;
}
- List<InterfaceType> implementedInterfaces(ClassElement element) {
+ List<InterfaceType> implementedInterfaces(InterfaceElement element) {
return _getHierarchy(element).interfaces;
}
@@ -30,7 +30,7 @@
});
}
- _Hierarchy _getHierarchy(ClassElement element) {
+ _Hierarchy _getHierarchy(InterfaceElement element) {
var hierarchy = _map[element];
if (hierarchy != null) {
@@ -55,7 +55,7 @@
interfacesMerger.add(type);
var substitution = Substitution.fromInterfaceType(type);
- var rawInterfaces = implementedInterfaces(type.element);
+ var rawInterfaces = implementedInterfaces(type.element2);
for (var rawInterface in rawInterfaces) {
var newInterface =
substitution.substituteType(rawInterface) as InterfaceType;
@@ -65,9 +65,13 @@
}
}
- append(element.supertype);
- for (var type in element.superclassConstraints) {
- append(type);
+ if (element is ClassElement) {
+ append(element.supertype);
+ }
+ if (element is MixinElement) {
+ for (var type in element.superclassConstraints) {
+ append(type);
+ }
}
for (var type in element.interfaces) {
append(type);
@@ -114,7 +118,7 @@
class InterfacesMerger {
final TypeSystemImpl _typeSystem;
- final _map = <ClassElement, _ClassInterfaceType>{};
+ final Map<InterfaceElement, _ClassInterfaceType> _map = {};
InterfacesMerger(this._typeSystem);
@@ -123,7 +127,7 @@
}
void add(InterfaceType type) {
- var element = type.element;
+ var element = type.element2;
var classResult = _map[element];
if (classResult == null) {
classResult = _ClassInterfaceType(_typeSystem);
diff --git a/pkg/analyzer/lib/src/dart/element/display_string_builder.dart b/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
index d888bd8..3086dfe 100644
--- a/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
+++ b/pkg/analyzer/lib/src/dart/element/display_string_builder.dart
@@ -144,7 +144,7 @@
}
void writeInterfaceType(InterfaceType type) {
- _write(type.element.name);
+ _write(type.element2.name);
_writeTypeArguments(type.typeArguments);
_writeNullability(type.nullabilitySuffix);
}
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 0c9653e..000d357 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -161,9 +161,11 @@
@override
bool get isDartCoreObject => false;
+ @Deprecated('Use `is EnumElement` instead')
@override
bool get isEnum => false;
+ @Deprecated('Use `is MixinElement` instead')
@override
bool get isMixin => false;
@@ -299,7 +301,7 @@
required NullabilitySuffix nullabilitySuffix,
}) {
return InterfaceTypeImpl(
- element: this,
+ element2: this,
typeArguments: typeArguments,
nullabilitySuffix: nullabilitySuffix,
);
@@ -436,20 +438,24 @@
/// Object contains a definition of the getter it will occur last.
Iterable<PropertyAccessorElement> _implementationsOfGetter(
String getterName) sync* {
- ClassElement? classElement = this;
- HashSet<ClassElement> visitedClasses = HashSet<ClassElement>();
+ final visitedClasses = <InterfaceElement>{};
+ InterfaceElement? classElement = this;
while (classElement != null && visitedClasses.add(classElement)) {
var getter = classElement.getGetter(getterName);
if (getter != null) {
yield getter;
}
for (InterfaceType mixin in classElement.mixins.reversed) {
- getter = mixin.element.getGetter(getterName);
+ getter = mixin.element2.getGetter(getterName);
if (getter != null) {
yield getter;
}
}
- classElement = classElement.supertype?.element;
+ if (classElement is ClassElement) {
+ classElement = classElement.supertype?.element2;
+ } else {
+ break;
+ }
}
}
@@ -465,20 +471,24 @@
/// this class contains a definition of the method it will occur first, if
/// Object contains a definition of the method it will occur last.
Iterable<MethodElement> _implementationsOfMethod(String methodName) sync* {
- ClassElement? classElement = this;
- HashSet<ClassElement> visitedClasses = HashSet<ClassElement>();
+ final visitedClasses = <InterfaceElement>{};
+ InterfaceElement? classElement = this;
while (classElement != null && visitedClasses.add(classElement)) {
var method = classElement.getMethod(methodName);
if (method != null) {
yield method;
}
for (InterfaceType mixin in classElement.mixins.reversed) {
- method = mixin.element.getMethod(methodName);
+ method = mixin.element2.getMethod(methodName);
if (method != null) {
yield method;
}
}
- classElement = classElement.supertype?.element;
+ if (classElement is ClassElement) {
+ classElement = classElement.supertype?.element2;
+ } else {
+ break;
+ }
}
}
@@ -495,20 +505,24 @@
/// Object contains a definition of the setter it will occur last.
Iterable<PropertyAccessorElement> _implementationsOfSetter(
String setterName) sync* {
- ClassElement? classElement = this;
- HashSet<ClassElement> visitedClasses = HashSet<ClassElement>();
+ final visitedClasses = <InterfaceElement>{};
+ InterfaceElement? classElement = this;
while (classElement != null && visitedClasses.add(classElement)) {
var setter = classElement.getSetter(setterName);
if (setter != null) {
yield setter;
}
for (InterfaceType mixin in classElement.mixins.reversed) {
- setter = mixin.element.getSetter(setterName);
+ setter = mixin.element2.getSetter(setterName);
if (setter != null) {
yield setter;
}
}
- classElement = classElement.supertype?.element;
+ if (classElement is ClassElement) {
+ classElement = classElement.supertype?.element2;
+ } else {
+ break;
+ }
}
}
@@ -689,11 +703,11 @@
@override
bool get hasNonFinalField {
- List<ClassElement> classesToVisit = <ClassElement>[];
- HashSet<ClassElement> visitedClasses = HashSet<ClassElement>();
+ final classesToVisit = <InterfaceElement>[];
+ final visitedClasses = <InterfaceElement>{};
classesToVisit.add(this);
while (classesToVisit.isNotEmpty) {
- ClassElement currentElement = classesToVisit.removeAt(0);
+ final currentElement = classesToVisit.removeAt(0);
if (visitedClasses.add(currentElement)) {
// check fields
for (FieldElement field in currentElement.fields) {
@@ -706,13 +720,14 @@
}
// check mixins
for (InterfaceType mixinType in currentElement.mixins) {
- ClassElement mixinElement = mixinType.element;
- classesToVisit.add(mixinElement);
+ classesToVisit.add(mixinType.element2);
}
// check super
- InterfaceType? supertype = currentElement.supertype;
- if (supertype != null) {
- classesToVisit.add(supertype.element);
+ if (currentElement is ClassElement) {
+ final supertype = currentElement.supertype;
+ if (supertype != null) {
+ classesToVisit.add(supertype.element2);
+ }
}
}
}
@@ -763,11 +778,14 @@
}
@override
- bool get isDartCoreObject => !isMixin && supertype == null;
+ bool get isDartCoreObject {
+ return name == 'Object' && library.isDartCore;
+ }
bool get isEnumLike {
// Must be a concrete class.
- if (isAbstract || isMixin) {
+ // TODO(scheglov) `is MixinElement` after the separation.
+ if (isAbstract || this is MixinElement) {
return false;
}
@@ -792,7 +810,7 @@
// No subclasses in the library.
for (var unit in library.units) {
for (var class_ in unit.classes) {
- if (class_.supertype?.element == this) {
+ if (class_.supertype?.element2 == this) {
return false;
}
}
@@ -929,7 +947,7 @@
return <ConstructorElement>[];
}
- var superElement = supertype!.element as ClassElementImpl;
+ var superElement = supertype!.element2 as ClassElementImpl;
// First get the list of constructors of the superclass which need to be
// forwarded to this class.
@@ -975,7 +993,7 @@
Substitution.fromPairs(superClassParameters, argumentTypes);
bool typeHasInstanceVariables(InterfaceType type) =>
- type.element.fields.any((e) => !e.isSynthetic);
+ type.element2.fields.any((e) => !e.isSynthetic);
// Now create an implicit constructor for every constructor found above,
// substituting type parameters as appropriate.
@@ -2992,6 +3010,7 @@
@override
bool get isAbstract => false;
+ @Deprecated('Use `is EnumElement` instead')
@override
bool get isEnum => true;
@@ -4952,6 +4971,7 @@
@override
bool get isAbstract => true;
+ @Deprecated('Use `is MixinElement` instead')
@override
bool get isMixin => true;
@@ -6342,7 +6362,7 @@
if (aliasedType_ is! InterfaceType) {
return false;
}
- var aliasedClass = aliasedType_.element;
+ var aliasedClass = aliasedType_.element2;
var typeArguments = aliasedType_.typeArguments;
var typeParameterCount = typeParameters.length;
if (typeParameterCount != aliasedClass.typeParameters.length) {
@@ -6356,7 +6376,9 @@
!library.typeSystem.isSubtypeOf(aliasedBound, bound)) {
return false;
}
- if (typeParameters[i] != typeArguments[i].element) {
+ final typeArgument = typeArguments[i];
+ if (typeArgument is TypeParameterType &&
+ typeParameters[i] != typeArgument.element) {
return false;
}
}
@@ -6466,7 +6488,7 @@
);
} else if (type is InterfaceType) {
return InterfaceTypeImpl(
- element: type.element,
+ element2: type.element2,
typeArguments: type.typeArguments,
nullabilitySuffix: resultNullability,
alias: InstantiatedTypeAliasElementImpl(
diff --git a/pkg/analyzer/lib/src/dart/element/extensions.dart b/pkg/analyzer/lib/src/dart/element/extensions.dart
index 6186e8a..5d58c79 100644
--- a/pkg/analyzer/lib/src/dart/element/extensions.dart
+++ b/pkg/analyzer/lib/src/dart/element/extensions.dart
@@ -21,7 +21,7 @@
if (element.isGetter) {
var type = element.returnType;
if (type is InterfaceType) {
- interfaceElement = type.element;
+ interfaceElement = type.element2;
}
}
} else if (element is ConstructorElement) {
@@ -41,7 +41,7 @@
// may have been compiled with a different version of pkg:meta.
var index = kindObject.getField('index')!.toIntValue()!;
var targetKindClass =
- (kindObject.type as InterfaceType).element as EnumElementImpl;
+ (kindObject.type as InterfaceType).element2 as EnumElementImpl;
// Instead, map constants to their TargetKind by comparing getter
// names.
var getter = targetKindClass.constants[index];
diff --git a/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart b/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
index 4c29923..dc5f480 100644
--- a/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
+++ b/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
@@ -564,7 +564,7 @@
return;
}
if (errorNode is ConstructorName &&
- !(errorNode.type.type as InterfaceType).element.hasOptionalTypeArgs) {
+ !(errorNode.type.type as InterfaceType).element2.hasOptionalTypeArgs) {
String constructorName = errorNode.name == null
? errorNode.type.name.name
: '${errorNode.type}.${errorNode.name}';
@@ -592,7 +592,7 @@
if (element is VariableElement) {
// For variable elements, we check their type and possible alias type.
var type = element.type;
- var typeElement = type.element;
+ final typeElement = type is InterfaceType ? type.element2 : null;
if (typeElement != null && typeElement.hasOptionalTypeArgs) {
return;
}
diff --git a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
index 84d0ae4..8819dd6 100644
--- a/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
+++ b/pkg/analyzer/lib/src/dart/element/inheritance_manager3.dart
@@ -115,7 +115,7 @@
/// Return the result of [getInherited2] with [type] substitution.
ExecutableElement? getInherited(InterfaceType type, Name name) {
- var rawElement = getInherited2(type.element, name);
+ var rawElement = getInherited2(type.element2, name);
if (rawElement == null) {
return null;
}
@@ -237,7 +237,7 @@
bool forSuper = false,
}) {
var rawElement = getMember2(
- type.element,
+ type.element2,
name,
concrete: concrete,
forMixinIndex: forMixinIndex,
@@ -466,7 +466,7 @@
Interface? superTypeInterface;
if (superType != null) {
var substitution = Substitution.fromInterfaceType(superType);
- superTypeInterface = getInterface(superType.element);
+ superTypeInterface = getInterface(superType.element2);
_addCandidates(
namedCandidates: namedCandidates,
substitution: substitution,
@@ -492,7 +492,7 @@
// interfaces. Consider using `Map<Name, ExecutableElement>` here.
var mixinsConflicts = <List<Conflict>>[];
for (var mixin in element.mixins) {
- var mixinElement = mixin.element;
+ var mixinElement = mixin.element2;
var substitution = Substitution.fromInterfaceType(mixin);
var mixinInterface = getInterface(mixinElement);
// `class X extends S with M1, M2 {}` is semantically a sequence of:
@@ -583,7 +583,7 @@
_addCandidates(
namedCandidates: namedCandidates,
substitution: Substitution.fromInterfaceType(interface),
- interface: getInterface(interface.element),
+ interface: getInterface(interface.element2),
isNonNullableByDefault: isNonNullableByDefault,
);
}
@@ -660,7 +660,7 @@
var superCandidates = <Name, List<ExecutableElement>>{};
for (var constraint in element.superclassConstraints) {
var substitution = Substitution.fromInterfaceType(constraint);
- var interfaceObj = getInterface(constraint.element);
+ var interfaceObj = getInterface(constraint.element2);
_addCandidates(
namedCandidates: superCandidates,
substitution: substitution,
@@ -684,7 +684,7 @@
_addCandidates(
namedCandidates: interfaceCandidates,
substitution: Substitution.fromInterfaceType(interface),
- interface: getInterface(interface.element),
+ interface: getInterface(interface.element2),
isNonNullableByDefault: isNonNullableByDefault,
);
}
@@ -914,9 +914,10 @@
static bool _isDeclaredInObject(ExecutableElement element) {
var enclosing = element.enclosingElement3;
+ // TODO(scheglov) `is! MixinElement` after the separation.
return enclosing is ClassElement &&
enclosing.supertype == null &&
- !enclosing.isMixin;
+ enclosing is! MixinElement;
}
}
diff --git a/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart b/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart
index 544a143..1dfe4b7 100644
--- a/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart
+++ b/pkg/analyzer/lib/src/dart/element/least_upper_bound.dart
@@ -23,7 +23,7 @@
/// But it should be used where nullability does not make sense - to specify
/// superclasses, mixins, and implemented interfaces.
class InstantiatedClass {
- final ClassElement element;
+ final InterfaceElement element;
final List<DartType> arguments;
final Substitution _substitution;
@@ -37,7 +37,7 @@
/// Return the [InstantiatedClass] that corresponds to the [type] - with the
/// same element and type arguments, ignoring its nullability suffix.
factory InstantiatedClass.of(InterfaceType type) {
- return InstantiatedClass(type.element, type.typeArguments);
+ return InstantiatedClass(type.element2, type.typeArguments);
}
@override
@@ -70,6 +70,11 @@
/// Return the superclass of this type, or `null` if this type represents
/// the class 'Object'.
InstantiatedClass? get superclass {
+ final element = this.element;
+ if (element is! ClassElement) {
+ return null;
+ }
+
var supertype = element.supertype;
if (supertype == null) return null;
@@ -83,8 +88,13 @@
/// the declaration does not have an `on` clause, then the list will contain
/// the type for the class `Object`.
List<InstantiatedClass> get superclassConstraints {
- var constraints = element.superclassConstraints;
- return _toInstantiatedClasses(constraints);
+ final element = this.element;
+ if (element is MixinElement) {
+ var constraints = element.superclassConstraints;
+ return _toInstantiatedClasses(constraints);
+ } else {
+ return [];
+ }
}
@visibleForTesting
@@ -126,7 +136,7 @@
InterfaceTypeImpl withNullability(NullabilitySuffix nullability) {
return InterfaceTypeImpl(
- element: element,
+ element2: element,
typeArguments: arguments,
nullabilitySuffix: nullability,
);
@@ -190,10 +200,10 @@
return type1.withNullability(nullability);
}
- if (type1.element == type2.element) {
+ if (type1.element2 == type2.element2) {
var args1 = type1.typeArguments;
var args2 = type2.typeArguments;
- var params = type1.element.typeParameters;
+ var params = type1.element2.typeParameters;
assert(args1.length == args2.length);
assert(args1.length == params.length);
@@ -226,7 +236,7 @@
}
return InterfaceTypeImpl(
- element: type1.element,
+ element2: type1.element2,
typeArguments: args,
nullabilitySuffix: nullability,
);
@@ -278,8 +288,9 @@
/// Return the length of the longest inheritance path from the [element] to
/// Object.
@visibleForTesting
- static int computeLongestInheritancePathToObject(ClassElement element) {
- return _computeLongestInheritancePathToObject(element, <ClassElement>{});
+ static int computeLongestInheritancePathToObject(InterfaceElement element) {
+ return _computeLongestInheritancePathToObject(
+ element, <InterfaceElement>{});
}
/// Add all of the superinterfaces of the given [type] to the given [set].
@@ -339,9 +350,10 @@
/// is used to prevent infinite recursion in the case of a cyclic type
/// structure.
static int _computeLongestInheritancePathToObject(
- ClassElement element, Set<ClassElement> visitedElements) {
+ InterfaceElement element, Set<InterfaceElement> visitedElements) {
// Object case
- if (element.isDartCoreObject || visitedElements.contains(element)) {
+ if (element is ClassElement && element.isDartCoreObject ||
+ visitedElements.contains(element)) {
return 0;
}
int longestPath = 0;
@@ -350,34 +362,40 @@
// loop through each of the superinterfaces recursively calling this
// method and keeping track of the longest path to return
- for (InterfaceType interface in element.superclassConstraints) {
- var pathLength = _computeLongestInheritancePathToObject(
- interface.element, visitedElements);
- longestPath = max(longestPath, 1 + pathLength);
+ if (element is MixinElement) {
+ for (InterfaceType interface in element.superclassConstraints) {
+ var pathLength = _computeLongestInheritancePathToObject(
+ interface.element2, visitedElements);
+ longestPath = max(longestPath, 1 + pathLength);
+ }
}
// loop through each of the superinterfaces recursively calling this
// method and keeping track of the longest path to return
for (InterfaceType interface in element.interfaces) {
var pathLength = _computeLongestInheritancePathToObject(
- interface.element, visitedElements);
+ interface.element2, visitedElements);
longestPath = max(longestPath, 1 + pathLength);
}
+ if (element is! ClassElement) {
+ return longestPath;
+ }
+
var supertype = element.supertype;
if (supertype == null) {
return longestPath;
}
var superLength = _computeLongestInheritancePathToObject(
- supertype.element, visitedElements);
+ supertype.element2, visitedElements);
var mixins = element.mixins;
for (var i = 0; i < mixins.length; i++) {
// class _X&S&M extends S implements M {}
// So, we choose the maximum length from S and M.
var mixinLength = _computeLongestInheritancePathToObject(
- mixins[i].element,
+ mixins[i].element2,
visitedElements,
);
superLength = max(superLength, mixinLength);
@@ -444,7 +462,7 @@
LeastUpperBoundHelper(this._typeSystem);
InterfaceType get _interfaceTypeFunctionNone {
- return _typeSystem.typeProvider.functionType.element.instantiate(
+ return _typeSystem.typeProvider.functionType.element2.instantiate(
typeArguments: const [],
nullabilitySuffix: NullabilitySuffix.none,
);
diff --git a/pkg/analyzer/lib/src/dart/element/normalize.dart b/pkg/analyzer/lib/src/dart/element/normalize.dart
index 52f8639..13d8458 100644
--- a/pkg/analyzer/lib/src/dart/element/normalize.dart
+++ b/pkg/analyzer/lib/src/dart/element/normalize.dart
@@ -139,7 +139,7 @@
// NORM(C<T0, ..., Tn>) = C<R0, ..., Rn> where Ri is NORM(Ti)
if (T is InterfaceType) {
- return T.element.instantiate(
+ return T.element2.instantiate(
typeArguments: T.typeArguments.map(_normalize).toList(),
nullabilitySuffix: NullabilitySuffix.none,
);
diff --git a/pkg/analyzer/lib/src/dart/element/replace_top_bottom_visitor.dart b/pkg/analyzer/lib/src/dart/element/replace_top_bottom_visitor.dart
index 2db9a85..03cf14f 100644
--- a/pkg/analyzer/lib/src/dart/element/replace_top_bottom_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/element/replace_top_bottom_visitor.dart
@@ -113,7 +113,7 @@
}
DartType _interfaceType(InterfaceType type, Variance variance) {
- var typeParameters = type.element.typeParameters;
+ var typeParameters = type.element2.typeParameters;
if (typeParameters.isEmpty) {
return type;
}
@@ -128,7 +128,7 @@
}
return InterfaceTypeImpl(
- element: type.element,
+ element2: type.element2,
nullabilitySuffix: type.nullabilitySuffix,
typeArguments: newTypeArguments,
);
diff --git a/pkg/analyzer/lib/src/dart/element/replacement_visitor.dart b/pkg/analyzer/lib/src/dart/element/replacement_visitor.dart
index 638ad0f..dc7a09f 100644
--- a/pkg/analyzer/lib/src/dart/element/replacement_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/element/replacement_visitor.dart
@@ -85,7 +85,7 @@
}
return InterfaceTypeImpl(
- element: type.element,
+ element2: type.element2,
typeArguments: newTypeArguments ?? type.typeArguments,
nullabilitySuffix: newNullability ?? type.nullabilitySuffix,
alias: newAlias ?? type.alias,
@@ -372,7 +372,7 @@
}
var newTypeArguments = _typeArguments(
- type.element.typeParameters,
+ type.element2.typeParameters,
type.typeArguments,
);
diff --git a/pkg/analyzer/lib/src/dart/element/runtime_type_equality.dart b/pkg/analyzer/lib/src/dart/element/runtime_type_equality.dart
index 319da39..a4318bd 100644
--- a/pkg/analyzer/lib/src/dart/element/runtime_type_equality.dart
+++ b/pkg/analyzer/lib/src/dart/element/runtime_type_equality.dart
@@ -88,7 +88,7 @@
@override
bool visitInterfaceType(InterfaceType T1, DartType T2) {
if (T2 is InterfaceType &&
- T1.element == T2.element &&
+ T1.element2 == T2.element2 &&
_compatibleNullability(T1, T2)) {
var T1_typeArguments = T1.typeArguments;
var T2_typeArguments = T2.typeArguments;
diff --git a/pkg/analyzer/lib/src/dart/element/subtype.dart b/pkg/analyzer/lib/src/dart/element/subtype.dart
index 8bec0b3..2519bcf 100644
--- a/pkg/analyzer/lib/src/dart/element/subtype.dart
+++ b/pkg/analyzer/lib/src/dart/element/subtype.dart
@@ -301,7 +301,7 @@
}
bool _interfaceArguments(
- ClassElement element,
+ InterfaceElement element,
InterfaceType subType,
InterfaceType superType,
) {
@@ -446,8 +446,8 @@
return false;
}
- var subElement = subType.element;
- var superElement = superType.element;
+ var subElement = subType.element2;
+ var superElement = superType.element2;
if (subElement == superElement) {
return _interfaceArguments(superElement, subType, superType);
}
@@ -458,7 +458,7 @@
}
for (var interface in subElement.allSupertypes) {
- if (interface.element == superElement) {
+ if (interface.element2 == superElement) {
var substitution = Substitution.fromInterfaceType(subType);
var substitutedInterface =
substitution.substituteType(interface) as InterfaceType;
diff --git a/pkg/analyzer/lib/src/dart/element/top_merge.dart b/pkg/analyzer/lib/src/dart/element/top_merge.dart
index b60f3b1..a340b85 100644
--- a/pkg/analyzer/lib/src/dart/element/top_merge.dart
+++ b/pkg/analyzer/lib/src/dart/element/top_merge.dart
@@ -271,7 +271,7 @@
}
InterfaceType _interfaceTypes(InterfaceType T, InterfaceType S) {
- if (T.element != S.element) {
+ if (T.element2 != S.element2) {
throw _TopMergeStateError(T, S, 'Different class elements');
}
@@ -284,7 +284,7 @@
T_arguments.length,
(i) => topMerge(T_arguments[i], S_arguments[i]),
);
- return T.element.instantiate(
+ return T.element2.instantiate(
typeArguments: arguments,
nullabilitySuffix: NullabilitySuffix.none,
);
diff --git a/pkg/analyzer/lib/src/dart/element/type.dart b/pkg/analyzer/lib/src/dart/element/type.dart
index b1342b6..b309d49 100644
--- a/pkg/analyzer/lib/src/dart/element/type.dart
+++ b/pkg/analyzer/lib/src/dart/element/type.dart
@@ -26,6 +26,11 @@
DynamicTypeImpl._() : super(DynamicElementImpl());
@override
+ Element get element {
+ return super.element!;
+ }
+
+ @override
int get hashCode => 1;
@override
@@ -426,6 +431,9 @@
/// A concrete implementation of an [InterfaceType].
class InterfaceTypeImpl extends TypeImpl implements InterfaceType {
@override
+ final InterfaceElement element2;
+
+ @override
final List<DartType> typeArguments;
@override
@@ -441,18 +449,17 @@
List<MethodElement>? _methods;
InterfaceTypeImpl({
- required ClassElement element,
+ required this.element2,
required this.typeArguments,
required this.nullabilitySuffix,
InstantiatedTypeAliasElement? alias,
- }) : super(element, alias: alias) {
- var typeParameters = element.typeParameters;
+ }) : super(element2 as ClassElement, alias: alias) {
+ var typeParameters = element2.typeParameters;
if (typeArguments.length != typeParameters.length) {
throw ArgumentError(
'[typeParameters.length: ${typeParameters.length}]'
'[typeArguments.length: ${typeArguments.length}]'
- '[element: $element]'
- '[reference: ${element is ClassElementImpl ? element.reference : null}]'
+ '[element: $element2]'
'[typeParameters: $typeParameters]'
'[typeArguments: $typeArguments]',
);
@@ -462,7 +469,7 @@
@override
List<PropertyAccessorElement> get accessors {
if (_accessors == null) {
- List<PropertyAccessorElement> accessors = element.accessors;
+ List<PropertyAccessorElement> accessors = element2.accessors;
var members = <PropertyAccessorElement>[];
for (int i = 0; i < accessors.length; i++) {
members.add(PropertyAccessorMember.from(accessors[i], this)!);
@@ -475,7 +482,7 @@
@override
List<InterfaceType> get allSupertypes {
var substitution = Substitution.fromInterfaceType(this);
- return element.allSupertypes
+ return element2.allSupertypes
.map((t) => substitution.substituteType(t) as InterfaceType)
.toList();
}
@@ -483,7 +490,7 @@
@override
List<ConstructorElement> get constructors {
if (_constructors == null) {
- List<ConstructorElement> constructors = element.constructors;
+ List<ConstructorElement> constructors = element2.constructors;
var members = <ConstructorElement>[];
for (int i = 0; i < constructors.length; i++) {
members.add(ConstructorMember.from(constructors[i], this));
@@ -493,108 +500,110 @@
return _constructors!;
}
+ @Deprecated('Check for specific DartType subtype and use element2 instead')
@override
ClassElement get element => super.element as ClassElement;
@override
int get hashCode {
- return element.hashCode;
+ return element2.hashCode;
}
@override
List<InterfaceType> get interfaces {
- return _instantiateSuperTypes(element.interfaces);
+ return _instantiateSuperTypes(element2.interfaces);
}
@override
bool get isDartAsyncFuture {
- return element.name == "Future" && element.library.isDartAsync;
+ return element2.name == "Future" && element2.library.isDartAsync;
}
@override
bool get isDartAsyncFutureOr {
- return element.name == "FutureOr" && element.library.isDartAsync;
+ return element2.name == "FutureOr" && element2.library.isDartAsync;
}
@override
bool get isDartAsyncStream {
- return element.name == "Stream" && element.library.isDartAsync;
+ return element2.name == "Stream" && element2.library.isDartAsync;
}
@override
bool get isDartCoreBool {
- return element.name == "bool" && element.library.isDartCore;
+ return element2.name == "bool" && element2.library.isDartCore;
}
@override
bool get isDartCoreDouble {
- return element.name == "double" && element.library.isDartCore;
+ return element2.name == "double" && element2.library.isDartCore;
}
@override
bool get isDartCoreEnum {
- return element.isDartCoreEnum;
+ final element2 = this.element2;
+ return element2 is ClassElement && element2.isDartCoreEnum;
}
@override
bool get isDartCoreFunction {
- return element.name == "Function" && element.library.isDartCore;
+ return element2.name == "Function" && element2.library.isDartCore;
}
@override
bool get isDartCoreInt {
- return element.name == "int" && element.library.isDartCore;
+ return element2.name == "int" && element2.library.isDartCore;
}
@override
bool get isDartCoreIterable {
- return element.name == "Iterable" && element.library.isDartCore;
+ return element2.name == "Iterable" && element2.library.isDartCore;
}
@override
bool get isDartCoreList {
- return element.name == "List" && element.library.isDartCore;
+ return element2.name == "List" && element2.library.isDartCore;
}
@override
bool get isDartCoreMap {
- return element.name == "Map" && element.library.isDartCore;
+ return element2.name == "Map" && element2.library.isDartCore;
}
@override
bool get isDartCoreNull {
- return element.name == "Null" && element.library.isDartCore;
+ return element2.name == "Null" && element2.library.isDartCore;
}
@override
bool get isDartCoreNum {
- return element.name == "num" && element.library.isDartCore;
+ return element2.name == "num" && element2.library.isDartCore;
}
@override
bool get isDartCoreObject {
- return element.name == "Object" && element.library.isDartCore;
+ return element2.name == "Object" && element2.library.isDartCore;
}
@override
bool get isDartCoreSet {
- return element.name == "Set" && element.library.isDartCore;
+ return element2.name == "Set" && element2.library.isDartCore;
}
@override
bool get isDartCoreString {
- return element.name == "String" && element.library.isDartCore;
+ return element2.name == "String" && element2.library.isDartCore;
}
@override
bool get isDartCoreSymbol {
- return element.name == "Symbol" && element.library.isDartCore;
+ return element2.name == "Symbol" && element2.library.isDartCore;
}
@override
List<MethodElement> get methods {
if (_methods == null) {
- List<MethodElement> methods = element.methods;
+ List<MethodElement> methods = element2.methods;
var members = <MethodElement>[];
for (int i = 0; i < methods.length; i++) {
members.add(MethodMember.from(methods[i], this)!);
@@ -606,7 +615,7 @@
@override
List<InterfaceType> get mixins {
- List<InterfaceType> mixins = element.mixins;
+ List<InterfaceType> mixins = element2.mixins;
return _instantiateSuperTypes(mixins);
}
@@ -616,7 +625,7 @@
@override
InterfaceType? get superclass {
- var supertype = element.supertype;
+ var supertype = element2.supertype;
if (supertype == null) {
return null;
}
@@ -627,12 +636,17 @@
@override
List<InterfaceType> get superclassConstraints {
- List<InterfaceType> constraints = element.superclassConstraints;
- return _instantiateSuperTypes(constraints);
+ final element2 = this.element2;
+ if (element2 is MixinElement) {
+ final constraints = element2.superclassConstraints;
+ return _instantiateSuperTypes(constraints);
+ } else {
+ return [];
+ }
}
InheritanceManager3 get _inheritanceManager =>
- (element.library.session as AnalysisSessionImpl).inheritanceManager;
+ (element2.library.session as AnalysisSessionImpl).inheritanceManager;
@override
bool operator ==(Object other) {
@@ -643,7 +657,7 @@
if (other.nullabilitySuffix != nullabilitySuffix) {
return false;
}
- return other.element == element &&
+ return other.element2 == element2 &&
TypeImpl.equalArrays(other.typeArguments, typeArguments);
}
return false;
@@ -668,13 +682,13 @@
}
@override
- InterfaceType? asInstanceOf(ClassElement targetElement) {
- if (element == targetElement) {
+ InterfaceType? asInstanceOf(InterfaceElement targetElement) {
+ if (element2 == targetElement) {
return this;
}
- for (var rawInterface in element.allSupertypes) {
- if (rawInterface.element == targetElement) {
+ for (var rawInterface in element2.allSupertypes) {
+ if (rawInterface.element2 == targetElement) {
var substitution = Substitution.fromInterfaceType(this);
return substitution.substituteType(rawInterface) as InterfaceType;
}
@@ -685,15 +699,15 @@
@override
PropertyAccessorElement? getGetter(String getterName) =>
- PropertyAccessorMember.from(element.getGetter(getterName), this);
+ PropertyAccessorMember.from(element2.getGetter(getterName), this);
@override
MethodElement? getMethod(String methodName) =>
- MethodMember.from(element.getMethod(methodName), this);
+ MethodMember.from(element2.getMethod(methodName), this);
@override
PropertyAccessorElement? getSetter(String setterName) =>
- PropertyAccessorMember.from(element.getSetter(setterName), this);
+ PropertyAccessorMember.from(element2.getSetter(setterName), this);
@override
ConstructorElement? lookUpConstructor(
@@ -701,9 +715,9 @@
// prepare base ConstructorElement
ConstructorElement? constructorElement;
if (constructorName == null) {
- constructorElement = element.unnamedConstructor;
+ constructorElement = element2.unnamedConstructor;
} else {
- constructorElement = element.getNamedConstructor(constructorName);
+ constructorElement = element2.getNamedConstructor(constructorName);
}
// not found or not accessible
if (constructorElement == null ||
@@ -746,8 +760,8 @@
}
if (recoveryStatic) {
- final element = this.element as AbstractClassElementImpl;
- return element.lookupStaticGetter(name, library);
+ final element2 = this.element2 as AbstractClassElementImpl;
+ return element2.lookupStaticGetter(name, library);
}
return null;
@@ -785,8 +799,8 @@
}
if (recoveryStatic) {
- final element = this.element as AbstractClassElementImpl;
- return element.lookupStaticMethod(name, library);
+ final element2 = this.element2 as AbstractClassElementImpl;
+ return element2.lookupStaticMethod(name, library);
}
return null;
@@ -824,8 +838,8 @@
}
if (recoveryStatic) {
- final element = this.element as AbstractClassElementImpl;
- return element.lookupStaticSetter(name, library);
+ final element2 = this.element2 as AbstractClassElementImpl;
+ return element2.lookupStaticSetter(name, library);
}
return null;
@@ -844,7 +858,7 @@
if (this.nullabilitySuffix == nullabilitySuffix) return this;
return InterfaceTypeImpl(
- element: element,
+ element2: element2,
typeArguments: typeArguments,
nullabilitySuffix: nullabilitySuffix,
);
@@ -853,7 +867,7 @@
List<InterfaceType> _instantiateSuperTypes(List<InterfaceType> defined) {
if (defined.isEmpty) return defined;
- var typeParameters = element.typeParameters;
+ var typeParameters = element2.typeParameters;
if (typeParameters.isEmpty) return defined;
var substitution = Substitution.fromInterfaceType(this);
@@ -1041,7 +1055,7 @@
void appendTo(ElementDisplayStringBuilder builder);
@override
- InterfaceType? asInstanceOf(ClassElement targetElement) => null;
+ InterfaceType? asInstanceOf(InterfaceElement targetElement) => null;
@override
String getDisplayString({
@@ -1191,7 +1205,7 @@
}
@override
- InterfaceType? asInstanceOf(ClassElement targetElement) {
+ InterfaceType? asInstanceOf(InterfaceElement targetElement) {
return bound.asInstanceOf(targetElement);
}
diff --git a/pkg/analyzer/lib/src/dart/element/type_algebra.dart b/pkg/analyzer/lib/src/dart/element/type_algebra.dart
index 621f2c8..5635c6c 100644
--- a/pkg/analyzer/lib/src/dart/element/type_algebra.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_algebra.dart
@@ -183,7 +183,7 @@
if (type.typeArguments.isEmpty) {
return _NullSubstitution.instance;
}
- return fromPairs(type.element.typeParameters, type.typeArguments);
+ return fromPairs(type.element2.typeParameters, type.typeArguments);
}
/// Substitutes each parameter to the type it maps to in [map].
@@ -514,7 +514,7 @@
}
return InterfaceTypeImpl(
- element: type.element,
+ element2: type.element2,
typeArguments: typeArguments,
nullabilitySuffix: type.nullabilitySuffix,
alias: alias,
diff --git a/pkg/analyzer/lib/src/dart/element/type_constraint_gatherer.dart b/pkg/analyzer/lib/src/dart/element/type_constraint_gatherer.dart
index f5b011e..95cebcf 100644
--- a/pkg/analyzer/lib/src/dart/element/type_constraint_gatherer.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_constraint_gatherer.dart
@@ -543,7 +543,7 @@
// holds under constraints `C0 + ... + Ck`:
// If `Mi` is a subtype match for `Ni` with respect to L under
// constraints `Ci`.
- if (P.element == Q.element) {
+ if (P.element2 == Q.element2) {
if (!_interfaceType_arguments(P, Q, leftSchema)) {
return false;
}
@@ -555,10 +555,10 @@
// If `C1<B0, ..., Bj>` is a superinterface of `C0<M0, ..., Mk>` and
// `C1<B0, ..., Bj>` is a subtype match for `C1<N0, ..., Nj>` with
// respect to `L` under constraints `C`.
- var C0 = P.element;
- var C1 = Q.element;
+ var C0 = P.element2;
+ var C1 = Q.element2;
for (var interface in C0.allSupertypes) {
- if (interface.element == C1) {
+ if (interface.element2 == C1) {
var substitution = Substitution.fromInterfaceType(P);
return _interfaceType_arguments(
substitution.substituteType(interface) as InterfaceType,
@@ -578,13 +578,13 @@
InterfaceType Q,
bool leftSchema,
) {
- assert(P.element == Q.element);
+ assert(P.element2 == Q.element2);
var rewind = _constraints.length;
for (var i = 0; i < P.typeArguments.length; i++) {
var variance =
- (P.element.typeParameters[i] as TypeParameterElementImpl).variance;
+ (P.element2.typeParameters[i] as TypeParameterElementImpl).variance;
var M = P.typeArguments[i];
var N = Q.typeArguments[i];
if ((variance.isCovariant || variance.isInvariant) &&
diff --git a/pkg/analyzer/lib/src/dart/element/type_provider.dart b/pkg/analyzer/lib/src/dart/element/type_provider.dart
index 26d915f..9e23e3d 100644
--- a/pkg/analyzer/lib/src/dart/element/type_provider.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_provider.dart
@@ -79,7 +79,7 @@
abstract class TypeProviderBase implements TypeProvider {
@override
bool isObjectGetter(String id) {
- var element = objectType.element.getGetter(id);
+ var element = objectType.element2.getGetter(id);
return element != null && !element.isStatic;
}
@@ -90,7 +90,7 @@
@override
bool isObjectMethod(String id) {
- var element = objectType.element.getMethod(id);
+ var element = objectType.element2.getMethod(id);
return element != null && !element.isStatic;
}
}
@@ -238,7 +238,7 @@
var element = enumElement;
if (element != null) {
_enumType = InterfaceTypeImpl(
- element: element,
+ element2: element,
typeArguments: const [],
nullabilitySuffix: _nullabilitySuffix,
);
@@ -255,7 +255,7 @@
@override
InterfaceType get futureDynamicType {
return _futureDynamicType ??= InterfaceTypeImpl(
- element: futureElement,
+ element2: futureElement,
typeArguments: [dynamicType],
nullabilitySuffix: _nullabilitySuffix,
);
@@ -269,7 +269,7 @@
@override
InterfaceType get futureNullType {
return _futureNullType ??= InterfaceTypeImpl(
- element: futureElement,
+ element2: futureElement,
typeArguments: [nullType],
nullabilitySuffix: _nullabilitySuffix,
);
@@ -283,7 +283,7 @@
@override
InterfaceType get futureOrNullType {
return _futureOrNullType ??= InterfaceTypeImpl(
- element: futureOrElement,
+ element2: futureOrElement,
typeArguments: [nullType],
nullabilitySuffix: _nullabilitySuffix,
);
@@ -306,7 +306,7 @@
@override
InterfaceType get iterableDynamicType {
return _iterableDynamicType ??= InterfaceTypeImpl(
- element: iterableElement,
+ element2: iterableElement,
typeArguments: [dynamicType],
nullabilitySuffix: _nullabilitySuffix,
);
@@ -320,7 +320,7 @@
@override
InterfaceType get iterableObjectType {
return _iterableObjectType ??= InterfaceTypeImpl(
- element: iterableElement,
+ element2: iterableElement,
typeArguments: [objectType],
nullabilitySuffix: _nullabilitySuffix,
);
@@ -339,14 +339,14 @@
@override
InterfaceType get mapObjectObjectType {
return _mapObjectObjectType ??= InterfaceTypeImpl(
- element: mapElement,
+ element2: mapElement,
typeArguments: [objectType, objectType],
nullabilitySuffix: _nullabilitySuffix,
);
}
@override
- DartType get neverType => isNonNullableByDefault
+ NeverType get neverType => isNonNullableByDefault
? NeverTypeImpl.instance
: NeverTypeImpl.instanceLegacy;
@@ -403,7 +403,7 @@
@override
InterfaceType get streamDynamicType {
return _streamDynamicType ??= InterfaceTypeImpl(
- element: streamElement,
+ element2: streamElement,
typeArguments: [dynamicType],
nullabilitySuffix: _nullabilitySuffix,
);
@@ -467,7 +467,7 @@
}
@override
- bool isNonSubtypableClass(ClassElement element) {
+ bool isNonSubtypableClass(InterfaceElement element) {
var name = element.name;
if (_nonSubtypableClassNames.contains(name)) {
var libraryUriStr = element.library.source.uri.toString();
@@ -544,7 +544,7 @@
}
return InterfaceTypeImpl(
- element: element,
+ element2: element,
typeArguments: typeArguments,
nullabilitySuffix: _nullabilitySuffix,
);
diff --git a/pkg/analyzer/lib/src/dart/element/type_system.dart b/pkg/analyzer/lib/src/dart/element/type_system.dart
index eaff897..4657129 100644
--- a/pkg/analyzer/lib/src/dart/element/type_system.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_system.dart
@@ -318,7 +318,7 @@
List<InterfaceType> gatherMixinSupertypeConstraintsForInference(
ClassElement mixinElement) {
List<InterfaceType> candidates;
- if (mixinElement.isMixin) {
+ if (mixinElement is MixinElement) {
candidates = mixinElement.superclassConstraints;
} else {
final supertype = mixinElement.supertype;
@@ -332,7 +332,7 @@
}
}
return candidates
- .where((type) => type.element.typeParameters.isNotEmpty)
+ .where((type) => type.element2.typeParameters.isNotEmpty)
.toList();
}
@@ -345,7 +345,7 @@
FunctionType? getCallMethodType(DartType t) {
if (t is InterfaceType) {
return t
- .lookUpMethod2(FunctionElement.CALL_METHOD_NAME, t.element.library)
+ .lookUpMethod2(FunctionElement.CALL_METHOD_NAME, t.element2.library)
?.type;
}
return null;
@@ -555,7 +555,7 @@
return type.instantiate(typeArguments);
} else if (type is InterfaceTypeImpl) {
// TODO(scheglov) Use `ClassElement.instantiate()`, don't use raw types.
- return type.element.instantiate(
+ return type.element2.instantiate(
typeArguments: typeArguments,
nullabilitySuffix: type.nullabilitySuffix,
);
@@ -1595,7 +1595,7 @@
if (type is FunctionType) {
return type.typeFormals;
} else if (type is InterfaceType) {
- return type.element.typeParameters;
+ return type.element2.typeParameters;
} else {
return const <TypeParameterElement>[];
}
diff --git a/pkg/analyzer/lib/src/dart/element/well_bounded.dart b/pkg/analyzer/lib/src/dart/element/well_bounded.dart
index 9ca8629..7eada0f 100644
--- a/pkg/analyzer/lib/src/dart/element/well_bounded.dart
+++ b/pkg/analyzer/lib/src/dart/element/well_bounded.dart
@@ -84,8 +84,8 @@
typeParameters = alias.element.typeParameters;
typeArguments = alias.typeArguments;
} else if (type is InterfaceType) {
- elementName = type.element.name;
- typeParameters = type.element.typeParameters;
+ elementName = type.element2.name;
+ typeParameters = type.element2.typeParameters;
typeArguments = type.typeArguments;
} else {
return const RegularBoundedTypeResult._();
diff --git a/pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart
index e50459e..5ff4980 100644
--- a/pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/annotation_resolver.dart
@@ -374,7 +374,7 @@
ExecutableElement? getter;
var aliasedType = typeAliasElement.aliasedType;
if (aliasedType is InterfaceType) {
- var classElement = aliasedType.element;
+ var classElement = aliasedType.element2;
if (getterName != null) {
getter = classElement.getGetter(getterName.name);
getter = _resolver.toLegacyElement(getter);
diff --git a/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart b/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart
index 4d6e6c5..3d5ffca 100644
--- a/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/ast_rewrite.dart
@@ -184,7 +184,7 @@
node: node,
typeIdentifier: target,
constructorIdentifier: methodName,
- classElement: aliasedType.element,
+ classElement: aliasedType.element2,
);
}
}
@@ -209,7 +209,7 @@
node: node,
typeNameIdentifier: target,
constructorIdentifier: methodName,
- classElement: aliasedType.element,
+ classElement: aliasedType.element2,
);
}
}
@@ -262,7 +262,9 @@
// typedef X = C;
// X.named
return _toConstructorReference_prefixed(
- node: node, classElement: aliasedType.element);
+ node: node,
+ classElement: aliasedType.element2,
+ );
}
}
return node;
@@ -350,7 +352,7 @@
node: node,
receiver: receiverIdentifier,
typeArguments: typeArguments,
- classElement: aliasedType.element,
+ classElement: aliasedType.element2,
);
}
}
@@ -374,7 +376,7 @@
required MethodInvocationImpl node,
required PrefixedIdentifierImpl typeNameIdentifier,
required SimpleIdentifierImpl constructorIdentifier,
- required ClassElement classElement,
+ required InterfaceElement classElement,
}) {
var constructorElement = classElement.getNamedConstructor(
constructorIdentifier.name,
@@ -408,7 +410,7 @@
AstNode _toConstructorReference_prefixed({
required PrefixedIdentifierImpl node,
- required ClassElement classElement,
+ required InterfaceElement classElement,
}) {
var name = node.identifier.name;
var constructorElement = name == 'new'
@@ -435,7 +437,7 @@
required PropertyAccessImpl node,
required IdentifierImpl receiver,
required TypeArgumentListImpl? typeArguments,
- required ClassElement classElement,
+ required InterfaceElement classElement,
}) {
var name = node.propertyName.name;
var constructorElement = name == 'new'
@@ -514,7 +516,7 @@
required MethodInvocationImpl node,
required SimpleIdentifierImpl typeIdentifier,
required SimpleIdentifierImpl constructorIdentifier,
- required ClassElement classElement,
+ required InterfaceElement classElement,
}) {
var name = constructorIdentifier.name;
var constructorElement = classElement.getNamedConstructor(name);
diff --git a/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart
index 0e5cbf2..4006686 100644
--- a/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/constructor_reference_resolver.dart
@@ -53,7 +53,9 @@
// to avoid reporting redundant errors.
var enclosingElement = node.constructorName.type.name.staticElement;
if (enclosingElement is TypeAliasElement) {
- enclosingElement = enclosingElement.aliasedType.element;
+ final aliasedType = enclosingElement.aliasedType;
+ enclosingElement =
+ aliasedType is InterfaceType ? aliasedType.element2 : null;
}
// TODO(srawlins): Handle `enclosingElement` being a function typedef:
// typedef F<T> = void Function(); var a = F<int>.extensionOnType;`.
diff --git a/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
index d746b4b..5853ab1 100644
--- a/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/function_reference_resolver.dart
@@ -164,7 +164,7 @@
// Otherwise, a 'call' method on the interface, or on an applicable
// extension method applies.
return type.lookUpMethod2(
- FunctionElement.CALL_METHOD_NAME, type.element.library) ??
+ FunctionElement.CALL_METHOD_NAME, type.element2.library) ??
_extensionResolver
.findExtension(type, node, FunctionElement.CALL_METHOD_NAME)
.getter;
@@ -211,7 +211,7 @@
nameNode.name,
element.kind.displayName,
enclosingElement.name!,
- enclosingElement is ClassElement && enclosingElement.isMixin
+ enclosingElement is MixinElement
? 'mixin'
: enclosingElement.kind.displayName,
],
@@ -777,7 +777,7 @@
/// Returns the element that represents the property named [propertyName] on
/// [classElement].
ExecutableElement? _resolveStaticElement(
- ClassElement classElement, SimpleIdentifier propertyName) {
+ InterfaceElement classElement, SimpleIdentifier propertyName) {
String name = propertyName.name;
ExecutableElement? element;
if (propertyName.inSetterContext()) {
@@ -846,7 +846,7 @@
} else if (receiverElement is TypeAliasElement) {
var aliasedType = receiverElement.aliasedType;
if (aliasedType is InterfaceType) {
- var element = _resolveStaticElement(aliasedType.element, name);
+ var element = _resolveStaticElement(aliasedType.element2, name);
name.staticElement = element;
return element?.referenceType;
} else {
diff --git a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
index 0f67ceec..78dbe74 100644
--- a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
@@ -143,7 +143,7 @@
var aliasedType = element.aliasedType;
if (aliasedType is InterfaceType) {
_resolveReceiverTypeLiteral(
- node, aliasedType.element, nameNode, name, whyNotPromotedList,
+ node, aliasedType.element2, nameNode, name, whyNotPromotedList,
contextType: contextType);
return;
}
@@ -256,7 +256,7 @@
nameNode.name,
element.kind.displayName,
enclosingElement.name!,
- enclosingElement is ClassElement && enclosingElement.isMixin
+ enclosingElement is MixinElement
? 'mixin'
: enclosingElement.kind.displayName,
],
@@ -347,7 +347,7 @@
/// Given that we are accessing a property of the given [classElement] with the
/// given [propertyName], return the element that represents the property.
Element? _resolveElement(
- ClassElement classElement, SimpleIdentifier propertyName) {
+ InterfaceElement classElement, SimpleIdentifier propertyName) {
// TODO(scheglov) Replace with class hierarchy.
String name = propertyName.name;
Element? element;
@@ -819,7 +819,7 @@
String receiverClassName = '<unknown>';
if (receiverType is InterfaceType) {
- receiverClassName = receiverType.element.name;
+ receiverClassName = receiverType.element2.name;
} else if (receiverType is FunctionType) {
receiverClassName = 'Function';
}
@@ -835,13 +835,13 @@
void _resolveReceiverTypeLiteral(
MethodInvocationImpl node,
- ClassElement receiver,
+ InterfaceElement receiver,
SimpleIdentifierImpl nameNode,
String name,
List<WhyNotPromotedGetter> whyNotPromotedList,
{required DartType? contextType}) {
if (node.isCascaded) {
- receiver = _typeType.element;
+ receiver = _typeType.element2;
}
var element = _resolveElement(receiver, nameNode);
diff --git a/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart
index 362b8a7..7b87b03 100644
--- a/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/named_type_resolver.dart
@@ -237,7 +237,7 @@
if (element is ClassElement) {
if (identical(node, withClause_namedType)) {
for (var mixin in enclosingClass!.mixins) {
- if (mixin.element == element) {
+ if (mixin.element2 == element) {
return mixin;
}
}
diff --git a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
index 082e7fb..6b212e3 100644
--- a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
@@ -312,7 +312,7 @@
propertyName.name,
element.kind.displayName,
enclosingElement.name!,
- enclosingElement is ClassElement && enclosingElement.isMixin
+ enclosingElement is MixinElement
? 'mixin'
: enclosingElement.kind.displayName,
]);
@@ -370,7 +370,7 @@
if (target is Identifier) {
var targetElement = target.staticElement;
if (targetElement is ClassElement) {
- return _resolveTargetClassElement(
+ return _resolveTargetInterfaceElement(
typeReference: targetElement,
isCascaded: isCascaded,
propertyName: propertyName,
@@ -380,8 +380,8 @@
} else if (targetElement is TypeAliasElement) {
var aliasedType = targetElement.aliasedType;
if (aliasedType is InterfaceType) {
- return _resolveTargetClassElement(
- typeReference: aliasedType.element,
+ return _resolveTargetInterfaceElement(
+ typeReference: aliasedType.element2,
isCascaded: isCascaded,
propertyName: propertyName,
hasRead: hasRead,
@@ -495,87 +495,6 @@
);
}
- PropertyElementResolverResult _resolveTargetClassElement({
- required ClassElement typeReference,
- required bool isCascaded,
- required SimpleIdentifier propertyName,
- required bool hasRead,
- required bool hasWrite,
- }) {
- if (isCascaded) {
- typeReference = _resolver.typeProvider.typeType.element;
- }
-
- ExecutableElement? readElement;
- ExecutableElement? readElementRecovery;
- if (hasRead) {
- readElement = typeReference.getGetter(propertyName.name);
- if (readElement != null && !_isAccessible(readElement)) {
- readElement = null;
- }
-
- if (readElement == null) {
- readElement = typeReference.getMethod(propertyName.name);
- if (readElement != null && !_isAccessible(readElement)) {
- readElement = null;
- }
- }
-
- if (readElement != null) {
- readElement = _resolver.toLegacyElement(readElement);
- if (_checkForStaticAccessToInstanceMember(propertyName, readElement)) {
- readElementRecovery = readElement;
- readElement = null;
- }
- } else {
- var code = typeReference.isEnum
- ? CompileTimeErrorCode.UNDEFINED_ENUM_CONSTANT
- : CompileTimeErrorCode.UNDEFINED_GETTER;
- errorReporter.reportErrorForNode(
- code,
- propertyName,
- [propertyName.name, typeReference.name],
- );
- }
- }
-
- ExecutableElement? writeElement;
- ExecutableElement? writeElementRecovery;
- if (hasWrite) {
- writeElement = typeReference.getSetter(propertyName.name);
- if (writeElement != null) {
- writeElement = _resolver.toLegacyElement(writeElement);
- if (!_isAccessible(writeElement)) {
- errorReporter.reportErrorForNode(
- CompileTimeErrorCode.PRIVATE_SETTER,
- propertyName,
- [propertyName.name],
- );
- }
- if (_checkForStaticAccessToInstanceMember(propertyName, writeElement)) {
- writeElementRecovery = writeElement;
- writeElement = null;
- }
- } else {
- // Recovery, try to use getter.
- writeElementRecovery = typeReference.getGetter(propertyName.name);
- AssignmentVerifier(_definingLibrary, errorReporter).verify(
- node: propertyName,
- requested: null,
- recovery: writeElementRecovery,
- receiverType: typeReference.thisType,
- );
- }
- }
-
- return PropertyElementResolverResult(
- readElementRequested: readElement,
- readElementRecovery: readElementRecovery,
- writeElementRequested: writeElement,
- writeElementRecovery: writeElementRecovery,
- );
- }
-
PropertyElementResolverResult _resolveTargetExtensionElement({
required ExtensionElement extension,
required SimpleIdentifier propertyName,
@@ -696,6 +615,87 @@
);
}
+ PropertyElementResolverResult _resolveTargetInterfaceElement({
+ required InterfaceElement typeReference,
+ required bool isCascaded,
+ required SimpleIdentifier propertyName,
+ required bool hasRead,
+ required bool hasWrite,
+ }) {
+ if (isCascaded) {
+ typeReference = _resolver.typeProvider.typeType.element2;
+ }
+
+ ExecutableElement? readElement;
+ ExecutableElement? readElementRecovery;
+ if (hasRead) {
+ readElement = typeReference.getGetter(propertyName.name);
+ if (readElement != null && !_isAccessible(readElement)) {
+ readElement = null;
+ }
+
+ if (readElement == null) {
+ readElement = typeReference.getMethod(propertyName.name);
+ if (readElement != null && !_isAccessible(readElement)) {
+ readElement = null;
+ }
+ }
+
+ if (readElement != null) {
+ readElement = _resolver.toLegacyElement(readElement);
+ if (_checkForStaticAccessToInstanceMember(propertyName, readElement)) {
+ readElementRecovery = readElement;
+ readElement = null;
+ }
+ } else {
+ var code = typeReference is EnumElement
+ ? CompileTimeErrorCode.UNDEFINED_ENUM_CONSTANT
+ : CompileTimeErrorCode.UNDEFINED_GETTER;
+ errorReporter.reportErrorForNode(
+ code,
+ propertyName,
+ [propertyName.name, typeReference.name],
+ );
+ }
+ }
+
+ ExecutableElement? writeElement;
+ ExecutableElement? writeElementRecovery;
+ if (hasWrite) {
+ writeElement = typeReference.getSetter(propertyName.name);
+ if (writeElement != null) {
+ writeElement = _resolver.toLegacyElement(writeElement);
+ if (!_isAccessible(writeElement)) {
+ errorReporter.reportErrorForNode(
+ CompileTimeErrorCode.PRIVATE_SETTER,
+ propertyName,
+ [propertyName.name],
+ );
+ }
+ if (_checkForStaticAccessToInstanceMember(propertyName, writeElement)) {
+ writeElementRecovery = writeElement;
+ writeElement = null;
+ }
+ } else {
+ // Recovery, try to use getter.
+ writeElementRecovery = typeReference.getGetter(propertyName.name);
+ AssignmentVerifier(_definingLibrary, errorReporter).verify(
+ node: propertyName,
+ requested: null,
+ recovery: writeElementRecovery,
+ receiverType: typeReference.thisType,
+ );
+ }
+ }
+
+ return PropertyElementResolverResult(
+ readElementRequested: readElement,
+ readElementRecovery: readElementRecovery,
+ writeElementRequested: writeElement,
+ writeElementRecovery: writeElementRecovery,
+ );
+ }
+
PropertyElementResolverResult _resolveTargetPrefixElement({
required PrefixElement target,
required SimpleIdentifier identifier,
@@ -755,7 +755,7 @@
if (hasRead) {
var name = Name(_definingLibrary.source.uri, propertyName.name);
readElement = _resolver.inheritance
- .getMember2(targetType.element, name, forSuper: true);
+ .getMember2(targetType.element2, name, forSuper: true);
if (readElement != null) {
readElement = _resolver.toLegacyElement(readElement);
@@ -765,7 +765,7 @@
// But we would like to give the user at least some resolution.
// So, we retry simply looking for an inherited member.
readElement =
- _resolver.inheritance.getInherited2(targetType.element, name);
+ _resolver.inheritance.getInherited2(targetType.element2, name);
if (readElement != null) {
errorReporter.reportErrorForNode(
CompileTimeErrorCode.ABSTRACT_SUPER_MEMBER_REFERENCE,
diff --git a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
index 787cbfe..2d6fa61 100644
--- a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
@@ -1348,8 +1348,8 @@
DartType type = namedType.typeOrThrow;
if (type is InterfaceType) {
- ClassElement element = type.element;
- if (element.isEnum || element.isMixin && asClass) {
+ final element = type.element2;
+ if (element is EnumElement || element is MixinElement && asClass) {
_errorReporter.reportErrorForNode(errorCode, namedType);
return;
}
diff --git a/pkg/analyzer/lib/src/dart/resolver/type_property_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/type_property_resolver.dart
index 6e9f0cc..b88be0e 100644
--- a/pkg/analyzer/lib/src/dart/resolver/type_property_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/type_property_resolver.dart
@@ -236,7 +236,7 @@
_needsGetterError = _getterRequested == null;
if (_getterRequested == null && recoverWithStatic) {
- var classElement = type.element as AbstractClassElementImpl;
+ var classElement = type.element2 as AbstractClassElementImpl;
_getterRecovery ??=
classElement.lookupStaticGetter(_name, _definingLibrary) ??
classElement.lookupStaticMethod(_name, _definingLibrary);
@@ -249,7 +249,7 @@
_needsSetterError = _setterRequested == null;
if (_setterRequested == null && recoverWithStatic) {
- var classElement = type.element as AbstractClassElementImpl;
+ var classElement = type.element2 as AbstractClassElementImpl;
_setterRecovery ??=
classElement.lookupStaticSetter(_name, _definingLibrary);
_needsSetterError = _setterRecovery == null;
diff --git a/pkg/analyzer/lib/src/dart/resolver/typed_literal_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/typed_literal_resolver.dart
index ad94d27..31b7308 100644
--- a/pkg/analyzer/lib/src/dart/resolver/typed_literal_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/typed_literal_resolver.dart
@@ -691,10 +691,12 @@
if (literalType.isDynamic) {
// The literal is ambiguous, and further analysis won't resolve the
// ambiguity. Leave it as neither a set nor a map.
- } else if (literalType.element == _typeProvider.mapElement) {
+ } else if (literalType is InterfaceType &&
+ literalType.element2 == _typeProvider.mapElement) {
node.becomeMap();
} else {
- assert(literalType.element == _typeProvider.setElement);
+ assert(literalType is InterfaceType &&
+ literalType.element2 == _typeProvider.setElement);
node.becomeSet();
}
if (_strictInference &&
diff --git a/pkg/analyzer/lib/src/dart/resolver/variance.dart b/pkg/analyzer/lib/src/dart/resolver/variance.dart
index b248774..cba05a8 100644
--- a/pkg/analyzer/lib/src/dart/resolver/variance.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/variance.dart
@@ -36,7 +36,7 @@
var result = unrelated;
for (int i = 0; i < type.typeArguments.length; ++i) {
var argument = type.typeArguments[i];
- var parameter = type.element.typeParameters[i];
+ var parameter = type.element2.typeParameters[i];
// TODO (kallentu) : Clean up TypeParameterElementImpl casting once
// variance is added to the interface.
diff --git a/pkg/analyzer/lib/src/error/best_practices_verifier.dart b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
index 8b3e2ad..3d82b84 100644
--- a/pkg/analyzer/lib/src/error/best_practices_verifier.dart
+++ b/pkg/analyzer/lib/src/error/best_practices_verifier.dart
@@ -739,7 +739,7 @@
var type = node.typeOrThrow;
// Only report non-aliased, non-user-defined `Null?` and `dynamic?`. Do
// not report synthetic `dynamic` in place of an unresolved type.
- if ((type.element == _nullType.element ||
+ if ((type is InterfaceType && type.element2 == _nullType.element2 ||
(type.isDynamic && name == 'dynamic')) &&
type.alias == null) {
_errorReporter.reportErrorForToken(
@@ -990,7 +990,7 @@
void _checkForImmutable(NamedCompilationUnitMember node) {
/// Return `true` if the given class [element] is annotated with the
/// `@immutable` annotation.
- bool isImmutable(ClassElement element) {
+ bool isImmutable(InterfaceElement element) {
for (ElementAnnotation annotation in element.metadata) {
if (annotation.isImmutable) {
return true;
@@ -1002,29 +1002,29 @@
/// Return `true` if the given class [element] or any superclass of it is
/// annotated with the `@immutable` annotation.
bool isOrInheritsImmutable(
- ClassElement element, HashSet<ClassElement> visited) {
+ InterfaceElement element, Set<InterfaceElement> visited) {
if (visited.add(element)) {
if (isImmutable(element)) {
return true;
}
for (InterfaceType interface in element.mixins) {
- if (isOrInheritsImmutable(interface.element, visited)) {
+ if (isOrInheritsImmutable(interface.element2, visited)) {
return true;
}
}
for (InterfaceType mixin in element.interfaces) {
- if (isOrInheritsImmutable(mixin.element, visited)) {
+ if (isOrInheritsImmutable(mixin.element2, visited)) {
return true;
}
}
if (element.supertype != null) {
- return isOrInheritsImmutable(element.supertype!.element, visited);
+ return isOrInheritsImmutable(element.supertype!.element2, visited);
}
}
return false;
}
- Iterable<String> nonFinalInstanceFields(ClassElement element) {
+ Iterable<String> nonFinalInstanceFields(InterfaceElement element) {
return element.fields
.where((FieldElement field) =>
!field.isSynthetic && !field.isFinal && !field.isStatic)
@@ -1032,16 +1032,16 @@
}
Iterable<String> definedOrInheritedNonFinalInstanceFields(
- ClassElement element, HashSet<ClassElement> visited) {
+ InterfaceElement element, Set<InterfaceElement> visited) {
Iterable<String> nonFinalFields = [];
if (visited.add(element)) {
nonFinalFields = nonFinalInstanceFields(element);
nonFinalFields = nonFinalFields.followedBy(element.mixins.expand(
- (InterfaceType mixin) => nonFinalInstanceFields(mixin.element)));
+ (InterfaceType mixin) => nonFinalInstanceFields(mixin.element2)));
if (element.supertype != null) {
nonFinalFields = nonFinalFields.followedBy(
definedOrInheritedNonFinalInstanceFields(
- element.supertype!.element, visited));
+ element.supertype!.element2, visited));
}
}
return nonFinalFields;
@@ -1172,7 +1172,7 @@
// TODO(srawlins): Perhaps replace this with a getter on Element, like
// `Element.hasOrInheritsSealed`?
for (InterfaceType supertype in element.allSupertypes) {
- ClassElement superclass = supertype.element;
+ final superclass = supertype.element2;
if (superclass.hasSealed) {
if (!currentPackageContains(superclass)) {
if (element.superclassConstraints.contains(supertype)) {
diff --git a/pkg/analyzer/lib/src/error/correct_override.dart b/pkg/analyzer/lib/src/error/correct_override.dart
index 82b95dd..9a3e4c1 100644
--- a/pkg/analyzer/lib/src/error/correct_override.dart
+++ b/pkg/analyzer/lib/src/error/correct_override.dart
@@ -149,7 +149,7 @@
var superMembers = <_SuperMember>[];
for (var interface in interfaces) {
- var superMember = _correspondingMember(interface.element, _thisMember);
+ var superMember = _correspondingMember(interface.element2, _thisMember);
if (superMember != null) {
superMembers.add(
_SuperMember(interface, superMember),
@@ -218,7 +218,7 @@
/// Return a member from [classElement] that corresponds to the [proto],
/// or `null` if no such member exist.
static ExecutableElement? _correspondingMember(
- ClassElement classElement,
+ InterfaceElement classElement,
ExecutableElement proto,
) {
if (proto is MethodElement) {
diff --git a/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart b/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart
index a3aed31..00252ab 100644
--- a/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart
+++ b/pkg/analyzer/lib/src/error/deprecated_member_use_verifier.dart
@@ -178,7 +178,7 @@
} else if (node is MethodInvocation &&
displayName == FunctionElement.CALL_METHOD_NAME) {
var invokeType = node.staticInvokeType as InterfaceType;
- var invokeClass = invokeType.element;
+ var invokeClass = invokeType.element2;
displayName = "${invokeClass.name}.${element.displayName}";
}
var library = element is LibraryElement ? element : element.library;
diff --git a/pkg/analyzer/lib/src/error/error_handler_verifier.dart b/pkg/analyzer/lib/src/error/error_handler_verifier.dart
index 0706474..5ba6a5c 100644
--- a/pkg/analyzer/lib/src/error/error_handler_verifier.dart
+++ b/pkg/analyzer/lib/src/error/error_handler_verifier.dart
@@ -251,8 +251,8 @@
/// Returns whether [element] represents the []
bool _isDartCoreAsyncType(DartType type, String typeName) =>
type is InterfaceType &&
- type.element.name == typeName &&
- type.element.library.isDartAsync;
+ type.element2.name == typeName &&
+ type.element2.library.isDartAsync;
}
/// Visits a function body, looking for return statements.
diff --git a/pkg/analyzer/lib/src/error/inheritance_override.dart b/pkg/analyzer/lib/src/error/inheritance_override.dart
index 4e9bd87..5740b39 100644
--- a/pkg/analyzer/lib/src/error/inheritance_override.dart
+++ b/pkg/analyzer/lib/src/error/inheritance_override.dart
@@ -161,7 +161,7 @@
return true;
}
- if (!classElement.isEnum &&
+ if (classElement is! EnumElement &&
!classElement.isAbstract &&
implementsDartCoreEnum) {
reporter.reportErrorForToken(
@@ -214,7 +214,7 @@
var fieldElement = field.declaredElement as FieldElement;
_checkDeclaredMember(field.name2, libraryUri, fieldElement.getter);
_checkDeclaredMember(field.name2, libraryUri, fieldElement.setter);
- if (!member.isStatic && !classElement.isEnum) {
+ if (!member.isStatic && classElement is! EnumElement) {
_checkIllegalEnumValuesDeclaration(field.name2);
}
if (!member.isStatic) {
@@ -232,7 +232,7 @@
if (!(member.isStatic || member.isAbstract || member.isSetter)) {
_checkIllegalConcreteEnumMemberDeclaration(member.name2);
}
- if (!member.isStatic && !classElement.isEnum) {
+ if (!member.isStatic && classElement is! EnumElement) {
_checkIllegalEnumValuesDeclaration(member.name2);
}
}
@@ -263,7 +263,7 @@
continue;
}
// We already reported ILLEGAL_ENUM_VALUES_INHERITANCE.
- if (classElement.isEnum &&
+ if (classElement is EnumElement &&
const {'values', 'values='}.contains(name.name)) {
continue;
}
@@ -375,7 +375,7 @@
/// corresponding instance members in each of [directSuperInterfaces].
void _checkDeclaredMembers(AstNode node, InterfaceType type,
{required int mixinIndex}) {
- var libraryUri = type.element.library.source.uri;
+ var libraryUri = type.element2.library.source.uri;
for (var method in type.methods) {
_checkDeclaredMember(node, libraryUri, method, mixinIndex: mixinIndex);
}
@@ -402,11 +402,12 @@
return false;
}
- var interfaceElement = type.element;
+ var interfaceElement = type.element2;
- if (interfaceElement.isDartCoreEnum &&
+ if (interfaceElement is ClassElement &&
+ interfaceElement.isDartCoreEnum &&
library.featureSet.isEnabled(Feature.enhanced_enums)) {
- if (classElement.isAbstract || classElement.isEnum) {
+ if (classElement.isAbstract || classElement is EnumElement) {
return false;
}
reporter.reportErrorForNode(
@@ -465,7 +466,7 @@
)) {
hasError = true;
}
- if (classElement.isEnum && _checkEnumMixin(namedType)) {
+ if (classElement is EnumElement && _checkEnumMixin(namedType)) {
hasError = true;
}
}
@@ -479,8 +480,8 @@
return false;
}
- var interfaceElement = type.element;
- if (interfaceElement.isEnum) {
+ var interfaceElement = type.element2;
+ if (interfaceElement is EnumElement) {
return false;
}
@@ -595,9 +596,9 @@
/// [CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_IMPLEMENTS],
/// [CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_ON],
/// [CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_WITH].
- bool _checkForRecursiveInterfaceInheritance(ClassElement element,
- [List<ClassElement>? path]) {
- path ??= <ClassElement>[];
+ bool _checkForRecursiveInterfaceInheritance(InterfaceElement element,
+ [List<InterfaceElement>? path]) {
+ path ??= <InterfaceElement>[];
// Detect error condition.
int size = path.length;
@@ -637,26 +638,30 @@
path.add(element);
// n-case
- var supertype = element.supertype;
- if (supertype != null &&
- _checkForRecursiveInterfaceInheritance(supertype.element, path)) {
- return true;
- }
-
- for (InterfaceType type in element.mixins) {
- if (_checkForRecursiveInterfaceInheritance(type.element, path)) {
+ if (element is ClassElement) {
+ var supertype = element.supertype;
+ if (supertype != null &&
+ _checkForRecursiveInterfaceInheritance(supertype.element2, path)) {
return true;
}
}
- for (InterfaceType type in element.superclassConstraints) {
- if (_checkForRecursiveInterfaceInheritance(type.element, path)) {
+ for (InterfaceType type in element.mixins) {
+ if (_checkForRecursiveInterfaceInheritance(type.element2, path)) {
return true;
}
}
+ if (element is MixinElement) {
+ for (InterfaceType type in element.superclassConstraints) {
+ if (_checkForRecursiveInterfaceInheritance(type.element2, path)) {
+ return true;
+ }
+ }
+ }
+
for (InterfaceType type in element.interfaces) {
- if (_checkForRecursiveInterfaceInheritance(type.element, path)) {
+ if (_checkForRecursiveInterfaceInheritance(type.element2, path)) {
return true;
}
}
@@ -681,7 +686,7 @@
// We ignore mixins because they don't inherit and members.
// But to support `super.foo()` invocations we put members from superclass
// constraints into the `superImplemented` bucket, the same we look below.
- if (classElement.isMixin) {
+ if (classElement is MixinElement) {
return;
}
@@ -743,19 +748,23 @@
/// Return the error code that should be used when the given class [element]
/// references itself directly.
- ErrorCode _getRecursiveErrorCode(ClassElement element) {
- if (element.supertype?.element == classElement) {
- return CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_EXTENDS;
+ ErrorCode _getRecursiveErrorCode(InterfaceElement element) {
+ if (element is ClassElement) {
+ if (element.supertype?.element2 == classElement) {
+ return CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_EXTENDS;
+ }
}
- for (InterfaceType type in element.superclassConstraints) {
- if (type.element == classElement) {
- return CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_ON;
+ if (element is MixinElement) {
+ for (InterfaceType type in element.superclassConstraints) {
+ if (type.element2 == classElement) {
+ return CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_ON;
+ }
}
}
for (InterfaceType type in element.mixins) {
- if (type.element == classElement) {
+ if (type.element2 == classElement) {
return CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE_WITH;
}
}
@@ -772,7 +781,7 @@
ClassMember member, String memberName, String displayName) {
if (memberName == name) {
reporter.reportErrorForNode(
- classElement.isEnum
+ classElement is EnumElement
? CompileTimeErrorCode.ENUM_WITH_ABSTRACT_MEMBER
: CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER,
member,
diff --git a/pkg/analyzer/lib/src/error/must_call_super_verifier.dart b/pkg/analyzer/lib/src/error/must_call_super_verifier.dart
index a248430..7908d2d 100644
--- a/pkg/analyzer/lib/src/error/must_call_super_verifier.dart
+++ b/pkg/analyzer/lib/src/error/must_call_super_verifier.dart
@@ -72,16 +72,26 @@
if (element.enclosingElement3 is! ClassElement) {
return null;
}
- var classElement = element.enclosingElement3 as ClassElement;
+ var classElement = element.enclosingElement3 as InterfaceElement;
String name = element.name;
// Walk up the type hierarchy from [classElement], ignoring direct
// interfaces.
- Queue<ClassElement?> superclasses =
- Queue.of(classElement.mixins.map((i) => i.element))
- ..addAll(classElement.superclassConstraints.map((i) => i.element))
- ..add(classElement.supertype?.element);
- var visitedClasses = <ClassElement>{};
+ final superclasses = Queue<InterfaceElement?>();
+
+ void addToQueue(InterfaceElement element) {
+ superclasses.addAll(element.mixins.map((i) => i.element2));
+ if (element is ClassElement) {
+ superclasses.add(element.supertype?.element2);
+ }
+ if (element is MixinElement) {
+ superclasses
+ .addAll(element.superclassConstraints.map((i) => i.element2));
+ }
+ }
+
+ final visitedClasses = <InterfaceElement>{};
+ addToQueue(classElement);
while (superclasses.isNotEmpty) {
var ancestor = superclasses.removeFirst();
if (ancestor == null || !visitedClasses.add(ancestor)) {
@@ -99,10 +109,7 @@
// documentation of [mustCallSuper].
return member;
}
- superclasses
- ..addAll(ancestor.mixins.map((i) => i.element))
- ..addAll(ancestor.superclassConstraints.map((i) => i.element))
- ..add(ancestor.supertype?.element);
+ addToQueue(ancestor);
}
return null;
}
@@ -144,7 +151,7 @@
bool isConcrete(String name) {
var self = this;
if (self == null) return false;
- var element = self.element;
+ var element = self.element2;
return element.lookUpConcreteMethod(name, element.library) != null;
}
}
diff --git a/pkg/analyzer/lib/src/error/null_safe_api_verifier.dart b/pkg/analyzer/lib/src/error/null_safe_api_verifier.dart
index a0308f1..3336cd2 100644
--- a/pkg/analyzer/lib/src/error/null_safe_api_verifier.dart
+++ b/pkg/analyzer/lib/src/error/null_safe_api_verifier.dart
@@ -45,10 +45,11 @@
if (!_typeSystem.isNonNullableByDefault) return;
final targetType = node.realTarget?.staticType;
- final targetClass = targetType?.element;
- if (targetClass == null || targetType is! InterfaceType) return;
+ if (targetType is! InterfaceType) return;
- if (targetClass.library?.isDartAsync == true &&
+ final targetClass = targetType.element2;
+
+ if (targetClass.library.isDartAsync == true &&
targetClass.name == 'Completer' &&
node.methodName.name == 'complete') {
_checkTypes(node, 'Completer.complete', targetType.typeArguments.single,
diff --git a/pkg/analyzer/lib/src/error/type_arguments_verifier.dart b/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
index 1386d07..3d4b8bd 100644
--- a/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
+++ b/pkg/analyzer/lib/src/error/type_arguments_verifier.dart
@@ -330,8 +330,8 @@
typeParameters = alias.element.typeParameters;
typeArguments = alias.typeArguments;
} else if (type is InterfaceType) {
- elementName = type.element.name;
- typeParameters = type.element.typeParameters;
+ elementName = type.element2.name;
+ typeParameters = type.element2.typeParameters;
typeArguments = type.typeArguments;
} else {
return;
diff --git a/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart b/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
index 22e7a62..3cbfd39 100644
--- a/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
+++ b/pkg/analyzer/lib/src/error/unused_local_elements_verifier.dart
@@ -262,9 +262,7 @@
if (isIdentifierRead) {
usedElements.unresolvedReadMembers.add(node.name);
}
- } else if (enclosingElement is ClassElement &&
- enclosingElement.isEnum &&
- element.name == 'values') {
+ } else if (enclosingElement is EnumElement && element.name == 'values') {
// If the 'values' static accessor of the enum is accessed, then all of
// the enum values have been read.
for (var field in enclosingElement.fields) {
@@ -600,12 +598,12 @@
}
var enclosingElement = element.enclosingElement3;
- if (enclosingElement is ClassElement) {
- if (enclosingElement.isEnum) {
- if (element is ConstructorElement && element.isGenerative) {
- return false;
- }
+ if (enclosingElement is EnumElement) {
+ if (element is ConstructorElement && element.isGenerative) {
+ return false;
}
+ }
+ if (enclosingElement is ClassElement) {
if (enclosingElement.isPrivate) {
if (element.isStatic || element is ConstructorElement) {
return false;
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 5710ff2..9a32845 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -829,8 +829,14 @@
);
} else {
// TODO(danrubel): Skip the block rather than parsing it.
- push(ast.emptyFunctionBody(
- SyntheticToken(TokenType.SEMICOLON, leftBracket.charOffset)));
+ push(
+ EmptyFunctionBodyImpl(
+ semicolon: SyntheticToken(
+ TokenType.SEMICOLON,
+ leftBracket.charOffset,
+ ),
+ ),
+ );
}
}
@@ -871,7 +877,9 @@
} else if (bodyObject is _RedirectingFactoryBody) {
separator = bodyObject.equalToken;
redirectedConstructor = bodyObject.constructorName;
- body = ast.emptyFunctionBody(endToken);
+ body = EmptyFunctionBodyImpl(
+ semicolon: endToken,
+ );
} else {
internalProblem(
templateInternalProblemUnhandled.withArguments(
@@ -952,7 +960,9 @@
} else if (bodyObject is _RedirectingFactoryBody) {
separator = bodyObject.equalToken;
redirectedConstructor = bodyObject.constructorName;
- body = ast.emptyFunctionBody(endToken);
+ body = EmptyFunctionBodyImpl(
+ semicolon: endToken,
+ );
} else {
internalProblem(
templateInternalProblemUnhandled.withArguments(
@@ -1103,7 +1113,9 @@
if (bodyObject is FunctionBodyImpl) {
body = bodyObject;
} else if (bodyObject is _RedirectingFactoryBody) {
- body = ast.emptyFunctionBody(endToken);
+ body = EmptyFunctionBodyImpl(
+ semicolon: endToken,
+ );
} else {
internalProblem(
templateInternalProblemUnhandled.withArguments(
@@ -1298,16 +1310,19 @@
assert(optional(';', semicolon));
debugEvent("DoWhileStatement");
- var condition = pop() as ParenthesizedExpression;
- var body = pop() as Statement;
- push(ast.doStatement(
- doKeyword,
- body,
- whileKeyword,
- condition.leftParenthesis,
- condition.expression,
- condition.rightParenthesis,
- semicolon));
+ var condition = pop() as ParenthesizedExpressionImpl;
+ var body = pop() as StatementImpl;
+ push(
+ DoStatementImpl(
+ doKeyword: doKeyword,
+ body: body,
+ whileKeyword: whileKeyword,
+ leftParenthesis: condition.leftParenthesis,
+ condition: condition.expression,
+ rightParenthesis: condition.rightParenthesis,
+ semicolon: semicolon,
+ ),
+ );
}
@override
@@ -1428,7 +1443,9 @@
if (bodyObject is FunctionBodyImpl) {
body = bodyObject;
} else if (bodyObject is _RedirectingFactoryBody) {
- body = ast.emptyFunctionBody(endToken);
+ body = EmptyFunctionBodyImpl(
+ semicolon: endToken,
+ );
} else {
// Unhandled situation which should never happen.
// Since this event handler is just a recovery attempt,
@@ -3095,7 +3112,11 @@
debugEvent("DottedName");
var components = popTypedList2<SimpleIdentifier>(count);
- push(ast.dottedName(components));
+ push(
+ DottedNameImpl(
+ components: components,
+ ),
+ );
}
@override
@@ -3111,7 +3132,11 @@
// TODO(scheglov) Change the parser to not produce these modifiers.
pop(); // star
pop(); // async
- push(ast.emptyFunctionBody(semicolon));
+ push(
+ EmptyFunctionBodyImpl(
+ semicolon: semicolon,
+ ),
+ );
}
@override
@@ -3119,7 +3144,11 @@
assert(optional(';', semicolon));
debugEvent("EmptyStatement");
- push(ast.emptyStatement(semicolon));
+ push(
+ EmptyStatementImpl(
+ semicolon: semicolon,
+ ),
+ );
}
@override
@@ -3266,11 +3295,11 @@
assert(optionalOrNull(';', semicolon));
debugEvent("ExpressionFunctionBody");
- var expression = pop() as Expression;
+ var expression = pop() as ExpressionImpl;
var star = pop() as Token?;
var asyncKeyword = pop() as Token?;
if (parseFunctionBodies) {
- push(ast.expressionFunctionBody2(
+ push(ExpressionFunctionBodyImpl(
keyword: asyncKeyword,
star: star,
functionDefinition: arrowToken,
@@ -3278,7 +3307,11 @@
semicolon: semicolon,
));
} else {
- push(ast.emptyFunctionBody(semicolon!));
+ push(
+ EmptyFunctionBodyImpl(
+ semicolon: semicolon!,
+ ),
+ );
}
}
@@ -3672,7 +3705,12 @@
assert(token.type == TokenType.DOUBLE);
debugEvent("LiteralDouble");
- push(ast.doubleLiteral(token, double.parse(token.lexeme)));
+ push(
+ DoubleLiteralImpl(
+ literal: token,
+ value: double.parse(token.lexeme),
+ ),
+ );
}
@override
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
index 751f6ca..70bb590 100644
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
@@ -485,7 +485,7 @@
/// Checks whether the given [expression] is a reference to a class. If it is
/// then the element representing the class is returned, otherwise `null` is
/// returned.
- static ClassElement? getTypeReference(Expression expression) {
+ static InterfaceElement? getTypeReference(Expression expression) {
if (expression is Identifier) {
var element = expression.staticElement;
if (element is ClassElement) {
@@ -493,7 +493,7 @@
} else if (element is TypeAliasElement) {
var aliasedType = element.aliasedType;
if (aliasedType is InterfaceType) {
- return aliasedType.element;
+ return aliasedType.element2;
}
}
}
diff --git a/pkg/analyzer/lib/src/generated/error_detection_helpers.dart b/pkg/analyzer/lib/src/generated/error_detection_helpers.dart
index e3f078a..d774a53 100644
--- a/pkg/analyzer/lib/src/generated/error_detection_helpers.dart
+++ b/pkg/analyzer/lib/src/generated/error_detection_helpers.dart
@@ -237,7 +237,7 @@
type is InterfaceType &&
type.nullabilitySuffix != NullabilitySuffix.question) {
return type.lookUpMethod2(
- FunctionElement.CALL_METHOD_NAME, type.element.library);
+ FunctionElement.CALL_METHOD_NAME, type.element2.library);
} else {
return null;
}
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 8703396..8a7106b5 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -283,7 +283,7 @@
/// The language team is thinking about adding abstract fields, or external
/// fields. But for now we will ignore such fields in `Struct` subtypes.
bool get _isEnclosingClassFfiStruct {
- var superClass = _enclosingClass?.supertype?.element;
+ var superClass = _enclosingClass?.supertype?.element2;
return superClass != null &&
superClass.library.name == 'dart.ffi' &&
superClass.name == 'Struct';
@@ -292,7 +292,7 @@
/// The language team is thinking about adding abstract fields, or external
/// fields. But for now we will ignore such fields in `Struct` subtypes.
bool get _isEnclosingClassFfiUnion {
- var superClass = _enclosingClass?.supertype?.element;
+ var superClass = _enclosingClass?.supertype?.element2;
return superClass != null &&
superClass.library.name == 'dart.ffi' &&
superClass.name == 'Union';
@@ -1460,12 +1460,12 @@
mixinName, CompileTimeErrorCode.MIXIN_OF_DISALLOWED_CLASS)) {
problemReported = true;
} else {
- ClassElement mixinElement = mixinType.element;
+ final mixinElement = mixinType.element2;
if (_checkForExtendsOrImplementsDeferredClass(
mixinName, CompileTimeErrorCode.MIXIN_DEFERRED_CLASS)) {
problemReported = true;
}
- if (mixinElement.isMixin) {
+ if (mixinElement is MixinElement) {
if (_checkForMixinSuperclassConstraints(
mixinNameIndex, mixinName)) {
problemReported = true;
@@ -1504,7 +1504,7 @@
// REDIRECT_TO_MISSING_CONSTRUCTOR case
NamedType constructorNamedType = redirectedConstructor.type;
DartType redirectedType = constructorNamedType.typeOrThrow;
- if (redirectedType.element != null && !redirectedType.isDynamic) {
+ if (redirectedType is! DynamicType) {
// Prepare the constructor name
String constructorStrName = constructorNamedType.name.name;
if (redirectedConstructor.name != null) {
@@ -1854,7 +1854,7 @@
String name = typeParameter.name;
// name is same as the name of the enclosing class
if (enclosingClass.name == name) {
- var code = enclosingClass.isMixin
+ var code = enclosingClass is MixinElement
? CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MIXIN
: CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_CLASS;
errorReporter.reportErrorForElement(code, typeParameter, [name]);
@@ -1864,7 +1864,7 @@
enclosingClass.getMethod(name) != null ||
enclosingClass.getGetter(name) != null ||
enclosingClass.getSetter(name) != null) {
- var code = enclosingClass.isMixin
+ var code = enclosingClass is MixinElement
? CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_MIXIN
: CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER_CLASS;
errorReporter.reportErrorForElement(code, typeParameter, [name]);
@@ -1999,7 +1999,7 @@
);
redirectingInitializerCount++;
} else if (initializer is SuperConstructorInvocation) {
- if (enclosingClass.isEnum) {
+ if (enclosingClass is EnumElement) {
errorReporter.reportErrorForToken(
CompileTimeErrorCode.SUPER_IN_ENUM_CONSTRUCTOR,
initializer.superKeyword,
@@ -2018,7 +2018,7 @@
if (redirectingInitializerCount > 0) {
for (ConstructorInitializer initializer in declaration.initializers) {
if (initializer is SuperConstructorInvocation) {
- if (!enclosingClass.isEnum) {
+ if (enclosingClass is! EnumElement) {
errorReporter.reportErrorForNode(
CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR,
initializer);
@@ -2036,11 +2036,11 @@
}
}
}
- if (!enclosingClass.isEnum &&
+ if (enclosingClass is! EnumElement &&
redirectingInitializerCount == 0 &&
superInitializerCount == 1 &&
superInitializer != declaration.initializers.last) {
- var superNamedType = enclosingClass.supertype!.element.displayName;
+ var superNamedType = enclosingClass.supertype!.element2.displayName;
var constructorStrName = superNamedType;
var constructorName = superInitializer.constructorName;
if (constructorName != null) {
@@ -2077,7 +2077,7 @@
// check for mixins
var instanceFields = <FieldElement>[];
for (var mixin in enclosingClass.mixins) {
- instanceFields.addAll(mixin.element.fields.where((field) {
+ instanceFields.addAll(mixin.element2.fields.where((field) {
if (field.isStatic) {
return false;
}
@@ -2113,7 +2113,7 @@
}
// Enum(s) always call a const super-constructor.
- if (enclosingClass.isEnum) {
+ if (enclosingClass is EnumElement) {
return false;
}
@@ -2139,7 +2139,7 @@
if (supertype.isDartCoreObject) {
return false;
}
- var unnamedConstructor = supertype.element.unnamedConstructor;
+ var unnamedConstructor = supertype.element2.unnamedConstructor;
if (unnamedConstructor == null || unnamedConstructor.isConst) {
return false;
}
@@ -2208,7 +2208,10 @@
InstanceCreationExpression expression,
NamedType namedType,
InterfaceType type) {
- if (type.element.isAbstract && !type.element.isMixin) {
+ final element = type.element2;
+ if (element is! MixinElement &&
+ element is ClassElement &&
+ element.isAbstract) {
var element = expression.constructorName.staticElement;
if (element != null && !element.isFactory) {
bool isImplicit =
@@ -2227,7 +2230,7 @@
/// Verify that the given [expression] is not a mixin instantiation.
void _checkForConstOrNewWithMixin(InstanceCreationExpression expression,
NamedType namedType, InterfaceType type) {
- if (type.element.isMixin) {
+ if (type.element2 is MixinElement) {
errorReporter.reportErrorForNode(
CompileTimeErrorCode.MIXIN_INSTANTIATE, namedType);
}
@@ -2273,8 +2276,7 @@
}
DartType type = namedType.typeOrThrow;
if (type is InterfaceType) {
- ClassElement element = type.element;
- if (element.isEnum) {
+ if (type.element2 is EnumElement) {
// We have already reported the error.
return;
}
@@ -2633,7 +2635,7 @@
}
var type = namedType.type;
return type is InterfaceType &&
- _typeProvider.isNonSubtypableClass(type.element);
+ _typeProvider.isNonSubtypableClass(type.element2);
}
void _checkForExtensionDeclaresMemberOfObject(MethodDeclaration node) {
@@ -2921,8 +2923,8 @@
/// the [name] is reference to an instance member.
///
/// See [CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER].
- void _checkForInstanceAccessToStaticMember(
- ClassElement? typeReference, Expression? target, SimpleIdentifier name) {
+ void _checkForInstanceAccessToStaticMember(InterfaceElement? typeReference,
+ Expression? target, SimpleIdentifier name) {
if (_isInComment) {
// OK, in comment
return;
@@ -3301,8 +3303,8 @@
var hasCaseNull = false;
if (expressionType is InterfaceType) {
- var enumElement = expressionType.element;
- if (enumElement.isEnum) {
+ var enumElement = expressionType.element2;
+ if (enumElement is EnumElement) {
var constantNames = enumElement.fields
.where((field) => field.isEnumConstant)
.map((field) => field.name)
@@ -3354,7 +3356,7 @@
///
/// See [CompileTimeErrorCode.MIXIN_CLASS_DECLARES_CONSTRUCTOR].
bool _checkForMixinClassDeclaresConstructor(
- NamedType mixinName, ClassElement mixinElement) {
+ NamedType mixinName, InterfaceElement mixinElement) {
for (ConstructorElement constructor in mixinElement.constructors) {
if (!constructor.isSynthetic && !constructor.isFactory) {
errorReporter.reportErrorForNode(
@@ -3374,8 +3376,11 @@
///
/// See [CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT].
bool _checkForMixinInheritsNotFromObject(
- NamedType mixinName, ClassElement mixinElement) {
- if (mixinElement.isEnum) {
+ NamedType mixinName, InterfaceElement mixinElement) {
+ if (mixinElement is EnumElement) {
+ return false;
+ }
+ if (mixinElement is! ClassElement) {
return false;
}
@@ -3437,7 +3442,7 @@
/// [mixinIndex] in the list of mixins of [_enclosingClass] has concrete
/// implementations of all the super-invoked members of the [mixinElement].
bool _checkForMixinSuperInvokedMembers(int mixinIndex, NamedType mixinName,
- ClassElement mixinElement, InterfaceType mixinType) {
+ InterfaceElement mixinElement, InterfaceType mixinType) {
var mixinElementImpl = mixinElement as ClassElementImpl;
if (mixinElementImpl.superInvokedNames.isEmpty) {
return false;
@@ -3517,7 +3522,7 @@
}
names[name] = namedType.name.name;
var inheritedMember = _inheritanceManager.getMember2(
- declaredSupertype.element,
+ declaredSupertype.element2,
Name(library.source.uri, name),
concrete: true,
);
@@ -3541,7 +3546,7 @@
for (NamedType mixinType in withClause.mixinTypes) {
DartType type = mixinType.typeOrThrow;
if (type is InterfaceType) {
- LibraryElement library = type.element.library;
+ LibraryElement library = type.element2.library;
if (library != _currentLibrary) {
for (PropertyAccessorElement accessor in type.accessors) {
if (accessor.isStatic) {
@@ -3592,8 +3597,8 @@
}
DartType type = namedType.typeOrThrow;
if (type is InterfaceType) {
- ClassElement element = type.element;
- if (element.isEnum || element.isMixin) {
+ final element = type.element2;
+ if (element is EnumElement || element is MixinElement) {
// We have already reported the error.
return;
}
@@ -3632,7 +3637,7 @@
if (superType == null) {
return;
}
- ClassElement superElement = superType.element;
+ final superElement = superType.element2;
// try to find default generative super constructor
var superUnnamedConstructor = superElement.unnamedConstructor;
superUnnamedConstructor = superUnnamedConstructor != null
@@ -3654,7 +3659,7 @@
}
}
- if (!_typeProvider.isNonSubtypableClass(superType.element)) {
+ if (!_typeProvider.isNonSubtypableClass(superType.element2)) {
// Don't report this diagnostic for non-subtypable classes because the
// real problem was already reported.
errorReporter.reportErrorForToken(
@@ -3675,7 +3680,7 @@
// subclass has only factory constructors.
return false;
}
- ClassElement superElement = superType.element;
+ final superElement = superType.element2;
if (superElement.constructors.isEmpty) {
// Exclude empty constructor set, which indicates other errors occurred.
return false;
@@ -3694,7 +3699,7 @@
}
void _checkForNonConstGenerativeEnumConstructor(ConstructorDeclaration node) {
- if (_enclosingClass?.isEnum == true &&
+ if (_enclosingClass is EnumElement &&
node.constKeyword == null &&
node.factoryKeyword == null) {
errorReporter.reportErrorForName(
@@ -3741,7 +3746,7 @@
if (variableList.isFinal) return;
var enclosingClass = _enclosingClass;
- if (enclosingClass == null || !enclosingClass.isEnum) {
+ if (enclosingClass == null || enclosingClass is! EnumElement) {
return;
}
@@ -4120,11 +4125,11 @@
if (!detectedRepeatOnIndex[i]) {
var type = namedTypes[i].type;
if (type is InterfaceType) {
- var element = type.element;
+ var element = type.element2;
for (int j = i + 1; j < count; j++) {
var otherNode = namedTypes[j];
var otherType = otherNode.type;
- if (otherType is InterfaceType && otherType.element == element) {
+ if (otherType is InterfaceType && otherType.element2 == element) {
detectedRepeatOnIndex[j] = true;
errorReporter
.reportErrorForNode(errorCode, otherNode, [element.name]);
@@ -4205,7 +4210,7 @@
///
/// See [CompileTimeErrorCode.STATIC_ACCESS_TO_INSTANCE_MEMBER].
void _checkForStaticAccessToInstanceMember(
- ClassElement? typeReference, SimpleIdentifier name) {
+ InterfaceElement? typeReference, SimpleIdentifier name) {
// OK, in comment
if (_isInComment) {
return;
@@ -4400,7 +4405,7 @@
if (superType == null) {
return;
}
- ClassElement superElement = superType.element;
+ final superElement = superType.element2;
if (superElement.constructors
.every((constructor) => constructor.isFactory)) {
@@ -4925,14 +4930,14 @@
return;
}
- var superElement = _enclosingClass!.supertype?.element;
+ var superElement = _enclosingClass!.supertype?.element2;
if (superElement == null) {
return;
}
for (var interfaceNode in implementsClause.interfaces) {
var type = interfaceNode.type;
- if (type is InterfaceType && type.element == superElement) {
+ if (type is InterfaceType && type.element2 == superElement) {
errorReporter.reportErrorForNode(
CompileTimeErrorCode.IMPLEMENTS_SUPER_CLASS,
interfaceNode,
@@ -4972,14 +4977,14 @@
return;
}
- var superElement = _enclosingClass!.supertype?.element;
+ var superElement = _enclosingClass!.supertype?.element2;
if (superElement == null) {
return;
}
for (var mixinNode in withClause.mixinTypes) {
var type = mixinNode.type;
- if (type is InterfaceType && type.element == superElement) {
+ if (type is InterfaceType && type.element2 == superElement) {
errorReporter.reportErrorForNode(
CompileTimeErrorCode.MIXINS_SUPER_CLASS,
mixinNode,
diff --git a/pkg/analyzer/lib/src/generated/ffi_verifier.dart b/pkg/analyzer/lib/src/generated/ffi_verifier.dart
index 8750f1f..f436d60 100644
--- a/pkg/analyzer/lib/src/generated/ffi_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/ffi_verifier.dart
@@ -156,7 +156,7 @@
if (implementsClause != null) {
final compoundType = node.declaredElement!.thisType;
final structType = compoundType.superclass!;
- final ffiLibrary = structType.element.library;
+ final ffiLibrary = structType.element2.library;
final finalizableElement = ffiLibrary.getType(_finalizableClassName)!;
final finalizableType = finalizableElement.thisType;
if (typeSystem.isSubtypeOf(compoundType, finalizableType)) {
@@ -427,7 +427,12 @@
'NativeFieldWrapperClass1') {
return true;
}
- type = type.element.supertype;
+ final element = type.element2;
+ if (element is ClassElement) {
+ type = element.supertype;
+ } else {
+ break;
+ }
}
return false;
}
@@ -538,7 +543,7 @@
}
if (nativeType.isCompoundSubtype) {
if (!allowEmptyStruct) {
- if (nativeType.element.isEmptyStruct) {
+ if (nativeType.element2.isEmptyStruct) {
// TODO(dartbug.com/36780): This results in an error message not
// mentioning empty structs at all.
return false;
@@ -585,7 +590,7 @@
_PrimitiveDartType _primitiveNativeType(DartType nativeType) {
if (nativeType is InterfaceType) {
- final element = nativeType.element;
+ final element = nativeType.element2;
if (element.isFfiClass) {
final String name = element.name;
if (_primitiveIntegerNativeTypes.contains(name)) {
@@ -669,13 +674,16 @@
if (argument is SetOrMapLiteral) {
for (final element in argument.elements) {
if (element is MapLiteralEntry) {
- final name = element.value.staticType?.element?.name;
- if (name != null &&
- !_primitiveIntegerNativeTypesFixedSize.contains(name)) {
- _errorReporter.reportErrorForNode(
+ final valueType = element.value.staticType;
+ if (valueType is InterfaceType) {
+ final name = valueType.element2.name;
+ if (!_primitiveIntegerNativeTypesFixedSize.contains(name)) {
+ _errorReporter.reportErrorForNode(
FfiCode.ABI_SPECIFIC_INTEGER_MAPPING_UNSUPPORTED,
element.value,
- [name]);
+ [name],
+ );
+ }
}
}
}
@@ -689,13 +697,16 @@
return;
}
for (final nativeType in mappingValues.values) {
- final nativeTypeName = nativeType?.type?.element?.name;
- if (nativeTypeName != null &&
- !_primitiveIntegerNativeTypesFixedSize.contains(nativeTypeName)) {
- _errorReporter.reportErrorForNode(
+ final type = nativeType?.type;
+ if (type is InterfaceType) {
+ final nativeTypeName = type.element2.name;
+ if (!_primitiveIntegerNativeTypesFixedSize.contains(nativeTypeName)) {
+ _errorReporter.reportErrorForNode(
FfiCode.ABI_SPECIFIC_INTEGER_MAPPING_UNSUPPORTED,
arguments.first,
- [nativeTypeName]);
+ [nativeTypeName],
+ );
+ }
}
}
}
@@ -875,7 +886,7 @@
final nativeReturnType = _primitiveNativeType(nativeType);
if (nativeReturnType == _PrimitiveDartType.int ||
(nativeType is InterfaceType &&
- nativeType.superclass?.element.name ==
+ nativeType.superclass?.element2.name ==
_abiSpecificIntegerClassName)) {
return dartType.isDartCoreInt;
} else if (nativeReturnType == _PrimitiveDartType.double) {
@@ -1001,8 +1012,8 @@
final arrayDimensions = declaredType.arrayDimensions;
_validateSizeOfAnnotation(fieldType, annotations, arrayDimensions);
} else if (declaredType.isCompoundSubtype) {
- final clazz = (declaredType as InterfaceType).element;
- if (clazz.isEmptyStruct) {
+ final clazz = (declaredType as InterfaceType).element2;
+ if (clazz is ClassElement && clazz.isEmptyStruct) {
_errorReporter.reportErrorForNode(FfiCode.EMPTY_STRUCT, node, [
clazz.name,
clazz.supertype!.getDisplayString(withNullability: false)
@@ -1487,7 +1498,7 @@
}
}
-extension on ClassElement {
+extension on InterfaceElement {
bool get isEmptyStruct {
for (final field in fields) {
final declaredType = field.type;
@@ -1522,17 +1533,17 @@
extension on DartType? {
bool get isAbiSpecificInteger {
final self = this;
- return self is InterfaceType && self.element.isAbiSpecificInteger;
+ return self is InterfaceType && self.element2.isAbiSpecificInteger;
}
bool get isStruct {
final self = this;
- return self is InterfaceType && self.element.isStruct;
+ return self is InterfaceType && self.element2.isStruct;
}
bool get isUnion {
final self = this;
- return self is InterfaceType && self.element.isUnion;
+ return self is InterfaceType && self.element2.isUnion;
}
}
@@ -1541,8 +1552,8 @@
DartType iterator = this;
int dimensions = 0;
while (iterator is InterfaceType &&
- iterator.element.name == FfiVerifier._arrayClassName &&
- iterator.element.isFfiClass) {
+ iterator.element2.name == FfiVerifier._arrayClassName &&
+ iterator.element2.isFfiClass) {
dimensions++;
iterator = iterator.typeArguments.single;
}
@@ -1552,7 +1563,7 @@
bool get isAbiSpecificInteger {
final self = this;
if (self is InterfaceType) {
- final element = self.element;
+ final element = self.element2;
final name = element.name;
return name == FfiVerifier._abiSpecificIntegerClassName &&
element.isFfiClass;
@@ -1565,9 +1576,9 @@
bool get isAbiSpecificIntegerSubtype {
final self = this;
if (self is InterfaceType) {
- final superType = self.element.supertype;
+ final superType = self.element2.supertype;
if (superType != null) {
- final superClassElement = superType.element;
+ final superClassElement = superType.element2;
return superClassElement.name ==
FfiVerifier._abiSpecificIntegerClassName &&
superClassElement.isFfiClass;
@@ -1580,7 +1591,7 @@
bool get isArray {
final self = this;
if (self is InterfaceType) {
- final element = self.element;
+ final element = self.element2;
return element.name == FfiVerifier._arrayClassName && element.isFfiClass;
}
return false;
@@ -1589,7 +1600,7 @@
bool get isCompound {
final self = this;
if (self is InterfaceType) {
- final element = self.element;
+ final element = self.element2;
final name = element.name;
return (name == FfiVerifier._structClassName ||
name == FfiVerifier._unionClassName) &&
@@ -1602,7 +1613,7 @@
bool get isCompoundSubtype {
final self = this;
if (self is InterfaceType) {
- final superType = self.element.supertype;
+ final superType = self.element2.supertype;
if (superType != null) {
return superType.isCompound;
}
@@ -1613,7 +1624,7 @@
bool get isHandle {
final self = this;
if (self is InterfaceType) {
- final element = self.element;
+ final element = self.element2;
return element.name == 'Handle' && element.isFfiClass;
}
return false;
@@ -1623,7 +1634,7 @@
bool get isNativeFunction {
final self = this;
if (self is InterfaceType) {
- final element = self.element;
+ final element = self.element2;
return element.name == 'NativeFunction' && element.isFfiClass;
}
return false;
@@ -1633,7 +1644,7 @@
bool get isNativeType {
final self = this;
if (self is InterfaceType) {
- final element = self.element;
+ final element = self.element2;
return element.name == 'NativeType' && element.isFfiClass;
}
return false;
@@ -1643,9 +1654,9 @@
bool get isOpaqueSubtype {
final self = this;
if (self is InterfaceType) {
- final superType = self.element.supertype;
+ final superType = self.element2.supertype;
if (superType != null) {
- final superClassElement = superType.element;
+ final superClassElement = superType.element2;
return superClassElement.name == FfiVerifier._opaqueClassName &&
superClassElement.isFfiClass;
}
@@ -1655,7 +1666,7 @@
bool get isPointer {
final self = this;
- return self is InterfaceType && self.element.isPointer;
+ return self is InterfaceType && self.element2.isPointer;
}
}
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index f8c23a9..8d222fa 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -3814,7 +3814,7 @@
factory _SwitchExhaustiveness(DartType expressionType) {
if (expressionType is InterfaceType) {
- var enum_ = expressionType.element;
+ var enum_ = expressionType.element2;
if (enum_ is EnumElementImpl) {
return _SwitchExhaustiveness._(
enum_.constants.toSet(),
diff --git a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
index 0dae99f..e564a7a 100644
--- a/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/ast_test_factory.dart
@@ -45,28 +45,6 @@
rightHandSide: rightHandSide as ExpressionImpl,
);
- static ExpressionFunctionBodyImpl asyncExpressionFunctionBody(
- Expression expression) =>
- astFactory.expressionFunctionBody2(
- keyword:
- TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "async"),
- star: null,
- functionDefinition: TokenFactory.tokenFromType(TokenType.FUNCTION),
- expression: expression,
- semicolon: TokenFactory.tokenFromType(TokenType.SEMICOLON),
- );
-
- static ExpressionFunctionBodyImpl asyncGeneratorExpressionFunctionBody(
- Expression expression) =>
- astFactory.expressionFunctionBody2(
- keyword:
- TokenFactory.tokenFromTypeAndString(TokenType.IDENTIFIER, "async"),
- star: TokenFactory.tokenFromType(TokenType.STAR),
- functionDefinition: TokenFactory.tokenFromType(TokenType.FUNCTION),
- expression: expression,
- semicolon: TokenFactory.tokenFromType(TokenType.SEMICOLON),
- );
-
static IndexExpressionImpl cascadedIndexExpression(Expression index) =>
astFactory.indexExpressionForCascade2(
period: TokenFactory.tokenFromType(TokenType.PERIOD_PERIOD),
@@ -224,7 +202,9 @@
: TokenFactory.tokenFromType(TokenType.PERIOD),
initializers: initializers,
redirectedConstructor: null,
- body: emptyFunctionBody(),
+ body: EmptyFunctionBodyImpl(
+ semicolon: TokenFactory.tokenFromType(TokenType.SEMICOLON),
+ ),
);
static ConstructorDeclarationImpl constructorDeclaration2(
@@ -285,25 +265,6 @@
return astFactory.documentationComment(tokens, references);
}
- static DoStatementImpl doStatement(Statement body, Expression condition) =>
- astFactory.doStatement(
- TokenFactory.tokenFromKeyword(Keyword.DO),
- body,
- TokenFactory.tokenFromKeyword(Keyword.WHILE),
- TokenFactory.tokenFromType(TokenType.OPEN_PAREN),
- condition,
- TokenFactory.tokenFromType(TokenType.CLOSE_PAREN),
- TokenFactory.tokenFromType(TokenType.SEMICOLON));
-
- static DoubleLiteralImpl doubleLiteral(double value) => astFactory
- .doubleLiteral(TokenFactory.tokenFromString(value.toString()), value);
-
- static EmptyFunctionBodyImpl emptyFunctionBody() => astFactory
- .emptyFunctionBody(TokenFactory.tokenFromType(TokenType.SEMICOLON));
-
- static EmptyStatementImpl emptyStatement() => astFactory
- .emptyStatement(TokenFactory.tokenFromType(TokenType.SEMICOLON));
-
static ExportDirectiveImpl exportDirective(
List<Annotation> metadata, String uri,
[List<Combinator> combinators = const []]) =>
@@ -321,16 +282,6 @@
[List<Combinator> combinators = const []]) =>
exportDirective([], uri, combinators);
- static ExpressionFunctionBodyImpl expressionFunctionBody(
- Expression expression) =>
- astFactory.expressionFunctionBody2(
- keyword: null,
- star: null,
- functionDefinition: TokenFactory.tokenFromType(TokenType.FUNCTION),
- expression: expression,
- semicolon: TokenFactory.tokenFromType(TokenType.SEMICOLON),
- );
-
static ExpressionStatementImpl expressionStatement(Expression expression) =>
astFactory.expressionStatement(
expression, TokenFactory.tokenFromType(TokenType.SEMICOLON));
@@ -807,7 +758,9 @@
name: name as SimpleIdentifierImpl,
typeParameters: null,
parameters: parameters as FormalParameterListImpl?,
- body: emptyFunctionBody(),
+ body: EmptyFunctionBodyImpl(
+ semicolon: TokenFactory.tokenFromType(TokenType.SEMICOLON),
+ ),
);
static MethodDeclarationImpl methodDeclaration2(
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
index c23c958..8298cb0 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
@@ -11,7 +11,6 @@
import 'package:analyzer/src/dart/ast/token.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/element/type.dart';
-import 'package:analyzer/src/generated/testing/ast_test_factory.dart';
import 'package:analyzer/src/generated/testing/token_factory.dart';
import 'package:analyzer/src/generated/utilities_dart.dart';
import 'package:analyzer/src/summary2/ast_binary_flags.dart';
@@ -435,12 +434,17 @@
DottedName _readDottedName() {
var components = _readNodeList<SimpleIdentifier>();
- return astFactory.dottedName(components);
+ return DottedNameImpl(
+ components: components,
+ );
}
DoubleLiteral _readDoubleLiteral() {
var value = _reader.readDouble();
- var node = AstTestFactory.doubleLiteral(value);
+ var node = DoubleLiteralImpl(
+ literal: StringToken(TokenType.STRING, '$value', -1),
+ value: value,
+ );
_readExpressionResolution(node);
return node;
}
diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
index 70e39fc..09e4d9e 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
@@ -1691,35 +1691,35 @@
var type = _readFunctionType();
return _readAliasElementArguments(type);
} else if (tag == Tag.InterfaceType) {
- var element = readElement() as ClassElement;
+ var element = readElement() as InterfaceElement;
var typeArguments = _readTypeList();
var nullability = _readNullability();
var type = InterfaceTypeImpl(
- element: element,
+ element2: element,
typeArguments: typeArguments,
nullabilitySuffix: nullability,
);
return _readAliasElementArguments(type);
} else if (tag == Tag.InterfaceType_noTypeArguments_none) {
- var element = readElement() as ClassElement;
+ var element = readElement() as InterfaceElement;
var type = InterfaceTypeImpl(
- element: element,
+ element2: element,
typeArguments: const <DartType>[],
nullabilitySuffix: NullabilitySuffix.none,
);
return _readAliasElementArguments(type);
} else if (tag == Tag.InterfaceType_noTypeArguments_question) {
- var element = readElement() as ClassElement;
+ var element = readElement() as InterfaceElement;
var type = InterfaceTypeImpl(
- element: element,
+ element2: element,
typeArguments: const <DartType>[],
nullabilitySuffix: NullabilitySuffix.question,
);
return _readAliasElementArguments(type);
} else if (tag == Tag.InterfaceType_noTypeArguments_star) {
- var element = readElement() as ClassElement;
+ var element = readElement() as InterfaceElement;
var type = InterfaceTypeImpl(
- element: element,
+ element2: element,
typeArguments: const <DartType>[],
nullabilitySuffix: NullabilitySuffix.star,
);
@@ -1815,7 +1815,7 @@
);
} else if (type is InterfaceType) {
return InterfaceTypeImpl(
- element: type.element,
+ element2: type.element2,
typeArguments: type.typeArguments,
nullabilitySuffix: type.nullabilitySuffix,
alias: InstantiatedTypeAliasElementImpl(
diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
index b1a07e3..3f1a5da 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
@@ -658,11 +658,11 @@
writeByte(Tag.InterfaceType_noTypeArguments_star);
}
// TODO(scheglov) Write raw
- writeElement(type.element);
+ writeElement(type.element2);
} else {
writeByte(Tag.InterfaceType);
// TODO(scheglov) Write raw
- writeElement(type.element);
+ writeElement(type.element2);
writeUInt30(typeArguments.length);
for (var i = 0; i < typeArguments.length; ++i) {
writeType(typeArguments[i]);
diff --git a/pkg/analyzer/lib/src/summary2/macro_application.dart b/pkg/analyzer/lib/src/summary2/macro_application.dart
index 40ca9ad..377dfb7 100644
--- a/pkg/analyzer/lib/src/summary2/macro_application.dart
+++ b/pkg/analyzer/lib/src/summary2/macro_application.dart
@@ -305,7 +305,7 @@
final variableType = variable.type;
if (variable is ConstTopLevelVariableElementImpl &&
variableType is InterfaceType) {
- final macroClass = variableType.element;
+ final macroClass = variableType.element2;
final initializer = variable.constantInitializer;
if (macroClass is ClassElementImpl &&
macroClass.isMacro &&
diff --git a/pkg/analyzer/lib/src/summary2/macro_declarations.dart b/pkg/analyzer/lib/src/summary2/macro_declarations.dart
index 079a09a..5730261 100644
--- a/pkg/analyzer/lib/src/summary2/macro_declarations.dart
+++ b/pkg/analyzer/lib/src/summary2/macro_declarations.dart
@@ -98,7 +98,7 @@
return macro.NamedTypeAnnotationImpl(
id: macro.RemoteInstance.uniqueId,
isNullable: type.nullabilitySuffix == NullabilitySuffix.question,
- identifier: identifier(type.element),
+ identifier: identifier(type.element2),
typeArguments: type.typeArguments.map(_dartType).toList(),
);
} else if (type is TypeParameterType) {
diff --git a/pkg/analyzer/lib/src/summary2/top_level_inference.dart b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
index a5a5f13..de81111 100644
--- a/pkg/analyzer/lib/src/summary2/top_level_inference.dart
+++ b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
@@ -179,7 +179,7 @@
var superType = classElement.supertype;
if (superType != null) {
var index = classElement.constructors.indexOf(_constructor);
- var superConstructors = superType.element.constructors
+ var superConstructors = superType.element2.constructors
.where((element) => element.isAccessibleIn2(classElement.library))
.toList();
if (index < superConstructors.length) {
diff --git a/pkg/analyzer/lib/src/summary2/types_builder.dart b/pkg/analyzer/lib/src/summary2/types_builder.dart
index 28bb1b2..5014c29 100644
--- a/pkg/analyzer/lib/src/summary2/types_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/types_builder.dart
@@ -19,7 +19,7 @@
/// Return `true` if [type] can be used as a class.
bool _isInterfaceTypeClass(InterfaceType type) {
- if (type.element.isMixin) {
+ if (type.element2 is MixinElement) {
return false;
}
return _isInterfaceTypeInterface(type);
@@ -27,7 +27,7 @@
/// Return `true` if [type] can be used as an interface or a mixin.
bool _isInterfaceTypeInterface(InterfaceType type) {
- if (type.element.isEnum) {
+ if (type.element2 is EnumElement) {
return false;
}
if (type.isDartCoreFunction || type.isDartCoreNull) {
@@ -393,11 +393,11 @@
}
InterfaceType? _findInterfaceTypeForElement(
- ClassElement element,
+ InterfaceElement element,
List<InterfaceType> interfaceTypes,
) {
for (var interfaceType in interfaceTypes) {
- if (interfaceType.element == element) return interfaceType;
+ if (interfaceType.element2 == element) return interfaceType;
}
return null;
}
@@ -409,7 +409,7 @@
var result = <InterfaceType>[];
for (var constraint in constraints) {
var interfaceType = _findInterfaceTypeForElement(
- constraint.element,
+ constraint.element2,
interfaceTypes,
);
diff --git a/pkg/analyzer/lib/src/task/strong/checker.dart b/pkg/analyzer/lib/src/task/strong/checker.dart
index df8f7f7..a5dd06b 100644
--- a/pkg/analyzer/lib/src/task/strong/checker.dart
+++ b/pkg/analyzer/lib/src/task/strong/checker.dart
@@ -579,8 +579,9 @@
expectedElement = _typeProvider.streamElement;
} else {
// Future<T> -> FutureOr<T>
- var typeArg = (type.element == _typeProvider.futureElement)
- ? (type as InterfaceType).typeArguments[0]
+ var typeArg = (type is InterfaceType &&
+ type.element2 == _typeProvider.futureElement)
+ ? type.typeArguments[0]
: _typeProvider.dynamicType;
return _typeProvider.futureOrType(typeArg);
}
@@ -608,7 +609,7 @@
}
if (type.isDynamic) {
return type;
- } else if (type is InterfaceType && type.element == expectedElement) {
+ } else if (type is InterfaceType && type.element2 == expectedElement) {
return type.typeArguments[0];
} else {
// Malformed type - fallback on analyzer error.
diff --git a/pkg/analyzer/lib/src/task/strong_mode.dart b/pkg/analyzer/lib/src/task/strong_mode.dart
index ee331d8..e69f550 100644
--- a/pkg/analyzer/lib/src/task/strong_mode.dart
+++ b/pkg/analyzer/lib/src/task/strong_mode.dart
@@ -507,7 +507,7 @@
/// interface [type].
void _inferType(InterfaceType? type) {
if (type != null) {
- _inferClass(type.element);
+ _inferClass(type.element2);
}
}
diff --git a/pkg/analyzer/lib/src/test_utilities/find_node.dart b/pkg/analyzer/lib/src/test_utilities/find_node.dart
index 6638cab..942afd0 100644
--- a/pkg/analyzer/lib/src/test_utilities/find_node.dart
+++ b/pkg/analyzer/lib/src/test_utilities/find_node.dart
@@ -163,6 +163,14 @@
return _node(search, (n) => n is DoubleLiteral);
}
+ EmptyFunctionBody emptyFunctionBody(String search) {
+ return _node(search, (n) => n is EmptyFunctionBody);
+ }
+
+ EmptyStatement emptyStatement(String search) {
+ return _node(search, (n) => n is EmptyStatement);
+ }
+
EnumConstantDeclaration enumConstantDeclaration(String search) {
return _node(search, (n) => n is EnumConstantDeclaration);
}
diff --git a/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart b/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart
index 20a95d0..0772dd1 100644
--- a/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart
+++ b/pkg/analyzer/lib/src/test_utilities/mock_sdk_elements.dart
@@ -1052,11 +1052,11 @@
}
InterfaceType _interfaceType(
- ClassElement element, {
+ InterfaceElement element, {
List<DartType> typeArguments = const [],
}) {
return InterfaceTypeImpl(
- element: element,
+ element2: element,
typeArguments: typeArguments,
nullabilitySuffix: NullabilitySuffix.none,
);
diff --git a/pkg/analyzer/test/dart/ast/ast_test.dart b/pkg/analyzer/test/dart/ast/ast_test.dart
index b22e22d..64790b4 100644
--- a/pkg/analyzer/test/dart/ast/ast_test.dart
+++ b/pkg/analyzer/test/dart/ast/ast_test.dart
@@ -2,6 +2,7 @@
// 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 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/analysis/utilities.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/ast/token.dart';
@@ -9,6 +10,7 @@
import 'package:analyzer/src/dart/ast/ast_factory.dart';
import 'package:analyzer/src/dart/ast/token.dart';
import 'package:analyzer/src/dart/ast/utilities.dart';
+import 'package:analyzer/src/dart/error/syntactic_errors.dart';
import 'package:analyzer/src/generated/testing/ast_test_factory.dart';
import 'package:analyzer/src/generated/testing/token_factory.dart';
import 'package:analyzer/src/summary2/ast_binary_tokens.dart';
@@ -17,6 +19,7 @@
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../../generated/parser_test_base.dart' show ParserTestCase;
+import '../../src/diagnostics/parser_diagnostics.dart';
import '../../util/feature_sets.dart';
main() {
@@ -155,80 +158,68 @@
}
@reflectiveTest
-class ConstructorDeclarationTest {
+class ConstructorDeclarationTest extends ParserDiagnosticsTest {
void test_firstTokenAfterCommentAndMetadata_all_inverted() {
- Token externalKeyword = TokenFactory.tokenFromKeyword(Keyword.EXTERNAL);
- externalKeyword.offset = 14;
- var declaration = AstTestFactory.constructorDeclaration2(
- Keyword.CONST,
- Keyword.FACTORY,
- AstTestFactory.identifier3('int'),
- null,
- AstTestFactory.formalParameterList(),
- [],
- AstTestFactory.emptyFunctionBody());
- declaration.externalKeyword = externalKeyword;
- declaration.constKeyword!.offset = 8;
- Token factoryKeyword = declaration.factoryKeyword!;
- factoryKeyword.offset = 0;
- expect(declaration.firstTokenAfterCommentAndMetadata, factoryKeyword);
+ final parseResult = parseStringWithErrors(r'''
+class A {
+ factory const external A();
+}
+''');
+ parseResult.assertErrors([
+ error(ParserErrorCode.MODIFIER_OUT_OF_ORDER, 20, 5),
+ error(ParserErrorCode.MODIFIER_OUT_OF_ORDER, 26, 8),
+ ]);
+
+ final node = parseResult.findNode.constructor('A()');
+ expect(node.firstTokenAfterCommentAndMetadata, node.factoryKeyword);
}
void test_firstTokenAfterCommentAndMetadata_all_normal() {
- Token token = TokenFactory.tokenFromKeyword(Keyword.EXTERNAL);
- token.offset = 0;
- var declaration = AstTestFactory.constructorDeclaration2(
- Keyword.CONST,
- Keyword.FACTORY,
- AstTestFactory.identifier3('int'),
- null,
- AstTestFactory.formalParameterList(),
- [],
- AstTestFactory.emptyFunctionBody());
- declaration.externalKeyword = token;
- declaration.constKeyword!.offset = 9;
- declaration.factoryKeyword!.offset = 15;
- expect(declaration.firstTokenAfterCommentAndMetadata, token);
+ final parseResult = parseStringWithErrors(r'''
+class A {
+ external const factory A();
+}
+''');
+ parseResult.assertNoErrors();
+
+ final node = parseResult.findNode.constructor('A()');
+ expect(node.firstTokenAfterCommentAndMetadata, node.externalKeyword);
}
void test_firstTokenAfterCommentAndMetadata_constOnly() {
- ConstructorDeclaration declaration = AstTestFactory.constructorDeclaration2(
- Keyword.CONST,
- null,
- AstTestFactory.identifier3('int'),
- null,
- AstTestFactory.formalParameterList(),
- [],
- AstTestFactory.emptyFunctionBody());
- expect(declaration.firstTokenAfterCommentAndMetadata,
- declaration.constKeyword);
+ final parseResult = parseStringWithErrors(r'''
+class A {
+ const A();
+}
+''');
+ parseResult.assertNoErrors();
+
+ final node = parseResult.findNode.constructor('A()');
+ expect(node.firstTokenAfterCommentAndMetadata, node.constKeyword);
}
void test_firstTokenAfterCommentAndMetadata_externalOnly() {
- Token externalKeyword = TokenFactory.tokenFromKeyword(Keyword.EXTERNAL);
- var declaration = AstTestFactory.constructorDeclaration2(
- null,
- null,
- AstTestFactory.identifier3('int'),
- null,
- AstTestFactory.formalParameterList(),
- [],
- AstTestFactory.emptyFunctionBody());
- declaration.externalKeyword = externalKeyword;
- expect(declaration.firstTokenAfterCommentAndMetadata, externalKeyword);
+ final parseResult = parseStringWithErrors(r'''
+class A {
+ external A();
+}
+''');
+ parseResult.assertNoErrors();
+
+ final node = parseResult.findNode.constructor('A()');
+ expect(node.firstTokenAfterCommentAndMetadata, node.externalKeyword);
}
void test_firstTokenAfterCommentAndMetadata_factoryOnly() {
- ConstructorDeclaration declaration = AstTestFactory.constructorDeclaration2(
- null,
- Keyword.FACTORY,
- AstTestFactory.identifier3('int'),
- null,
- AstTestFactory.formalParameterList(),
- [],
- AstTestFactory.emptyFunctionBody());
- expect(declaration.firstTokenAfterCommentAndMetadata,
- declaration.factoryKeyword);
+ final parseResult = parseStringWithErrors(r'''
+class A {
+ factory A() => throw 0;
+}
+''');
+ parseResult.assertNoErrors();
+
+ final node = parseResult.findNode.constructor('A()');
+ expect(node.firstTokenAfterCommentAndMetadata, node.factoryKeyword);
}
}
@@ -991,48 +982,65 @@
}
@reflectiveTest
-class MethodDeclarationTest {
+class MethodDeclarationTest extends ParserDiagnosticsTest {
void test_firstTokenAfterCommentAndMetadata_external() {
- MethodDeclaration declaration = AstTestFactory.methodDeclaration4(
- external: true, name: 'm', body: AstTestFactory.emptyFunctionBody());
- expect(declaration.firstTokenAfterCommentAndMetadata,
- declaration.externalKeyword);
+ final parseResult = parseStringWithErrors(r'''
+class A {
+ external void foo();
+}
+''');
+ parseResult.assertNoErrors();
+
+ final node = parseResult.findNode.methodDeclaration('foo()');
+ expect(node.firstTokenAfterCommentAndMetadata, node.externalKeyword);
}
void test_firstTokenAfterCommentAndMetadata_external_getter() {
- MethodDeclaration declaration = AstTestFactory.methodDeclaration4(
- external: true,
- property: Keyword.GET,
- name: 'm',
- body: AstTestFactory.emptyFunctionBody());
- expect(declaration.firstTokenAfterCommentAndMetadata,
- declaration.externalKeyword);
+ final parseResult = parseStringWithErrors(r'''
+class A {
+ external get foo;
+}
+''');
+ parseResult.assertNoErrors();
+
+ final node = parseResult.findNode.methodDeclaration('get foo');
+ expect(node.firstTokenAfterCommentAndMetadata, node.externalKeyword);
}
void test_firstTokenAfterCommentAndMetadata_external_operator() {
- MethodDeclaration declaration = AstTestFactory.methodDeclaration4(
- external: true,
- operator: true,
- name: 'm',
- body: AstTestFactory.emptyFunctionBody());
- expect(declaration.firstTokenAfterCommentAndMetadata,
- declaration.externalKeyword);
+ final parseResult = parseStringWithErrors(r'''
+class A {
+ external operator +(int other);
+}
+''');
+ parseResult.assertNoErrors();
+
+ final node = parseResult.findNode.methodDeclaration('external operator');
+ expect(node.firstTokenAfterCommentAndMetadata, node.externalKeyword);
}
void test_firstTokenAfterCommentAndMetadata_getter() {
- MethodDeclaration declaration = AstTestFactory.methodDeclaration4(
- property: Keyword.GET,
- name: 'm',
- body: AstTestFactory.emptyFunctionBody());
- expect(declaration.firstTokenAfterCommentAndMetadata,
- declaration.propertyKeyword);
+ final parseResult = parseStringWithErrors(r'''
+class A {
+ get foo => 0;
+}
+''');
+ parseResult.assertNoErrors();
+
+ final node = parseResult.findNode.methodDeclaration('get foo');
+ expect(node.firstTokenAfterCommentAndMetadata, node.propertyKeyword);
}
void test_firstTokenAfterCommentAndMetadata_operator() {
- MethodDeclaration declaration = AstTestFactory.methodDeclaration4(
- operator: true, name: 'm', body: AstTestFactory.emptyFunctionBody());
- expect(declaration.firstTokenAfterCommentAndMetadata,
- declaration.operatorKeyword);
+ final parseResult = parseStringWithErrors(r'''
+class A {
+ operator +(int other) => 0;
+}
+''');
+ parseResult.assertNoErrors();
+
+ final node = parseResult.findNode.methodDeclaration('operator');
+ expect(node.firstTokenAfterCommentAndMetadata, node.operatorKeyword);
}
}
@@ -2207,6 +2215,14 @@
}
class _AstTest {
+ ParseStringResult parseStringWithErrors(String content) {
+ return parseString(
+ content: content,
+ featureSet: FeatureSets.latestWithExperiments,
+ throwIfDiagnostics: false,
+ );
+ }
+
FindNode _parseStringToFindNode(String content) {
var parseResult = parseString(
content: content,
diff --git a/pkg/analyzer/test/error/error_reporter_test.dart b/pkg/analyzer/test/error/error_reporter_test.dart
index d83df43..5777af9 100644
--- a/pkg/analyzer/test/error/error_reporter_test.dart
+++ b/pkg/analyzer/test/error/error_reporter_test.dart
@@ -97,7 +97,7 @@
var reporter = ErrorReporter(
listener,
- firstType.element.source,
+ firstType.element2.source,
isNonNullableByDefault: false,
);
@@ -136,7 +136,7 @@
var reporter = ErrorReporter(
listener,
- firstType.element.source,
+ firstType.element2.source,
isNonNullableByDefault: false,
);
reporter.reportErrorForNode(
diff --git a/pkg/analyzer/test/generated/elements_types_mixin.dart b/pkg/analyzer/test/generated/elements_types_mixin.dart
index 8b660f5..b8a11e6 100644
--- a/pkg/analyzer/test/generated/elements_types_mixin.dart
+++ b/pkg/analyzer/test/generated/elements_types_mixin.dart
@@ -33,17 +33,17 @@
}
InterfaceType get doubleNone {
- var element = typeProvider.doubleType.element;
+ var element = typeProvider.doubleType.element2;
return interfaceTypeNone(element);
}
InterfaceType get doubleQuestion {
- var element = typeProvider.doubleType.element;
+ var element = typeProvider.doubleType.element2;
return interfaceTypeQuestion(element);
}
InterfaceType get doubleStar {
- var element = typeProvider.doubleType.element;
+ var element = typeProvider.doubleType.element2;
return interfaceTypeStar(element);
}
@@ -52,32 +52,32 @@
DynamicTypeImpl get dynamicType => DynamicTypeImpl.instance;
InterfaceType get functionNone {
- var element = typeProvider.functionType.element;
+ var element = typeProvider.functionType.element2;
return interfaceTypeNone(element);
}
InterfaceType get functionQuestion {
- var element = typeProvider.functionType.element;
+ var element = typeProvider.functionType.element2;
return interfaceTypeQuestion(element);
}
InterfaceType get functionStar {
- var element = typeProvider.functionType.element;
+ var element = typeProvider.functionType.element2;
return interfaceTypeStar(element);
}
InterfaceType get intNone {
- var element = typeProvider.intType.element;
+ var element = typeProvider.intType.element2;
return interfaceTypeNone(element);
}
InterfaceType get intQuestion {
- var element = typeProvider.intType.element;
+ var element = typeProvider.intType.element2;
return interfaceTypeQuestion(element);
}
InterfaceType get intStar {
- var element = typeProvider.intType.element;
+ var element = typeProvider.intType.element2;
return interfaceTypeStar(element);
}
@@ -88,62 +88,62 @@
NeverTypeImpl get neverStar => NeverTypeImpl.instanceLegacy;
InterfaceTypeImpl get nullNone {
- var element = typeProvider.nullType.element;
+ var element = typeProvider.nullType.element2;
return interfaceTypeNone(element) as InterfaceTypeImpl;
}
InterfaceTypeImpl get nullQuestion {
- var element = typeProvider.nullType.element;
+ var element = typeProvider.nullType.element2;
return interfaceTypeQuestion(element) as InterfaceTypeImpl;
}
InterfaceTypeImpl get nullStar {
- var element = typeProvider.nullType.element;
+ var element = typeProvider.nullType.element2;
return interfaceTypeStar(element) as InterfaceTypeImpl;
}
InterfaceType get numNone {
- var element = typeProvider.numType.element;
+ var element = typeProvider.numType.element2;
return interfaceTypeNone(element);
}
InterfaceType get numQuestion {
- var element = typeProvider.numType.element;
+ var element = typeProvider.numType.element2;
return interfaceTypeQuestion(element);
}
InterfaceType get numStar {
- var element = typeProvider.numType.element;
+ var element = typeProvider.numType.element2;
return interfaceTypeStar(element);
}
InterfaceType get objectNone {
- var element = typeProvider.objectType.element;
+ var element = typeProvider.objectType.element2;
return interfaceTypeNone(element);
}
InterfaceType get objectQuestion {
- var element = typeProvider.objectType.element;
+ var element = typeProvider.objectType.element2;
return interfaceTypeQuestion(element);
}
InterfaceType get objectStar {
- var element = typeProvider.objectType.element;
+ var element = typeProvider.objectType.element2;
return interfaceTypeStar(element);
}
InterfaceType get stringNone {
- var element = typeProvider.stringType.element;
+ var element = typeProvider.stringType.element2;
return interfaceTypeNone(element);
}
InterfaceType get stringQuestion {
- var element = typeProvider.stringType.element;
+ var element = typeProvider.stringType.element2;
return interfaceTypeQuestion(element);
}
InterfaceType get stringStar {
- var element = typeProvider.stringType.element;
+ var element = typeProvider.stringType.element2;
return interfaceTypeStar(element);
}
@@ -311,7 +311,7 @@
}
InterfaceType interfaceTypeNone(
- ClassElement element, {
+ InterfaceElement element, {
List<DartType> typeArguments = const [],
}) {
return element.instantiate(
@@ -321,7 +321,7 @@
}
InterfaceType interfaceTypeQuestion(
- ClassElement element, {
+ InterfaceElement element, {
List<DartType> typeArguments = const [],
}) {
return element.instantiate(
@@ -331,7 +331,7 @@
}
InterfaceType interfaceTypeStar(
- ClassElement element, {
+ InterfaceElement element, {
List<DartType> typeArguments = const [],
}) {
return element.instantiate(
diff --git a/pkg/analyzer/test/generated/strong_mode_test.dart b/pkg/analyzer/test/generated/strong_mode_test.dart
index c9978a9..9d90aad 100644
--- a/pkg/analyzer/test/generated/strong_mode_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_test.dart
@@ -371,7 +371,8 @@
var exp = stmt.expression as InstanceCreationExpression;
ClassElement elementB = AstFinder.getClass(unit, "B").declaredElement!;
ClassElement elementA = AstFinder.getClass(unit, "A").declaredElement!;
- expect(exp.constructorName.type.typeOrThrow.element, elementB);
+ final type = exp.constructorName.type.typeOrThrow as InterfaceType;
+ expect(type.element2, elementB);
_isInstantiationOf(_hasElement(elementB))([
_isType(elementA.typeParameters[0]
.instantiate(nullabilitySuffix: NullabilitySuffix.star))
diff --git a/pkg/analyzer/test/id_tests/inheritance_test.dart b/pkg/analyzer/test/id_tests/inheritance_test.dart
index e178ad1..92de9e2 100644
--- a/pkg/analyzer/test/id_tests/inheritance_test.dart
+++ b/pkg/analyzer/test/id_tests/inheritance_test.dart
@@ -36,7 +36,7 @@
String supertypeToString(InterfaceType type) {
var sb = StringBuffer();
- sb.write(type.element.name);
+ sb.write(type.element2.name);
if (type.typeArguments.isNotEmpty) {
sb.write('<');
var comma = '';
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
index dca066b..fdd27ee 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -48,7 +48,7 @@
/// Test that [argumentList] has exactly two type items `int` and `double`.
void assertTypeArguments(
- TypeArgumentList argumentList, List<DartType> expectedTypes) {
+ TypeArgumentList argumentList, List<InterfaceType> expectedTypes) {
expect(argumentList.arguments, hasLength(expectedTypes.length));
for (int i = 0; i < expectedTypes.length; i++) {
_assertNamedTypeSimple(argumentList.arguments[i], expectedTypes[i]);
@@ -748,7 +748,7 @@
expect(target.staticType, typeProvider.numType);
var intName = asExpression.type as NamedType;
- expect(intName.name.staticElement, typeProvider.intType.element);
+ expect(intName.name.staticElement, typeProvider.intType.element2);
expect(intName.name.staticType, isNull);
}
}
@@ -3837,7 +3837,7 @@
expect(target.staticType, dynamicType);
var numName = isExpression.type as NamedType;
- expect(numName.name.staticElement, typeProvider.numType.element);
+ expect(numName.name.staticElement, typeProvider.numType.element2);
expect(numName.name.staticType, isNull);
}
@@ -3857,7 +3857,7 @@
expect(target.staticType, dynamicType);
var numName = isExpression.type as NamedType;
- expect(numName.name.staticElement, typeProvider.numType.element);
+ expect(numName.name.staticElement, typeProvider.numType.element2);
expect(numName.name.staticType, isNull);
}
@@ -3967,7 +3967,7 @@
expect(fNode.name.staticType, isNull);
var fReturnTypeNode = fNode.returnType as NamedType;
- expect(fReturnTypeNode.name.staticElement, same(doubleType.element));
+ expect(fReturnTypeNode.name.staticElement, same(doubleType.element2));
expect(fReturnTypeNode.type, doubleType);
expect(fExpression.declaredElement, same(fElement));
@@ -4202,7 +4202,7 @@
expect(fNode.name.staticType, isNull);
var fReturnTypeNode = fNode.returnType as NamedType;
- expect(fReturnTypeNode.name.staticElement, same(doubleType.element));
+ expect(fReturnTypeNode.name.staticElement, same(doubleType.element2));
expect(fReturnTypeNode.type, doubleType);
expect(fExpression.declaredElement, same(fElement));
@@ -4298,7 +4298,7 @@
expect(fNode.name.staticType, isNull);
var fReturnTypeNode = fNode.returnType as NamedType;
- expect(fReturnTypeNode.name.staticElement, same(doubleType.element));
+ expect(fReturnTypeNode.name.staticElement, same(doubleType.element2));
expect(fReturnTypeNode.type, doubleType);
expect(fExpression.declaredElement, same(fElement));
@@ -4973,7 +4973,7 @@
expect(vNamedType.type, typeProvider.numType);
var vTypeIdentifier = vNamedType.name as SimpleIdentifier;
- expect(vTypeIdentifier.staticElement, typeProvider.numType.element);
+ expect(vTypeIdentifier.staticElement, typeProvider.numType.element2);
expect(vTypeIdentifier.staticType, isNull);
// ignore: deprecated_member_use_from_same_package
@@ -5151,7 +5151,7 @@
expect(methodDeclaration.name.staticType, isNull);
var fReturnTypeNode = methodDeclaration.returnType as NamedType;
- expect(fReturnTypeNode.name.staticElement, same(doubleType.element));
+ expect(fReturnTypeNode.name.staticElement, same(doubleType.element2));
expect(fReturnTypeNode.type, doubleType);
//
// Validate the parameters at the declaration site.
@@ -5567,7 +5567,8 @@
var fooInvocation = fooStatement.expression as MethodInvocation;
assertInvokeType(fooInvocation, 'T Function(C<T>)');
assertType(fooInvocation.staticType, 'T');
- expect(fooInvocation.typeOrThrow.element, same(tElement));
+ final type = fooInvocation.typeOrThrow as TypeParameterType;
+ expect(type.element, same(tElement));
}
test_methodInvocation_topLevelFunction() async {
@@ -5628,14 +5629,14 @@
var typeArgument = typeArguments[0] as NamedType;
InterfaceType boolType = typeProvider.boolType;
expect(typeArgument.type, boolType);
- expect(typeArgument.name.staticElement, boolType.element);
+ expect(typeArgument.name.staticElement, boolType.element2);
expect(typeArgument.name.staticType, boolType);
}
{
var typeArgument = typeArguments[1] as NamedType;
InterfaceType stringType = typeProvider.stringType;
expect(typeArgument.type, stringType);
- expect(typeArgument.name.staticElement, stringType.element);
+ expect(typeArgument.name.staticElement, stringType.element2);
expect(typeArgument.name.staticType, stringType);
}
@@ -7090,8 +7091,8 @@
InterfaceType doubleType = typeProvider.doubleType;
InterfaceType intType = typeProvider.intType;
- ClassElement doubleElement = doubleType.element;
- ClassElement intElement = intType.element;
+ final doubleElement = doubleType.element2;
+ final intElement = intType.element2;
var cNode = result.unit.declarations[0] as ClassDeclaration;
ClassElement cElement = cNode.declaredElement!;
@@ -7218,8 +7219,8 @@
InterfaceType doubleType = typeProvider.doubleType;
InterfaceType intType = typeProvider.intType;
- ClassElement doubleElement = doubleType.element;
- ClassElement intElement = intType.element;
+ final doubleElement = doubleType.element2;
+ final intElement = intType.element2;
// topFunction()
{
@@ -7523,7 +7524,7 @@
expect(fDeclaration.name.staticType, isNull);
var fReturnTypeNode = fDeclaration.returnType as NamedType;
- expect(fReturnTypeNode.name.staticElement, same(doubleType.element));
+ expect(fReturnTypeNode.name.staticElement, same(doubleType.element2));
expect(fReturnTypeNode.type, doubleType);
//
// Validate the parameters at the declaration site.
@@ -7801,7 +7802,6 @@
expect(type.type, isDynamicType);
var namedType = type.name;
assertTypeNull(namedType);
- expect(namedType.staticElement, same(typeProvider.dynamicType.element));
}
test_type_functionTypeAlias() async {
@@ -7920,7 +7920,7 @@
{
var statement = statements[0] as ExpressionStatement;
var identifier = statement.expression as SimpleIdentifier;
- expect(identifier.staticElement, same(typeProvider.intType.element));
+ expect(identifier.staticElement, same(typeProvider.intType.element2));
expect(identifier.staticType, typeProvider.typeType);
}
@@ -8646,12 +8646,12 @@
}
}
- void _assertNamedTypeSimple(TypeAnnotation namedType, DartType type) {
+ void _assertNamedTypeSimple(TypeAnnotation namedType, InterfaceType type) {
namedType as NamedType;
expect(namedType.type, type);
var identifier = namedType.name as SimpleIdentifier;
- expect(identifier.staticElement, same(type.element));
+ expect(identifier.staticElement, same(type.element2));
expect(identifier.staticType, isNull);
}
@@ -8681,7 +8681,13 @@
var namedType = node.type as NamedType?;
if (namedType != null) {
expect(namedType.type, type);
- expect(namedType.name.staticElement, same(type!.element));
+ if (type is InterfaceType) {
+ expect(namedType.name.staticElement, same(type.element2));
+ } else if (type is TypeParameterType) {
+ expect(namedType.name.staticElement, same(type.element));
+ } else {
+ throw UnimplementedError();
+ }
}
}
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index 06f8192..92ec357 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -2443,8 +2443,8 @@
var c = _getTopLevelVar(result.unit, 'c');
var typeC = c.declaredElement!.type as InterfaceType;
// The class C has an old field 'foo', not the new 'bar'.
- expect(typeC.element.getField('foo'), isNotNull);
- expect(typeC.element.getField('bar'), isNull);
+ expect(typeC.element2.getField('foo'), isNotNull);
+ expect(typeC.element2.getField('bar'), isNull);
}
test_importOfNonLibrary_part_afterLibrary() async {
diff --git a/pkg/analyzer/test/src/dart/analysis/index_test.dart b/pkg/analyzer/test/src/dart/analysis/index_test.dart
index dcb1633..bff08f3 100644
--- a/pkg/analyzer/test/src/dart/analysis/index_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/index_test.dart
@@ -123,7 +123,7 @@
class A {}
''');
ClassElement elementA = findElement.class_('A');
- ClassElement elementObject = elementA.supertype!.element;
+ final elementObject = elementA.supertype!.element2;
assertThat(elementObject).isExtendedAt('A {}', true, length: 0);
}
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index 14a0870..f173919 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -5,6 +5,7 @@
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/ast/ast.dart' hide Declaration;
import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/src/dart/analysis/driver.dart';
import 'package:analyzer/src/dart/analysis/search.dart';
import 'package:analyzer/src/test_utilities/find_element.dart';
@@ -532,7 +533,8 @@
var v1 = findElement.topVar('v1');
var v2 = findElement.topVar('v2');
- var randomElement = v1.type.element as ClassElement;
+ final v1Type = v1.type as InterfaceType;
+ var randomElement = v1Type.element2 as ClassElement;
var expected = [
_expectId(v1, SearchResultKind.REFERENCE, 'Random v1;'),
_expectId(v2, SearchResultKind.REFERENCE, 'Random v2;'),
diff --git a/pkg/analyzer/test/src/dart/analysis/session_test.dart b/pkg/analyzer/test/src/dart/analysis/session_test.dart
index 9c13ede..0dde953 100644
--- a/pkg/analyzer/test/src/dart/analysis/session_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/session_test.dart
@@ -341,7 +341,7 @@
var resolvedUnit =
await session.getResolvedUnit(test.path) as ResolvedUnitResult;
var typeProvider = resolvedUnit.typeProvider;
- var intClass = typeProvider.intType.element;
+ var intClass = typeProvider.intType.element2;
var parsedLibrary = session.getParsedLibraryValid(test.path);
@@ -564,7 +564,7 @@
expect(resolvedLibrary.session, session);
var typeProvider = resolvedLibrary.typeProvider;
- expect(typeProvider.intType.element.name, 'int');
+ expect(typeProvider.intType.element2.name, 'int');
var libraryElement = resolvedLibrary.element;
@@ -612,7 +612,7 @@
var resolvedLibrary = await session.getResolvedLibraryValid(test.path);
expect(() {
- var intClass = resolvedLibrary.typeProvider.intType.element;
+ var intClass = resolvedLibrary.typeProvider.intType.element2;
resolvedLibrary.getElementDeclaration(intClass);
}, throwsArgumentError);
}
diff --git a/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart b/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart
index a40cbfd..2be9ce0 100644
--- a/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/to_source_visitor_test.dart
@@ -15,6 +15,7 @@
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../../../util/feature_sets.dart';
+import '../../diagnostics/parser_diagnostics.dart';
main() {
defineReflectiveSuite(() {
@@ -23,7 +24,7 @@
}
@reflectiveTest
-class ToSourceVisitorTest {
+class ToSourceVisitorTest extends ParserDiagnosticsTest {
void test_visitAdjacentStrings() {
var findNode = _parseStringToFindNode(r'''
var v = 'a' 'b';
@@ -944,15 +945,31 @@
}
void test_visitDoubleLiteral() {
- _assertSource("4.2", AstTestFactory.doubleLiteral(4.2));
+ final code = '3.14';
+ final findNode = _parseStringToFindNode('''
+final x = $code;
+''');
+ _assertSource(code, findNode.doubleLiteral(code));
}
void test_visitEmptyFunctionBody() {
- _assertSource(";", AstTestFactory.emptyFunctionBody());
+ final code = ';';
+ final findNode = _parseStringToFindNode('''
+void f() {
+ ;
+}
+''');
+ _assertSource(code, findNode.emptyStatement(code));
}
void test_visitEmptyStatement() {
- _assertSource(";", AstTestFactory.emptyStatement());
+ final code = ';';
+ final findNode = _parseStringToFindNode('''
+abstract class A {
+ void foo();
+}
+''');
+ _assertSource(code, findNode.emptyFunctionBody(code));
}
void test_visitEnumDeclaration_constant_arguments_named() {
@@ -1081,22 +1098,28 @@
}
void test_visitExpressionFunctionBody_async() {
- _assertSource(
- "async => a;",
- AstTestFactory.asyncExpressionFunctionBody(
- AstTestFactory.identifier3("a")));
+ final code = 'async => 0;';
+ final findNode = _parseStringToFindNode('''
+void f() $code
+''');
+ _assertSource(code, findNode.expressionFunctionBody(code));
}
void test_visitExpressionFunctionBody_async_star() {
- _assertSource(
- "async* => a;",
- AstTestFactory.asyncGeneratorExpressionFunctionBody(
- AstTestFactory.identifier3("a")));
+ final code = 'async* => 0;';
+ final parseResult = parseStringWithErrors('''
+void f() $code
+''');
+ final node = parseResult.findNode.expressionFunctionBody(code);
+ _assertSource(code, node);
}
void test_visitExpressionFunctionBody_simple() {
- _assertSource("=> a;",
- AstTestFactory.expressionFunctionBody(AstTestFactory.identifier3("a")));
+ final code = '=> 0;';
+ final findNode = _parseStringToFindNode('''
+void f() $code
+''');
+ _assertSource(code, findNode.expressionFunctionBody(code));
}
void test_visitExpressionStatement() {
@@ -1877,15 +1900,9 @@
}
void test_visitFunctionDeclaration_external() {
- var functionDeclaration = AstTestFactory.functionDeclaration(
- null,
- null,
- "f",
- AstTestFactory.functionExpression2(AstTestFactory.formalParameterList(),
- AstTestFactory.emptyFunctionBody()));
- functionDeclaration.externalKeyword =
- TokenFactory.tokenFromKeyword(Keyword.EXTERNAL);
- _assertSource("external f();", functionDeclaration);
+ final code = 'external void f();';
+ final findNode = _parseStringToFindNode(code);
+ _assertSource(code, findNode.functionDeclaration(code));
}
void test_visitFunctionDeclaration_getter() {
@@ -3514,6 +3531,7 @@
expect(buffer.toString(), expectedSource);
}
+ /// TODO(scheglov) Use [parseStringWithErrors] everywhere? Or just there?
FindNode _parseStringToFindNode(String content) {
var parseResult = parseString(
content: content,
diff --git a/pkg/analyzer/test/src/dart/element/element_test.dart b/pkg/analyzer/test/src/dart/element/element_test.dart
index 0bf2ac3..876de8d 100644
--- a/pkg/analyzer/test/src/dart/element/element_test.dart
+++ b/pkg/analyzer/test/src/dart/element/element_test.dart
@@ -927,7 +927,7 @@
void test_getElement() {
ClassElementImpl typeElement = class_(name: 'A');
InterfaceType type = interfaceTypeStar(typeElement);
- expect(type.element, typeElement);
+ expect(type.element2, typeElement);
}
void test_getGetter_implemented() {
@@ -1026,7 +1026,7 @@
List<InterfaceType> interfaces = typeBI.interfaces;
expect(interfaces, hasLength(1));
InterfaceType result = interfaces[0];
- expect(result.element, same(A));
+ expect(result.element2, same(A));
expect(result.typeArguments[0], same(typeI));
}
@@ -1138,7 +1138,7 @@
List<InterfaceType> interfaces = typeBI.mixins;
expect(interfaces, hasLength(1));
InterfaceType result = interfaces[0];
- expect(result.element, same(A));
+ expect(result.element2, same(A));
expect(result.typeArguments[0], same(typeI));
}
@@ -1223,7 +1223,7 @@
var typeI = interfaceTypeStar(class_(name: 'I'));
var typeBI = interfaceTypeStar(classB, typeArguments: <DartType>[typeI]);
InterfaceType superclass = typeBI.superclass!;
- expect(superclass.element, same(A));
+ expect(superclass.element2, same(A));
expect(superclass.typeArguments[0], same(typeI));
}
diff --git a/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart b/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
index 3cbb36f..89a3ffb 100644
--- a/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
+++ b/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
@@ -1329,7 +1329,7 @@
class A {}
''');
var member = manager.getMember2(
- typeProvider.objectType.element,
+ typeProvider.objectType.element2,
Name(null, 'hashCode'),
forSuper: true,
);
diff --git a/pkg/analyzer/test/src/dart/element/least_upper_bound_helper_test.dart b/pkg/analyzer/test/src/dart/element/least_upper_bound_helper_test.dart
index c5e85ce..f4231d7 100644
--- a/pkg/analyzer/test/src/dart/element/least_upper_bound_helper_test.dart
+++ b/pkg/analyzer/test/src/dart/element/least_upper_bound_helper_test.dart
@@ -173,7 +173,7 @@
}
void test_class_object() {
- expect(_longestPathToObject(typeProvider.objectType.element), 0);
+ expect(_longestPathToObject(typeProvider.objectType.element2), 0);
}
void test_class_recursion() {
@@ -344,7 +344,7 @@
expect(_longestPathToObject(M), 3);
}
- int _longestPathToObject(ClassElement element) {
+ int _longestPathToObject(InterfaceElement element) {
return InterfaceLeastUpperBoundHelper.computeLongestInheritancePathToObject(
element);
}
diff --git a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
index b1ea604c..164479e 100644
--- a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
@@ -137,7 +137,9 @@
expect(element.supertype, isNull);
expect(element.isAbstract, isTrue);
+ // ignore: deprecated_member_use_from_same_package
expect(element.isEnum, isFalse);
+ // ignore: deprecated_member_use_from_same_package
expect(element.isMixin, isTrue);
expect(element.isMixinApplication, isFalse);
expect(element.thisType.isDartCoreObject, isFalse);
diff --git a/pkg/analyzer/test/src/dart/resolution/resolution.dart b/pkg/analyzer/test/src/dart/resolution/resolution.dart
index f386b87..4d9ad77 100644
--- a/pkg/analyzer/test/src/dart/resolution/resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/resolution.dart
@@ -43,17 +43,18 @@
ClassElement get boolElement => typeProvider.boolElement;
- ClassElement get doubleElement => typeProvider.doubleType.element;
+ ClassElement get doubleElement => typeProvider.doubleElement;
InterfaceType get doubleType => typeProvider.doubleType;
- Element get dynamicElement => typeProvider.dynamicType.element!;
+ Element get dynamicElement =>
+ (typeProvider.dynamicType as DynamicTypeImpl).element;
FeatureSet get featureSet => result.libraryElement.featureSet;
ClassElement get futureElement => typeProvider.futureElement;
- ClassElement get intElement => typeProvider.intType.element;
+ ClassElement get intElement => typeProvider.intElement;
InterfaceType get intType => typeProvider.intType;
@@ -69,13 +70,14 @@
NeverElementImpl get neverElement => NeverElementImpl.instance;
- ClassElement get numElement => typeProvider.numType.element;
+ ClassElement get numElement => typeProvider.numElement;
- ClassElement get objectElement => typeProvider.objectType.element;
+ ClassElement get objectElement =>
+ typeProvider.objectType.element2 as ClassElement;
InterfaceType get objectType => typeProvider.objectType;
- ClassElement get stringElement => typeProvider.stringType.element;
+ ClassElement get stringElement => typeProvider.stringElement;
InterfaceType get stringType => typeProvider.stringType;
diff --git a/pkg/analyzer/test/src/dart/resolver/legacy_type_asserter_test.dart b/pkg/analyzer/test/src/dart/resolver/legacy_type_asserter_test.dart
index 7e64d5d..149fd91 100644
--- a/pkg/analyzer/test/src/dart/resolver/legacy_type_asserter_test.dart
+++ b/pkg/analyzer/test/src/dart/resolver/legacy_type_asserter_test.dart
@@ -2,18 +2,15 @@
// 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 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/nullability_suffix.dart';
-import 'package:analyzer/dart/element/type_provider.dart';
-import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/src/dart/ast/ast.dart';
import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/dart/resolver/legacy_type_asserter.dart';
-import 'package:analyzer/src/generated/testing/ast_test_factory.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
-import '../../../generated/test_analysis_context.dart';
-import '../../../util/feature_sets.dart';
+import '../resolution/context_collection_resolution.dart';
main() {
defineReflectiveSuite(() {
@@ -22,134 +19,117 @@
}
@reflectiveTest
-class LegacyTypeAsserterTest {
- late final TypeProvider typeProvider;
+class LegacyTypeAsserterTest extends PubPackageResolutionTest {
+ InterfaceType get _intNone {
+ return typeProvider.intElement.instantiate(
+ typeArguments: const [],
+ nullabilitySuffix: NullabilitySuffix.none,
+ );
+ }
- void setUp() {
- var analysisContext = TestAnalysisContext();
- typeProvider = analysisContext.typeProviderLegacy;
+ InterfaceType get _intQuestion {
+ return typeProvider.intElement.instantiate(
+ typeArguments: const [],
+ nullabilitySuffix: NullabilitySuffix.question,
+ );
+ }
+
+ InterfaceType get _intStar {
+ return typeProvider.intElement.instantiate(
+ typeArguments: const [],
+ nullabilitySuffix: NullabilitySuffix.star,
+ );
}
test_nullableUnit_expressionStaticType_bottom() async {
- var identifier = AstTestFactory.identifier3('foo');
- var unit = _wrapExpression(identifier);
- identifier.staticType = NeverTypeImpl.instance;
+ await _buildUnit(() => NeverTypeImpl.instance);
expect(() {
- LegacyTypeAsserter.assertLegacyTypes(unit);
+ LegacyTypeAsserter.assertLegacyTypes(result.unit);
}, throwsStateError);
}
test_nullableUnit_expressionStaticType_bottomQuestion() async {
- var identifier = AstTestFactory.identifier3('foo');
- var unit = _wrapExpression(identifier);
- identifier.staticType = NeverTypeImpl.instanceNullable;
- LegacyTypeAsserter.assertLegacyTypes(unit);
+ await _buildUnit(() => NeverTypeImpl.instanceNullable);
+ LegacyTypeAsserter.assertLegacyTypes(result.unit);
}
test_nullableUnit_expressionStaticType_dynamic() async {
- var identifier = AstTestFactory.identifier3('foo');
- var unit = _wrapExpression(identifier);
- identifier.staticType = typeProvider.dynamicType;
- LegacyTypeAsserter.assertLegacyTypes(unit);
+ await _buildUnit(() => typeProvider.dynamicType);
+ LegacyTypeAsserter.assertLegacyTypes(result.unit);
}
test_nullableUnit_expressionStaticType_nonNull() async {
- var identifier = AstTestFactory.identifier3('foo');
- var unit = _wrapExpression(identifier);
- identifier.staticType = (typeProvider.intType as TypeImpl)
- .withNullability(NullabilitySuffix.none);
+ await _buildUnit(() => _intNone);
expect(() {
- LegacyTypeAsserter.assertLegacyTypes(unit);
+ LegacyTypeAsserter.assertLegacyTypes(result.unit);
}, throwsStateError);
}
test_nullableUnit_expressionStaticType_nonNullTypeArgument() async {
- var identifier = AstTestFactory.identifier3('foo');
- var unit = _wrapExpression(identifier);
- identifier.staticType = typeProvider.listType(
- (typeProvider.intType as TypeImpl)
- .withNullability(NullabilitySuffix.question));
-
+ await _buildUnit(
+ () => typeProvider.listElement.instantiate(
+ typeArguments: [_intNone],
+ nullabilitySuffix: NullabilitySuffix.star,
+ ),
+ );
expect(() {
- LegacyTypeAsserter.assertLegacyTypes(unit);
+ LegacyTypeAsserter.assertLegacyTypes(result.unit);
}, throwsStateError);
}
test_nullableUnit_expressionStaticType_nonNullTypeParameter() async {
- var identifier = AstTestFactory.identifier3('foo');
- var unit = _wrapExpression(identifier);
- identifier.staticType = typeProvider.listElement.instantiate(
- typeArguments: [
- TypeParameterElementImpl('E', 0).instantiate(
- nullabilitySuffix: NullabilitySuffix.none,
- ),
- ],
- nullabilitySuffix: NullabilitySuffix.none,
+ await _buildUnit(
+ () => typeProvider.listElement.instantiate(
+ typeArguments: [
+ findElement.typeParameter('T').instantiate(
+ nullabilitySuffix: NullabilitySuffix.none,
+ ),
+ ],
+ nullabilitySuffix: NullabilitySuffix.star,
+ ),
);
expect(() {
- LegacyTypeAsserter.assertLegacyTypes(unit);
- }, throwsStateError);
- }
-
- test_nullableUnit_expressionStaticType_nonNullTypeParameterBound() async {
- var identifier = AstTestFactory.identifier3('foo');
- var unit = _wrapExpression(identifier);
- var T = TypeParameterElementImpl.synthetic('T');
- T.bound = (typeProvider.intType as TypeImpl)
- .withNullability(NullabilitySuffix.none);
- identifier.staticType = TypeParameterTypeImpl(
- element: T,
- nullabilitySuffix: NullabilitySuffix.star,
- );
- expect(() {
- LegacyTypeAsserter.assertLegacyTypes(unit);
+ LegacyTypeAsserter.assertLegacyTypes(result.unit);
}, throwsStateError);
}
test_nullableUnit_expressionStaticType_null() async {
- var identifier = AstTestFactory.identifier3('foo');
- var unit = _wrapExpression(identifier);
- identifier.staticType = typeProvider.nullType;
- LegacyTypeAsserter.assertLegacyTypes(unit);
+ await _buildUnit(
+ () => typeProvider.nullElement.instantiate(
+ typeArguments: [],
+ nullabilitySuffix: NullabilitySuffix.star,
+ ),
+ );
+ LegacyTypeAsserter.assertLegacyTypes(result.unit);
}
test_nullableUnit_expressionStaticType_question() async {
- var identifier = AstTestFactory.identifier3('foo');
- var unit = _wrapExpression(identifier);
- identifier.staticType = (typeProvider.intType as TypeImpl)
- .withNullability(NullabilitySuffix.question);
+ await _buildUnit(() => _intQuestion);
expect(() {
- LegacyTypeAsserter.assertLegacyTypes(unit);
+ LegacyTypeAsserter.assertLegacyTypes(result.unit);
}, throwsStateError);
}
test_nullableUnit_expressionStaticType_star() async {
- var identifier = AstTestFactory.identifier3('foo');
- var unit = _wrapExpression(identifier);
- identifier.staticType = (typeProvider.intType as TypeImpl)
- .withNullability(NullabilitySuffix.star);
- LegacyTypeAsserter.assertLegacyTypes(unit);
+ await _buildUnit(() => _intStar);
+ LegacyTypeAsserter.assertLegacyTypes(result.unit);
}
test_nullableUnit_expressionStaticType_void() async {
- var identifier = AstTestFactory.identifier3('foo');
- var unit = _wrapExpression(identifier);
- identifier.staticType = VoidTypeImpl.instance;
- LegacyTypeAsserter.assertLegacyTypes(unit);
+ await _buildUnit(() => typeProvider.voidType);
+ LegacyTypeAsserter.assertLegacyTypes(result.unit);
}
- CompilationUnit _wrapExpression(Expression e, {bool nonNullable = false}) {
- return AstTestFactory.compilationUnit9(
- declarations: [
- AstTestFactory.functionDeclaration(
- null,
- null,
- 'f',
- AstTestFactory.functionExpression2(
- AstTestFactory.formalParameterList(),
- AstTestFactory.expressionFunctionBody(e)))
- ],
- featureSet: nonNullable ? FeatureSets.latest : FeatureSets.language_2_9,
- );
+ Future<void> _buildUnit(DartType Function() getType) async {
+ await resolveTestCode(r'''
+// @dart = 2.9
+void f<T>(Object? foo) {
+ foo;
+}
+''');
+
+ final foo = findNode.simple('foo;');
+ foo as SimpleIdentifierImpl;
+ foo.staticType = getType();
}
}
diff --git a/pkg/analyzer/test/src/lint/lint_rule_test.dart b/pkg/analyzer/test/src/lint/lint_rule_test.dart
index 4bfee29..07eb259 100644
--- a/pkg/analyzer/test/src/lint/lint_rule_test.dart
+++ b/pkg/analyzer/test/src/lint/lint_rule_test.dart
@@ -45,7 +45,9 @@
CollectingReporter(GatheringErrorListener(), _MockSource('mock'));
rule.reporter = reporter;
- final node = EmptyStatementImpl(SimpleToken(TokenType.SEMICOLON, 0));
+ final node = EmptyStatementImpl(
+ semicolon: SimpleToken(TokenType.SEMICOLON, 0),
+ );
rule.reportLint(node, errorCode: customCode);
expect(reporter.code, customCode);
});
@@ -55,7 +57,9 @@
CollectingReporter(GatheringErrorListener(), _MockSource('mock'));
rule.reporter = reporter;
- final node = EmptyStatementImpl(SimpleToken(TokenType.SEMICOLON, 0));
+ final node = EmptyStatementImpl(
+ semicolon: SimpleToken(TokenType.SEMICOLON, 0),
+ );
rule.reportLint(node);
expect(reporter.code, rule.lintCode);
});
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index 3eb5228..83acdeb 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -291,8 +291,9 @@
void _writeClassElement(InterfaceElement e) {
_writeIndentedLine(() {
- if (e is ClassElement) {
- _writeIf(e.isAbstract && !e.isMixin, 'abstract ');
+ // TODO(scheglov) `is! MixinElement` after the separation.
+ if (e is ClassElement && e is! MixinElement) {
+ _writeIf(e.isAbstract, 'abstract ');
_writeIf(e.isMacro, 'macro ');
}
_writeIf(!e.isSimplyBounded, 'notSimplyBounded ');
@@ -324,7 +325,7 @@
supertype = e.supertype;
}
if (supertype != null &&
- (supertype.element.name != 'Object' || e.mixins.isNotEmpty)) {
+ (supertype.element2.name != 'Object' || e.mixins.isNotEmpty)) {
_writeType('supertype', supertype);
}
@@ -961,11 +962,6 @@
var aliasedType = e.aliasedType;
_writeType('aliasedType', aliasedType);
- // TODO(scheglov) https://github.com/dart-lang/sdk/issues/44629
- // TODO(scheglov) Remove it when we stop providing it everywhere.
- if (aliasedType is FunctionType) {
- expect(aliasedType.element, isNull);
- }
var aliasedElement = e.aliasedElement;
if (aliasedElement is GenericFunctionTypeElementImpl) {
diff --git a/pkg/analyzer/test/src/summary/elements_test.dart b/pkg/analyzer/test/src/summary/elements_test.dart
index 6fa83b4..b12f41d 100644
--- a/pkg/analyzer/test/src/summary/elements_test.dart
+++ b/pkg/analyzer/test/src/summary/elements_test.dart
@@ -21322,7 +21322,7 @@
superConstructor: package:test/foo.dart::@class::A::@constructor::•
''');
var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
- expect(typeA.element.source.shortName, 'foo.dart');
+ expect(typeA.element2.source.shortName, 'foo.dart');
}
test_exportImport_configurations_useFirst() async {
@@ -21355,7 +21355,7 @@
superConstructor: package:test/foo_io.dart::@class::A::@constructor::•
''');
var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
- expect(typeA.element.source.shortName, 'foo_io.dart');
+ expect(typeA.element2.source.shortName, 'foo_io.dart');
}
test_exportImport_configurations_useSecond() async {
@@ -21388,7 +21388,7 @@
superConstructor: package:test/foo_html.dart::@class::A::@constructor::•
''');
var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
- expect(typeA.element.source.shortName, 'foo_html.dart');
+ expect(typeA.element2.source.shortName, 'foo_html.dart');
}
test_exports() async {
@@ -23768,7 +23768,7 @@
superConstructor: package:test/foo.dart::@class::A::@constructor::•
''');
var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
- expect(typeA.element.source.shortName, 'foo.dart');
+ expect(typeA.element2.source.shortName, 'foo.dart');
}
test_import_configurations_useFirst() async {
@@ -23799,7 +23799,7 @@
superConstructor: package:test/foo_io.dart::@class::A::@constructor::•
''');
var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
- expect(typeA.element.source.shortName, 'foo_io.dart');
+ expect(typeA.element2.source.shortName, 'foo_io.dart');
}
test_import_configurations_useFirst_eqTrue() async {
@@ -23830,7 +23830,7 @@
superConstructor: package:test/foo_io.dart::@class::A::@constructor::•
''');
var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
- expect(typeA.element.source.shortName, 'foo_io.dart');
+ expect(typeA.element2.source.shortName, 'foo_io.dart');
}
test_import_configurations_useSecond() async {
@@ -23861,7 +23861,7 @@
superConstructor: package:test/foo_html.dart::@class::A::@constructor::•
''');
var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
- expect(typeA.element.source.shortName, 'foo_html.dart');
+ expect(typeA.element2.source.shortName, 'foo_html.dart');
}
test_import_configurations_useSecond_eqTrue() async {
@@ -23892,7 +23892,7 @@
superConstructor: package:test/foo_html.dart::@class::A::@constructor::•
''');
var typeA = library.definingCompilationUnit.getType('B')!.supertype!;
- expect(typeA.element.source.shortName, 'foo_html.dart');
+ expect(typeA.element2.source.shortName, 'foo_html.dart');
}
test_import_dartCore_explicit() async {
@@ -25330,7 +25330,7 @@
// This test should verify that we correctly record inferred types,
// when the type is defined in a part of an SDK library. So, test that
// the type is actually in a part.
- Element streamElement = p.type.element!;
+ final streamElement = (p.type as InterfaceType).element2;
if (streamElement is ClassElement) {
expect(streamElement.source, isNot(streamElement.library.source));
}
diff --git a/pkg/analyzer/test/utils.dart b/pkg/analyzer/test/utils.dart
index 2adf9cd..850866e 100644
--- a/pkg/analyzer/test/utils.dart
+++ b/pkg/analyzer/test/utils.dart
@@ -196,7 +196,7 @@
/// Assert that a type has the element that is equal to the [expected].
Asserter<DartType> hasElement(Element expected) =>
- (DartType type) => expect(expected, type.element);
+ (DartType type) => expect(expected, (type as InterfaceType).element2);
/// Given assertions for the argument and return types, produce an
/// assertion over unary function types.
diff --git a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
index 9a17008..02ac771 100644
--- a/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
+++ b/pkg/analyzer_plugin/lib/src/utilities/change_builder/change_builder_dart.dart
@@ -1087,7 +1087,7 @@
} else if (expectedType.isDartCoreString) {
_addSingleCharacterName(excluded, res, $s);
} else if (expectedType is InterfaceType) {
- var className = expectedType.element.name;
+ var className = expectedType.element2.name;
_addAll(excluded, res, _getCamelWordCombinations(className));
}
}
@@ -1102,7 +1102,7 @@
DartType? _getVisibleType(DartType? type,
{ExecutableElement? methodBeingCopied}) {
if (type is InterfaceType) {
- var element = type.element;
+ var element = type.element2;
if (element.isPrivate &&
!dartFileEditBuilder._isDefinedLocally(element)) {
return null;
@@ -1254,7 +1254,7 @@
if (type is InterfaceType) {
_writeTypeElementArguments(
- element: type.element,
+ element: type.element2,
typeArguments: type.typeArguments,
methodBeingCopied: methodBeingCopied,
);
diff --git a/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart b/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
index cb41470..2545739 100644
--- a/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
+++ b/pkg/analyzer_plugin/lib/utilities/analyzer_converter.dart
@@ -213,10 +213,9 @@
/// Convert the element kind of the [element] from the 'analyzer' package to
/// an element kind defined by the plugin API.
plugin.ElementKind _convertElementToElementKind(analyzer.Element element) {
- if (element is analyzer.ClassElement && element.isEnum) {
+ if (element is analyzer.EnumElement) {
return plugin.ElementKind.ENUM;
- } else if (element is analyzer.FieldElement &&
- element.isEnumConstant &&
+ } else if (element is analyzer.FieldElement && element.isEnumConstant
// MyEnum.values and MyEnum.one.index return isEnumConstant = true
// so these additional checks are necessary.
// TODO(danrubel) MyEnum.values is constant, but is a list
@@ -225,8 +224,11 @@
// so should it return isEnumConstant = true?
// Or should we return ElementKind.ENUM_CONSTANT here
// in either or both of these cases?
- element.type.element == element.enclosingElement3) {
- return plugin.ElementKind.ENUM_CONSTANT;
+ ) {
+ final type = element.type;
+ if (type is InterfaceType && type.element2 == element.enclosingElement3) {
+ return plugin.ElementKind.ENUM_CONSTANT;
+ }
}
return convertElementKind(element.kind);
}
diff --git a/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart b/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart
index 97b1c7f..151d387 100644
--- a/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart
+++ b/pkg/analyzer_plugin/lib/utilities/completion/type_member_contributor.dart
@@ -415,11 +415,11 @@
// classes seen (not the interfaces) so that we won't be fooled by nonsense
// like "class C<T> extends C<List<T>> {}"
var result = <InterfaceType>[];
- Set<ClassElement> classesSeen = HashSet<ClassElement>();
+ final classesSeen = <InterfaceElement>{};
var typesToVisit = <InterfaceType>[type];
while (typesToVisit.isNotEmpty) {
var nextType = typesToVisit.removeLast();
- if (!classesSeen.add(nextType.element)) {
+ if (!classesSeen.add(nextType.element2)) {
// Class had already been seen, so ignore this type.
continue;
}
diff --git a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
index a1c5c55..20d8142 100644
--- a/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
+++ b/pkg/analyzer_plugin/lib/utilities/navigation/navigation_dart.dart
@@ -6,6 +6,7 @@
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/src/dart/ast/extensions.dart';
import 'package:analyzer/src/dart/ast/utilities.dart';
@@ -328,9 +329,8 @@
var token = node.keyword;
if (token != null && token.keyword == Keyword.VAR) {
var inferredType = node.declaredElement?.type;
- var element = inferredType?.element;
- if (element != null) {
- computer._addRegionForToken(token, element);
+ if (inferredType is InterfaceType) {
+ computer._addRegionForToken(token, inferredType.element2);
}
}
}
@@ -492,13 +492,18 @@
/// the given list of [variables], or `null` if not all variable have the
/// same inferred type.
Element? getCommonElement(List<VariableDeclaration> variables) {
- var firstElement = variables[0].declaredElement?.type.element;
- if (firstElement == null) {
+ final firstType = variables[0].declaredElement?.type;
+ if (firstType is! InterfaceType) {
return null;
}
+
+ var firstElement = firstType.element2;
for (var i = 1; i < variables.length; i++) {
- var element = variables[1].declaredElement?.type.element;
- if (element != firstElement) {
+ final type = variables[i].declaredElement?.type;
+ if (type is! InterfaceType) {
+ return null;
+ }
+ if (type.element2 != firstElement) {
return null;
}
}
diff --git a/pkg/dartdev/lib/src/commands/devtools.dart b/pkg/dartdev/lib/src/commands/devtools.dart
index ecf7884..194836e 100644
--- a/pkg/dartdev/lib/src/commands/devtools.dart
+++ b/pkg/dartdev/lib/src/commands/devtools.dart
@@ -4,7 +4,6 @@
import 'package:args/args.dart';
import 'package:dds/devtools_server.dart';
-import 'package:dds/src/devtools/utils.dart';
import 'package:path/path.dart' as path;
import '../core.dart';
@@ -15,7 +14,7 @@
DevToolsCommand({
this.customDevToolsPath,
bool verbose = false,
- }) : _argParser = DevToolsServer.buildArgParser(
+ }) : argParser = DevToolsServer.buildArgParser(
verbose: verbose,
includeHelpOption: false,
usageLineLength: dartdevUsageLineLength,
@@ -29,8 +28,7 @@
final String? customDevToolsPath;
@override
- ArgParser get argParser => _argParser;
- late final ArgParser _argParser;
+ final ArgParser argParser;
@override
String get name => 'devtools';
@@ -44,87 +42,16 @@
@override
Future<int> run() async {
final args = argResults!;
- final bool version = args[DevToolsServer.argVersion];
- final bool machineMode = args[DevToolsServer.argMachine];
- // launchBrowser defaults based on machine-mode if not explicitly supplied.
- final bool launchBrowser = args.wasParsed(DevToolsServer.argLaunchBrowser)
- ? args[DevToolsServer.argLaunchBrowser]
- : !machineMode;
- final bool enableNotifications =
- args[DevToolsServer.argEnableNotifications];
- final bool allowEmbedding = args.wasParsed(DevToolsServer.argAllowEmbedding)
- ? args[DevToolsServer.argAllowEmbedding]
- : true;
-
- final port = args[DevToolsServer.argPort] != null
- ? int.tryParse(args[DevToolsServer.argPort]) ?? 0
- : 0;
-
- final bool headlessMode = args[DevToolsServer.argHeadlessMode];
- final bool debugMode = args[DevToolsServer.argDebugMode];
-
- final numPortsToTry = args[DevToolsServer.argTryPorts] != null
- ? int.tryParse(args[DevToolsServer.argTryPorts]) ?? 0
- : DevToolsServer.defaultTryPorts;
-
- final bool verboseMode = args[DevToolsServer.argVerbose];
- final String? hostname = args[DevToolsServer.argHost];
- final String? appSizeBase = args[DevToolsServer.argAppSizeBase];
- final String? appSizeTest = args[DevToolsServer.argAppSizeTest];
final sdkDir = path.dirname(sdk.dart);
final fullSdk = sdkDir.endsWith('bin');
final devToolsBinaries =
fullSdk ? sdk.devToolsBinaries : path.absolute(sdkDir, 'devtools');
- if (version) {
- final versionStr = await DevToolsUtils.getVersion(devToolsBinaries);
- DevToolsUtils.printOutput(
- 'Dart DevTools version $versionStr',
- {
- 'version': versionStr,
- },
- machineMode: machineMode,
- );
- return 0;
- }
-
- // Prefer getting the VM URI from the rest args; fall back on the 'vm-url'
- // option otherwise.
- String? serviceProtocolUri;
- if (args.rest.isNotEmpty) {
- serviceProtocolUri = args.rest.first;
- } else if (args.wasParsed(DevToolsServer.argVmUri)) {
- serviceProtocolUri = args[DevToolsServer.argVmUri];
- }
-
- // Support collecting profile data.
- String? profileFilename;
- if (args.wasParsed(DevToolsServer.argProfileMemory)) {
- profileFilename = args[DevToolsServer.argProfileMemory];
- }
- if (profileFilename != null && !path.isAbsolute(profileFilename)) {
- profileFilename = path.absolute(profileFilename);
- }
-
- final server = await DevToolsServer().serveDevTools(
- machineMode: machineMode,
- debugMode: debugMode,
- launchBrowser: launchBrowser,
- enableNotifications: enableNotifications,
- allowEmbedding: allowEmbedding,
- port: port,
- headlessMode: headlessMode,
- numPortsToTry: numPortsToTry,
- customDevToolsPath: customDevToolsPath ?? devToolsBinaries,
- serviceProtocolUri: serviceProtocolUri,
- profileFilename: profileFilename,
- verboseMode: verboseMode,
- hostname: hostname,
- appSizeBase: appSizeBase,
- appSizeTest: appSizeTest,
+ final server = await DevToolsServer().serveDevToolsWithArgs(
+ args.arguments,
+ customDevToolsPath: devToolsBinaries,
);
-
return server == null ? -1 : 0;
}
}
diff --git a/pkg/dds/tool/devtools_server/serve_local.dart b/pkg/dds/tool/devtools_server/serve_local.dart
index db893fe..86ac23a 100644
--- a/pkg/dds/tool/devtools_server/serve_local.dart
+++ b/pkg/dds/tool/devtools_server/serve_local.dart
@@ -10,7 +10,7 @@
const argDevToolsBuild = 'devtools-build';
void main(List<String> args) {
- final argParser = ArgParser()
+ final argParser = DevToolsServer.buildArgParser()
..addOption(
argDevToolsBuild,
help: 'The location of the DevTools build to serve from DevTools server '
@@ -21,7 +21,8 @@
try {
final ArgResults argResults = argParser.parse(args);
unawaited(
- DevToolsServer().serveDevTools(
+ DevToolsServer().serveDevToolsWithArgs(
+ _removeDevToolsBuildOption(args),
customDevToolsPath: argResults[argDevToolsBuild],
),
);
@@ -31,3 +32,23 @@
print(argParser.usage);
}
}
+
+/// Removes the --devtools-build option from [args].
+List<String> _removeDevToolsBuildOption(List<String> args) {
+ // Create a new list to mutate as the args list is fixed.
+ args = args.toList();
+
+ final option = '--$argDevToolsBuild';
+
+ // serve_local.dart --devtools-build foo
+ final index = args.indexOf(option);
+ if (index != -1) {
+ args.removeRange(index, index + 2);
+ }
+
+ // serve_local.dart --devtools-build=foo
+ // serve_local.dart --devtools-build="foo"
+ args.removeWhere((arg) => arg.startsWith('${option}='));
+
+ return args;
+}
diff --git a/pkg/nnbd_migration/lib/src/already_migrated_code_decorator.dart b/pkg/nnbd_migration/lib/src/already_migrated_code_decorator.dart
index 5b04212..e393329 100644
--- a/pkg/nnbd_migration/lib/src/already_migrated_code_decorator.dart
+++ b/pkg/nnbd_migration/lib/src/already_migrated_code_decorator.dart
@@ -75,7 +75,7 @@
namedParameters: namedParameters,
positionalParameters: positionalParameters);
} else if (type is InterfaceType) {
- var typeParameters = type.element.typeParameters;
+ var typeParameters = type.element2.typeParameters;
if (typeParameters.isNotEmpty) {
assert(type.typeArguments.length == typeParameters.length);
int index = 0;
diff --git a/pkg/nnbd_migration/lib/src/decorated_class_hierarchy.dart b/pkg/nnbd_migration/lib/src/decorated_class_hierarchy.dart
index 1baa2ce..4d7d3ce 100644
--- a/pkg/nnbd_migration/lib/src/decorated_class_hierarchy.dart
+++ b/pkg/nnbd_migration/lib/src/decorated_class_hierarchy.dart
@@ -21,7 +21,7 @@
/// Cache for speeding up the computation of
/// [_getGenericSupertypeDecorations].
- final Map<InterfaceElement, Map<ClassElement, DecoratedType>>
+ final Map<InterfaceElement, Map<InterfaceElement, DecoratedType>>
_genericSupertypeDecorations = {};
DecoratedClassHierarchy(this._variables, this._graph);
@@ -30,10 +30,10 @@
///
/// If the [type] is a [TypeParameterType], it will be resolved against its
/// bound.
- DecoratedType asInstanceOf(DecoratedType type, ClassElement? superclass) {
+ DecoratedType asInstanceOf(DecoratedType type, InterfaceElement? superclass) {
type = _getInterfaceType(type);
var typeType = type.type as InterfaceType;
- var class_ = typeType.element;
+ var class_ = typeType.element2;
if (class_ == superclass) return type;
var result = getDecoratedSupertype(class_, superclass!);
if (result.typeArguments.isNotEmpty && type.typeArguments.isNotEmpty) {
@@ -69,7 +69,7 @@
/// Computes a map whose keys are all the superclasses of [class_], and whose
/// values indicate how [class_] implements each superclass.
- Map<ClassElement, DecoratedType> _getGenericSupertypeDecorations(
+ Map<InterfaceElement, DecoratedType> _getGenericSupertypeDecorations(
InterfaceElement class_) {
var decorations = _genericSupertypeDecorations[class_];
if (decorations == null) {
@@ -86,7 +86,7 @@
// this specific [superclass].
Map<TypeParameterElement, DecoratedType?> substitution = {};
for (int i = 0; i < supertype.typeArguments.length; i++) {
- substitution[supertype.element.typeParameters[i]] =
+ substitution[supertype.element2.typeParameters[i]] =
decoratedSupertype.typeArguments[i];
}
// Apply that substitution to the relation between [superclass] and
diff --git a/pkg/nnbd_migration/lib/src/decorated_type.dart b/pkg/nnbd_migration/lib/src/decorated_type.dart
index 12b3f4d..38cad25 100644
--- a/pkg/nnbd_migration/lib/src/decorated_type.dart
+++ b/pkg/nnbd_migration/lib/src/decorated_type.dart
@@ -199,7 +199,7 @@
var type = this.type;
if (type is InterfaceType) {
return Map<TypeParameterElement, DecoratedType?>.fromIterables(
- type.element.typeParameters, typeArguments);
+ type.element2.typeParameters, typeArguments);
} else {
throw StateError(
'Tried to convert a non-interface type to a substitution');
@@ -248,7 +248,7 @@
}
return true;
} else if (thisType is InterfaceType && otherType is InterfaceType) {
- if (thisType.element != otherType.element) return false;
+ if (thisType.element2 != otherType.element2) return false;
if (!_compareLists(typeArguments, other.typeArguments)) {
return false;
}
@@ -339,7 +339,7 @@
if (type is TypeParameterType || type is VoidType) {
return '$type$trailing';
} else if (type is InterfaceType) {
- var name = type.element.name;
+ var name = type.element2.name;
var args = '';
if (type.typeArguments.isNotEmpty) {
args = '<${typeArguments.join(', ')}>';
diff --git a/pkg/nnbd_migration/lib/src/edge_builder.dart b/pkg/nnbd_migration/lib/src/edge_builder.dart
index 766c3fa..e4b64d7 100644
--- a/pkg/nnbd_migration/lib/src/edge_builder.dart
+++ b/pkg/nnbd_migration/lib/src/edge_builder.dart
@@ -703,7 +703,7 @@
_dispatch(node.withClause);
var classElement = node.declaredElement!;
var supertype = classElement.supertype!;
- var superElement = supertype.element;
+ var superElement = supertype.element2;
for (var constructorElement in classElement.constructors) {
assert(constructorElement.isSynthetic);
var superConstructorElement =
@@ -2237,14 +2237,14 @@
List<DecoratedType?> rightTypeArguments;
if (isLUB) {
leftTypeArguments = _decoratedClassHierarchy!
- .asInstanceOf(left, type.element)
+ .asInstanceOf(left, type.element2)
.typeArguments;
rightTypeArguments = _decoratedClassHierarchy!
- .asInstanceOf(right, type.element)
+ .asInstanceOf(right, type.element2)
.typeArguments;
} else {
- if (leftType.element != type.element ||
- rightType.element != type.element) {
+ if (leftType.element2 != type.element2 ||
+ rightType.element2 != type.element2) {
_unimplemented(astNode, 'GLB with substitution');
}
leftTypeArguments = left.typeArguments;
@@ -2330,8 +2330,8 @@
return DecoratedType(type, node);
}
- assert(leftType.element == type.element &&
- rightType.element == type.element);
+ assert(leftType.sharedElement == type.element &&
+ rightType.sharedElement == type.element);
return DecoratedType(type, node);
}
_unimplemented(astNode, '_decorateUpperOrLowerBound');
@@ -2904,8 +2904,7 @@
if (_typeSystem.isSubtypeOf(
iterableTypeType, typeProvider.iterableDynamicType)) {
elementType = _decoratedClassHierarchy!
- .asInstanceOf(
- iterableType, typeProvider.iterableDynamicType.element)
+ .asInstanceOf(iterableType, typeProvider.iterableElement)
.typeArguments[0];
_checkAssignment(
ForEachVariableOrigin(source, parts), FixReasonTarget.root,
@@ -3537,7 +3536,7 @@
}
if (dartType is InterfaceType &&
- dartType.element == typeProvider.futureOrElement) {
+ dartType.element2 == typeProvider.futureOrElement) {
var typeArguments = type.typeArguments;
if (typeArguments.length == 1) {
// Wrapping FutureOr<T?1>?2 should produce Future<T?3>, where either 1
@@ -3552,7 +3551,7 @@
if (_typeSystem.isSubtypeOf(dartType, typeProvider.futureDynamicType)) {
return _decoratedClassHierarchy!
- .asInstanceOf(type, typeProvider.futureDynamicType.element);
+ .asInstanceOf(type, typeProvider.futureElement);
}
return _futureOf(type, node!);
@@ -3769,7 +3768,7 @@
} else if (sourceType is InterfaceType &&
destinationType is InterfaceType) {
var rewrittenSource = _decoratedClassHierarchy!
- .asInstanceOf(source, destinationType.element);
+ .asInstanceOf(source, destinationType.element2);
assert(rewrittenSource.typeArguments.length ==
destination.typeArguments.length);
for (int i = 0; i < rewrittenSource.typeArguments.length; i++) {
@@ -3827,16 +3826,17 @@
required DecoratedType destination,
required bool hard}) {
var destinationType = destination.type!;
- assert(_typeSystem.isSubtypeOf(destinationType, source.type!));
+ final sourceType = source.type!;
+ assert(_typeSystem.isSubtypeOf(destinationType, sourceType));
// Nullability should narrow to maintain subtype relationship.
_connect(source.node, destination.node, origin, FixReasonTarget.root,
hard: hard);
- if (source.type!.isDynamic ||
- source.type!.isDartCoreObject ||
- source.type!.isVoid) {
+ if (sourceType.isDynamic ||
+ sourceType.isDartCoreObject ||
+ sourceType.isVoid) {
if (destinationType is InterfaceType) {
- for (final param in destinationType.element.typeParameters) {
+ for (final param in destinationType.element2.typeParameters) {
assert(param.bound == null,
'downcast to type parameters with bounds not supported');
}
@@ -3853,17 +3853,17 @@
// trying to store a value into a `List<Null>`). So do nothing.
return;
} else if (destinationType is TypeParameterType) {
- if (source.type is! TypeParameterType) {
+ if (sourceType is! TypeParameterType) {
// Assume an assignment to the type parameter's bound.
_checkAssignment(origin, FixReasonTarget.root,
source: source,
destination: _getTypeParameterTypeBound(destination)!,
hard: false);
- } else if (destinationType == source.type) {
+ } else if (destinationType == sourceType) {
// Nothing to do.
return;
}
- } else if (source.type!.isDartAsyncFutureOr) {
+ } else if (sourceType.isDartAsyncFutureOr) {
if (destination.type!.isDartAsyncFuture) {
// FutureOr<T?> is nullable, so the Future<T> should be nullable too.
_connect(source.typeArguments[0]!.node, destination.node, origin,
@@ -3885,9 +3885,9 @@
hard: false);
}
} else if (destinationType is InterfaceType) {
- if (source.type is InterfaceType) {
+ if (sourceType is InterfaceType) {
final target = _decoratedClassHierarchy!
- .asInstanceOf(destination, source.type!.element as ClassElement?);
+ .asInstanceOf(destination, sourceType.element2);
for (var i = 0; i < source.typeArguments.length; ++i) {
_checkDowncast(origin,
source: source.typeArguments[i]!,
@@ -3896,18 +3896,18 @@
}
} else {
assert(false,
- 'downcasting from ${source.type.runtimeType} to interface type');
+ 'downcasting from ${sourceType.runtimeType} to interface type');
}
} else if (destinationType is FunctionType) {
- if (source.type!.isDartCoreFunction) {
+ if (sourceType.isDartCoreFunction) {
// Nothing else to do.
return;
}
} else {
assert(
false,
- 'downcasting from ${source.type.runtimeType} to '
- '${destinationType.runtimeType} not supported. (${source.type} $destinationType)');
+ 'downcasting from ${sourceType.runtimeType} to '
+ '${destinationType.runtimeType} not supported. ($sourceType $destinationType)');
}
}
@@ -3983,4 +3983,15 @@
}
return self;
}
+
+ Element? get sharedElement {
+ final self = this;
+ if (self is InterfaceType) {
+ return self.element2;
+ } else if (self is TypeParameterType) {
+ return self.element;
+ } else {
+ return null;
+ }
+ }
}
diff --git a/pkg/nnbd_migration/lib/src/fix_aggregator.dart b/pkg/nnbd_migration/lib/src/fix_aggregator.dart
index 03b5fd2..781b3ff 100644
--- a/pkg/nnbd_migration/lib/src/fix_aggregator.dart
+++ b/pkg/nnbd_migration/lib/src/fix_aggregator.dart
@@ -134,7 +134,7 @@
String suffix =
type.nullabilitySuffix == NullabilitySuffix.question ? '?' : '';
if (type is InterfaceType) {
- var name = elementToCode(type.element);
+ var name = elementToCode(type.element2);
var typeArguments = type.typeArguments;
if (typeArguments.isEmpty) {
return '$name$suffix';
diff --git a/pkg/nnbd_migration/lib/src/fix_builder.dart b/pkg/nnbd_migration/lib/src/fix_builder.dart
index eff55d1..2241e87 100644
--- a/pkg/nnbd_migration/lib/src/fix_builder.dart
+++ b/pkg/nnbd_migration/lib/src/fix_builder.dart
@@ -356,7 +356,7 @@
() => element.interfacesInternal,
() => [
for (var interface in element.interfacesInternal)
- _getClassInterface(element, interface.element)
+ _getClassInterface(element, interface.element2)
]);
}
@@ -678,7 +678,7 @@
}
InterfaceType _getClassInterface(
- ClassElement class_, ClassElement superclass) {
+ ClassElement class_, InterfaceElement superclass) {
var decoratedSupertype = _fixBuilder!._decoratedClassHierarchy!
.getDecoratedSupertype(class_, superclass);
var finalType = _fixBuilder!._variables!.toFinalType(decoratedSupertype);
diff --git a/pkg/nnbd_migration/lib/src/node_builder.dart b/pkg/nnbd_migration/lib/src/node_builder.dart
index a41a5ed..c381411 100644
--- a/pkg/nnbd_migration/lib/src/node_builder.dart
+++ b/pkg/nnbd_migration/lib/src/node_builder.dart
@@ -533,7 +533,7 @@
List<DecoratedType?> positionalParameters = const <DecoratedType>[];
Map<String, DecoratedType?> namedParameters =
const <String, DecoratedType>{};
- if (type is InterfaceType && type.element.typeParameters.isNotEmpty) {
+ if (type is InterfaceType && type.element2.typeParameters.isNotEmpty) {
if (node is NamedType) {
if (node.typeArguments == null) {
int index = 0;
@@ -918,7 +918,7 @@
if (onClause != null) {
supertypes.addAll(onClause.superclassConstraints);
}
- var decoratedSupertypes = <ClassElement, DecoratedType?>{};
+ var decoratedSupertypes = <InterfaceElement, DecoratedType?>{};
_pushNullabilityNodeTarget(
NullabilityNodeTarget.element(declaredElement).supertype, () {
for (var supertype in supertypes) {
@@ -933,7 +933,7 @@
} else {
decoratedSupertype = supertype.accept(this);
}
- var class_ = (decoratedSupertype!.type as InterfaceType).element;
+ var class_ = (decoratedSupertype!.type as InterfaceType).element2;
decoratedSupertypes[class_] = decoratedSupertype;
}
});
diff --git a/pkg/nnbd_migration/lib/src/utilities/resolution_utils.dart b/pkg/nnbd_migration/lib/src/utilities/resolution_utils.dart
index 3971a35..2361147 100644
--- a/pkg/nnbd_migration/lib/src/utilities/resolution_utils.dart
+++ b/pkg/nnbd_migration/lib/src/utilities/resolution_utils.dart
@@ -32,7 +32,7 @@
List<String> _computeObjectGetNames() {
var result = <String>[];
- var objectClass = typeProvider.objectType.element;
+ var objectClass = typeProvider.objectType.element2;
for (var accessor in objectClass.accessors) {
assert(accessor.isGetter);
assert(!accessor.name.startsWith('_'));
diff --git a/pkg/nnbd_migration/lib/src/utilities/where_not_null_transformer.dart b/pkg/nnbd_migration/lib/src/utilities/where_not_null_transformer.dart
index e2bc4fd..35d3588 100644
--- a/pkg/nnbd_migration/lib/src/utilities/where_not_null_transformer.dart
+++ b/pkg/nnbd_migration/lib/src/utilities/where_not_null_transformer.dart
@@ -69,7 +69,7 @@
var type = decoratedType.type;
var typeArguments = decoratedType.typeArguments;
if (type is InterfaceType &&
- type.element == _typeProvider.iterableElement &&
+ type.element2 == _typeProvider.iterableElement &&
typeArguments.length == 1) {
return DecoratedType(type, decoratedType.node,
typeArguments: [typeArguments.single?.withNode(graph.never)]);
@@ -86,11 +86,11 @@
/// checks or type casts in other parts of the code.
DartType transformPostMigrationInvocationType(DartType type) {
if (type is InterfaceType &&
- type.element == _typeProvider.iterableElement) {
+ type.element2 == _typeProvider.iterableElement) {
var typeArguments = type.typeArguments;
if (typeArguments.length == 1) {
return InterfaceTypeImpl(
- element: type.element,
+ element2: type.element2,
typeArguments: [_typeSystem.promoteToNonNull(typeArguments.single)],
nullabilitySuffix: type.nullabilitySuffix);
}
diff --git a/pkg/nnbd_migration/lib/src/variables.dart b/pkg/nnbd_migration/lib/src/variables.dart
index 1ff963c..ce1a368 100644
--- a/pkg/nnbd_migration/lib/src/variables.dart
+++ b/pkg/nnbd_migration/lib/src/variables.dart
@@ -49,7 +49,7 @@
final _decoratedElementTypes = <Element?, DecoratedType?>{};
final _decoratedDirectSupertypes =
- <InterfaceElement, Map<ClassElement, DecoratedType?>>{};
+ <InterfaceElement, Map<InterfaceElement, DecoratedType?>>{};
final _decoratedTypeAnnotations = <Source?, Map<int, DecoratedType>>{};
@@ -75,7 +75,7 @@
/// Given a [class_], gets the decorated type information for the superclasses
/// it directly implements/extends/etc.
- Map<ClassElement, DecoratedType?> decoratedDirectSupertypes(
+ Map<InterfaceElement, DecoratedType?> decoratedDirectSupertypes(
InterfaceElement class_) {
return _decoratedDirectSupertypes[class_] ??=
_decorateDirectSupertypes(class_);
@@ -206,7 +206,7 @@
/// Associates a [class_] with decorated type information for the superclasses
/// it directly implements/extends/etc.
void recordDecoratedDirectSupertypes(ClassElement class_,
- Map<ClassElement, DecoratedType?> decoratedDirectSupertypes) {
+ Map<InterfaceElement, DecoratedType?> decoratedDirectSupertypes) {
_decoratedDirectSupertypes[class_] = decoratedDirectSupertypes;
}
@@ -341,7 +341,7 @@
);
} else if (type is InterfaceType) {
return InterfaceTypeImpl(
- element: type.element,
+ element2: type.element2,
typeArguments: [
for (var arg in decoratedType.typeArguments) toFinalType(arg!)
],
@@ -417,12 +417,12 @@
/// Creates an entry [_decoratedDirectSupertypes] for an already-migrated
/// class.
- Map<ClassElement, DecoratedType> _decorateDirectSupertypes(
+ Map<InterfaceElement, DecoratedType> _decorateDirectSupertypes(
InterfaceElement class_) {
- var result = <ClassElement, DecoratedType>{};
+ var result = <InterfaceElement, DecoratedType>{};
for (var decoratedSupertype
in _alreadyMigratedCodeDecorator.getImmediateSupertypes(class_)) {
- var class_ = (decoratedSupertype.type as InterfaceType).element;
+ var class_ = (decoratedSupertype.type as InterfaceType).element2;
result[class_] = decoratedSupertype;
}
return result;
diff --git a/pkg/nnbd_migration/test/already_migrated_code_decorator_test.dart b/pkg/nnbd_migration/test/already_migrated_code_decorator_test.dart
index 57d6285..3a9a00a 100644
--- a/pkg/nnbd_migration/test/already_migrated_code_decorator_test.dart
+++ b/pkg/nnbd_migration/test/already_migrated_code_decorator_test.dart
@@ -244,7 +244,7 @@
var withElement = await _ContextWithFiles().withEmptyUnit();
var decoratedType = withElement.decorate(InterfaceTypeImpl(
- element: withElement.typeProvider.mapElement,
+ element2: withElement.typeProvider.mapElement,
typeArguments: [
withElement.typeProvider.intType,
withElement.typeProvider.numType
@@ -262,7 +262,7 @@
withElement.checkInt(
withElement.decorate(
InterfaceTypeImpl(
- element: withElement.typeProvider.intElement,
+ element2: withElement.typeProvider.intElement,
typeArguments: const [],
nullabilitySuffix: NullabilitySuffix.question,
),
@@ -277,7 +277,7 @@
withElement.checkInt(
withElement.decorate(
InterfaceTypeImpl(
- element: withElement.typeProvider.intElement,
+ element2: withElement.typeProvider.intElement,
typeArguments: const [],
nullabilitySuffix: suffix,
),
@@ -535,7 +535,8 @@
void Function(DecoratedType?, String) checkArgument,
String displayName,
) {
- expect(decoratedType.type!.element, typeProvider.futureOrElement);
+ final type = decoratedType.type as InterfaceType;
+ expect(type.element2, typeProvider.futureOrElement);
checkNullability(decoratedType.node, displayName);
checkArgument(
decoratedType.typeArguments[0], 'type argument 0 of $displayName');
@@ -546,7 +547,8 @@
void Function(NullabilityNode?, String) checkNullability,
String displayName,
) {
- expect(decoratedType.type!.element, typeProvider.intType.element);
+ final type = decoratedType.type as InterfaceType;
+ expect(type.element2, typeProvider.intElement);
checkNullability(decoratedType.node, displayName);
}
@@ -556,8 +558,8 @@
void Function(DecoratedType?, String) checkArgument,
String displayName,
) {
- expect(
- decoratedType.type!.element, typeProvider.iterableDynamicType.element);
+ final type = decoratedType.type as InterfaceType;
+ expect(type.element2, typeProvider.iterableElement);
checkNullability(decoratedType.node, displayName);
checkArgument(
decoratedType.typeArguments[0], 'type argument 0 of $displayName');
@@ -573,7 +575,8 @@
void Function(NullabilityNode?, String) checkNullability,
String displayName,
) {
- expect(decoratedType.type!.element, typeProvider.numType.element);
+ final type = decoratedType.type as InterfaceType;
+ expect(type.element2, typeProvider.numElement);
checkNullability(decoratedType.node, displayName);
}
@@ -582,7 +585,8 @@
void Function(NullabilityNode?, String) checkNullability,
String displayName,
) {
- expect(decoratedType.type!.element, typeProvider.objectType.element);
+ final type = decoratedType.type as InterfaceType;
+ expect(type.element2, typeProvider.objectType.element2);
checkNullability(decoratedType.node, displayName);
}
diff --git a/pkg/nnbd_migration/test/edge_builder_test.dart b/pkg/nnbd_migration/test/edge_builder_test.dart
index 2ba066f..c3055c1 100644
--- a/pkg/nnbd_migration/test/edge_builder_test.dart
+++ b/pkg/nnbd_migration/test/edge_builder_test.dart
@@ -103,7 +103,7 @@
}
return DecoratedType(
InterfaceTypeImpl(
- element: _myListOfListClass!,
+ element2: _myListOfListClass!,
typeArguments: [elementType.type!],
nullabilitySuffix: NullabilitySuffix.star,
),
@@ -593,7 +593,7 @@
await analyze('''
double f() => double.nan;
''');
- var nanElement = typeProvider.doubleType.element.getField('nan')!;
+ var nanElement = typeProvider.doubleElement.getField('nan')!;
assertEdge(variables!.decoratedElementType(nanElement).node,
decoratedTypeAnnotation('double f').node,
hard: false);
@@ -5049,7 +5049,7 @@
''');
var toStringReturnType = variables!
.decoratedElementType(
- typeProvider.objectType.element.getMethod('toString')!)
+ typeProvider.objectType.element2.getMethod('toString')!)
.returnType!;
assertEdge(
toStringReturnType.node, decoratedTypeAnnotation('String f').node,
@@ -6939,7 +6939,7 @@
await analyze('int f(void Function() g) => g.hashCode;');
var hashCodeReturnType = variables!
.decoratedElementType(
- typeProvider.objectType.element.getGetter('hashCode')!)
+ typeProvider.objectType.element2.getGetter('hashCode')!)
.returnType!;
assertEdge(hashCodeReturnType.node, decoratedTypeAnnotation('int f').node,
hard: false);
@@ -8254,8 +8254,8 @@
late AssignmentCheckerTest assignmentCheckerTest;
@override
- DecoratedType asInstanceOf(DecoratedType type, ClassElement? superclass) {
- var class_ = (type.type as InterfaceType).element;
+ DecoratedType asInstanceOf(DecoratedType type, InterfaceElement? superclass) {
+ var class_ = (type.type as InterfaceType).element2;
if (class_ == superclass) return type;
if (superclass!.name == 'Object') {
return DecoratedType(
diff --git a/pkg/nnbd_migration/test/migration_visitor_test_base.dart b/pkg/nnbd_migration/test/migration_visitor_test_base.dart
index c60d2f8..87335b1 100644
--- a/pkg/nnbd_migration/test/migration_visitor_test_base.dart
+++ b/pkg/nnbd_migration/test/migration_visitor_test_base.dart
@@ -380,7 +380,7 @@
DecoratedType decoratedConstructorDeclaration(String search) => variables!
.decoratedElementType(findNode.constructor(search).declaredElement!);
- Map<ClassElement, DecoratedType?> decoratedDirectSupertypes(String name) {
+ Map<InterfaceElement, DecoratedType?> decoratedDirectSupertypes(String name) {
return variables!.decoratedDirectSupertypes(findElement.classOrMixin(name));
}
diff --git a/pkg/nnbd_migration/test/node_builder_test.dart b/pkg/nnbd_migration/test/node_builder_test.dart
index 737bb72..9c1b9d3 100644
--- a/pkg/nnbd_migration/test/node_builder_test.dart
+++ b/pkg/nnbd_migration/test/node_builder_test.dart
@@ -312,7 +312,7 @@
class C<T, U> {}
''');
var types = decoratedDirectSupertypes('C');
- var decorated = types[typeProvider.objectType.element]!;
+ var decorated = types[typeProvider.objectType.element2]!;
_assertType(decorated.type!, 'Object');
assertEdge(decorated.node, never, hard: true, checkable: false);
expect(decorated.typeArguments, isEmpty);
@@ -418,7 +418,7 @@
mixin C<T, U> {}
''');
var types = decoratedDirectSupertypes('C');
- var decorated = types[typeProvider.objectType.element]!;
+ var decorated = types[typeProvider.objectType.element2]!;
_assertType(decorated.type!, 'Object');
assertEdge(decorated.node, never, hard: true, checkable: false);
expect(decorated.typeArguments, isEmpty);
diff --git a/tools/VERSION b/tools/VERSION
index d3923b3..458ff10 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 19
PATCH 0
-PRERELEASE 65
+PRERELEASE 66
PRERELEASE_PATCH 0
\ No newline at end of file