Elements. Migrate lib/src/model/model_element.dart (#3988)
diff --git a/lib/src/element_type.dart b/lib/src/element_type.dart
index 41b62fb..a7eb044 100644
--- a/lib/src/element_type.dart
+++ b/lib/src/element_type.dart
@@ -214,7 +214,7 @@
bool get isTypedef => true;
late final ModelElement aliasElement =
- ModelElement.forElement2(typeAliasElement2, packageGraph);
+ ModelElement.forElement(typeAliasElement2, packageGraph);
late final List<ElementType> aliasArguments = type.alias!.typeArguments
.map((f) => getTypeFor(f, library))
@@ -322,7 +322,7 @@
@internal
@override
CommentReferable get definingCommentReferable =>
- ModelElement.forElement2(modelElement.element2, packageGraph);
+ ModelElement.forElement(modelElement.element2, packageGraph);
}
/// Any callable [ElementType] will mix-in this class, whether anonymous or not,
diff --git a/lib/src/generator/templates.runtime_renderers.dart b/lib/src/generator/templates.runtime_renderers.dart
index fcf499f..803a73f 100644
--- a/lib/src/generator/templates.runtime_renderers.dart
+++ b/lib/src/generator/templates.runtime_renderers.dart
@@ -3505,6 +3505,34 @@
);
},
),
+ 'element2': Property(
+ getValue: (CT_ c) => c.element2,
+ renderVariable:
+ (CT_ c, Property<CT_> self, List<String> remainingNames) =>
+ self.renderSimpleVariable(
+ c,
+ remainingNames,
+ 'ConstructorElement2',
+ ),
+
+ isNullValue: (CT_ c) => false,
+
+ renderValue: (
+ CT_ c,
+ RendererBase<CT_> r,
+ List<MustachioNode> ast,
+ StringSink sink,
+ ) {
+ renderSimple(
+ c.element2,
+ ast,
+ r.template,
+ sink,
+ parent: r,
+ getters: _invisibleGetters['ConstructorElement2']!,
+ );
+ },
+ ),
'enclosingElement': Property(
getValue: (CT_ c) => c.enclosingElement,
renderVariable: (
@@ -13345,34 +13373,6 @@
);
},
),
- 'compilationUnitElement': Property(
- getValue: (CT_ c) => c.compilationUnitElement,
- renderVariable:
- (CT_ c, Property<CT_> self, List<String> remainingNames) =>
- self.renderSimpleVariable(
- c,
- remainingNames,
- 'CompilationUnitElement',
- ),
-
- isNullValue: (CT_ c) => false,
-
- renderValue: (
- CT_ c,
- RendererBase<CT_> r,
- List<MustachioNode> ast,
- StringSink sink,
- ) {
- renderSimple(
- c.compilationUnitElement,
- ast,
- r.template,
- sink,
- parent: r,
- getters: _invisibleGetters['CompilationUnitElement']!,
- );
- },
- ),
'constants': Property(
getValue: (CT_ c) => c.constants,
renderVariable:
@@ -14212,6 +14212,34 @@
);
},
),
+ 'unitElement': Property(
+ getValue: (CT_ c) => c.unitElement,
+ renderVariable:
+ (CT_ c, Property<CT_> self, List<String> remainingNames) =>
+ self.renderSimpleVariable(
+ c,
+ remainingNames,
+ 'LibraryFragment',
+ ),
+
+ isNullValue: (CT_ c) => false,
+
+ renderValue: (
+ CT_ c,
+ RendererBase<CT_> r,
+ List<MustachioNode> ast,
+ StringSink sink,
+ ) {
+ renderSimple(
+ c.unitElement,
+ ast,
+ r.template,
+ sink,
+ parent: r,
+ getters: _invisibleGetters['LibraryFragment']!,
+ );
+ },
+ ),
},
)
as Map<String, Property<CT_>>;
@@ -14411,7 +14439,7 @@
}
}
-String renderLibrary(LibraryTemplateData context, Template template) {
+String renderLibraryRedirect(LibraryTemplateData context, Template template) {
var buffer = StringBuffer();
_render_LibraryTemplateData(context, template.ast, template, buffer);
return buffer.toString();
@@ -14657,7 +14685,7 @@
}
}
-String renderLibraryRedirect(LibraryTemplateData context, Template template) {
+String renderLibrary(LibraryTemplateData context, Template template) {
var buffer = StringBuffer();
_render_LibraryTemplateData(context, template.ast, template, buffer);
return buffer.toString();
@@ -16856,34 +16884,6 @@
);
},
),
- 'compilationUnitElement': Property(
- getValue: (CT_ c) => c.compilationUnitElement,
- renderVariable:
- (CT_ c, Property<CT_> self, List<String> remainingNames) =>
- self.renderSimpleVariable(
- c,
- remainingNames,
- 'CompilationUnitElement',
- ),
-
- isNullValue: (CT_ c) => false,
-
- renderValue: (
- CT_ c,
- RendererBase<CT_> r,
- List<MustachioNode> ast,
- StringSink sink,
- ) {
- renderSimple(
- c.compilationUnitElement,
- ast,
- r.template,
- sink,
- parent: r,
- getters: _invisibleGetters['CompilationUnitElement']!,
- );
- },
- ),
'config': Property(
getValue: (CT_ c) => c.config,
renderVariable:
@@ -18013,6 +18013,34 @@
);
},
),
+ 'unitElement': Property(
+ getValue: (CT_ c) => c.unitElement,
+ renderVariable:
+ (CT_ c, Property<CT_> self, List<String> remainingNames) =>
+ self.renderSimpleVariable(
+ c,
+ remainingNames,
+ 'LibraryFragment',
+ ),
+
+ isNullValue: (CT_ c) => false,
+
+ renderValue: (
+ CT_ c,
+ RendererBase<CT_> r,
+ List<MustachioNode> ast,
+ StringSink sink,
+ ) {
+ renderSimple(
+ c.unitElement,
+ ast,
+ r.template,
+ sink,
+ parent: r,
+ getters: _invisibleGetters['LibraryFragment']!,
+ );
+ },
+ ),
},
)
as Map<String, Property<CT_>>;
@@ -20353,7 +20381,7 @@
}
}
-String renderError(PackageTemplateData context, Template template) {
+String renderIndex(PackageTemplateData context, Template template) {
var buffer = StringBuffer();
_render_PackageTemplateData(context, template.ast, template, buffer);
return buffer.toString();
@@ -20710,13 +20738,13 @@
}
}
-String renderSearchPage(PackageTemplateData context, Template template) {
+String renderError(PackageTemplateData context, Template template) {
var buffer = StringBuffer();
_render_PackageTemplateData(context, template.ast, template, buffer);
return buffer.toString();
}
-String renderIndex(PackageTemplateData context, Template template) {
+String renderSearchPage(PackageTemplateData context, Template template) {
var buffer = StringBuffer();
_render_PackageTemplateData(context, template.ast, template, buffer);
return buffer.toString();
@@ -26196,28 +26224,6 @@
'referenceParents',
'scope',
},
- 'CompilationUnitElement': {
- 'accessibleExtensions',
- 'accessors',
- 'classes',
- 'enclosingElement3',
- 'enums',
- 'extensionTypes',
- 'extensions',
- 'functions',
- 'hashCode',
- 'libraryExports',
- 'libraryImportPrefixes',
- 'libraryImports',
- 'lineInfo',
- 'mixins',
- 'parts',
- 'runtimeType',
- 'scope',
- 'session',
- 'topLevelVariables',
- 'typeAliases',
- },
'Constructable': {
'constructors',
'extraReferenceChildren',
@@ -26243,6 +26249,22 @@
'runtimeType',
'superConstructor',
},
+ 'ConstructorElement2': {
+ 'baseElement',
+ 'enclosingElement2',
+ 'firstFragment',
+ 'fragments',
+ 'hashCode',
+ 'isConst',
+ 'isDefaultConstructor',
+ 'isFactory',
+ 'isGenerative',
+ 'name3',
+ 'redirectedConstructor2',
+ 'returnType',
+ 'runtimeType',
+ 'superConstructor2',
+ },
'ContainerModifier': {
'displayName',
'hashCode',
@@ -26761,6 +26783,33 @@
'typeSystem',
'uri',
},
+ 'LibraryFragment': {
+ 'accessibleExtensions2',
+ 'classes2',
+ 'element',
+ 'enclosingFragment',
+ 'enums2',
+ 'extensionTypes2',
+ 'extensions2',
+ 'functions2',
+ 'getters',
+ 'hashCode',
+ 'importedLibraries2',
+ 'libraryExports2',
+ 'libraryImports2',
+ 'lineInfo',
+ 'mixins2',
+ 'nextFragment',
+ 'partIncludes',
+ 'prefixes',
+ 'previousFragment',
+ 'runtimeType',
+ 'scope',
+ 'setters',
+ 'source',
+ 'topLevelVariables2',
+ 'typeAliases2',
+ },
'List': {'hashCode', 'length', 'reversed', 'runtimeType'},
'Locatable': {
'documentationFrom',
diff --git a/lib/src/model/canonicalization.dart b/lib/src/model/canonicalization.dart
index a3e4a3e..ac2605c 100644
--- a/lib/src/model/canonicalization.dart
+++ b/lib/src/model/canonicalization.dart
@@ -58,7 +58,7 @@
}
var topLevelModelElement =
- ModelElement.forElement2(topLevelElement, modelElement.packageGraph);
+ ModelElement.forElement(topLevelElement, modelElement.packageGraph);
return _Canonicalization(topLevelModelElement)
.canonicalLibraryCandidate(candidateLibraries);
diff --git a/lib/src/model/constructor.dart b/lib/src/model/constructor.dart
index bb3cc96..343daba 100644
--- a/lib/src/model/constructor.dart
+++ b/lib/src/model/constructor.dart
@@ -5,7 +5,10 @@
// ignore_for_file: analyzer_use_new_elements
import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/element2.dart';
import 'package:analyzer/source/line_info.dart';
+// ignore: implementation_imports
+import 'package:analyzer/src/utilities/extensions/element.dart';
import 'package:dartdoc/src/element_type.dart';
import 'package:dartdoc/src/model/comment_referable.dart';
import 'package:dartdoc/src/model/kind.dart';
@@ -14,9 +17,12 @@
class Constructor extends ModelElement with ContainerMember, TypeParameters {
@override
- final ConstructorElement element;
+ ConstructorElement get element => element2.asElement;
- Constructor(this.element, super.library, super.packageGraph);
+ @override
+ final ConstructorElement2 element2;
+
+ Constructor(this.element2, super.library, super.packageGraph);
@override
CharacterLocation? get characterLocation {
diff --git a/lib/src/model/extension.dart b/lib/src/model/extension.dart
index a8937fe..7dcff42 100644
--- a/lib/src/model/extension.dart
+++ b/lib/src/model/extension.dart
@@ -110,12 +110,12 @@
ContainerAccessor? getter, setter;
final fieldGetter = field.getter2;
if (fieldGetter != null) {
- getter = ModelElement.for2_(fieldGetter, library, packageGraph,
+ getter = ModelElement.for_(fieldGetter, library, packageGraph,
enclosingContainer: this) as ContainerAccessor;
}
final fieldSetter = field.setter2;
if (fieldSetter != null) {
- setter = ModelElement.for2_(fieldSetter, library, packageGraph,
+ setter = ModelElement.for_(fieldSetter, library, packageGraph,
enclosingContainer: this) as ContainerAccessor;
}
return getModelForPropertyInducingElement(field.asElement, library,
diff --git a/lib/src/model/extension_type.dart b/lib/src/model/extension_type.dart
index 8069823..7a5d54b 100644
--- a/lib/src/model/extension_type.dart
+++ b/lib/src/model/extension_type.dart
@@ -16,16 +16,15 @@
class ExtensionType extends InheritingContainer with Constructable {
@override
- final ExtensionTypeElement element;
+ ExtensionTypeElement get element => element2.asElement;
@override
- ExtensionTypeElement2 get element2 =>
- element.asElement2 as ExtensionTypeElement2;
+ final ExtensionTypeElement2 element2;
late final ElementType representationType =
getTypeFor(element.representation.type, library);
- ExtensionType(this.element, super.library, super.packageGraph);
+ ExtensionType(this.element2, super.library, super.packageGraph);
@override
Library get enclosingElement => library;
diff --git a/lib/src/model/field.dart b/lib/src/model/field.dart
index b5cdb4d..21d6a03 100644
--- a/lib/src/model/field.dart
+++ b/lib/src/model/field.dart
@@ -42,7 +42,7 @@
this.setter,
) : isInherited = false,
enclosingElement =
- ModelElement.for_(element.enclosingElement3, library, packageGraph)
+ ModelElement.for_(element.asElement2.enclosingElement2, library, packageGraph)
as Container,
assert(getter != null || setter != null) {
getter?.enclosingCombo = this;
@@ -58,7 +58,7 @@
) : element = element2.asElement as FieldElement,
isInherited = false,
enclosingElement =
- ModelElement.for2_(element2.enclosingElement2!, library, packageGraph)
+ ModelElement.for_(element2.enclosingElement2!, library, packageGraph)
as Container,
assert(getter != null || setter != null) {
getter?.enclosingCombo = this;
@@ -66,26 +66,28 @@
}
Field.providedByExtension(
- this.element,
+ Element2 element2,
this.enclosingElement,
super.library,
super.packageGraph,
this.getter,
this.setter,
- ) : isInherited = false,
+ ) : element = element2.asElement as FieldElement,
+ isInherited = false,
assert(getter != null || setter != null) {
getter?.enclosingCombo = this;
setter?.enclosingCombo = this;
}
Field.inherited(
- this.element,
+ Element2 element2,
this.enclosingElement,
super.library,
super.packageGraph,
this.getter,
this.setter,
- ) : isInherited = true,
+ ) : element = element2.asElement as FieldElement,
+ isInherited = true,
assert(getter != null || setter != null) {
// Can't set `isInherited` to true if this is the defining element, because
// that would mean it isn't inherited.
diff --git a/lib/src/model/library.dart b/lib/src/model/library.dart
index 6bda7b2..5152ccf 100644
--- a/lib/src/model/library.dart
+++ b/lib/src/model/library.dart
@@ -120,8 +120,8 @@
}
@override
- CompilationUnitElement get compilationUnitElement =>
- element.definingCompilationUnit;
+ LibraryFragment get unitElement =>
+ element2.library2.firstFragment;
@override
diff --git a/lib/src/model/model_element.dart b/lib/src/model/model_element.dart
index d59c757..2c7f3f8 100644
--- a/lib/src/model/model_element.dart
+++ b/lib/src/model/model_element.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.
-// ignore_for_file: analyzer_use_new_elements
-
/// The models used to represent Dart code.
library;
@@ -15,8 +13,10 @@
import 'package:analyzer/dart/element/type.dart' show FunctionType;
import 'package:analyzer/source/line_info.dart';
// ignore: implementation_imports
+import 'package:analyzer/src/dart/element/element.dart';
+// ignore: implementation_imports
import 'package:analyzer/src/dart/element/member.dart'
- show ExecutableMember, Member, ParameterMember;
+ show ExecutableMember, FieldMember, Member, ParameterMember;
// ignore: implementation_imports
import 'package:analyzer/src/utilities/extensions/element.dart';
import 'package:dartdoc/src/dartdoc_options.dart';
@@ -83,25 +83,25 @@
ModelElement(this._library, this._packageGraph, {Member? originalMember})
: _originalMember = originalMember;
- /// Returns a [ModelElement] for an [Element], which can be a
+ /// Returns a [ModelElement] for an [Element2], which can be a
/// property-inducing element or not.
///
/// This constructor is used when the caller does not know the element's
/// library, or whether it is property-inducing.
- factory ModelElement.forElement(Element e, PackageGraph p) {
- if (e is MultiplyDefinedElement) {
+ factory ModelElement.forElement(Element2 e, PackageGraph p) {
+ if (e is MultiplyDefinedElement2) {
// The code-to-document has static errors. We can pick the first
// conflicting element and move on.
- e = e.conflictingElements.first;
+ e = e.conflictingElements2.first;
}
- var library = p.findButDoNotCreateLibraryFor(e.asElement2!) ?? Library.sentinel;
+ var library = p.findButDoNotCreateLibraryFor(e) ?? Library.sentinel;
- if (e is PropertyInducingElement) {
- var elementGetter = e.getter;
+ if (e is PropertyInducingElement2) {
+ var elementGetter = e.getter2;
var getter = elementGetter != null
? ModelElement.for_(elementGetter, library, p) as Accessor
: null;
- var elementSetter = e.setter;
+ var elementSetter = e.setter2;
var setter = elementSetter != null
? ModelElement.for_(elementSetter, library, p) as Accessor
: null;
@@ -112,22 +112,13 @@
return ModelElement.for_(e, library, p);
}
- /// Returns a [ModelElement] for an [Element2], which can be a
- /// property-inducing element or not.
- ///
- /// This constructor is used when the caller does not know the element's
- /// library, or whether it is property-inducing.
- factory ModelElement.forElement2(Element2 e, PackageGraph p) {
- return ModelElement.forElement(e.asElement!, p);
- }
-
/// Returns a [ModelElement] for a property-inducing element.
///
/// Do not construct any [ModelElement]s except from this constructor or
/// [ModelElement.for_]. Specify [enclosingContainer] if and only if this is
/// to be an inherited or extended object.
factory ModelElement.forPropertyInducingElement(
- PropertyInducingElement e,
+ PropertyInducingElement2 e,
Library library,
PackageGraph packageGraph, {
required Accessor? getter,
@@ -137,24 +128,24 @@
// TODO(jcollins-g): Refactor object model to instantiate 'ModelMembers'
// for members?
if (e is Member) {
- e = e.declaration as PropertyInducingElement;
+ e = e.baseElement as PropertyInducingElement2;
}
// Return the cached ModelElement if it exists.
var cachedModelElement = packageGraph.allConstructedModelElements[
- ConstructedModelElementsKey(e.asElement2!, enclosingContainer)];
+ ConstructedModelElementsKey(e, enclosingContainer)];
if (cachedModelElement != null) {
return cachedModelElement;
}
ModelElement newModelElement;
- if (e is TopLevelVariableElement) {
+ if (e is TopLevelVariableElement2) {
assert(getter != null || setter != null);
newModelElement =
- TopLevelVariable(e.asElement2, library, packageGraph, getter, setter);
- } else if (e is FieldElement) {
+ TopLevelVariable(e, library, packageGraph, getter, setter);
+ } else if (e is FieldElement2) {
if (enclosingContainer is Extension) {
- newModelElement = Field(e, library, packageGraph,
+ newModelElement = Field.element2(e, library, packageGraph,
getter as ContainerAccessor?, setter as ContainerAccessor?);
} else if (enclosingContainer == null) {
if (e.isEnumConstant) {
@@ -169,19 +160,19 @@
'Enum $e (${e.runtimeType}) does not have a constant value.');
}
var index = constantIndex.toIntValue()!;
- newModelElement = EnumField.forConstant(
- index, e.asElement2, library, packageGraph, getter);
- } else if (e.enclosingElement3 is ExtensionElement) {
- newModelElement = Field(e, library, packageGraph,
+ newModelElement =
+ EnumField.forConstant(index, e, library, packageGraph, getter);
+ } else if (e.enclosingElement2 is ExtensionElement2) {
+ newModelElement = Field.element2(e, library, packageGraph,
getter as ContainerAccessor?, setter as ContainerAccessor?);
} else {
- newModelElement = Field(e, library, packageGraph,
+ newModelElement = Field.element2(e, library, packageGraph,
getter as ContainerAccessor?, setter as ContainerAccessor?);
}
} else {
// Enum fields and extension getters can't be inherited, so this case is
// simpler.
- if (e.enclosingElement3 is ExtensionElement) {
+ if (e.enclosingElement2 is ExtensionElement2) {
newModelElement = Field.providedByExtension(
e,
enclosingContainer,
@@ -222,25 +213,28 @@
// TODO(jcollins-g): Enforce construction restraint.
// TODO(jcollins-g): Allow e to be null and drop extraneous null checks.
factory ModelElement.for_(
- Element e, Library library, PackageGraph packageGraph,
+ Element2 e, Library library, PackageGraph packageGraph,
{Container? enclosingContainer}) {
assert(library != Library.sentinel ||
- e is ParameterElement ||
- e is TypeParameterElement ||
- e is GenericFunctionTypeElement ||
+ e is FormalParameterElement ||
+ e is TypeParameterElement2 ||
+ e is GenericFunctionTypeElement2 ||
e.kind == ElementKind.DYNAMIC ||
e.kind == ElementKind.NEVER);
Member? originalMember;
// TODO(jcollins-g): Refactor object model to instantiate 'ModelMembers'
// for members?
- if (e is Member) {
+ if (e is ExecutableMember) {
originalMember = e;
- e = e.declaration;
+ e = e.baseElement;
+ } else if (e is FieldMember){
+ originalMember = e;
+ e = e.baseElement;
}
// Return the cached ModelElement if it exists.
- var key = ConstructedModelElementsKey(e.asElement2!, enclosingContainer);
+ var key = ConstructedModelElementsKey(e, enclosingContainer);
var cachedModelElement = packageGraph.allConstructedModelElements[key];
if (cachedModelElement != null) {
return cachedModelElement;
@@ -248,11 +242,11 @@
if (e.kind == ElementKind.DYNAMIC) {
return packageGraph.allConstructedModelElements[key] =
- Dynamic(e.asElement2!, packageGraph);
+ Dynamic(e, packageGraph);
}
if (e.kind == ElementKind.NEVER) {
return packageGraph.allConstructedModelElements[key] =
- NeverType(e.asElement2!, packageGraph);
+ NeverType(e, packageGraph);
}
var newModelElement = ModelElement._constructFromElementDeclaration(
@@ -269,117 +263,105 @@
return newModelElement;
}
- factory ModelElement.for2_(
- Element2 e, Library library, PackageGraph packageGraph,
- {Container? enclosingContainer}) {
- return ModelElement.for_(e.asElement!, library, packageGraph,
- enclosingContainer: enclosingContainer);
- }
-
/// Caches a newly-created [ModelElement] from [ModelElement.for_] or
/// [ModelElement.forPropertyInducingElement].
static void _cacheNewModelElement(
- Element e, ModelElement newModelElement, Library library,
+ Element2 e, ModelElement newModelElement, Library library,
{Container? enclosingContainer}) {
// TODO(jcollins-g): Reenable Parameter caching when dart-lang/sdk#30146
// is fixed?
assert(enclosingContainer == null || enclosingContainer.library == library,
'$enclosingContainer.library != $library');
- var element = e.asElement2!;
if (library != Library.sentinel && newModelElement is! Parameter) {
runtimeStats.incrementAccumulator('modelElementCacheInsertion');
- var key = ConstructedModelElementsKey(element, enclosingContainer);
+ var key = ConstructedModelElementsKey(e, enclosingContainer);
library.packageGraph.allConstructedModelElements[key] = newModelElement;
if (newModelElement is Inheritable) {
library.packageGraph.allInheritableElements
- .putIfAbsent(InheritableElementsKey(element, library), () => {})
+ .putIfAbsent(InheritableElementsKey(e, library), () => {})
.add(newModelElement);
}
}
}
static ModelElement _constructFromElementDeclaration(
- Element e,
+ Element2 e,
Library library,
PackageGraph packageGraph, {
Container? enclosingContainer,
Member? originalMember,
}) {
return switch (e) {
- LibraryElement() => packageGraph.findButDoNotCreateLibraryFor(e.asElement2)!,
- PrefixElement() => Prefix(e.asElement2, library, packageGraph),
- EnumElement() => Enum(e.asElement2, library, packageGraph),
- MixinElement() => Mixin(e.asElement2, library, packageGraph),
- ClassElement() => Class(e.asElement2, library, packageGraph),
- ExtensionElement() => Extension(e.asElement2, library, packageGraph),
- ExtensionTypeElement() => ExtensionType(e, library, packageGraph),
- FunctionElement() => ModelFunction(
- e.asElement2 as TopLevelFunctionElement, library, packageGraph),
- ConstructorElement() => Constructor(e, library, packageGraph),
- GenericFunctionTypeElement() => ModelFunctionTypedef(
- e.asElement2 as FunctionTypedElement2, library, packageGraph),
- TypeAliasElement(aliasedType: FunctionType()) =>
- FunctionTypedef(e.asElement2, library, packageGraph),
- TypeAliasElement()
- when e.aliasedType.documentableElement2.asElement
- is InterfaceElement =>
- ClassTypedef(e.asElement2, library, packageGraph),
- TypeAliasElement() =>
- GeneralizedTypedef(e.asElement2, library, packageGraph),
- MethodElement(isOperator: true) when enclosingContainer == null =>
- Operator(e.asElement2, library, packageGraph),
- MethodElement(isOperator: true)
- when e.enclosingElement3 is ExtensionElement =>
+ LibraryElement2() => packageGraph.findButDoNotCreateLibraryFor(e)!,
+ PrefixElement2() => Prefix(e, library, packageGraph),
+ EnumElement2() => Enum(e, library, packageGraph),
+ MixinElement2() => Mixin(e, library, packageGraph),
+ ClassElement2() => Class(e, library, packageGraph),
+ ExtensionElement2() => Extension(e, library, packageGraph),
+ ExtensionTypeElement2() => ExtensionType(e, library, packageGraph),
+ TopLevelFunctionElement() => ModelFunction(e, library, packageGraph),
+ ConstructorElement2() => Constructor(e, library, packageGraph),
+ GenericFunctionTypeElement2() =>
+ ModelFunctionTypedef(e as FunctionTypedElement2, library, packageGraph),
+ TypeAliasElement2(aliasedType: FunctionType()) =>
+ FunctionTypedef(e, library, packageGraph),
+ TypeAliasElement2()
+ when e.aliasedType.documentableElement2 is InterfaceElement2 =>
+ ClassTypedef(e, library, packageGraph),
+ TypeAliasElement2() => GeneralizedTypedef(e, library, packageGraph),
+ MethodElement2(isOperator: true) when enclosingContainer == null =>
+ Operator(e, library, packageGraph),
+ MethodElement2(isOperator: true)
+ when e.enclosingElement2 is ExtensionElement2 =>
Operator.providedByExtension(
- e.asElement2, enclosingContainer, library, packageGraph),
- MethodElement(isOperator: true) => Operator.inherited(
- e.asElement2, enclosingContainer, library, packageGraph,
+ e, enclosingContainer, library, packageGraph),
+ MethodElement2(isOperator: true) => Operator.inherited(
+ e, enclosingContainer, library, packageGraph,
originalMember: originalMember),
- MethodElement(isOperator: false) when enclosingContainer == null =>
- Method(e.asElement2, library, packageGraph),
- MethodElement(isOperator: false)
- when e.enclosingElement3 is ExtensionElement =>
+ MethodElement2(isOperator: false) when enclosingContainer == null =>
+ Method(e, library, packageGraph),
+ MethodElement2(isOperator: false)
+ when e.enclosingElement2 is ExtensionElement2 =>
Method.providedByExtension(
- e.asElement2, enclosingContainer, library, packageGraph),
- MethodElement(isOperator: false) => Method.inherited(
- e.asElement2, enclosingContainer, library, packageGraph,
+ e, enclosingContainer, library, packageGraph),
+ MethodElement2(isOperator: false) => Method.inherited(
+ e, enclosingContainer, library, packageGraph,
originalMember: originalMember as ExecutableMember?),
- ParameterElement() => Parameter(e.asElement2, library, packageGraph,
+ FormalParameterElement() => Parameter(e, library, packageGraph,
originalMember: originalMember as ParameterMember?),
- PropertyAccessorElement() => _constructFromPropertyAccessor(
+ PropertyAccessorElement2() => _constructFromPropertyAccessor(
e,
library,
packageGraph,
enclosingContainer: enclosingContainer,
originalMember: originalMember,
),
- TypeParameterElement() =>
- TypeParameter(e.asElement2, library, packageGraph),
+ TypeParameterElement2() => TypeParameter(e, library, packageGraph),
_ => throw UnimplementedError('Unknown type ${e.runtimeType}'),
};
}
- /// Constructs a [ModelElement] from a [PropertyAccessorElement].
+ /// Constructs a [ModelElement] from a [PropertyAccessorElement2].
static ModelElement _constructFromPropertyAccessor(
- PropertyAccessorElement e,
+ PropertyAccessorElement2 e,
Library library,
PackageGraph packageGraph, {
required Container? enclosingContainer,
required Member? originalMember,
}) {
// Accessors can be part of a [Container], or a part of a [Library].
- if (e.enclosingElement3 is ExtensionElement ||
- e.enclosingElement3 is InterfaceElement) {
+ if (e.enclosingElement2 is ExtensionElement2 ||
+ e.enclosingElement2 is InterfaceElement2) {
if (enclosingContainer == null || enclosingContainer is Extension) {
- return ContainerAccessor(e.asElement2, library, packageGraph, enclosingContainer);
+ return ContainerAccessor(e, library, packageGraph, enclosingContainer);
}
return ContainerAccessor.inherited(
- e.asElement2, library, packageGraph, enclosingContainer,
+ e, library, packageGraph, enclosingContainer,
originalMember: originalMember as ExecutableMember?);
}
- return Accessor(e.asElement2, library, packageGraph);
+ return Accessor(e, library, packageGraph);
}
/// The model element enclosing this one.
@@ -400,7 +382,7 @@
Iterable<Category?> get displayedCategories => const [];
@override
- ModelNode? get modelNode => packageGraph.getModelNodeFor(element.asElement2!);
+ ModelNode? get modelNode => packageGraph.getModelNodeFor(element2);
/// This element's [Annotation]s.
///
@@ -408,7 +390,7 @@
/// supposed to be invisible (like `@pragma`). While `null` elements indicate
/// invalid code from analyzer's perspective, some are present in `sky_engine`
/// (`@Native`) so we don't want to crash here.
- late final List<Annotation> annotations = element.metadata
+ late final List<Annotation> annotations = element2.metadata
.where((m) => m.isVisibleAnnotation)
.map((m) => Annotation(m, library, packageGraph))
.toList(growable: false);
@@ -435,7 +417,7 @@
return false;
}
- if (element case LibraryElement(:var identifier, :var source)) {
+ if (element2 case LibraryElement2(:var identifier, :var firstFragment)) {
// Private Dart SDK libraries are not public.
if (identifier.startsWith('dart:_') ||
identifier.startsWith('dart:nativewrappers/') ||
@@ -443,7 +425,7 @@
return false;
}
// Package-private libraries are not public.
- var elementUri = source.uri;
+ var elementUri = firstFragment.source.uri;
if (elementUri.scheme == 'package' &&
elementUri.pathSegments[1] == 'src') {
return false;
@@ -484,9 +466,9 @@
/// Whether this is a function, or if it is an type alias to a function.
bool get isCallable =>
- element is FunctionTypedElement ||
- (element is TypeAliasElement &&
- (element as TypeAliasElement).aliasedType is FunctionType);
+ element2 is FunctionTypedElement2 ||
+ (element2 is TypeAliasElement2 &&
+ (element2 as TypeAliasElement2).aliasedType is FunctionType);
/// The canonical ModelElement for this ModelElement, or null if there isn't
/// one.
@@ -568,10 +550,11 @@
documentationFrom.map((e) => e.documentationLocal).join('<p>'));
@override
- Element get element;
+ // ignore: analyzer_use_new_elements
+ Element get element => element2.asElement!;
@override
- Element2 get element2 => element.asElement2!;
+ Element2 get element2;
@override
String get location {
@@ -609,23 +592,27 @@
}();
@override
- String get sourceFileName => element.source!.fullName;
+ String get sourceFileName => element2.library2!.firstFragment.source.fullName;
@override
late final CharacterLocation? characterLocation = () {
- final lineInfo = compilationUnitElement.lineInfo;
- late final element = this.element;
- assert(element.nameOffset >= 0,
+ final lineInfo = unitElement.lineInfo;
+ late final element = element2;
+ var nameOffset = element.firstFragment.nameOffset2;
+ if (element is LibraryElementImpl) {
+ nameOffset = element.nameOffset;
+ } else if (element is ConstructorElement2) {
+ nameOffset = (element.firstFragment as ConstructorElementImpl).nameOffset;
+ }
+ assert(nameOffset != null && nameOffset >= 0,
'Invalid location data for element: $fullyQualifiedName');
- var nameOffset = element.nameOffset;
- if (nameOffset >= 0) {
+ if (nameOffset != null && nameOffset >= 0) {
return lineInfo.getLocation(nameOffset);
}
return null;
}();
- CompilationUnitElement get compilationUnitElement =>
- element.thisOrAncestorOfType<CompilationUnitElement>()!;
+ LibraryFragment get unitElement => element2.library2!.firstFragment;
bool get hasAnnotations => annotations.isNotEmpty;
@@ -652,13 +639,13 @@
bool get isDeprecated {
// If element.metadata is empty, it might be because this is a property
// where the metadata belongs to the individual getter/setter
- if (element.metadata.isEmpty && element is PropertyInducingElement) {
- var pie = element as PropertyInducingElement;
+ if (element2.metadata.isEmpty && element2 is PropertyInducingElement2) {
+ var pie = element2 as PropertyInducingElement2;
// The getter or the setter might be null – so the stored value may be
// `true`, `false`, or `null`
- var getterDeprecated = pie.getter?.metadata.any((a) => a.isDeprecated);
- var setterDeprecated = pie.setter?.metadata.any((a) => a.isDeprecated);
+ var getterDeprecated = pie.getter2?.metadata.any((a) => a.isDeprecated);
+ var setterDeprecated = pie.setter2?.metadata.any((a) => a.isDeprecated);
var deprecatedValues = [getterDeprecated, setterDeprecated].nonNulls;
@@ -669,7 +656,7 @@
// deprecated if both are deprecated.
return deprecatedValues.every((d) => d);
}
- return element.metadata.any((a) => a.isDeprecated);
+ return element2.metadata.any((a) => a.isDeprecated);
}
@override
@@ -693,8 +680,8 @@
// If `name` is empty, we probably have the wrong Element association or
// there's an analyzer issue.
assert(name.isNotEmpty ||
- element.kind == ElementKind.DYNAMIC ||
- element.kind == ElementKind.NEVER ||
+ element2.kind == ElementKind.DYNAMIC ||
+ element2.kind == ElementKind.NEVER ||
this is ModelFunction);
final href = this.href;
@@ -732,7 +719,7 @@
_parameterRenderer.renderLinkedParams(parameters, showMetadata: false);
@override
- String get name => element.name!;
+ String get name => element2.lookupName!;
@override
String get oneLineDoc => elementDocumentation.asOneLiner;
@@ -753,32 +740,32 @@
// TODO(srawlins): This really smells like it should just be implemented in
// the subclasses.
late final List<Parameter> parameters = () {
- final element = this.element;
+ final element = element2;
if (!isCallable) {
throw StateError(
'$element (${element.runtimeType}) cannot have parameters');
}
- final List<ParameterElement> params;
- if (element is TypeAliasElement) {
+ final List<FormalParameterElement> params;
+ if (element is TypeAliasElement2) {
final aliasedType = element.aliasedType;
if (aliasedType is FunctionType) {
- params = aliasedType.parameters;
+ params = aliasedType.formalParameters;
} else {
return const <Parameter>[];
}
- } else if (element is ExecutableElement) {
+ } else if (element is ExecutableElement2) {
if (_originalMember != null) {
assert(_originalMember is ExecutableMember);
- params = (_originalMember as ExecutableMember).parameters;
+ params = (_originalMember as ExecutableMember).formalParameters;
} else {
- params = element.parameters;
+ params = element.formalParameters;
}
- } else if (element is FunctionTypedElement) {
+ } else if (element is FunctionTypedElement2) {
if (_originalMember != null) {
- params = (_originalMember as FunctionTypedElement).parameters;
+ params = (_originalMember as FunctionTypedElement2).formalParameters;
} else {
- params = element.parameters;
+ params = element.formalParameters;
}
} else {
return const <Parameter>[];
@@ -809,8 +796,8 @@
@internal
@override
CommentReferable get definingCommentReferable {
- var element = this.element;
- return getModelForElement(element);
+ var element = element2;
+ return getModelForElement2(element);
}
String get linkedObjectType => _packageGraph.dartCoreObject;
@@ -821,11 +808,11 @@
///
/// At the moment, `pragma` is the only invisible annotation.
bool get isVisibleAnnotation {
- if (element == null) return false;
+ if (element2 == null) return false;
- if (element case ConstructorElement(:var enclosingElement3)) {
- return !(enclosingElement3.name == 'pragma' &&
- enclosingElement3.library.name == 'dart.core');
+ if (element2 case ConstructorElement2(:var enclosingElement2)) {
+ return !(enclosingElement2.name3 == 'pragma' &&
+ enclosingElement2.library2.name3 == 'dart.core');
}
return true;
diff --git a/lib/src/model/nameable.dart b/lib/src/model/nameable.dart
index 36ddb49..a7fc9c4 100644
--- a/lib/src/model/nameable.dart
+++ b/lib/src/model/nameable.dart
@@ -63,7 +63,7 @@
Container? enclosingContainer,
}) =>
ModelElement.for_(
- element,
+ element.asElement2!,
library,
packageGraph,
enclosingContainer: enclosingContainer,
@@ -78,7 +78,7 @@
Container? enclosingContainer,
}) =>
ModelElement.for_(
- element.asElement!,
+ element,
library,
packageGraph,
enclosingContainer: enclosingContainer,
@@ -89,14 +89,14 @@
/// A convenience method for [ModelElement.forElement], see its
/// documentation.
ModelElement getModelForElement(Element element) =>
- ModelElement.forElement(element, packageGraph);
+ ModelElement.forElement(element.asElement2!, packageGraph);
/// Returns the [ModelElement] for [element], instantiating it if needed.
///
/// A convenience method for [ModelElement.forElement], see its
/// documentation.
ModelElement getModelForElement2(Element2 element) =>
- ModelElement.forElement(element.asElement!, packageGraph);
+ ModelElement.forElement(element, packageGraph);
/// Returns the [ModelElement] for [element], instantiating it if needed.
///
@@ -113,7 +113,7 @@
Container? enclosingContainer,
}) =>
ModelElement.forPropertyInducingElement(
- element,
+ element.asElement2 as PropertyInducingElement2,
library,
packageGraph,
getter: getter,
@@ -136,7 +136,7 @@
Container? enclosingContainer,
}) =>
ModelElement.forPropertyInducingElement(
- element.asElement as PropertyInducingElement,
+ element,
library,
packageGraph,
getter: getter,