Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 27 additions & 24 deletions lib/src/model/accessor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -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.
///
Expand All @@ -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;

Expand All @@ -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);
Expand Down Expand Up @@ -108,7 +107,7 @@ class Accessor extends ModelElement {
@override
bool get hasDocumentationComment => isSynthetic
? _hasSyntheticDocumentationComment
: element.documentationComment != null;
: element2.documentationComment != null;

@override
void warn(
Expand All @@ -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
Expand All @@ -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;
Expand Down Expand Up @@ -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;
}
Expand Down
6 changes: 4 additions & 2 deletions lib/src/model/extension_type.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
6 changes: 3 additions & 3 deletions lib/src/model/model_element.dart
Original file line number Diff line number Diff line change
Expand Up @@ -369,15 +369,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.
Expand Down
3 changes: 3 additions & 0 deletions lib/src/model/package_graph.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down