Skip to content

Commit 6e55bbe

Browse files
authored
Elements. Migrate to Element2 (#3975)
* Elements. Migrate to Element2 * format
1 parent 98a199f commit 6e55bbe

File tree

5 files changed

+96
-48
lines changed

5 files changed

+96
-48
lines changed

lib/src/generator/templates.runtime_renderers.dart

Lines changed: 51 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6400,11 +6400,15 @@ class _Renderer_DocumentationComment
64006400
);
64016401
},
64026402
),
6403-
'element': Property(
6404-
getValue: (CT_ c) => c.element,
6403+
'element2': Property(
6404+
getValue: (CT_ c) => c.element2,
64056405
renderVariable:
64066406
(CT_ c, Property<CT_> self, List<String> remainingNames) =>
6407-
self.renderSimpleVariable(c, remainingNames, 'Element'),
6407+
self.renderSimpleVariable(
6408+
c,
6409+
remainingNames,
6410+
'Element2',
6411+
),
64086412

64096413
isNullValue: (CT_ c) => false,
64106414

@@ -6415,12 +6419,12 @@ class _Renderer_DocumentationComment
64156419
StringSink sink,
64166420
) {
64176421
renderSimple(
6418-
c.element,
6422+
c.element2,
64196423
ast,
64206424
r.template,
64216425
sink,
64226426
parent: r,
6423-
getters: _invisibleGetters['Element']!,
6427+
getters: _invisibleGetters['Element2']!,
64246428
);
64256429
},
64266430
),
@@ -14140,7 +14144,7 @@ class _Renderer_LibraryContainer extends RendererBase<LibraryContainer> {
1414014144
}
1414114145
}
1414214146

