From b8c3f02e0eb26964c55fb46a9fe622c2df837838 Mon Sep 17 00:00:00 2001 From: Keerti Parthasarathy Date: Sun, 9 Feb 2025 18:08:18 -0800 Subject: [PATCH] Elements. Migrate to Element2 (#3991) Migrate to Element 2 - lib/src/model/annotation.dart - lib/src/model/package.dart - lib/src/model/package_builder.dart - lib/src/model/package_graph.dart Also removed the `ignore_for_file: analyzer_use_new_elements` from the generated code. --- lib/src/element_type.dart | 6 +- .../templates.runtime_renderers.dart | 2 - lib/src/model/accessor.dart | 8 +-- lib/src/model/annotation.dart | 20 +++--- lib/src/model/comment_referable.dart | 8 +-- lib/src/model/constructor.dart | 4 +- lib/src/model/container_member.dart | 2 +- lib/src/model/documentation_comment.dart | 2 +- lib/src/model/extension.dart | 9 ++- lib/src/model/extension_type.dart | 2 +- lib/src/model/getter_setter_combo.dart | 2 +- lib/src/model/inheriting_container.dart | 26 ++++---- lib/src/model/library.dart | 34 +++++----- lib/src/model/method.dart | 6 +- lib/src/model/model_element.dart | 2 +- lib/src/model/model_function.dart | 13 ++-- lib/src/model/nameable.dart | 52 +-------------- lib/src/model/package.dart | 2 - lib/src/model/package_builder.dart | 64 ++++++++----------- lib/src/model/package_graph.dart | 14 ++-- lib/src/model/parameter.dart | 2 +- lib/src/model/prefix.dart | 2 +- lib/src/model/type_parameter.dart | 2 +- lib/src/model/typedef.dart | 2 +- test/end2end/model_test.dart | 2 +- test/mustachio/foo.runtime_renderers.dart | 2 - tool/mustachio/codegen_runtime_renderer.dart | 2 - 27 files changed, 111 insertions(+), 181 deletions(-) diff --git a/lib/src/element_type.dart b/lib/src/element_type.dart index a7eb04427d..7b7cabf64a 100644 --- a/lib/src/element_type.dart +++ b/lib/src/element_type.dart @@ -40,7 +40,7 @@ abstract class ElementType with CommentReferable, Nameable { fElement.kind == ElementKind.NEVER) { return UndefinedElementType._from(type, library, packageGraph); } - var modelElement = packageGraph.getModelForElement2(fElement); + var modelElement = packageGraph.getModelForElement(fElement); return DefinedElementType._from(type, modelElement, library, packageGraph); } @@ -137,7 +137,7 @@ class FunctionTypeElementType extends UndefinedElementType : super._(); List get typeFormals => type.typeParameters - .map((p) => getModelFor2(p, library) as TypeParameter) + .map((p) => getModelFor(p, library) as TypeParameter) .toList(growable: false); @override @@ -329,7 +329,7 @@ abstract class DefinedElementType extends ElementType { /// unless it is an alias reference. mixin Callable on ElementType { List get parameters => type.formalParameters - .map((p) => getModelFor2(p, library) as Parameter) + .map((p) => getModelFor(p, library) as Parameter) .toList(growable: false); late final ElementType returnType = getTypeFor(type.returnType, library); diff --git a/lib/src/generator/templates.runtime_renderers.dart b/lib/src/generator/templates.runtime_renderers.dart index e0a6f33978..6bcfefc626 100644 --- a/lib/src/generator/templates.runtime_renderers.dart +++ b/lib/src/generator/templates.runtime_renderers.dart @@ -8,8 +8,6 @@ // ignore_for_file: unused_import // ignore_for_file: use_super_parameters -// ignore_for_file: analyzer_use_new_elements - import 'package:dartdoc/src/element_type.dart'; import 'package:dartdoc/src/generator/template_data.dart'; import 'package:dartdoc/src/model/annotation.dart'; diff --git a/lib/src/model/accessor.dart b/lib/src/model/accessor.dart index 46f6622795..594c71dcca 100644 --- a/lib/src/model/accessor.dart +++ b/lib/src/model/accessor.dart @@ -49,7 +49,7 @@ class Accessor extends ModelElement { /// The [enclosingCombo] where this element was defined. late final GetterSetterCombo definingCombo = - getModelForElement2(element2.variable3!) as GetterSetterCombo; + getModelForElement(element2.variable3!) as GetterSetterCombo; String get _sourceCode { if (!isSynthetic) { @@ -119,8 +119,8 @@ class Accessor extends ModelElement { @override ModelElement get enclosingElement => switch (element2.enclosingElement2) { LibraryFragment enclosingCompilationUnit => - getModelForElement2(enclosingCompilationUnit.element), - _ => getModelFor2(element2.enclosingElement2, library) + getModelForElement(enclosingCompilationUnit.element), + _ => getModelFor(element2.enclosingElement2, library) }; @override @@ -223,7 +223,7 @@ class ContainerAccessor extends Accessor with ContainerMember, Inheritable { continue; } final parentContainer = - getModelForElement2(supertype.element3) as InheritingContainer; + getModelForElement(supertype.element3) as InheritingContainer; final possibleFields = parentContainer.declaredFields.where((f) => !f.isStatic); final fieldName = accessor.lookupName?.replaceFirst('=', ''); diff --git a/lib/src/model/annotation.dart b/lib/src/model/annotation.dart index c1fab31341..0897184f80 100644 --- a/lib/src/model/annotation.dart +++ b/lib/src/model/annotation.dart @@ -2,11 +2,9 @@ // 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 - import 'dart:convert'; -import 'package:analyzer/dart/element/element.dart'; +import 'package:analyzer/dart/element/element2.dart'; import 'package:dartdoc/src/element_type.dart'; import 'package:dartdoc/src/model/attribute.dart'; import 'package:dartdoc/src/model/class.dart'; @@ -24,7 +22,7 @@ final class Annotation extends Attribute { final PackageGraph _packageGraph; Annotation(this._annotation, this._library, this._packageGraph) - : super(_annotation.element!.name!); + : super(_annotation.element2!.name3!); @override String get linkedNameWithParameters { @@ -42,19 +40,19 @@ final class Annotation extends Attribute { } @override - String get linkedName => _annotation.element is PropertyAccessorElement - ? _packageGraph.getModelForElement(_annotation.element!).linkedName + String get linkedName => _annotation.element2 is PropertyAccessorElement2 + ? _packageGraph.getModelForElement(_annotation.element2!).linkedName // TODO(jcollins-g): consider linking to constructor instead of type? : _modelType.linkedName; - late final ElementType _modelType = switch (_annotation.element) { - ConstructorElement(:var returnType) => + late final ElementType _modelType = switch (_annotation.element2) { + ConstructorElement2(:var returnType) => _packageGraph.getTypeFor(returnType, _library), - PropertyAccessorElement(:var variable2?) => - (_packageGraph.getModelForElement(variable2) as GetterSetterCombo) + PropertyAccessorElement2(:var variable3?) => + (_packageGraph.getModelForElement(variable3) as GetterSetterCombo) .modelType, _ => throw StateError( - 'non-callable element used as annotation?: ${_annotation.element}') + 'non-callable element used as annotation?: ${_annotation.element2}') }; bool get isPublic { diff --git a/lib/src/model/comment_referable.dart b/lib/src/model/comment_referable.dart index 9404d3b2b4..39c0e487b7 100644 --- a/lib/src/model/comment_referable.dart +++ b/lib/src/model/comment_referable.dart @@ -132,14 +132,14 @@ mixin CommentReferable implements Nameable { // First, cache the synthetic variable, so that the // PropertyAccessorElement getter and/or setter are set (see // `Field.new` regarding `enclosingCombo`). - packageGraph.getModelForElement2(variable); + packageGraph.getModelForElement(variable); // Then, use the result for the PropertyAccessorElement. - result = packageGraph.getModelForElement2(resultElement); + result = packageGraph.getModelForElement(resultElement); } else { - result = packageGraph.getModelForElement2(variable); + result = packageGraph.getModelForElement(variable); } } else { - result = packageGraph.getModelForElement2(resultElement); + result = packageGraph.getModelForElement(resultElement); } return _recurseChildrenAndFilter(referenceLookup, result, filter: filter); } diff --git a/lib/src/model/constructor.dart b/lib/src/model/constructor.dart index 77a7dfd489..b369b0b053 100644 --- a/lib/src/model/constructor.dart +++ b/lib/src/model/constructor.dart @@ -64,7 +64,7 @@ class Constructor extends ModelElement with ContainerMember, TypeParameters { @override Container get enclosingElement => - getModelFor2(element2.enclosingElement2, library) as Container; + getModelFor(element2.enclosingElement2, library) as Container; @override String get fileName => @@ -136,7 +136,7 @@ class Constructor extends ModelElement with ContainerMember, TypeParameters { var parameterElements = parameters.map((parameter) { var e = dereferenceParameter(parameter.element2); - return e == null ? parameter : getModelForElement2(e); + return e == null ? parameter : getModelForElement(e); }); return { for (var e in parameterElements) e.referenceName: e, diff --git a/lib/src/model/container_member.dart b/lib/src/model/container_member.dart index 08f39fa736..7f6580ad43 100644 --- a/lib/src/model/container_member.dart +++ b/lib/src/model/container_member.dart @@ -29,7 +29,7 @@ mixin ContainerMember on ModelElement { @protected @visibleForTesting late final Container definingEnclosingContainer = - getModelForElement2(element2.enclosingElement2!) as Container; + getModelForElement(element2.enclosingElement2!) as Container; @override Set get attributes => { diff --git a/lib/src/model/documentation_comment.dart b/lib/src/model/documentation_comment.dart index 93e3a60c19..174ffb65c0 100644 --- a/lib/src/model/documentation_comment.dart +++ b/lib/src/model/documentation_comment.dart @@ -55,7 +55,7 @@ mixin DocumentationComment if (!hasDocumentationComment && self.overriddenElement != null) { return self.overriddenElement!.documentationFrom; } else if (self.isInherited) { - return packageGraph.getModelForElement2(element2).documentationFrom; + return packageGraph.getModelForElement(element2).documentationFrom; } else { return [this]; } diff --git a/lib/src/model/extension.dart b/lib/src/model/extension.dart index eeaec5ae1c..b8bf241a25 100644 --- a/lib/src/model/extension.dart +++ b/lib/src/model/extension.dart @@ -19,7 +19,6 @@ import 'package:meta/meta.dart'; /// Static extension on a given type, containing methods (including getters, /// setters, operators). class Extension extends Container { - @override final ExtensionElement2 element2; @@ -82,7 +81,7 @@ class Extension extends Container { @override late final List declaredMethods = element2.methods2 - .map((e) => getModelFor2(e, library, enclosingContainer: this) as Method) + .map((e) => getModelFor(e, library, enclosingContainer: this) as Method) .toList(growable: false); @override @@ -115,15 +114,15 @@ class Extension extends Container { setter = ModelElement.for_(fieldSetter, library, packageGraph, enclosingContainer: this) as ContainerAccessor; } - return getModelForPropertyInducingElement(field.asElement, library, + return getModelForPropertyInducingElement(field, library, getter: getter, setter: setter, enclosingContainer: this) as Field; }).toList(growable: false); @override late final List typeParameters = element2.typeParameters2 - .map((typeParameter) => getModelFor2( + .map((typeParameter) => getModelFor( typeParameter, - getModelForElement2(typeParameter.enclosingElement2!.library2!) + getModelForElement(typeParameter.enclosingElement2!.library2!) as Library) as TypeParameter) .toList(growable: false); diff --git a/lib/src/model/extension_type.dart b/lib/src/model/extension_type.dart index bb06912997..623f810706 100644 --- a/lib/src/model/extension_type.dart +++ b/lib/src/model/extension_type.dart @@ -53,7 +53,7 @@ class ExtensionType extends InheritingContainer with Constructable { setter = ContainerAccessor( fieldSetter, library, packageGraph, this); } - return getModelForPropertyInducingElement2(field, library, + return getModelForPropertyInducingElement(field, library, getter: getter, setter: setter) as Field; }).toList(growable: false); diff --git a/lib/src/model/getter_setter_combo.dart b/lib/src/model/getter_setter_combo.dart index 0475c1d619..e5e4fe3e67 100644 --- a/lib/src/model/getter_setter_combo.dart +++ b/lib/src/model/getter_setter_combo.dart @@ -86,7 +86,7 @@ mixin GetterSetterCombo on ModelElement { var element = _constantInitializer.constructorName.element; if (element == null) return original; - var target = getModelForElement2(element) as Constructor; + var target = getModelForElement(element) as Constructor; var enclosingElement = target.enclosingElement; if (enclosingElement is! Class) return original; diff --git a/lib/src/model/inheriting_container.dart b/lib/src/model/inheriting_container.dart index 0fdbdf3a62..1b669a7c43 100644 --- a/lib/src/model/inheriting_container.dart +++ b/lib/src/model/inheriting_container.dart @@ -20,7 +20,7 @@ import 'package:meta/meta.dart'; /// [hasModifiers] override is not necessary for this mixin. mixin Constructable implements InheritingContainer { late final List constructors = element2.constructors2 - .map((e) => getModelFor2(e, library) as Constructor) + .map((e) => getModelFor(e, library) as Constructor) .toList(growable: false); @override @@ -111,7 +111,7 @@ abstract class InheritingContainer extends Container { return [ for (var e in inheritedMethodElements) - getModelFor2(e, library, enclosingContainer: this) as Method, + getModelFor(e, library, enclosingContainer: this) as Method, ]; } @@ -125,7 +125,7 @@ abstract class InheritingContainer extends Container { return [ for (var e in inheritedOperatorElements) - getModelFor2(e, library, enclosingContainer: this) as Operator, + getModelFor(e, library, enclosingContainer: this) as Operator, ]; } @@ -254,14 +254,14 @@ abstract class InheritingContainer extends Container { @override late final List declaredMethods = element2.methods2 - .map((e) => getModelFor2(e, library) as Method) + .map((e) => getModelFor(e, library) as Method) .toList(growable: false); @override late final List typeParameters = element2.typeParameters2 - .map((typeParameter) => getModelFor2( + .map((typeParameter) => getModelFor( typeParameter, - getModelForElement2(typeParameter.enclosingElement2!.library2!) + getModelForElement(typeParameter.enclosingElement2!.library2!) as Library) as TypeParameter) .toList(growable: false); @@ -292,7 +292,7 @@ abstract class InheritingContainer extends Container { /// The [InheritingContainer] with the library in which [element] is defined. InheritingContainer get definingContainer => - getModelFor2(element2, library) as InheritingContainer; + getModelFor(element2, library) as InheritingContainer; @override @@ -347,7 +347,7 @@ abstract class InheritingContainer extends Container { List get _extensionInstanceFields => [ for (var extension in potentiallyApplicableExtensionsSorted) for (var field in extension.instanceFields) - getModelForPropertyInducingElement2( + getModelForPropertyInducingElement( field.element2, library, enclosingContainer: extension, @@ -371,7 +371,7 @@ abstract class InheritingContainer extends Container { List get _extensionInstanceMethods => [ for (var extension in potentiallyApplicableExtensionsSorted) for (var method in extension.instanceMethods) - getModelFor2(method.element2, library, + getModelFor(method.element2, library, enclosingContainer: extension) as Method, ]; @@ -388,7 +388,7 @@ abstract class InheritingContainer extends Container { List get _extensionInstanceOperators => [ for (var extension in potentiallyApplicableExtensionsSorted) for (var operator in extension.instanceOperators) - getModelFor2(operator.element2, library, + getModelFor(operator.element2, library, enclosingContainer: extension) as Operator, ]; @@ -604,7 +604,7 @@ abstract class InheritingContainer extends Container { if (element == null) return null; final enclosingContainer = inheritedAccessors.contains(element) ? this : null; - return getModelFor2(element, library, + return getModelFor(element, library, enclosingContainer: enclosingContainer) as ContainerAccessor; } @@ -644,14 +644,14 @@ abstract class InheritingContainer extends Container { if ((getter == null || getter.isInherited) && (setter == null || setter.isInherited)) { // Field is 100% inherited. - return getModelForPropertyInducingElement2(field, library, + return getModelForPropertyInducingElement(field, library, getter: getter, setter: setter, enclosingContainer: this) as Field; } else { // Field is <100% inherited (could be half-inherited). // TODO(jcollins-g): Navigation is probably still confusing for // half-inherited fields when traversing the inheritance tree. Make // this better, somehow. - return getModelForPropertyInducingElement2(field, library, + return getModelForPropertyInducingElement(field, library, getter: getter, setter: setter) as Field; } } diff --git a/lib/src/model/library.dart b/lib/src/model/library.dart index d1029aa919..50ae6e21c5 100644 --- a/lib/src/model/library.dart +++ b/lib/src/model/library.dart @@ -70,8 +70,9 @@ class Library extends ModelElement ...libraryElement.firstFragment.topLevelVariables2.map((v) => v.element), ...libraryElement.firstFragment.typeAliases2.map((a) => a.element), }; - var exportedElements = {...libraryElement.exportNamespace.definedNames2.values} - .difference(localElements); + var exportedElements = { + ...libraryElement.exportNamespace.definedNames2.values + }.difference(localElements); var library = Library._( libraryElement, packageGraph, @@ -140,7 +141,7 @@ class Library extends ModelElement if (importedLibrary != null) { prefixToLibrary .putIfAbsent(prefixName, () => {}) - .add(getModelFor2(importedLibrary, library) as Library); + .add(getModelFor(importedLibrary, library) as Library); } } return prefixToLibrary; @@ -362,7 +363,7 @@ class Library extends ModelElement _localElementsOfType() => _localElements .whereType() - .map((e) => packageGraph.getModelFor2(e, this) as U); + .map((e) => packageGraph.getModelFor(e, this) as U); Iterable _exportedElementsOfType() => @@ -371,9 +372,9 @@ class Library extends ModelElement if (library == null) { throw StateError("The library of '$e' is null!"); } - return packageGraph.getModelFor2( + return packageGraph.getModelFor( e, - packageGraph.getModelForElement2(library) as Library, + packageGraph.getModelForElement(library) as Library, ) as U; }); @@ -395,18 +396,19 @@ class Library extends ModelElement }.map(_topLevelVariableFor); } - TopLevelVariable _topLevelVariableFor(TopLevelVariableElement2 topLevelVariableElement) { + TopLevelVariable _topLevelVariableFor( + TopLevelVariableElement2 topLevelVariableElement) { Accessor? getter; var elementGetter = topLevelVariableElement.getter2; if (elementGetter != null) { - getter = packageGraph.getModelFor2(elementGetter, this) as Accessor; + getter = packageGraph.getModelFor(elementGetter, this) as Accessor; } Accessor? setter; var elementSetter = topLevelVariableElement.setter2; if (elementSetter != null) { - setter = packageGraph.getModelFor2(elementSetter, this) as Accessor; + setter = packageGraph.getModelFor(elementSetter, this) as Accessor; } - return getModelForPropertyInducingElement2(topLevelVariableElement, this, + return getModelForPropertyInducingElement(topLevelVariableElement, this, getter: getter, setter: setter) as TopLevelVariable; } @@ -436,7 +438,7 @@ class Library extends ModelElement Map get referenceChildren { var referenceChildrenBuilder = {}; var definedNamesModelElements = - element2.exportNamespace.definedNames2.values.map(getModelForElement2); + element2.exportNamespace.definedNames2.values.map(getModelForElement); referenceChildrenBuilder .addAll(definedNamesModelElements.whereNotType().asMapByName); // TODO(jcollins-g): warn and get rid of this case where it shows up. @@ -500,19 +502,19 @@ class Library extends ModelElement ]; return libraryMembers.map((member) { if (member is! GetterSetterCombo) { - return getModelForElement2(member.element2).fullyQualifiedName; + return getModelForElement(member.element2).fullyQualifiedName; } var getter = switch (member.getter) { - Accessor accessor => getModelForElement2(accessor.element2) as Accessor, + Accessor accessor => getModelForElement(accessor.element2) as Accessor, _ => null, }; var setter = switch (member.setter) { - Accessor accessor => getModelForElement2(accessor.element2) as Accessor, + Accessor accessor => getModelForElement(accessor.element2) as Accessor, _ => null, }; - return getModelForPropertyInducingElement2( + return getModelForPropertyInducingElement( member.element2 as TopLevelVariableElement2, - getModelForElement2(member.element2.library2!) as Library, + getModelForElement(member.element2.library2!) as Library, getter: getter, setter: setter, ).fullyQualifiedName; diff --git a/lib/src/model/method.dart b/lib/src/model/method.dart index 31f68a06d7..4c20a44d67 100644 --- a/lib/src/model/method.dart +++ b/lib/src/model/method.dart @@ -49,7 +49,7 @@ class Method extends ModelElement void _calcTypeParameters() { typeParameters = element2.typeParameters2.map((f) { - return getModelFor2(f, library) as TypeParameter; + return getModelFor(f, library) as TypeParameter; }).toList(growable: false); } @@ -68,7 +68,7 @@ class Method extends ModelElement @override Container get enclosingElement => _enclosingContainer ??= - getModelFor2(element2.enclosingElement2!, library) as Container; + getModelFor(element2.enclosingElement2!, library) as Container; @override String get aboveSidebarPath => enclosingElement.sidebarPath; @@ -134,7 +134,7 @@ class Method extends ModelElement 'Expected "${e.enclosingElement2?.name3}" to be a InterfaceElement, ' 'but was ${e.enclosingElement2.runtimeType}', ); - return getModelForElement2(e) as Method?; + return getModelForElement(e) as Method?; } } return null; diff --git a/lib/src/model/model_element.dart b/lib/src/model/model_element.dart index 122a967722..8d20576ff7 100644 --- a/lib/src/model/model_element.dart +++ b/lib/src/model/model_element.dart @@ -803,7 +803,7 @@ abstract class ModelElement @override CommentReferable get definingCommentReferable { var element = element2; - return getModelForElement2(element); + return getModelForElement(element); } String get linkedObjectType => _packageGraph.dartCoreObject; diff --git a/lib/src/model/model_function.dart b/lib/src/model/model_function.dart index 3e1958b279..ec930e2401 100644 --- a/lib/src/model/model_function.dart +++ b/lib/src/model/model_function.dart @@ -10,8 +10,8 @@ import 'package:dartdoc/src/model/model.dart'; /// A [ModelElement] for a [TopLevelFunctionElement] that isn't part of a type definition. class ModelFunction extends ModelFunctionTyped with Categorization { - ModelFunction( - TopLevelFunctionElement super.element2, super.library, super.packageGraph); + ModelFunction(TopLevelFunctionElement super.element2, super.library, + super.packageGraph); bool get isStatic => element2.isStatic; @@ -19,7 +19,8 @@ class ModelFunction extends ModelFunctionTyped with Categorization { String get name => element2.name3 ?? ''; @override - TopLevelFunctionElement get element2 => super.element2 as TopLevelFunctionElement; + TopLevelFunctionElement get element2 => + super.element2 as TopLevelFunctionElement; bool get isAsynchronous => element2.firstFragment.isAsynchronous; } @@ -34,14 +35,13 @@ class ModelFunctionTypedef extends ModelFunctionTyped { } class ModelFunctionTyped extends ModelElement with TypeParameters { - @override final FunctionTypedElement2 element2; @override late final List typeParameters = [ for (var p in element2.typeParameters2) - getModelFor2(p, library) as TypeParameter, + getModelFor(p, library) as TypeParameter, ]; ModelFunctionTyped(this.element2, super.library, super.packageGraph); @@ -82,7 +82,8 @@ class ModelFunctionTyped extends ModelElement with TypeParameters { @override Iterable get referenceParents => [library]; - late final Callable modelType = getTypeFor(element2.type, library) as Callable; + late final Callable modelType = + getTypeFor(element2.type, library) as Callable; // For use in templates. bool get isProvidedByExtension => false; diff --git a/lib/src/model/nameable.dart b/lib/src/model/nameable.dart index 423948fd59..b3fa84fe07 100644 --- a/lib/src/model/nameable.dart +++ b/lib/src/model/nameable.dart @@ -2,13 +2,8 @@ // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. -// ignore_for_file: analyzer_use_new_elements - -import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/element2.dart'; import 'package:analyzer/dart/element/type.dart' show DartType; -// ignore: implementation_imports -import 'package:analyzer/src/utilities/extensions/element.dart'; import 'package:collection/collection.dart'; import 'package:dartdoc/src/element_type.dart'; import 'package:dartdoc/src/model/accessor.dart'; @@ -59,21 +54,6 @@ mixin Nameable { /// /// A convenience method for [ModelElement.for_], see its documentation. ModelElement getModelFor( - Element element, - Library library, { - Container? enclosingContainer, - }) => - ModelElement.for_( - element.asElement2!, - library, - packageGraph, - enclosingContainer: enclosingContainer, - ); - - /// Returns the [ModelElement] for [element], instantiating it if needed. - /// - /// A convenience method for [ModelElement.for_], see its documentation. - ModelElement getModelFor2( Element2 element, Library library, { Container? enclosingContainer, @@ -89,14 +69,7 @@ mixin Nameable { /// /// A convenience method for [ModelElement.forElement], see its /// documentation. - ModelElement getModelForElement(Element element) => - 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 getModelForElement(Element2 element) => ModelElement.forElement(element, packageGraph); /// Returns the [ModelElement] for [element], instantiating it if needed. @@ -107,29 +80,6 @@ mixin Nameable { // immediately before calling this method, and I imagine could instead just // call `getModelFor`. ModelElement getModelForPropertyInducingElement( - PropertyInducingElement element, - Library library, { - required Accessor? getter, - required Accessor? setter, - Container? enclosingContainer, - }) => - ModelElement.forPropertyInducingElement( - element.asElement2 as PropertyInducingElement2, - library, - packageGraph, - getter: getter, - setter: setter, - enclosingContainer: enclosingContainer, - ); - - /// Returns the [ModelElement] for [element], instantiating it if needed. - /// - /// A convenience method for [ModelElement.forPropertyInducingElement], see - /// its documentation. - // TODO(srawlins): Most callers seem to determine `getter` and `setter` - // immediately before calling this method, and I imagine could instead just - // call `getModelFor`. - ModelElement getModelForPropertyInducingElement2( PropertyInducingElement2 element, Library library, { required Accessor? getter, diff --git a/lib/src/model/package.dart b/lib/src/model/package.dart index 73c96fae48..13676672b5 100644 --- a/lib/src/model/package.dart +++ b/lib/src/model/package.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 - import 'package:analyzer/dart/element/element2.dart'; import 'package:dartdoc/src/dartdoc_options.dart'; import 'package:dartdoc/src/io_utils.dart'; diff --git a/lib/src/model/package_builder.dart b/lib/src/model/package_builder.dart index bbcac668e1..0d4be2242d 100644 --- a/lib/src/model/package_builder.dart +++ b/lib/src/model/package_builder.dart @@ -2,15 +2,12 @@ // 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 - import 'dart:async'; import 'package:analyzer/dart/analysis/analysis_context.dart'; import 'package:analyzer/dart/analysis/context_root.dart'; import 'package:analyzer/dart/analysis/results.dart'; import 'package:analyzer/dart/ast/ast.dart'; -import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/element2.dart'; import 'package:analyzer/file_system/file_system.dart'; // ignore: implementation_imports @@ -19,7 +16,6 @@ import 'package:analyzer/src/context/builder.dart' show EmbedderYamlLocator; import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart' show AnalysisContextCollectionImpl; // ignore: implementation_imports -import 'package:analyzer/src/dart/element/element.dart'; // ignore: implementation_imports import 'package:analyzer/src/dart/sdk/sdk.dart' show EmbedderSdk, FolderBasedDartSdk; @@ -225,10 +221,10 @@ class PubPackageBuilder implements PackageBuilder { /// Discovers and resolves libraries, invoking [addLibrary] with each result. /// /// Uses [processedLibraries] to prevent calling [addLibrary] more than once - /// with the same [LibraryElement]. Adds each [LibraryElement] found to + /// with the same [LibraryElement2]. Adds each [LibraryElement2] found to /// [processedLibraries]. Future _discoverLibraries(PackageGraph uninitializedPackageGraph, - Set processedLibraries, Set files) async { + Set processedLibraries, Set files) async { files = {...files}; // Discover Dart libraries in a loop. In each iteration of the loop, we take // a set of files (starting with the ones passed into the function), resolve @@ -276,15 +272,15 @@ class PubPackageBuilder implements PackageBuilder { _knownParts.add(file); continue; } - newFiles.addFilesReferencedBy(resolvedLibrary.element); + newFiles.addFilesReferencedBy(resolvedLibrary.element2); for (var unit in resolvedLibrary.units) { - newFiles.addFilesReferencedBy(unit.declaredElement); + newFiles.addFilesReferencedByFragment(unit.declaredFragment); } - if (processedLibraries.contains(resolvedLibrary.element)) { + if (processedLibraries.contains(resolvedLibrary.element2)) { continue; } uninitializedPackageGraph.addLibraryToGraph(resolvedLibrary); - processedLibraries.add(resolvedLibrary.element); + processedLibraries.add(resolvedLibrary.element2); } files.addAll(newFiles); var externals = _includedExternalsFrom(newFiles); @@ -472,7 +468,7 @@ class PubPackageBuilder implements PackageBuilder { var files = await _getFilesToDocument(); logInfo('Discovering libraries...'); - var foundLibraries = {}; + var foundLibraries = {}; await _discoverLibraries( uninitializedPackageGraph, foundLibraries, @@ -484,9 +480,9 @@ class PubPackageBuilder implements PackageBuilder { /// Throws an exception if any configured-to-be-included files were not found /// while gathering libraries. - void _checkForMissingIncludedFiles(Set foundLibraries) { + void _checkForMissingIncludedFiles(Set foundLibraries) { if (_config.include.isNotEmpty) { - var knownLibraryNames = foundLibraries.map((l) => l.name); + var knownLibraryNames = foundLibraries.map((l) => l.name3); var notFound = _config.include .difference(Set.of(knownLibraryNames)) .difference(_config.exclude); @@ -519,12 +515,11 @@ class PubPackageBuilder implements PackageBuilder { /// Contains the [ResolvedLibraryResult] and any additional information about /// the library. class DartDocResolvedLibrary { - final LibraryElement element; - LibraryElement2 get element2 => element as LibraryElementImpl; + final LibraryElement2 element2; final List units; DartDocResolvedLibrary(ResolvedLibraryResult result) - : element = result.element, + : element2 = result.element2, units = result.units.map((unit) => unit.unit).toList(); } @@ -532,35 +527,28 @@ extension on Set { /// Adds [element]'s path and all of its part files' paths to `this`, and /// recursively adds the paths of all imported and exported libraries. /// - /// [element] must be a [LibraryElement] or [CompilationUnitElement]. - void addFilesReferencedBy(Element? element) { + /// [element] must be a [LibraryElement2]. + void addFilesReferencedBy(LibraryElement2? element) { if (element == null) return; - var path = element.source?.fullName; - if (path == null) return; + for (var fragment in element.fragments) { + addFilesReferencedByFragment(fragment); + } + } + + void addFilesReferencedByFragment(LibraryFragment? fragment) { + if (fragment == null) return; + + var path = fragment.source.fullName; if (add(path)) { - var libraryImports = switch (element) { - LibraryElement() => element.definingCompilationUnit.libraryImports, - CompilationUnitElement(:var libraryImports) => libraryImports, - _ => const [], - }; + var libraryImports = fragment.libraryImports2; for (var import in libraryImports) { - addFilesReferencedBy(import.importedLibrary); + addFilesReferencedBy(import.importedLibrary2); } - - var libraryExports = switch (element) { - LibraryElement() => element.definingCompilationUnit.libraryExports, - CompilationUnitElement(:var libraryExports) => libraryExports, - _ => const [], - }; + var libraryExports = fragment.libraryExports2; for (var export in libraryExports) { - addFilesReferencedBy(export.exportedLibrary); - } - if (element is LibraryElement) { - for (var unit in element.units) { - addFilesReferencedBy(unit); - } + addFilesReferencedBy(export.exportedLibrary2); } } } diff --git a/lib/src/model/package_graph.dart b/lib/src/model/package_graph.dart index 84d96ccd2d..71bece360f 100644 --- a/lib/src/model/package_graph.dart +++ b/lib/src/model/package_graph.dart @@ -748,11 +748,11 @@ class PackageGraph with CommentReferable, Nameable { // For elements defined in extensions, they are canonical. var enclosingElement = e.enclosingElement2; if (enclosingElement is ExtensionElement2) { - library ??= getModelForElement2(enclosingElement.library2) as Library?; + library ??= getModelForElement(enclosingElement.library2) as Library?; // TODO(keertip): Find a better way to exclude members of extensions // when libraries are specified using the "--include" flag. if (library != null && library.isDocumented) { - return getModelFor2(e, library, + return getModelFor(e, library, enclosingContainer: preferredClass); } } @@ -764,7 +764,7 @@ class PackageGraph with CommentReferable, Nameable { e is MethodElement2 || e is FieldElement2 || e is PropertyAccessorElement2) { - var declarationModelElement = getModelForElement2(declaration); + var declarationModelElement = getModelForElement(declaration); e = declarationModelElement.element2; canonicalModelElement = _findCanonicalModelElementForAmbiguous( declarationModelElement, library, @@ -774,15 +774,15 @@ class PackageGraph with CommentReferable, Nameable { if (e case PropertyInducingElement2(:var getter2, :var setter2)) { var getterElement = getter2 == null ? null - : getModelFor2(getter2, library) as Accessor; + : getModelFor(getter2, library) as Accessor; var setterElement = setter2 == null ? null - : getModelFor2(setter2, library) as Accessor; - canonicalModelElement = getModelForPropertyInducingElement2( + : getModelFor(setter2, library) as Accessor; + canonicalModelElement = getModelForPropertyInducingElement( e, library, getter: getterElement, setter: setterElement); } else { - canonicalModelElement = getModelFor2(e, library); + canonicalModelElement = getModelFor(e, library); } } assert(canonicalModelElement is! Inheritable); diff --git a/lib/src/model/parameter.dart b/lib/src/model/parameter.dart index 3f1cc1cce3..846683f5f5 100644 --- a/lib/src/model/parameter.dart +++ b/lib/src/model/parameter.dart @@ -26,7 +26,7 @@ class Parameter extends ModelElement with HasNoPage { final enclosingElement = element2.enclosingElement2; return enclosingElement == null ? null - : getModelFor2(enclosingElement, library); + : getModelFor(enclosingElement, library); } bool get hasDefaultValue { diff --git a/lib/src/model/prefix.dart b/lib/src/model/prefix.dart index d3acf04dc4..7c2e9aa953 100644 --- a/lib/src/model/prefix.dart +++ b/lib/src/model/prefix.dart @@ -27,7 +27,7 @@ class Prefix extends ModelElement with HasNoPage { // TODO(jcollins-g): consider connecting PrefixElement to the imported library // in analyzer? late final Library associatedLibrary = - getModelForElement2(_getImportedLibraryElement()!) as Library; + getModelForElement(_getImportedLibraryElement()!) as Library; LibraryElement2? _getImportedLibraryElement() { final importLists = diff --git a/lib/src/model/type_parameter.dart b/lib/src/model/type_parameter.dart index 00ead52cb5..0d7ee63da8 100644 --- a/lib/src/model/type_parameter.dart +++ b/lib/src/model/type_parameter.dart @@ -17,7 +17,7 @@ class TypeParameter extends ModelElement with HasNoPage { @override ModelElement get enclosingElement => - getModelFor2(element2.enclosingElement2!, library); + getModelFor(element2.enclosingElement2!, library); /// [TypeParameter]s don't have documentation pages, and don't link to the /// element on which they are declared. diff --git a/lib/src/model/typedef.dart b/lib/src/model/typedef.dart index d6c465fab4..27f5222a20 100644 --- a/lib/src/model/typedef.dart +++ b/lib/src/model/typedef.dart @@ -63,7 +63,7 @@ abstract class Typedef extends ModelElement @override List get typeParameters => element2.typeParameters2 - .map((f) => getModelFor2(f, library) as TypeParameter) + .map((f) => getModelFor(f, library) as TypeParameter) .toList(growable: false); @override diff --git a/test/end2end/model_test.dart b/test/end2end/model_test.dart index a1fe60a00d..9729e5dae5 100644 --- a/test/end2end/model_test.dart +++ b/test/end2end/model_test.dart @@ -926,7 +926,7 @@ void main() async { .whereType() .map((uri) => uri.library2) }) - packageGraph.getModelForElement2(l) as Library + packageGraph.getModelForElement(l) as Library }; expect(fakeLibraryImportedExported.any((l) => l.name == 'import_unusual'), isTrue); diff --git a/test/mustachio/foo.runtime_renderers.dart b/test/mustachio/foo.runtime_renderers.dart index fa39c48c7b..76db4884fe 100644 --- a/test/mustachio/foo.runtime_renderers.dart +++ b/test/mustachio/foo.runtime_renderers.dart @@ -8,8 +8,6 @@ // ignore_for_file: unused_import // ignore_for_file: use_super_parameters -// ignore_for_file: analyzer_use_new_elements - import 'package:dartdoc/src/element_type.dart'; import 'package:dartdoc/src/generator/template_data.dart'; import 'package:dartdoc/src/model/annotation.dart'; diff --git a/tool/mustachio/codegen_runtime_renderer.dart b/tool/mustachio/codegen_runtime_renderer.dart index 33db1b9f27..c54d3751a1 100644 --- a/tool/mustachio/codegen_runtime_renderer.dart +++ b/tool/mustachio/codegen_runtime_renderer.dart @@ -89,8 +89,6 @@ class RuntimeRenderersBuilder { // ignore_for_file: unused_import // ignore_for_file: use_super_parameters -// ignore_for_file: analyzer_use_new_elements - import 'package:dartdoc/src/element_type.dart'; import 'package:dartdoc/src/generator/template_data.dart'; import 'package:dartdoc/src/model/annotation.dart';