diff --git a/lib/src/generator/templates.runtime_renderers.dart b/lib/src/generator/templates.runtime_renderers.dart index 943c193dd3..97c5089aad 100644 --- a/lib/src/generator/templates.runtime_renderers.dart +++ b/lib/src/generator/templates.runtime_renderers.dart @@ -6400,11 +6400,15 @@ class _Renderer_DocumentationComment ); }, ), - '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, 'Element'), + self.renderSimpleVariable( + c, + remainingNames, + 'Element2', + ), isNullValue: (CT_ c) => false, @@ -6415,12 +6419,12 @@ class _Renderer_DocumentationComment StringSink sink, ) { renderSimple( - c.element, + c.element2, ast, r.template, sink, parent: r, - getters: _invisibleGetters['Element']!, + getters: _invisibleGetters['Element2']!, ); }, ), @@ -14140,7 +14144,7 @@ class _Renderer_LibraryContainer extends RendererBase { } } -String renderLibrary(LibraryTemplateData context, Template template) { +String renderLibraryRedirect(LibraryTemplateData context, Template template) { var buffer = StringBuffer(); _render_LibraryTemplateData(context, template.ast, template, buffer); return buffer.toString(); @@ -14386,7 +14390,7 @@ class _Renderer_LibraryTemplateData extends RendererBase { } } -String renderLibraryRedirect(LibraryTemplateData context, Template template) { +String renderLibrary(LibraryTemplateData context, Template template) { var buffer = StringBuffer(); _render_LibraryTemplateData(context, template.ast, template, buffer); return buffer.toString(); @@ -14989,6 +14993,34 @@ class _Renderer_Method extends RendererBase { ); }, ), + 'element2': Property( + getValue: (CT_ c) => c.element2, + renderVariable: + (CT_ c, Property self, List remainingNames) => + self.renderSimpleVariable( + c, + remainingNames, + 'MethodElement2', + ), + + isNullValue: (CT_ c) => false, + + renderValue: ( + CT_ c, + RendererBase r, + List ast, + StringSink sink, + ) { + renderSimple( + c.element2, + ast, + r.template, + sink, + parent: r, + getters: _invisibleGetters['MethodElement2']!, + ); + }, + ), 'enclosingElement': Property( getValue: (CT_ c) => c.enclosingElement, renderVariable: ( @@ -19986,7 +20018,7 @@ class _Renderer_Package 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(); @@ -20343,13 +20375,13 @@ class _Renderer_PackageTemplateData extends RendererBase { } } -String renderSearchPage(PackageTemplateData context, Template template) { +String renderIndex(PackageTemplateData context, Template template) { var buffer = StringBuffer(); _render_PackageTemplateData(context, template.ast, template, buffer); return buffer.toString(); } -String renderIndex(PackageTemplateData context, Template template) { +String renderError(PackageTemplateData context, Template template) { var buffer = StringBuffer(); _render_PackageTemplateData(context, template.ast, template, buffer); return buffer.toString(); @@ -25876,7 +25908,7 @@ const _invisibleGetters = { 'documentationComment', 'documentationFrom', 'documentationLocal', - 'element', + 'element2', 'elementDocumentation', 'hasDocumentationComment', 'hasNodoc', @@ -26319,6 +26351,14 @@ const _invisibleGetters = { 'hashCode', 'runtimeType', }, + 'MethodElement2': { + 'baseElement', + 'firstFragment', + 'fragments', + 'hashCode', + 'isOperator', + 'runtimeType', + }, 'MixinElement': { 'augmentation', 'augmentationTarget', diff --git a/lib/src/model/documentation_comment.dart b/lib/src/model/documentation_comment.dart index a486cf06d4..08d44c29d3 100644 --- a/lib/src/model/documentation_comment.dart +++ b/lib/src/model/documentation_comment.dart @@ -2,12 +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 - /// @docImport 'package:dartdoc/src/model/package_graph.dart'; library; -import 'package:analyzer/dart/element/element.dart'; +import 'package:analyzer/dart/element/element2.dart'; import 'package:args/args.dart'; import 'package:crypto/crypto.dart' as crypto; import 'package:dartdoc/src/model/documentable.dart'; @@ -43,7 +41,7 @@ final _htmlInjectRegExp = RegExp(r'([a-f0-9]+)'); mixin DocumentationComment implements Documentable, Warnable, Locatable, SourceCode { @override - Element get element; + Element2 get element2; List? _documentationFrom; @@ -57,7 +55,7 @@ mixin DocumentationComment if (!hasDocumentationComment && self.overriddenElement != null) { return self.overriddenElement!.documentationFrom; } else if (self.isInherited) { - return packageGraph.getModelForElement(element).documentationFrom; + return packageGraph.getModelForElement2(element2).documentationFrom; } else { return [this]; } @@ -72,11 +70,15 @@ mixin DocumentationComment /// The rawest form of the documentation comment, including comment delimiters /// like `///`, `//`, `/*`, `*/`. - String get documentationComment => element.documentationComment ?? ''; + String get documentationComment => (element2 is Annotatable) + ? (element2 as Annotatable).documentationComment ?? '' + : ''; /// Whether `this` has a synthetic/inherited or local documentation comment, /// and false otherwise. - bool get hasDocumentationComment => element.documentationComment != null; + bool get hasDocumentationComment => + element2 is Annotatable && + (element2 as Annotatable).documentationComment != null; /// Whether the raw documentation comment is considered to be 'nodoc', an /// attribute indicating that any documentation should not be included in @@ -88,7 +90,8 @@ mixin DocumentationComment /// * the element has no documentation comment, /// * the documentation comment contains the `@nodoc` dartdoc directive. late final bool hasNodoc = () { - if (packageGraph.configSetsNodocFor(element.source!.fullName)) { + if (packageGraph + .configSetsNodocFor(element2.library2!.firstFragment.source.fullName)) { return true; } if (!hasDocumentationComment) { diff --git a/lib/src/model/method.dart b/lib/src/model/method.dart index 2efddfc692..7322b62853 100644 --- a/lib/src/model/method.dart +++ b/lib/src/model/method.dart @@ -2,12 +2,13 @@ // 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'; import 'package:analyzer/source/line_info.dart'; // ignore: implementation_imports import 'package:analyzer/src/dart/element/member.dart' show ExecutableMember; +// ignore: implementation_imports +import 'package:analyzer/src/utilities/extensions/element.dart'; import 'package:dartdoc/src/element_type.dart'; import 'package:dartdoc/src/model/attribute.dart'; import 'package:dartdoc/src/model/comment_referable.dart'; @@ -17,7 +18,11 @@ import 'package:dartdoc/src/model/model.dart'; class Method extends ModelElement with ContainerMember, Inheritable, TypeParameters { @override - final MethodElement element; + // ignore: analyzer_use_new_elements + MethodElement get element => element2.asElement; + + @override + final MethodElement2 element2; Container? _enclosingContainer; @@ -26,20 +31,20 @@ class Method extends ModelElement @override late final List typeParameters; - Method(this.element, super.library, super.packageGraph) + Method(this.element2, super.library, super.packageGraph) : _isInherited = false { _calcTypeParameters(); } - Method.inherited( - this.element, this._enclosingContainer, super.library, super.packageGraph, + Method.inherited(this.element2, this._enclosingContainer, super.library, + super.packageGraph, {ExecutableMember? super.originalMember}) : _isInherited = true { _calcTypeParameters(); } Method.providedByExtension( - this.element, + this.element2, this._enclosingContainer, super.library, super.packageGraph, { @@ -49,8 +54,8 @@ class Method extends ModelElement } void _calcTypeParameters() { - typeParameters = element.typeParameters.map((f) { - return getModelFor(f, library) as TypeParameter; + typeParameters = element2.typeParameters2.map((f) { + return getModelFor2(f, library) as TypeParameter; }).toList(growable: false); } @@ -69,7 +74,7 @@ class Method extends ModelElement @override Container get enclosingElement => _enclosingContainer ??= - getModelFor(element.enclosingElement3, library) as Container; + getModelFor2(element2.enclosingElement2!, library) as Container; @override String get aboveSidebarPath => enclosingElement.sidebarPath; @@ -79,8 +84,8 @@ class Method extends ModelElement String get fullkind { // A method cannot be abstract and static at the same time. - if (element.isAbstract) return 'abstract $kind'; - if (element.isStatic) return 'static $kind'; + if (element2.isAbstract) return 'abstract $kind'; + if (element2.isStatic) return 'static $kind'; return kind.toString(); } @@ -97,7 +102,7 @@ class Method extends ModelElement bool get isOperator => false; bool get isProvidedByExtension => - element.enclosingElement3 is ExtensionElement; + element2.enclosingElement2 is ExtensionElement2; /// The [enclosingElement], which is expected to be an [Extension]. Extension get enclosingExtension => enclosingElement as Extension; @@ -108,7 +113,7 @@ class Method extends ModelElement if (isInherited) Attribute.inherited, }; - bool get isStatic => element.isStatic; + bool get isStatic => element2.isStatic; @override Kind get kind => Kind.method; @@ -118,24 +123,24 @@ class Method extends ModelElement super.originalMember as ExecutableMember?; late final Callable modelType = - getTypeFor((originalMember ?? element).type, library) as Callable; + getTypeFor((originalMember ?? element2).type, library) as Callable; @override Method? get overriddenElement { if (_enclosingContainer is Extension || - element.enclosingElement3 is ExtensionElement) { + element2.enclosingElement2 is ExtensionElement2) { return null; } - var parent = element.enclosingElement3 as InterfaceElement; + var parent = element2.enclosingElement2 as InterfaceElement2; for (var t in parent.allSupertypes) { - Element? e = t.getMethod(element.name); + Element2? e = t.getMethod2(element2.name3 ?? ''); if (e != null) { assert( - e.enclosingElement3 is InterfaceElement, - 'Expected "${e.enclosingElement3?.name}" to be a InterfaceElement, ' - 'but was ${e.enclosingElement3.runtimeType}', + e.enclosingElement2 is InterfaceElement2, + 'Expected "${e.enclosingElement2?.name3}" to be a InterfaceElement, ' + 'but was ${e.enclosingElement2.runtimeType}', ); - return getModelForElement(e) as Method?; + return getModelForElement2(e) as Method?; } } return null; diff --git a/lib/src/model/model_element.dart b/lib/src/model/model_element.dart index 909c079e8d..4067917c02 100644 --- a/lib/src/model/model_element.dart +++ b/lib/src/model/model_element.dart @@ -317,22 +317,22 @@ abstract class ModelElement ClassTypedef(e, library, packageGraph), TypeAliasElement() => GeneralizedTypedef(e, library, packageGraph), MethodElement(isOperator: true) when enclosingContainer == null => - Operator(e, library, packageGraph), + Operator(e.asElement2, library, packageGraph), MethodElement(isOperator: true) when e.enclosingElement3 is ExtensionElement => Operator.providedByExtension( - e, enclosingContainer, library, packageGraph), + e.asElement2, enclosingContainer, library, packageGraph), MethodElement(isOperator: true) => Operator.inherited( - e, enclosingContainer, library, packageGraph, + e.asElement2, enclosingContainer, library, packageGraph, originalMember: originalMember), MethodElement(isOperator: false) when enclosingContainer == null => - Method(e, library, packageGraph), + Method(e.asElement2, library, packageGraph), MethodElement(isOperator: false) when e.enclosingElement3 is ExtensionElement => Method.providedByExtension( - e, enclosingContainer, library, packageGraph), + e.asElement2, enclosingContainer, library, packageGraph), MethodElement(isOperator: false) => Method.inherited( - e, enclosingContainer, library, packageGraph, + e.asElement2, enclosingContainer, library, packageGraph, originalMember: originalMember as ExecutableMember?), ParameterElement() => Parameter(e, library, packageGraph, originalMember: originalMember as ParameterMember?), diff --git a/test/end2end/model_test.dart b/test/end2end/model_test.dart index c708f514b8..b8745b7f5c 100644 --- a/test/end2end/model_test.dart +++ b/test/end2end/model_test.dart @@ -3572,7 +3572,7 @@ String? topLevelFunction(int param1, bool param2, Cool coolBeans, test('inheritance of docs from SDK works for getter/setter combos', () { expect( ExtraSpecialListLength - .getter!.documentationFrom.first.element.library!.name, + .getter!.documentationFrom.first.element!.library!.name, equals('dart.core')); expect(ExtraSpecialListLength.oneLineDoc == '', isFalse); });