Skip to content

Commit ca594a3

Browse files
authored
Elements. Migrate to Element2 (#3976)
* Elements. Migrate to Element2 * format
1 parent 6e55bbe commit ca594a3

File tree

8 files changed

+150
-68
lines changed

8 files changed

+150
-68
lines changed

lib/src/generator/templates.runtime_renderers.dart

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20472,6 +20472,34 @@ class _Renderer_Parameter extends RendererBase<Parameter> {
2047220472
);
2047320473
},
2047420474
),
20475+
'element2': Property(
20476+
getValue: (CT_ c) => c.element2,
20477+
renderVariable:
20478+
(CT_ c, Property<CT_> self, List<String> remainingNames) =>
20479+
self.renderSimpleVariable(
20480+
c,
20481+
remainingNames,
20482+
'FormalParameterElement',
20483+
),
20484+
20485+
isNullValue: (CT_ c) => false,
20486+
20487+
renderValue: (
20488+
CT_ c,
20489+
RendererBase<CT_> r,
20490+
List<MustachioNode> ast,
20491+
StringSink sink,
20492+
) {
20493+
renderSimple(
20494+
c.element2,
20495+
ast,
20496+
r.template,
20497+
sink,
20498+
parent: r,
20499+
getters: _invisibleGetters['FormalParameterElement']!,
20500+
);
20501+
},
20502+
),
2047520503
'enclosingElement': Property(
2047620504
getValue: (CT_ c) => c.enclosingElement,
2047720505
renderVariable: (
@@ -26105,6 +26133,28 @@ const _invisibleGetters = {
2610526133
'runtimeType',
2610626134
},
2610726135
'File': {'hashCode', 'lengthSync', 'modificationStamp', 'runtimeType'},
26136+
'FormalParameterElement': {
26137+
'baseElement',
26138+
'defaultValueCode',
26139+
'firstFragment',
26140+
'formalParameters',
26141+
'fragments',
26142+
'hasDefaultValue',
26143+
'hashCode',
26144+
'isCovariant',
26145+
'isInitializingFormal',
26146+
'isNamed',
26147+
'isOptional',
26148+
'isOptionalNamed',
26149+
'isOptionalPositional',
26150+
'isPositional',
26151+
'isRequired',
26152+
'isRequiredNamed',
26153+
'isRequiredPositional',
26154+
'isSuperFormal',
26155+
'runtimeType',
26156+
'typeParameters2',
26157+
},
2610826158
'FunctionElement': {
2610926159
'augmentation',
2611026160
'augmentationTarget',

lib/src/model/container.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
// ignore_for_file: analyzer_use_new_elements
55

66
import 'package:analyzer/dart/element/element.dart';
7+
import 'package:analyzer/dart/element/element2.dart';
78
import 'package:analyzer/dart/element/scope.dart';
89
import 'package:dartdoc/src/model/comment_referable.dart';
910
import 'package:dartdoc/src/model/model.dart';
@@ -158,9 +159,16 @@ abstract class Container extends ModelElement
158159
/// See [Inheritable.canonicalEnclosingContainer].
159160
bool containsElement(Element? element) => _allElements.contains(element);
160161

162+
/// This container might be canonical for elements it does not contain.
163+
/// See [Inheritable.canonicalEnclosingContainer].
164+
bool containsElement2(Element2? element) => _allElements2.contains(element);
165+
161166
late final Set<Element> _allElements =
162167
allModelElements.map((e) => e.element).toSet();
163168

169+
late final Set<Element2> _allElements2 =
170+
allModelElements.map((e) => e.element2).toSet();
171+
164172
bool get hasPublicStaticFields => staticFields.any((e) => e.isPublic);
165173

166174
List<Field> get publicStaticFieldsSorted =>

lib/src/model/inheritable.dart

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
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-
7-
import 'package:analyzer/dart/element/element.dart';
5+
import 'package:analyzer/dart/element/element2.dart';
86
import 'package:collection/collection.dart' show IterableExtension;
97
import 'package:dartdoc/src/model/attribute.dart';
108
import 'package:dartdoc/src/model/comment_referable.dart';
@@ -16,7 +14,7 @@ import 'package:dartdoc/src/model/model.dart';
1614
/// We can search the inheritance chain between this instance and
1715
/// [definingEnclosingContainer] in [Inheritable.canonicalEnclosingContainer],
1816
/// for the canonical [Class] closest to where this member was defined. We
19-
/// can then know that when we find [Inheritable.element] inside that [Class]'s
17+
/// can then know that when we find [Inheritable.element2] inside that [Class]'s
2018
/// namespace, that's the one we should treat as canonical and implementors of
2119
/// this class can use that knowledge to determine canonicalization.
2220
///
@@ -51,19 +49,19 @@ mixin Inheritable on ContainerMember {
5149
?.allCanonicalModelElements
5250
.firstWhereOrNull((m) =>
5351
m.name == name &&
54-
m is PropertyAccessorElement == this is PropertyAccessorElement);
52+
m is PropertyAccessorElement2 == this is PropertyAccessorElement2);
5553

5654
@override
5755
Container? computeCanonicalEnclosingContainer() {
5856
if (isInherited) {
59-
var searchElement = element.declaration;
57+
var searchElement = element2.baseElement;
6058
// TODO(jcollins-g): generate warning if an inherited element's definition
6159
// is in an intermediate non-canonical class in the inheritance chain?
6260
Container? found;
6361
var reverseInheritance = _inheritance.reversed.toList();
6462
for (var i = 0; i < reverseInheritance.length; i++) {
6563
var container = reverseInheritance[i];
66-
if (container.containsElement(searchElement)) {
64+
if (container.containsElement2(searchElement)) {
6765
var previousIsHiddenAndNotDefining = i > 0 &&
6866
_isHiddenInterface(reverseInheritance[i - 1]) &&
6967
container != definingEnclosingContainer;
@@ -97,7 +95,7 @@ mixin Inheritable on ContainerMember {
9795
// starting from the ModelElement.
9896
if (canonicalContainer != null) {
9997
assert(canonicalContainer.isCanonical);
100-
assert(canonicalContainer.containsElement(searchElement));
98+
assert(canonicalContainer.containsElement2(searchElement));
10199
found = canonicalContainer;
102100
break;
103101
}
@@ -125,8 +123,8 @@ mixin Inheritable on ContainerMember {
125123
/// implementation.
126124
bool _isHiddenInterface(Container? c) =>
127125
c != null &&
128-
c.element.name == 'Interceptor' &&
129-
c.element.library?.name == '_interceptors';
126+
c.element2.name3 == 'Interceptor' &&
127+
c.element2.library2?.name3 == '_interceptors';
130128

131129
/// A roughly ordered list of this element's enclosing container's inheritance
132130
/// chain.

lib/src/model/model_element.dart

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ abstract class ModelElement
252252
}
253253
if (e.kind == ElementKind.NEVER) {
254254
return packageGraph.allConstructedModelElements[key] =
255-
NeverType(e, packageGraph);
255+
NeverType(e.asElement2!, packageGraph);
256256
}
257257

258258
var newModelElement = ModelElement._constructFromElementDeclaration(
@@ -299,7 +299,7 @@ abstract class ModelElement
299299
}) {
300300
return switch (e) {
301301
LibraryElement() => packageGraph.findButDoNotCreateLibraryFor(e)!,
302-
PrefixElement() => Prefix(e, library, packageGraph),
302+
PrefixElement() => Prefix(e.asElement2, library, packageGraph),
303303
EnumElement() => Enum(e, library, packageGraph),
304304
MixinElement() => Mixin(e, library, packageGraph),
305305
ClassElement() => Class(e, library, packageGraph),
@@ -310,12 +310,13 @@ abstract class ModelElement
310310
GenericFunctionTypeElement() =>
311311
ModelFunctionTypedef(e, library, packageGraph),
312312
TypeAliasElement(aliasedType: FunctionType()) =>
313-
FunctionTypedef(e, library, packageGraph),
313+
FunctionTypedef(e.asElement2, library, packageGraph),
314314
TypeAliasElement()
315315
when e.aliasedType.documentableElement2.asElement
316316
is InterfaceElement =>
317-
ClassTypedef(e, library, packageGraph),
318-
TypeAliasElement() => GeneralizedTypedef(e, library, packageGraph),
317+
ClassTypedef(e.asElement2, library, packageGraph),
318+
TypeAliasElement() =>
319+
GeneralizedTypedef(e.asElement2, library, packageGraph),
319320
MethodElement(isOperator: true) when enclosingContainer == null =>
320321
Operator(e.asElement2, library, packageGraph),
321322
MethodElement(isOperator: true)
@@ -334,7 +335,7 @@ abstract class ModelElement
334335
MethodElement(isOperator: false) => Method.inherited(
335336
e.asElement2, enclosingContainer, library, packageGraph,
336337
originalMember: originalMember as ExecutableMember?),
337-
ParameterElement() => Parameter(e, library, packageGraph,
338+
ParameterElement() => Parameter(e.asElement2, library, packageGraph,
338339
originalMember: originalMember as ParameterMember?),
339340
PropertyAccessorElement() => _constructFromPropertyAccessor(
340341
e,

lib/src/model/never.dart

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,23 @@
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';
7+
// ignore: implementation_imports
8+
import 'package:analyzer/src/utilities/extensions/element.dart';
89
import 'package:dartdoc/src/model/comment_referable.dart';
910
import 'package:dartdoc/src/model/kind.dart';
1011
import 'package:dartdoc/src/model/model.dart';
1112

1213
class NeverType extends ModelElement with HasNoPage {
1314
@override
14-
final Element element;
15+
// ignore: analyzer_use_new_elements
16+
Element get element => element2.asElement!;
17+
18+
@override
19+
final Element2 element2;
1520

16-
NeverType(this.element, PackageGraph packageGraph)
21+
NeverType(this.element2, PackageGraph packageGraph)
1722
: super(Library.sentinel, packageGraph);
1823

1924
/// `Never` is not a real object, and so we can't document it, so there

lib/src/model/parameter.dart

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,79 +2,88 @@
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
// ignore: implementation_imports
98
import 'package:analyzer/src/dart/element/member.dart' show ParameterMember;
9+
// ignore: implementation_imports
10+
import 'package:analyzer/src/utilities/extensions/element.dart';
1011
import 'package:dartdoc/src/element_type.dart';
1112
import 'package:dartdoc/src/model/comment_referable.dart';
1213
import 'package:dartdoc/src/model/kind.dart';
1314
import 'package:dartdoc/src/model/model.dart';
1415

1516
class Parameter extends ModelElement with HasNoPage {
1617
@override
17-
final ParameterElement element;
18+
// ignore: analyzer_use_new_elements
19+
ParameterElement get element => element2.asElement;
1820

19-
Parameter(this.element, super.library, super.packageGraph,
21+
@override
22+
final FormalParameterElement element2;
23+
24+
Parameter(this.element2, super.library, super.packageGraph,
2025
{ParameterMember? super.originalMember});
2126

22-
String? get defaultValue => hasDefaultValue ? element.defaultValueCode : null;
27+
String? get defaultValue =>
28+
hasDefaultValue ? element2.defaultValueCode : null;
2329

2430
@override
2531
ModelElement? get enclosingElement {
26-
final enclosingElement = element.enclosingElement3;
32+
final enclosingElement = element2.enclosingElement2;
2733
return enclosingElement == null
2834
? null
29-
: getModelFor(enclosingElement, library);
35+
: getModelFor2(enclosingElement, library);
3036
}
3137

3238
bool get hasDefaultValue {
33-
return element.defaultValueCode != null &&
34-
element.defaultValueCode!.isNotEmpty;
39+
return element2.defaultValueCode != null &&
40+
element2.defaultValueCode!.isNotEmpty;
3541
}
3642

3743
@override
3844
String? get href => null;
3945

4046
@override
4147
String get htmlId {
42-
final enclosingElement = element.enclosingElement3;
48+
final enclosingElement = element2.enclosingElement2;
4349
if (enclosingElement == null) {
4450
return 'param-$name';
4551
}
46-
var enclosingName = enclosingElement.name;
47-
if (enclosingElement is GenericFunctionTypeElement) {
52+
var enclosingName = enclosingElement.lookupName;
53+
if (enclosingName == 'new') {
54+
enclosingName = '';
55+
}
56+
if (enclosingElement is GenericFunctionTypeElement2) {
4857
// TODO(jcollins-g): Drop when GenericFunctionTypeElement populates
4958
// name. Also, allowing null here is allowed as a workaround for
5059
// dart-lang/sdk#32005.
51-
for (Element e = enclosingElement;
52-
e.enclosingElement3 != null;
53-
e = e.enclosingElement3!) {
54-
enclosingName = e.name;
60+
for (Element2 e = enclosingElement;
61+
e.enclosingElement2 != null;
62+
e = e.enclosingElement2!) {
63+
enclosingName = e.lookupName;
5564
if (enclosingName != null && enclosingName.isNotEmpty) break;
5665
}
5766
}
5867
return '$enclosingName-param-$name';
5968
}
6069

6170
@override
62-
int get hashCode => element.hashCode;
71+
int get hashCode => element2.hashCode;
6372

6473
@override
6574
bool operator ==(Object other) =>
66-
other is Parameter && (element.type == other.element.type);
75+
other is Parameter && (element2.type == other.element2.type);
6776

68-
bool get isCovariant => element.isCovariant;
77+
bool get isCovariant => element2.isCovariant;
6978

70-
bool get isRequiredPositional => element.isRequiredPositional;
79+
bool get isRequiredPositional => element2.isRequiredPositional;
7180

72-
bool get isNamed => element.isNamed;
81+
bool get isNamed => element2.isNamed;
7382

74-
bool get isOptionalPositional => element.isOptionalPositional;
83+
bool get isOptionalPositional => element2.isOptionalPositional;
7584

7685
/// Only true if this is a required named parameter.
77-
bool get isRequiredNamed => element.isRequiredNamed;
86+
bool get isRequiredNamed => element2.isRequiredNamed;
7887

7988
@override
8089
Kind get kind => Kind.parameter;
@@ -102,5 +111,5 @@ class Parameter extends ModelElement with HasNoPage {
102111
super.originalMember as ParameterMember?;
103112

104113
late final ElementType modelType =
105-
getTypeFor((originalMember ?? element).type, library);
114+
getTypeFor((originalMember ?? element2).type, library);
106115
}

0 commit comments

Comments
 (0)