Skip to content

Commit

Permalink
Elements. Migrate lib/src/model/accessor.dart (#3984)
Browse files Browse the repository at this point in the history
  • Loading branch information
keertip authored Feb 3, 2025
1 parent 814fbec commit 9366e01
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 29 deletions.
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 @@ -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.
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

0 comments on commit 9366e01

Please sign in to comment.