diff --git a/lib/src/model/accessor.dart b/lib/src/model/accessor.dart index 5d67e6aeef..48d5761953 100644 --- a/lib/src/model/accessor.dart +++ b/lib/src/model/accessor.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 'dart:convert'; import 'package:analyzer/dart/element/element.dart'; @@ -24,10 +22,11 @@ import 'package:dartdoc/src/warnings.dart'; /// Getters and setters. class Accessor extends ModelElement { @override - final PropertyAccessorElement element; + // ignore: analyzer_use_new_elements + PropertyAccessorElement get element => element2.asElement; @override - PropertyAccessorElement2 get element2 => element.asElement2; + final PropertyAccessorElement2 element2; /// The combo ([Field] or [TopLevelVariable]) containing this accessor. /// @@ -37,11 +36,11 @@ class Accessor extends ModelElement { // initialized by code inside this library. late final GetterSetterCombo enclosingCombo; - Accessor(this.element, super.library, super.packageGraph, + Accessor(this.element2, super.library, super.packageGraph, {ExecutableMember? super.originalMember}); @override - CharacterLocation? get characterLocation => element.isSynthetic + CharacterLocation? get characterLocation => element2.isSynthetic ? enclosingCombo.characterLocation : super.characterLocation; @@ -50,19 +49,19 @@ class Accessor extends ModelElement { super.originalMember as ExecutableMember?; late final Callable modelType = - getTypeFor((originalMember ?? element).type, library) as Callable; + getTypeFor((originalMember ?? element2).type, library) as Callable; - bool get isSynthetic => element.isSynthetic; + bool get isSynthetic => element2.isSynthetic; /// The [enclosingCombo] where this element was defined. late final GetterSetterCombo definingCombo = - getModelForElement(element.variable2!) as GetterSetterCombo; + getModelForElement2(element2.variable3!) as GetterSetterCombo; String get _sourceCode { if (!isSynthetic) { return super.sourceCode; } - var modelNode = packageGraph.getModelNodeFor(definingCombo.element); + var modelNode = packageGraph.getModelNodeFor2(definingCombo.element2); return modelNode == null ? '' : const HtmlEscape().convert(modelNode.sourceCode); @@ -108,7 +107,7 @@ class Accessor extends ModelElement { @override bool get hasDocumentationComment => isSynthetic ? _hasSyntheticDocumentationComment - : element.documentationComment != null; + : element2.documentationComment != null; @override void warn( @@ -124,10 +123,10 @@ class Accessor extends ModelElement { } @override - ModelElement get enclosingElement => switch (element.enclosingElement3) { - CompilationUnitElement enclosingCompilationUnit => - getModelForElement(enclosingCompilationUnit.library), - _ => getModelFor(element.enclosingElement3, library) + ModelElement get enclosingElement => switch (element2.enclosingElement2) { + LibraryFragment enclosingCompilationUnit => + getModelForElement2(enclosingCompilationUnit.element), + _ => getModelFor2(element2.enclosingElement2!, library) }; @override @@ -154,9 +153,9 @@ class Accessor extends ModelElement { @override String? get href => enclosingCombo.href; - bool get isGetter => element.isGetter; + bool get isGetter => element2 is GetterElement; - bool get isSetter => element.isSetter; + bool get isSetter => element2 is SetterElement; @override Kind get kind => Kind.accessor; @@ -214,24 +213,28 @@ class ContainerAccessor extends Accessor with ContainerMember, Inheritable { @override ContainerAccessor? get overriddenElement { assert(packageGraph.allLibrariesAdded); - final parent = element.enclosingElement3; - if (parent is! InterfaceElement) { + final parent = element2.enclosingElement2; + if (parent is! InterfaceElement2) { return null; } for (final supertype in parent.allSupertypes) { var accessor = isGetter - ? supertype.getGetter(element.name)?.declaration - : supertype.getSetter(element.name)?.declaration; + ? supertype.getters + .firstWhereOrNull((e) => e.lookupName == element2.lookupName) + ?.baseElement + : supertype.setters + .firstWhereOrNull((e) => e.lookupName == element2.lookupName) + ?.baseElement; if (accessor == null) { continue; } final parentContainer = - getModelForElement(supertype.element) as InheritingContainer; + getModelForElement2(supertype.element3) as InheritingContainer; final possibleFields = parentContainer.declaredFields.where((f) => !f.isStatic); - final fieldName = accessor.name.replaceFirst('=', ''); + final fieldName = accessor.lookupName?.replaceFirst('=', ''); final foundField = - possibleFields.firstWhereOrNull((f) => f.element.name == fieldName); + possibleFields.firstWhereOrNull((f) => f.element2.name3 == fieldName); if (foundField == null) { continue; } diff --git a/lib/src/model/extension_type.dart b/lib/src/model/extension_type.dart index b6dc6b1769..8069823524 100644 --- a/lib/src/model/extension_type.dart +++ b/lib/src/model/extension_type.dart @@ -53,11 +53,13 @@ class ExtensionType extends InheritingContainer with Constructable { ContainerAccessor? getter, setter; final fieldGetter = field.getter; if (fieldGetter != null) { - getter = ContainerAccessor(fieldGetter, library, packageGraph, this); + getter = ContainerAccessor( + fieldGetter.asElement2, library, packageGraph, this); } final fieldSetter = field.setter; if (fieldSetter != null) { - setter = ContainerAccessor(fieldSetter, library, packageGraph, this); + setter = ContainerAccessor( + fieldSetter.asElement2, library, packageGraph, this); } return getModelForPropertyInducingElement(field, library, getter: getter, setter: setter) as Field; diff --git a/lib/src/model/model_element.dart b/lib/src/model/model_element.dart index 8e2336a53e..9adcff9f7c 100644 --- a/lib/src/model/model_element.dart +++ b/lib/src/model/model_element.dart @@ -370,15 +370,15 @@ abstract class ModelElement if (e.enclosingElement3 is ExtensionElement || e.enclosingElement3 is InterfaceElement) { if (enclosingContainer == null || enclosingContainer is Extension) { - return ContainerAccessor(e, library, packageGraph, enclosingContainer); + return ContainerAccessor(e.asElement2, library, packageGraph, enclosingContainer); } return ContainerAccessor.inherited( - e, library, packageGraph, enclosingContainer, + e.asElement2, library, packageGraph, enclosingContainer, originalMember: originalMember as ExecutableMember?); } - return Accessor(e, library, packageGraph); + return Accessor(e.asElement2, library, packageGraph); } /// The model element enclosing this one. diff --git a/lib/src/model/package_graph.dart b/lib/src/model/package_graph.dart index cdae9177c5..ae2df36e02 100644 --- a/lib/src/model/package_graph.dart +++ b/lib/src/model/package_graph.dart @@ -311,6 +311,9 @@ class PackageGraph with CommentReferable, Nameable { ModelNode? getModelNodeFor(Element element) => _modelNodes[element]; + ModelNode? getModelNodeFor2(Element2 element2) => + _modelNodes[element2.asElement]; + /// It is safe to cache values derived from the [_implementers] table if this /// is true. bool allImplementersAdded = false;