14143-
String renderLibrary(LibraryTemplateData context, Template template) {
14147+
String renderLibraryRedirect(LibraryTemplateData context, Template template) {
1414414148
var buffer = StringBuffer();
1414514149
_render_LibraryTemplateData(context, template.ast, template, buffer);
1414614150
return buffer.toString();
@@ -14386,7 +14390,7 @@ class _Renderer_LibraryTemplateData extends RendererBase<LibraryTemplateData> {
1438614390
}
1438714391
}
1438814392

14389-
String renderLibraryRedirect(LibraryTemplateData context, Template template) {
14393+
String renderLibrary(LibraryTemplateData context, Template template) {
1439014394
var buffer = StringBuffer();
1439114395
_render_LibraryTemplateData(context, template.ast, template, buffer);
1439214396
return buffer.toString();
@@ -14989,6 +14993,34 @@ class _Renderer_Method extends RendererBase<Method> {
1498914993
);
1499014994
},
1499114995
),
14996+
'element2': Property(
14997+
getValue: (CT_ c) => c.element2,
14998+
renderVariable:
14999+
(CT_ c, Property<CT_> self, List<String> remainingNames) =>
15000+
self.renderSimpleVariable(
15001+
c,
15002+
remainingNames,
15003+
'MethodElement2',
15004+
),
15005+
15006+
isNullValue: (CT_ c) => false,
15007+
15008+
renderValue: (
15009+
CT_ c,
15010+
RendererBase<CT_> r,
15011+
List<MustachioNode> ast,
15012+
StringSink sink,
15013+
) {
15014+
renderSimple(
15015+
c.element2,
15016+
ast,
15017+
r.template,
15018+
sink,
15019+
parent: r,
15020+
getters: _invisibleGetters['MethodElement2']!,
15021+
);
15022+
},
15023+
),
1499215024
'enclosingElement': Property(
1499315025
getValue: (CT_ c) => c.enclosingElement,
1499415026
renderVariable: (
@@ -19986,7 +20018,7 @@ class _Renderer_Package extends RendererBase<Package> {
1998620018
}
1998720019
}
1998820020

19989-
String renderError(PackageTemplateData context, Template template) {
20021+
String renderSearchPage(PackageTemplateData context, Template template) {
1999020022
var buffer = StringBuffer();
1999120023
_render_PackageTemplateData(context, template.ast, template, buffer);
1999220024
return buffer.toString();
@@ -20343,13 +20375,13 @@ class _Renderer_PackageTemplateData extends RendererBase<PackageTemplateData> {
2034320375
}
2034420376
}
2034520377

20346-
String renderSearchPage(PackageTemplateData context, Template template) {
20378+
String renderIndex(PackageTemplateData context, Template template) {
2034720379
var buffer = StringBuffer();
2034820380
_render_PackageTemplateData(context, template.ast, template, buffer);
2034920381
return buffer.toString();
2035020382
}
2035120383

20352-
String renderIndex(PackageTemplateData context, Template template) {
20384+
String renderError(PackageTemplateData context, Template template) {
2035320385
var buffer = StringBuffer();
2035420386
_render_PackageTemplateData(context, template.ast, template, buffer);
2035520387
return buffer.toString();
@@ -25876,7 +25908,7 @@ const _invisibleGetters = {
2587625908
'documentationComment',
2587725909
'documentationFrom',
2587825910
'documentationLocal',
25879-
'element',
25911+
'element2',
2588025912
'elementDocumentation',
2588125913
'hasDocumentationComment',
2588225914
'hasNodoc',
@@ -26319,6 +26351,14 @@ const _invisibleGetters = {
2631926351
'hashCode',
2632026352
'runtimeType',
2632126353
},
26354+
'MethodElement2': {
26355+
'baseElement',
26356+
'firstFragment',
26357+
'fragments',
26358+
'hashCode',
26359+
'isOperator',
26360+
'runtimeType',
26361+
},
2632226362
'MixinElement': {
2632326363
'augmentation',
2632426364
'augmentationTarget',

lib/src/model/documentation_comment.dart

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
// ignore_for_file: analyzer_use_new_elements
6-
75
/// @docImport 'package:dartdoc/src/model/package_graph.dart';
86
library;
97

10-
import 'package:analyzer/dart/element/element.dart';
8+
import 'package:analyzer/dart/element/element2.dart';
119
import 'package:args/args.dart';
1210
import 'package:crypto/crypto.dart' as crypto;
1311
import 'package:dartdoc/src/model/documentable.dart';
@@ -43,7 +41,7 @@ final _htmlInjectRegExp = RegExp(r'<dartdoc-html>([a-f0-9]+)</dartdoc-html>');
4341
mixin DocumentationComment
4442
implements Documentable, Warnable, Locatable, SourceCode {
4543
@override
46-
Element get element;
44+
Element2 get element2;
4745

4846
List<DocumentationComment>? _documentationFrom;
4947

@@ -57,7 +55,7 @@ mixin DocumentationComment
5755
if (!hasDocumentationComment && self.overriddenElement != null) {
5856
return self.overriddenElement!.documentationFrom;
5957
} else if (self.isInherited) {
60-
return packageGraph.getModelForElement(element).documentationFrom;
58+
return packageGraph.getModelForElement2(element2).documentationFrom;
6159
} else {
6260
return [this];
6361
}
@@ -72,11 +70,15 @@ mixin DocumentationComment
7270

7371
/// The rawest form of the documentation comment, including comment delimiters
7472
/// like `///`, `//`, `/*`, `*/`.
75-
String get documentationComment => element.documentationComment ?? '';
73+
String get documentationComment => (element2 is Annotatable)
74+
? (element2 as Annotatable).documentationComment ?? ''
75+
: '';
7676

7777
/// Whether `this` has a synthetic/inherited or local documentation comment,
7878
/// and false otherwise.
79-
bool get hasDocumentationComment => element.documentationComment != null;
79+
bool get hasDocumentationComment =>
80+
element2 is Annotatable &&
81+
(element2 as Annotatable).documentationComment != null;
8082

8183
/// Whether the raw documentation comment is considered to be 'nodoc', an
8284
/// attribute indicating that any documentation should not be included in
@@ -88,7 +90,8 @@ mixin DocumentationComment
8890
/// * the element has no documentation comment,
8991
/// * the documentation comment contains the `@nodoc` dartdoc directive.
9092
late final bool hasNodoc = () {
91-
if (packageGraph.configSetsNodocFor(element.source!.fullName)) {
93+
if (packageGraph
94+
.configSetsNodocFor(element2.library2!.firstFragment.source.fullName)) {
9295
return true;
9396
}
9497
if (!hasDocumentationComment) {

lib/src/model/method.dart

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5-
// ignore_for_file: analyzer_use_new_elements
6-
75
import 'package:analyzer/dart/element/element.dart';
6+
import 'package:analyzer/dart/element/element2.dart';
87
import 'package:analyzer/source/line_info.dart';
98
// ignore: implementation_imports
109
import 'package:analyzer/src/dart/element/member.dart' show ExecutableMember;
10+
// ignore: implementation_imports
11+
import 'package:analyzer/src/utilities/extensions/element.dart';
1112
import 'package:dartdoc/src/element_type.dart';
1213
import 'package:dartdoc/src/model/attribute.dart';
1314
import 'package:dartdoc/src/model/comment_referable.dart';
@@ -17,7 +18,11 @@ import 'package:dartdoc/src/model/model.dart';
1718
class Method extends ModelElement
1819
with ContainerMember, Inheritable, TypeParameters {
1920
@override
20-
final MethodElement element;
21+
// ignore: analyzer_use_new_elements
22+
MethodElement get element => element2.asElement;
23+
24+
@override
25+
final MethodElement2 element2;
2126

2227
Container? _enclosingContainer;
2328

@@ -26,20 +31,20 @@ class Method extends ModelElement
2631
@override
2732
late final List<TypeParameter> typeParameters;
2833

29-
Method(this.element, super.library, super.packageGraph)
34+
Method(this.element2, super.library, super.packageGraph)
3035
: _isInherited = false {
3136
_calcTypeParameters();
3237
}
3338

34-
Method.inherited(
35-
this.element, this._enclosingContainer, super.library, super.packageGraph,
39+
Method.inherited(this.element2, this._enclosingContainer, super.library,
40+
super.packageGraph,
3641
{ExecutableMember? super.originalMember})
3742
: _isInherited = true {
3843
_calcTypeParameters();
3944
}
4045

4146
Method.providedByExtension(
42-
this.element,
47+
this.element2,
4348
this._enclosingContainer,
4449
super.library,
4550
super.packageGraph, {
@@ -49,8 +54,8 @@ class Method extends ModelElement
4954
}
5055

5156
void _calcTypeParameters() {
52-
typeParameters = element.typeParameters.map((f) {
53-
return getModelFor(f, library) as TypeParameter;
57+
typeParameters = element2.typeParameters2.map((f) {
58+
return getModelFor2(f, library) as TypeParameter;
5459
}).toList(growable: false);
5560
}
5661

@@ -69,7 +74,7 @@ class Method extends ModelElement
6974

7075
@override
7176
Container get enclosingElement => _enclosingContainer ??=
72-
getModelFor(element.enclosingElement3, library) as Container;
77+
getModelFor2(element2.enclosingElement2!, library) as Container;
7378

7479
@override
7580
String get aboveSidebarPath => enclosingElement.sidebarPath;
@@ -79,8 +84,8 @@ class Method extends ModelElement
7984

8085
String get fullkind {
8186
// A method cannot be abstract and static at the same time.
82-
if (element.isAbstract) return 'abstract $kind';
83-
if (element.isStatic) return 'static $kind';
87+
if (element2.isAbstract) return 'abstract $kind';
88+
if (element2.isStatic) return 'static $kind';
8489
return kind.toString();
8590
}
8691

@@ -97,7 +102,7 @@ class Method extends ModelElement
97102
bool get isOperator => false;
98103

99104
bool get isProvidedByExtension =>
100-
element.enclosingElement3 is ExtensionElement;
105+
element2.enclosingElement2 is ExtensionElement2;
101106

102107
/// The [enclosingElement], which is expected to be an [Extension].
103108
Extension get enclosingExtension => enclosingElement as Extension;
@@ -108,7 +113,7 @@ class Method extends ModelElement
108113
if (isInherited) Attribute.inherited,
109114
};
110115

111-
bool get isStatic => element.isStatic;
116+
bool get isStatic => element2.isStatic;
112117

113118
@override
114119
Kind get kind => Kind.method;
@@ -118,24 +123,24 @@ class Method extends ModelElement
118123
super.originalMember as ExecutableMember?;
119124

120125
late final Callable modelType =
121-
getTypeFor((originalMember ?? element).type, library) as Callable;
126+
getTypeFor((originalMember ?? element2).type, library) as Callable;
122127

123128
@override
124129
Method? get overriddenElement {
125130
if (_enclosingContainer is Extension ||
126-
element.enclosingElement3 is ExtensionElement) {
131+
element2.enclosingElement2 is ExtensionElement2) {
127132
return null;
128133
}
129-
var parent = element.enclosingElement3 as InterfaceElement;
134+
var parent = element2.enclosingElement2 as InterfaceElement2;
130135
for (var t in parent.allSupertypes) {
131-
Element? e = t.getMethod(element.name);
136+
Element2? e = t.getMethod2(element2.name3 ?? '');
132137
if (e != null) {
133138
assert(
134-
e.enclosingElement3 is InterfaceElement,
135-
'Expected "${e.enclosingElement3?.name}" to be a InterfaceElement, '
136-
'but was ${e.enclosingElement3.runtimeType}',
139+
e.enclosingElement2 is InterfaceElement2,
140+
'Expected "${e.enclosingElement2?.name3}" to be a InterfaceElement, '
141+
'but was ${e.enclosingElement2.runtimeType}',
137142
);
138-
return getModelForElement(e) as Method?;
143+
return getModelForElement2(e) as Method?;
139144
}
140145
}
141146
return null;

lib/src/model/model_element.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -317,22 +317,22 @@ abstract class ModelElement
317317
ClassTypedef(e, library, packageGraph),
318318
TypeAliasElement() => GeneralizedTypedef(e, library, packageGraph),
319319
MethodElement(isOperator: true) when enclosingContainer == null =>
320-
Operator(e, library, packageGraph),
320+
Operator(e.asElement2, library, packageGraph),
321321
MethodElement(isOperator: true)
322322
when e.enclosingElement3 is ExtensionElement =>
323323
Operator.providedByExtension(
324-
e, enclosingContainer, library, packageGraph),
324+
e.asElement2, enclosingContainer, library, packageGraph),
325325
MethodElement(isOperator: true) => Operator.inherited(
326-
e, enclosingContainer, library, packageGraph,
326+
e.asElement2, enclosingContainer, library, packageGraph,
327327
originalMember: originalMember),
328328
MethodElement(isOperator: false) when enclosingContainer == null =>
329-
Method(e, library, packageGraph),
329+
Method(e.asElement2, library, packageGraph),
330330
MethodElement(isOperator: false)
331331
when e.enclosingElement3 is ExtensionElement =>
332332
Method.providedByExtension(
333-
e, enclosingContainer, library, packageGraph),
333+
e.asElement2, enclosingContainer, library, packageGraph),
334334
MethodElement(isOperator: false) => Method.inherited(
335-
e, enclosingContainer, library, packageGraph,
335+
e.asElement2, enclosingContainer, library, packageGraph,
336336
originalMember: originalMember as ExecutableMember?),
337337
ParameterElement() => Parameter(e, library, packageGraph,
338338
originalMember: originalMember as ParameterMember?),

test/end2end/model_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3572,7 +3572,7 @@ String? topLevelFunction(int param1, bool param2, Cool coolBeans,
35723572
test('inheritance of docs from SDK works for getter/setter combos', () {
35733573
expect(
35743574
ExtraSpecialListLength
3575-
.getter!.documentationFrom.first.element.library!.name,
3575+
.getter!.documentationFrom.first.element!.library!.name,
35763576
equals('dart.core'));
35773577
expect(ExtraSpecialListLength.oneLineDoc == '', isFalse);
35783578
});

0 commit comments

Comments
 (0)