Skip to content

Commit cd5f113

Browse files
committed
Elements. Migrate to Element2
1 parent 6e55bbe commit cd5f113

File tree

9 files changed

+153
-72
lines changed

9 files changed

+153
-72
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 & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,79 +2,87 @@
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;
20+
21+
@override
22+
final FormalParameterElement element2;
1823

19-
Parameter(this.element, super.library, super.packageGraph,
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 => hasDefaultValue ? element2.defaultValueCode : null;
2328

2429
@override
2530
ModelElement? get enclosingElement {
26-
final enclosingElement = element.enclosingElement3;
31+
final enclosingElement = element2.enclosingElement2;
2732
return enclosingElement == null
2833
? null
29-
: getModelFor(enclosingElement, library);
34+
: getModelFor2(enclosingElement, library);
3035
}
3136

3237
bool get hasDefaultValue {
33-
return element.defaultValueCode != null &&
34-
element.defaultValueCode!.isNotEmpty;
38+
return element2.defaultValueCode != null &&
39+
element2.defaultValueCode!.isNotEmpty;
3540
}
3641

3742
@override
3843
String? get href => null;
3944

4045
@override
4146
String get htmlId {
42-
final enclosingElement = element.enclosingElement3;
47+
final enclosingElement = element2.enclosingElement2;
4348
if (enclosingElement == null) {
4449
return 'param-$name';
4550
}
46-
var enclosingName = enclosingElement.name;
47-
if (enclosingElement is GenericFunctionTypeElement) {
51+
var enclosingName = enclosingElement.lookupName;
52+
if (enclosingName == 'new') {
53+
enclosingName = '';
54+
}
55+
if (enclosingElement is GenericFunctionTypeElement2) {
4856
// TODO(jcollins-g): Drop when GenericFunctionTypeElement populates
4957
// name. Also, allowing null here is allowed as a workaround for
5058
// dart-lang/sdk#32005.
51-
for (Element e = enclosingElement;
52-
e.enclosingElement3 != null;
53-
e = e.enclosingElement3!) {
54-
enclosingName = e.name;
59+
for (Element2 e = enclosingElement;
60+
e.enclosingElement2 != null;
61+
e = e.enclosingElement2!) {
62+
enclosingName = e.name3;
5563
if (enclosingName != null && enclosingName.isNotEmpty) break;
5664
}
57-
}
65+
}
5866
return '$enclosingName-param-$name';
5967
}
6068

6169
@override
62-
int get hashCode => element.hashCode;
70+
int get hashCode => element2.hashCode;
6371

6472
@override
6573
bool operator ==(Object other) =>
66-
other is Parameter && (element.type == other.element.type);
74+
other is Parameter && (element2.type == other.element2.type);
6775

68-
bool get isCovariant => element.isCovariant;
76+
bool get isCovariant => element2.isCovariant;
6977

70-
bool get isRequiredPositional => element.isRequiredPositional;
78+
bool get isRequiredPositional => element2.isRequiredPositional;
7179

72-
bool get isNamed => element.isNamed;
80+
bool get isNamed => element2.isNamed;
7381

74-
bool get isOptionalPositional => element.isOptionalPositional;
82+
bool get isOptionalPositional => element2.isOptionalPositional;
7583

7684
/// Only true if this is a required named parameter.
77-
bool get isRequiredNamed => element.isRequiredNamed;
85+
bool get isRequiredNamed => element2.isRequiredNamed;
7886

7987
@override
8088
Kind get kind => Kind.parameter;
@@ -102,5 +110,5 @@ class Parameter extends ModelElement with HasNoPage {
102110
super.originalMember as ParameterMember?;
103111

104112
late final ElementType modelType =
105-
getTypeFor((originalMember ?? element).type, library);
113+
getTypeFor((originalMember ?? element2).type, library);
106114
}

0 commit comments

Comments
 (0)