From f0d2276e57c96717e625964ea0385a30f2237e62 Mon Sep 17 00:00:00 2001 From: Keerti Parthasarathy Date: Fri, 31 Jan 2025 10:10:51 -0800 Subject: [PATCH] Elements. Migrate to element2 (#3978) --- .../templates.runtime_renderers.dart | 92 +++++++++++-------- lib/src/model/container_member.dart | 4 +- lib/src/model/dynamic.dart | 15 ++- lib/src/model/locatable.dart | 6 +- lib/src/model/model_element.dart | 6 +- lib/src/model/model_function.dart | 37 ++++---- lib/src/model/source_code_mixin.dart | 5 - 7 files changed, 89 insertions(+), 76 deletions(-) diff --git a/lib/src/generator/templates.runtime_renderers.dart b/lib/src/generator/templates.runtime_renderers.dart index f45fdfd05b..bff56ab78d 100644 --- a/lib/src/generator/templates.runtime_renderers.dart +++ b/lib/src/generator/templates.runtime_renderers.dart @@ -17944,14 +17944,14 @@ class _Renderer_ModelFunction extends RendererBase { () => { ..._Renderer_ModelFunctionTyped.propertyMap(), ..._Renderer_Categorization.propertyMap(), - 'element': Property( - getValue: (CT_ c) => c.element, + 'element2': Property( + getValue: (CT_ c) => c.element2, renderVariable: (CT_ c, Property self, List remainingNames) => self.renderSimpleVariable( c, remainingNames, - 'FunctionElement', + 'TopLevelFunctionElement', ), isNullValue: (CT_ c) => false, @@ -17963,12 +17963,12 @@ class _Renderer_ModelFunction extends RendererBase { StringSink sink, ) { renderSimple( - c.element, + c.element2, ast, r.template, sink, parent: r, - getters: _invisibleGetters['FunctionElement']!, + getters: _invisibleGetters['TopLevelFunctionElement']!, ); }, ), @@ -18165,6 +18165,34 @@ class _Renderer_ModelFunctionTyped extends RendererBase { ); }, ), + 'element2': Property( + getValue: (CT_ c) => c.element2, + renderVariable: + (CT_ c, Property self, List remainingNames) => + self.renderSimpleVariable( + c, + remainingNames, + 'FunctionTypedElement2', + ), + + isNullValue: (CT_ c) => false, + + renderValue: ( + CT_ c, + RendererBase r, + List ast, + StringSink sink, + ) { + renderSimple( + c.element2, + ast, + r.template, + sink, + parent: r, + getters: _invisibleGetters['FunctionTypedElement2']!, + ); + }, + ), 'enclosingElement': Property( getValue: (CT_ c) => c.enclosingElement, renderVariable: ( @@ -20571,13 +20599,13 @@ class _Renderer_PackageTemplateData extends RendererBase { } } -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(); @@ -21656,30 +21684,6 @@ class _Renderer_SourceCode extends RendererBase { ); }, ), - 'element': Property( - getValue: (CT_ c) => c.element, - renderVariable: - (CT_ c, Property self, List remainingNames) => - self.renderSimpleVariable(c, remainingNames, 'Element'), - - isNullValue: (CT_ c) => c.element == null, - - renderValue: ( - CT_ c, - RendererBase r, - List ast, - StringSink sink, - ) { - renderSimple( - c.element, - ast, - r.template, - sink, - parent: r, - getters: _invisibleGetters['Element']!, - ); - }, - ), 'hasSourceCode': Property( getValue: (CT_ c) => c.hasSourceCode, renderVariable: @@ -26407,14 +26411,6 @@ const _invisibleGetters = { 'runtimeType', 'typeParameters2', }, - 'FunctionElement': { - 'augmentation', - 'augmentationTarget', - 'hashCode', - 'isDartCoreIdentical', - 'isEntryPoint', - 'runtimeType', - }, 'FunctionType': { 'element', 'formalParameters', @@ -26438,6 +26434,15 @@ const _invisibleGetters = { 'runtimeType', 'type', }, + 'FunctionTypedElement2': { + 'firstFragment', + 'formalParameters', + 'fragments', + 'hashCode', + 'returnType', + 'runtimeType', + 'type', + }, 'GetterSetterCombo': { 'allAccessors', 'annotations', @@ -26875,6 +26880,15 @@ const _invisibleGetters = { 'toolVersion', 'useBaseHref', }, + 'TopLevelFunctionElement': { + 'baseElement', + 'firstFragment', + 'fragments', + 'hashCode', + 'isDartCoreIdentical', + 'isEntryPoint', + 'runtimeType', + }, 'TopLevelVariableElement': { 'augmentation', 'augmentationTarget', diff --git a/lib/src/model/container_member.dart b/lib/src/model/container_member.dart index 069df997d5..08f39fa736 100644 --- a/lib/src/model/container_member.dart +++ b/lib/src/model/container_member.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 'package:dartdoc/src/model/attribute.dart'; import 'package:dartdoc/src/model/model.dart'; import 'package:meta/meta.dart'; @@ -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 get attributes => { diff --git a/lib/src/model/dynamic.dart b/lib/src/model/dynamic.dart index 0036f8b3fd..44637c02f3 100644 --- a/lib/src/model/dynamic.dart +++ b/lib/src/model/dynamic.dart @@ -2,9 +2,10 @@ // 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'; @@ -12,13 +13,17 @@ 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. diff --git a/lib/src/model/locatable.dart b/lib/src/model/locatable.dart index e0912dbbe9..bc9b529d5d 100644 --- a/lib/src/model/locatable.dart +++ b/lib/src/model/locatable.dart @@ -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. @@ -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. diff --git a/lib/src/model/model_element.dart b/lib/src/model/model_element.dart index 4fb49a2c79..8f08c9e232 100644 --- a/lib/src/model/model_element.dart +++ b/lib/src/model/model_element.dart @@ -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] = @@ -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() diff --git a/lib/src/model/model_function.dart b/lib/src/model/model_function.dart index cc5556c157..65fbce087e 100644 --- a/lib/src/model/model_function.dart +++ b/lib/src/model/model_function.dart @@ -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 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; @@ -83,7 +88,7 @@ class ModelFunctionTyped extends ModelElement with TypeParameters { @override Iterable 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; diff --git a/lib/src/model/source_code_mixin.dart b/lib/src/model/source_code_mixin.dart index 30d99571af..7159859021 100644 --- a/lib/src/model/source_code_mixin.dart +++ b/lib/src/model/source_code_mixin.dart @@ -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'; @@ -13,8 +10,6 @@ mixin SourceCode implements Documentable { CharacterLocation? get characterLocation; - Element? get element; - bool get hasSourceCode => config.includeSource && sourceCode.isNotEmpty; Library? get library;