Skip to content

Commit 0bf3f8e

Browse files
authored
Elements. Migrate to Element2 (#3980)
* Elements. Migrate to Element2 * Fix test failure
1 parent 1b6fb13 commit 0bf3f8e

File tree

6 files changed

+226
-121
lines changed

6 files changed

+226
-121
lines changed

lib/src/generator/templates.runtime_renderers.dart

Lines changed: 95 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4605,6 +4605,58 @@ class _Renderer_Container extends RendererBase<Container> {
46054605
);
46064606
},
46074607
),
4608+
'element': Property(
4609+
getValue: (CT_ c) => c.element,
4610+
renderVariable:
4611+
(CT_ c, Property<CT_> self, List<String> remainingNames) =>
4612+
self.renderSimpleVariable(c, remainingNames, 'Element'),
4613+
4614+
isNullValue: (CT_ c) => false,
4615+
4616+
renderValue: (
4617+
CT_ c,
4618+
RendererBase<CT_> r,
4619+
List<MustachioNode> ast,
4620+
StringSink sink,
4621+
) {
4622+
renderSimple(
4623+
c.element,
4624+
ast,
4625+
r.template,
4626+
sink,
4627+
parent: r,
4628+
getters: _invisibleGetters['Element']!,
4629+
);
4630+
},
4631+
),
4632+
'element2': Property(
4633+
getValue: (CT_ c) => c.element2,
4634+
renderVariable:
4635+
(CT_ c, Property<CT_> self, List<String> remainingNames) =>
4636+
self.renderSimpleVariable(
4637+
c,
4638+
remainingNames,
4639+
'Element2',
4640+
),
4641+
4642+
isNullValue: (CT_ c) => false,
4643+
4644+
renderValue: (
4645+
CT_ c,
4646+
RendererBase<CT_> r,
4647+
List<MustachioNode> ast,
4648+
StringSink sink,
4649+
) {
4650+
renderSimple(
4651+
c.element2,
4652+
ast,
4653+
r.template,
4654+
sink,
4655+
parent: r,
4656+
getters: _invisibleGetters['Element2']!,
4657+
);
4658+
},
4659+
),
46084660
'enclosingElement': Property(
46094661
getValue: (CT_ c) => c.enclosingElement,
46104662
renderVariable: (
@@ -11886,6 +11938,34 @@ class _Renderer_InheritingContainer extends RendererBase<InheritingContainer> {
1188611938
);
1188711939
},
1188811940
),
11941+
'element2': Property(
11942+
getValue: (CT_ c) => c.element2,
11943+
renderVariable:
11944+
(CT_ c, Property<CT_> self, List<String> remainingNames) =>
11945+
self.renderSimpleVariable(
11946+
c,
11947+
remainingNames,
11948+
'InterfaceElement2',
11949+
),
11950+
11951+
isNullValue: (CT_ c) => false,
11952+
11953+
renderValue: (
11954+
CT_ c,
11955+
RendererBase<CT_> r,
11956+
List<MustachioNode> ast,
11957+
StringSink sink,
11958+
) {
11959+
renderSimple(
11960+
c.element2,
11961+
ast,
11962+
r.template,
11963+
sink,
11964+
parent: r,
11965+
getters: _invisibleGetters['InterfaceElement2']!,
11966+
);
11967+
},
11968+
),
1188911969
'enclosingElement': Property(
1189011970
getValue: (CT_ c) => c.enclosingElement,
1189111971
renderVariable: (
@@ -14312,7 +14392,7 @@ class _Renderer_LibraryContainer extends RendererBase<LibraryContainer> {
1431214392
}
1431314393
}
1431414394

14315-
String renderLibrary(LibraryTemplateData context, Template template) {
14395+
String renderLibraryRedirect(LibraryTemplateData context, Template template) {
1431614396
var buffer = StringBuffer();
1431714397
_render_LibraryTemplateData(context, template.ast, template, buffer);
1431814398
return buffer.toString();
@@ -14558,7 +14638,7 @@ class _Renderer_LibraryTemplateData extends RendererBase<LibraryTemplateData> {
1455814638
}
1455914639
}
1456014640

14561-
String renderLibraryRedirect(LibraryTemplateData context, Template template) {
14641+
String renderLibrary(LibraryTemplateData context, Template template) {
1456214642
var buffer = StringBuffer();
1456314643
_render_LibraryTemplateData(context, template.ast, template, buffer);
1456414644
return buffer.toString();
@@ -26508,6 +26588,19 @@ const _invisibleGetters = {
2650826588
'thisType',
2650926589
'unnamedConstructor',
2651026590
},
26591+
'InterfaceElement2': {
26592+
'allSupertypes',
26593+
'constructors2',
26594+
'firstFragment',
26595+
'fragments',
26596+
'hashCode',
26597+
'interfaces',
26598+
'mixins',
26599+
'runtimeType',
26600+
'supertype',
26601+
'thisType',
26602+
'unnamedConstructor2',
26603+
},
2651126604
'Iterable': {
2651226605
'first',
2651326606
'hashCode',

lib/src/model/class.dart

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
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';
86
import 'package:analyzer/dart/element/element2.dart';
97
// ignore: implementation_imports
@@ -20,10 +18,11 @@ import 'package:dartdoc/src/model/model.dart';
2018
/// **inherited**: Filtered getters giving only inherited children.
2119
class Class extends InheritingContainer with Constructable, MixedInTypes {
2220
@override
23-
final ClassElement element;
21+
// ignore: analyzer_use_new_elements
22+
ClassElement get element => element2.asElement;
2423

2524
@override
26-
ClassElement2 get element2 => element.asElement2;
25+
final ClassElement2 element2;
2726

2827
@override
2928
late final List<ModelElement> allModelElements = [
@@ -51,10 +50,10 @@ class Class extends InheritingContainer with Constructable, MixedInTypes {
5150
...interfaceElements.expandInheritanceChain,
5251
];
5352

54-
Class(this.element, Library library, PackageGraph packageGraph)
53+
Class(this.element2, Library library, PackageGraph packageGraph)
5554
: super(library, packageGraph) {
56-
if (element.name == 'Object' &&
57-
library.element.name == 'dart.core' &&
55+
if (element2.name3 == 'Object' &&
56+
library.element2.name3 == 'dart.core' &&
5857
package.name == 'Dart') {
5958
packageGraph.objectClass = this;
6059
}
@@ -64,32 +63,31 @@ class Class extends InheritingContainer with Constructable, MixedInTypes {
6463
String get fileName => '$name-class.html';
6564

6665
@override
67-
bool get isAbstract => element.isAbstract;
66+
bool get isAbstract => element2.isAbstract;
6867

6968
@override
70-
bool get isBase => element.isBase && !element.isSealed;
69+
bool get isBase => element2.isBase && !element2.isSealed;
7170

7271
bool get isErrorOrException {
73-
bool isError(InterfaceElement element) =>
74-
element.library.isDartCore &&
75-
(element.name == 'Exception' || element.name == 'Error');
72+
bool isError(InterfaceElement2 e) =>
73+
e.library2.isDartCore && (e.name3 == 'Exception' || e.name3 == 'Error');
7674

77-
final element = this.element;
78-
if (isError(element)) return true;
79-
return element.allSupertypes.map((t) => t.element).any(isError);
75+
if (isError(element2)) return true;
76+
return element2.allSupertypes.map((t) => t.element3).any(isError);
8077
}
8178

8279
@override
83-
bool get isFinal => element.isFinal && !element.isSealed;
80+
bool get isFinal => element2.isFinal && !element2.isSealed;
8481

8582
@override
86-
bool get isImplementableInterface => element.isInterface && !element.isSealed;
83+
bool get isImplementableInterface =>
84+
element2.isInterface && !element2.isSealed;
8785

8886
@override
89-
bool get isMixinClass => element.isMixinClass;
87+
bool get isMixinClass => element2.isMixinClass;
9088

9189
@override
92-
bool get isSealed => element.isSealed;
90+
bool get isSealed => element2.isSealed;
9391

9492
@override
9593
Kind get kind => Kind.class_;

lib/src/model/container.dart

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
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.
4-
// ignore_for_file: analyzer_use_new_elements
54

65
import 'package:analyzer/dart/element/element.dart';
76
import 'package:analyzer/dart/element/element2.dart';
87
import 'package:analyzer/dart/element/scope.dart';
8+
// ignore: implementation_imports
9+
import 'package:analyzer/src/utilities/extensions/element.dart';
910
import 'package:dartdoc/src/model/comment_referable.dart';
1011
import 'package:dartdoc/src/model/model.dart';
1112
import 'package:dartdoc/src/model_utils.dart' as model_utils;
@@ -33,27 +34,34 @@ abstract class Container extends ModelElement
3334
with Categorization, TypeParameters {
3435
Container(super.library, super.packageGraph);
3536

37+
@override
38+
// ignore: analyzer_use_new_elements
39+
Element get element => element2.asElement!;
40+
41+
@override
42+
Element2 get element2;
43+
3644
// TODO(jcollins-g): Implement a ContainerScope that flattens supertypes?
3745
@override
3846
Scope? get scope => null;
3947

4048
@override
4149
bool get hasParameters => false;
4250

43-
bool get isExtension => element is ExtensionElement;
51+
bool get isExtension => element2 is ExtensionElement2;
4452

4553
/// Whether this is an enum.
46-
bool get isEnum => element is EnumElement;
54+
bool get isEnum => element2 is EnumElement2;
4755

4856
/// Whether this is an interface (e.g. class, enum, mixin, or extension type).
49-
bool get isInterface => element is InterfaceElement;
57+
bool get isInterface => element2 is InterfaceElement2;
5058

5159
/// Whether this is a mixin.
52-
bool get isMixin => element is MixinElement;
60+
bool get isMixin => element2 is MixinElement2;
5361

5462
/// Whether this container represents the Object class from 'dart:core'.
5563
bool get isDartCoreObject =>
56-
element.name == 'Object' && element.library?.name == 'dart.core';
64+
element2.name3 == 'Object' && element2.library2?.name3 == 'dart.core';
5765

5866
/// The model elements of all of the members of this container, including
5967
/// declared and inherited ones.
@@ -157,16 +165,9 @@ abstract class Container extends ModelElement
157165

158166
/// This container might be canonical for elements it does not contain.
159167
/// See [Inheritable.canonicalEnclosingContainer].
160-
bool containsElement(Element? element) => _allElements.contains(element);
161-
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-
166-
late final Set<Element> _allElements =
167-
allModelElements.map((e) => e.element).toSet();
168+
bool containsElement(Element2? element) => _allElements.contains(element);
168169

169-
late final Set<Element2> _allElements2 =
170+
late final Set<Element2> _allElements =
170171
allModelElements.map((e) => e.element2).toSet();
171172

172173
bool get hasPublicStaticFields => staticFields.any((e) => e.isPublic);

lib/src/model/inheritable.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ mixin Inheritable on ContainerMember {
6161
var reverseInheritance = _inheritance.reversed.toList();
6262
for (var i = 0; i < reverseInheritance.length; i++) {
6363
var container = reverseInheritance[i];
64-
if (container.containsElement2(searchElement)) {
64+
if (container.containsElement(searchElement)) {
6565
var previousIsHiddenAndNotDefining = i > 0 &&
6666
_isHiddenInterface(reverseInheritance[i - 1]) &&
6767
container != definingEnclosingContainer;
@@ -95,7 +95,7 @@ mixin Inheritable on ContainerMember {
9595
// starting from the ModelElement.
9696
if (canonicalContainer != null) {
9797
assert(canonicalContainer.isCanonical);
98-
assert(canonicalContainer.containsElement2(searchElement));
98+
assert(canonicalContainer.containsElement(searchElement));
9999
found = canonicalContainer;
100100
break;
101101
}

0 commit comments

Comments
 (0)