Skip to content

Commit

Permalink
Elements. Migrate to element2 (#3978)
Browse files Browse the repository at this point in the history
  • Loading branch information
keertip authored Jan 31, 2025
1 parent af0c885 commit f0d2276
Show file tree
Hide file tree
Showing 7 changed files with 89 additions and 76 deletions.
92 changes: 53 additions & 39 deletions lib/src/generator/templates.runtime_renderers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17944,14 +17944,14 @@ class _Renderer_ModelFunction extends RendererBase<ModelFunction> {
() => {
..._Renderer_ModelFunctionTyped.propertyMap<CT_>(),
..._Renderer_Categorization.propertyMap<CT_>(),
'element': Property(
getValue: (CT_ c) => c.element,
'element2': Property(
getValue: (CT_ c) => c.element2,
renderVariable:
(CT_ c, Property<CT_> self, List<String> remainingNames) =>
self.renderSimpleVariable(
c,
remainingNames,
'FunctionElement',
'TopLevelFunctionElement',
),

isNullValue: (CT_ c) => false,
Expand All @@ -17963,12 +17963,12 @@ class _Renderer_ModelFunction extends RendererBase<ModelFunction> {
StringSink sink,
) {
renderSimple(
c.element,
c.element2,
ast,
r.template,
sink,
parent: r,
getters: _invisibleGetters['FunctionElement']!,
getters: _invisibleGetters['TopLevelFunctionElement']!,
);
},
),
Expand Down Expand Up @@ -18165,6 +18165,34 @@ class _Renderer_ModelFunctionTyped extends RendererBase<ModelFunctionTyped> {
);
},
),
'element2': Property(
getValue: (CT_ c) => c.element2,
renderVariable:
(CT_ c, Property<CT_> self, List<String> remainingNames) =>
self.renderSimpleVariable(
c,
remainingNames,
'FunctionTypedElement2',
),

isNullValue: (CT_ c) => false,

renderValue: (
CT_ c,
RendererBase<CT_> r,
List<MustachioNode> ast,
StringSink sink,
) {
renderSimple(
c.element2,
ast,
r.template,
sink,
parent: r,
getters: _invisibleGetters['FunctionTypedElement2']!,
);
},
),
'enclosingElement': Property(
getValue: (CT_ c) => c.enclosingElement,
renderVariable: (
Expand Down Expand Up @@ -20571,13 +20599,13 @@ class _Renderer_PackageTemplateData extends RendererBase<PackageTemplateData> {
}
}

String renderError(PackageTemplateData context, Template template) {
String renderSearchPage(PackageTemplateData context, Template template) {
var buffer = StringBuffer();
_render_PackageTemplateData(context, template.ast, template, buffer);
return buffer.toString();
}

String renderSearchPage(PackageTemplateData context, Template template) {
String renderError(PackageTemplateData context, Template template) {
var buffer = StringBuffer();
_render_PackageTemplateData(context, template.ast, template, buffer);
return buffer.toString();
Expand Down Expand Up @@ -21656,30 +21684,6 @@ class _Renderer_SourceCode extends RendererBase<SourceCode> {
);
},
),
'element': Property(
getValue: (CT_ c) => c.element,
renderVariable:
(CT_ c, Property<CT_> self, List<String> remainingNames) =>
self.renderSimpleVariable(c, remainingNames, 'Element'),

isNullValue: (CT_ c) => c.element == null,

renderValue: (
CT_ c,
RendererBase<CT_> r,
List<MustachioNode> ast,
StringSink sink,
) {
renderSimple(
c.element,
ast,
r.template,
sink,
parent: r,
getters: _invisibleGetters['Element']!,
);
},
),
'hasSourceCode': Property(
getValue: (CT_ c) => c.hasSourceCode,
renderVariable:
Expand Down Expand Up @@ -26407,14 +26411,6 @@ const _invisibleGetters = {
'runtimeType',
'typeParameters2',
},
'FunctionElement': {
'augmentation',
'augmentationTarget',
'hashCode',
'isDartCoreIdentical',
'isEntryPoint',
'runtimeType',
},
'FunctionType': {
'element',
'formalParameters',
Expand All @@ -26438,6 +26434,15 @@ const _invisibleGetters = {
'runtimeType',
'type',
},
'FunctionTypedElement2': {
'firstFragment',
'formalParameters',
'fragments',
'hashCode',
'returnType',
'runtimeType',
'type',
},
'GetterSetterCombo': {
'allAccessors',
'annotations',
Expand Down Expand Up @@ -26875,6 +26880,15 @@ const _invisibleGetters = {
'toolVersion',
'useBaseHref',
},
'TopLevelFunctionElement': {
'baseElement',
'firstFragment',
'fragments',
'hashCode',
'isDartCoreIdentical',
'isEntryPoint',
'runtimeType',
},
'TopLevelVariableElement': {
'augmentation',
'augmentationTarget',
Expand Down
4 changes: 1 addition & 3 deletions lib/src/model/container_member.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 'package:dartdoc/src/model/attribute.dart';
import 'package:dartdoc/src/model/model.dart';
import 'package:meta/meta.dart';
Expand Down Expand Up @@ -31,7 +29,7 @@ mixin ContainerMember on ModelElement {
@protected
@visibleForTesting
late final Container definingEnclosingContainer =
getModelForElement(element.enclosingElement3!) as Container;
getModelForElement2(element2.enclosingElement2!) as Container;

@override
Set<Attribute> get attributes => {
Expand Down
15 changes: 10 additions & 5 deletions lib/src/model/dynamic.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,28 @@
// 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';
// ignore: implementation_imports
import 'package:analyzer/src/utilities/extensions/element.dart';
import 'package:dartdoc/src/element_type.dart';
import 'package:dartdoc/src/model/comment_referable.dart';
import 'package:dartdoc/src/model/kind.dart';
import 'package:dartdoc/src/model/model.dart';

class Dynamic extends ModelElement with HasNoPage {
@override
final Element element;
// ignore: analyzer_use_new_elements
Element get element => element2.asElement!;

@override
final Element2 element2;

Dynamic(this.element, PackageGraph packageGraph)
Dynamic(this.element2, PackageGraph packageGraph)
: super(Library.sentinel, packageGraph);

UndefinedElementType get modelType =>
throw UnimplementedError('(${element.runtimeType}) $element');
throw UnimplementedError('(${element2.runtimeType}) $element2');

/// `dynamic` is not a real object, and so we can't document it, so there
/// can be nothing canonical for it.
Expand Down
6 changes: 1 addition & 5 deletions lib/src/model/locatable.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +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/element.dart' show Element;
import 'package:dartdoc/src/model/model.dart';

/// Something that can be located for warning purposes.
Expand All @@ -26,8 +23,7 @@ mixin Locatable {

String? get href;

/// A string indicating the URI of this Locatable, usually derived from
/// [Element.location].
/// A string indicating the URI of this Locatable.
String get location;

/// Whether this is the "canonical" copy of an element.
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 @@ -248,7 +248,7 @@ abstract class ModelElement

if (e.kind == ElementKind.DYNAMIC) {
return packageGraph.allConstructedModelElements[key] =
Dynamic(e, packageGraph);
Dynamic(e.asElement2!, packageGraph);
}
if (e.kind == ElementKind.NEVER) {
return packageGraph.allConstructedModelElements[key] =
Expand Down Expand Up @@ -312,10 +312,10 @@ abstract class ModelElement
ClassElement() => Class(e, library, packageGraph),
ExtensionElement() => Extension(e.asElement2, library, packageGraph),
ExtensionTypeElement() => ExtensionType(e, library, packageGraph),
FunctionElement() => ModelFunction(e, library, packageGraph),
FunctionElement() => ModelFunction(e.asElement2 as TopLevelFunctionElement, library, packageGraph),
ConstructorElement() => Constructor(e, library, packageGraph),
GenericFunctionTypeElement() =>
ModelFunctionTypedef(e, library, packageGraph),
ModelFunctionTypedef(e.asElement2 as FunctionTypedElement2, library, packageGraph),
TypeAliasElement(aliasedType: FunctionType()) =>
FunctionTypedef(e.asElement2, library, packageGraph),
TypeAliasElement()
Expand Down
37 changes: 21 additions & 16 deletions lib/src/model/model_function.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,50 +2,55 @@
// 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';
// ignore: implementation_imports
import 'package:analyzer/src/utilities/extensions/element.dart';
import 'package:dartdoc/src/element_type.dart';
import 'package:dartdoc/src/model/comment_referable.dart';
import 'package:dartdoc/src/model/kind.dart';
import 'package:dartdoc/src/model/model.dart';

/// A [ModelElement] for a [FunctionElement] that isn't part of a type definition.
/// A [ModelElement] for a [TopLevelFunctionElement] that isn't part of a type definition.
class ModelFunction extends ModelFunctionTyped with Categorization {
ModelFunction(
FunctionElement super.element, super.library, super.packageGraph);
TopLevelFunctionElement super.element2, super.library, super.packageGraph);

bool get isStatic => element.isStatic;
bool get isStatic => element2.isStatic;

@override
String get name => element.name;
String get name => element2.name3 ?? '';

@override
FunctionElement get element => super.element as FunctionElement;
TopLevelFunctionElement get element2 => super.element2 as TopLevelFunctionElement;

bool get isAsynchronous => element.isAsynchronous;
bool get isAsynchronous => element2.firstFragment.isAsynchronous;
}

/// A [ModelElement] for a [FunctionTypedElement] that is part of an
/// A [ModelElement] for a [FunctionTypedElement2] that is part of an
/// explicit typedef.
class ModelFunctionTypedef extends ModelFunctionTyped {
ModelFunctionTypedef(super.element, super.library, super.packageGraph);
ModelFunctionTypedef(super.element2, super.library, super.packageGraph);

@override
String get name => element.enclosingElement3!.name!;
String get name => element2.enclosingElement2!.name3!;
}

class ModelFunctionTyped extends ModelElement with TypeParameters {
@override
final FunctionTypedElement element;
// ignore: analyzer_use_new_elements
FunctionTypedElement get element => element2.asElement as FunctionTypedElement;

@override
final FunctionTypedElement2 element2;

@override
late final List<TypeParameter> typeParameters = [
for (var p in element.typeParameters)
getModelFor(p, library) as TypeParameter,
for (var p in element2.typeParameters2)
getModelFor2(p, library) as TypeParameter,
];

ModelFunctionTyped(this.element, super.library, super.packageGraph);
ModelFunctionTyped(this.element2, super.library, super.packageGraph);

@override
Library get enclosingElement => library;
Expand Down Expand Up @@ -83,7 +88,7 @@ class ModelFunctionTyped extends ModelElement with TypeParameters {
@override
Iterable<CommentReferable> get referenceParents => [library];

late final Callable modelType = getTypeFor(element.type, library) as Callable;
late final Callable modelType = getTypeFor(element2.type, library) as Callable;

// For use in templates.
bool get isProvidedByExtension => false;
Expand Down
5 changes: 0 additions & 5 deletions lib/src/model/source_code_mixin.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +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/element.dart';
import 'package:analyzer/source/line_info.dart';
import 'package:dartdoc/src/model/model.dart';

Expand All @@ -13,8 +10,6 @@ mixin SourceCode implements Documentable {

CharacterLocation? get characterLocation;

Element? get element;

bool get hasSourceCode => config.includeSource && sourceCode.isNotEmpty;

Library? get library;
Expand Down

0 comments on commit f0d2276

Please sign in to comment.