Skip to content

Commit

Permalink
Elements. Migrate to Element2 (#3991)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
keertip authored Feb 10, 2025
1 parent c386407 commit b8c3f02
Show file tree
Hide file tree
Showing 27 changed files with 111 additions and 181 deletions.
6 changes: 3 additions & 3 deletions lib/src/element_type.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down Expand Up @@ -137,7 +137,7 @@ class FunctionTypeElementType extends UndefinedElementType
: super._();

List<TypeParameter> get typeFormals => type.typeParameters
.map((p) => getModelFor2(p, library) as TypeParameter)
.map((p) => getModelFor(p, library) as TypeParameter)
.toList(growable: false);

@override
Expand Down Expand Up @@ -329,7 +329,7 @@ abstract class DefinedElementType extends ElementType {
/// unless it is an alias reference.
mixin Callable on ElementType {
List<Parameter> 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);
Expand Down
2 changes: 0 additions & 2 deletions lib/src/generator/templates.runtime_renderers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down
8 changes: 4 additions & 4 deletions lib/src/model/accessor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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('=', '');
Expand Down
20 changes: 9 additions & 11 deletions lib/src/model/annotation.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -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 {
Expand All @@ -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 {
Expand Down
8 changes: 4 additions & 4 deletions lib/src/model/comment_referable.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
4 changes: 2 additions & 2 deletions lib/src/model/constructor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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 =>
Expand Down Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion lib/src/model/container_member.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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<Attribute> get attributes => {
Expand Down
2 changes: 1 addition & 1 deletion lib/src/model/documentation_comment.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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];
}
Expand Down
9 changes: 4 additions & 5 deletions lib/src/model/extension.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -82,7 +81,7 @@ class Extension extends Container {

@override
late final List<Method> 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
Expand Down Expand Up @@ -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<TypeParameter> 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);

Expand Down
2 changes: 1 addition & 1 deletion lib/src/model/extension_type.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
2 changes: 1 addition & 1 deletion lib/src/model/getter_setter_combo.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down
26 changes: 13 additions & 13 deletions lib/src/model/inheriting_container.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import 'package:meta/meta.dart';
/// [hasModifiers] override is not necessary for this mixin.
mixin Constructable implements InheritingContainer {
late final List<Constructor> constructors = element2.constructors2
.map((e) => getModelFor2(e, library) as Constructor)
.map((e) => getModelFor(e, library) as Constructor)
.toList(growable: false);

@override
Expand Down Expand Up @@ -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,
];
}

Expand All @@ -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,
];
}

Expand Down Expand Up @@ -254,14 +254,14 @@ abstract class InheritingContainer extends Container {

@override
late final List<Method> declaredMethods = element2.methods2
.map((e) => getModelFor2(e, library) as Method)
.map((e) => getModelFor(e, library) as Method)
.toList(growable: false);

@override
late final List<TypeParameter> 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);

Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -347,7 +347,7 @@ abstract class InheritingContainer extends Container {
List<Field> get _extensionInstanceFields => [
for (var extension in potentiallyApplicableExtensionsSorted)
for (var field in extension.instanceFields)
getModelForPropertyInducingElement2(
getModelForPropertyInducingElement(
field.element2,
library,
enclosingContainer: extension,
Expand All @@ -371,7 +371,7 @@ abstract class InheritingContainer extends Container {
List<Method> 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,
];

Expand All @@ -388,7 +388,7 @@ abstract class InheritingContainer extends Container {
List<Operator> 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,
];

Expand Down Expand Up @@ -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;
}

Expand Down Expand Up @@ -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;
}
}
Expand Down
Loading

0 comments on commit b8c3f02

Please sign in to comment.