Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 51 additions & 11 deletions lib/src/generator/templates.runtime_renderers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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<CT_> self, List<String> remainingNames) =>
self.renderSimpleVariable(c, remainingNames, 'Element'),
self.renderSimpleVariable(
c,
remainingNames,
'Element2',
),

isNullValue: (CT_ c) => false,

Expand All @@ -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']!,
);
},
),
Expand Down Expand Up @@ -14140,7 +14144,7 @@ class _Renderer_LibraryContainer extends RendererBase<LibraryContainer> {
}
}

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();
Expand Down Expand Up @@ -14386,7 +14390,7 @@ class _Renderer_LibraryTemplateData extends RendererBase<LibraryTemplateData> {
}
}

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();
Expand Down Expand Up @@ -14989,6 +14993,34 @@ class _Renderer_Method extends RendererBase<Method> {
);
},
),
'element2': Property(
getValue: (CT_ c) => c.element2,
renderVariable:
(CT_ c, Property<CT_> self, List<String> remainingNames) =>
self.renderSimpleVariable(
c,
remainingNames,
'MethodElement2',
),

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['MethodElement2']!,
);
},
),
'enclosingElement': Property(
getValue: (CT_ c) => c.enclosingElement,
renderVariable: (
Expand Down Expand Up @@ -19986,7 +20018,7 @@ class _Renderer_Package extends RendererBase<Package> {
}
}

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();
Expand Down Expand Up @@ -20343,13 +20375,13 @@ class _Renderer_PackageTemplateData extends RendererBase<PackageTemplateData> {
}
}

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();
Expand Down Expand Up @@ -25876,7 +25908,7 @@ const _invisibleGetters = {
'documentationComment',
'documentationFrom',
'documentationLocal',
'element',
'element2',
'elementDocumentation',
'hasDocumentationComment',
'hasNodoc',
Expand Down Expand Up @@ -26319,6 +26351,14 @@ const _invisibleGetters = {
'hashCode',
'runtimeType',
},
'MethodElement2': {
'baseElement',
'firstFragment',
'fragments',
'hashCode',
'isOperator',
'runtimeType',
},
'MixinElement': {
'augmentation',
'augmentationTarget',
Expand Down
19 changes: 11 additions & 8 deletions lib/src/model/documentation_comment.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -43,7 +41,7 @@ final _htmlInjectRegExp = RegExp(r'<dartdoc-html>([a-f0-9]+)</dartdoc-html>');
mixin DocumentationComment
implements Documentable, Warnable, Locatable, SourceCode {
@override
Element get element;
Element2 get element2;

List<DocumentationComment>? _documentationFrom;

Expand All @@ -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];
}
Expand All @@ -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
Expand All @@ -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) {
Expand Down
49 changes: 27 additions & 22 deletions lib/src/model/method.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -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;

Expand All @@ -26,20 +31,20 @@ class Method extends ModelElement
@override
late final List<TypeParameter> 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, {
Expand All @@ -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);
}

Expand All @@ -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;
Expand All @@ -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();
}

Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down
12 changes: 6 additions & 6 deletions lib/src/model/model_element.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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?),
Expand Down
2 changes: 1 addition & 1 deletion test/end2end/model_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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);
});
Expand Down
Loading