Skip to content

Commit bee0276

Browse files
authored
Migrate TopLevelVariable and GetterSetterCombo element model (#3985)
1 parent 9366e01 commit bee0276

4 files changed

+73
-25
lines changed

lib/src/generator/templates.runtime_renderers.dart

+38-2
Original file line numberDiff line numberDiff line change
@@ -14411,7 +14411,7 @@ class _Renderer_LibraryContainer extends RendererBase<LibraryContainer> {
1441114411
}
1441214412
}
1441314413

14414-
String renderLibraryRedirect(LibraryTemplateData context, Template template) {
14414+
String renderLibrary(LibraryTemplateData context, Template template) {
1441514415
var buffer = StringBuffer();
1441614416
_render_LibraryTemplateData(context, template.ast, template, buffer);
1441714417
return buffer.toString();
@@ -14657,7 +14657,7 @@ class _Renderer_LibraryTemplateData extends RendererBase<LibraryTemplateData> {
1465714657
}
1465814658
}
1465914659

14660-
String renderLibrary(LibraryTemplateData context, Template template) {
14660+
String renderLibraryRedirect(LibraryTemplateData context, Template template) {
1466114661
var buffer = StringBuffer();
1466214662
_render_LibraryTemplateData(context, template.ast, template, buffer);
1466314663
return buffer.toString();
@@ -24179,6 +24179,34 @@ class _Renderer_TopLevelVariable extends RendererBase<TopLevelVariable> {
2417924179
);
2418024180
},
2418124181
),
24182+
'element2': Property(
24183+
getValue: (CT_ c) => c.element2,
24184+
renderVariable:
24185+
(CT_ c, Property<CT_> self, List<String> remainingNames) =>
24186+
self.renderSimpleVariable(
24187+
c,
24188+
remainingNames,
24189+
'TopLevelVariableElement2',
24190+
),
24191+
24192+
isNullValue: (CT_ c) => false,
24193+
24194+
renderValue: (
24195+
CT_ c,
24196+
RendererBase<CT_> r,
24197+
List<MustachioNode> ast,
24198+
StringSink sink,
24199+
) {
24200+
renderSimple(
24201+
c.element2,
24202+
ast,
24203+
r.template,
24204+
sink,
24205+
parent: r,
24206+
getters: _invisibleGetters['TopLevelVariableElement2']!,
24207+
);
24208+
},
24209+
),
2418224210
'enclosingElement': Property(
2418324211
getValue: (CT_ c) => c.enclosingElement,
2418424212
renderVariable: (
@@ -27053,6 +27081,14 @@ const _invisibleGetters = {
2705327081
'isExternal',
2705427082
'runtimeType',
2705527083
},
27084+
'TopLevelVariableElement2': {
27085+
'baseElement',
27086+
'firstFragment',
27087+
'fragments',
27088+
'hashCode',
27089+
'isExternal',
27090+
'runtimeType',
27091+
},
2705627092
'TypeAliasElement': {
2705727093
'aliasedElement',
2705827094
'aliasedType',

lib/src/model/getter_setter_combo.dart

+19-14
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,26 @@
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 'dart:convert';
86

97
import 'package:analyzer/dart/ast/ast.dart'
108
show Expression, InstanceCreationExpression;
9+
import 'package:analyzer/dart/element/element2.dart' show Annotatable;
1110
import 'package:analyzer/source/line_info.dart';
1211
// ignore: implementation_imports
1312
import 'package:analyzer/src/dart/element/element.dart'
1413
show ConstVariableElement;
1514
import 'package:dartdoc/src/element_type.dart';
15+
import 'package:dartdoc/src/model/accessor.dart';
1616
import 'package:dartdoc/src/model/annotation.dart';
1717
import 'package:dartdoc/src/model/attribute.dart';
18+
import 'package:dartdoc/src/model/class.dart';
1819
import 'package:dartdoc/src/model/comment_referable.dart';
19-
import 'package:dartdoc/src/model/model.dart';
20+
import 'package:dartdoc/src/model/constructor.dart';
21+
import 'package:dartdoc/src/model/documentation_comment.dart';
22+
import 'package:dartdoc/src/model/enum.dart';
23+
import 'package:dartdoc/src/model/model_element.dart';
24+
import 'package:dartdoc/src/model/parameter.dart';
2025
import 'package:dartdoc/src/utils.dart';
2126
import 'package:meta/meta.dart';
2227

@@ -73,16 +78,16 @@ mixin GetterSetterCombo on ModelElement {
7378
bool get hasConstantValueForDisplay => false;
7479

7580
late final Expression? _constantInitializer =
76-
(element as ConstVariableElement).constantInitializer;
81+
(element2.firstFragment as ConstVariableElement).constantInitializer;
7782

7883
String linkifyConstantValue(String original) {
7984
if (_constantInitializer is! InstanceCreationExpression) return original;
8085

8186
var constructorName = _constantInitializer.constructorName.toString();
82-
var staticElement = _constantInitializer.constructorName.staticElement;
83-
if (staticElement == null) return original;
87+
var element = _constantInitializer.constructorName.element;
88+
if (element == null) return original;
8489

85-
var target = getModelForElement(staticElement) as Constructor;
90+
var target = getModelForElement2(element) as Constructor;
8691
var enclosingElement = target.enclosingElement;
8792
if (enclosingElement is! Class) return original;
8893

@@ -108,10 +113,10 @@ mixin GetterSetterCombo on ModelElement {
108113
// explicit setters/getters will be handled by those objects, but
109114
// if a warning comes up for an enclosing synthetic field we have to
110115
// put it somewhere. So pick an accessor.
111-
if (element.isSynthetic) {
116+
if (element2.isSynthetic) {
112117
if (hasExplicitGetter) return getter!.characterLocation;
113118
if (hasExplicitSetter) return setter!.characterLocation;
114-
assert(false, 'Field and accessors can not all be synthetic: $element');
119+
assert(false, 'Field and accessors can not all be synthetic: $element2');
115120
}
116121
return super.characterLocation;
117122
}
@@ -137,9 +142,9 @@ mixin GetterSetterCombo on ModelElement {
137142

138143
initializerString = 'const $initializerString';
139144

140-
var isImplicitConstructorCall = _constantInitializer
141-
.constructorName.staticElement?.isDefaultConstructor ??
142-
false;
145+
var isImplicitConstructorCall =
146+
_constantInitializer.constructorName.element?.isDefaultConstructor ??
147+
false;
143148
if (isImplicitConstructorCall) {
144149
// For an enum value with an implicit constructor call (like
145150
// `enum E { one, two; }`), `constantInitializer.toString()` does not
@@ -206,13 +211,13 @@ mixin GetterSetterCombo on ModelElement {
206211
@override
207212
late final String documentationComment =
208213
_getterSetterDocumentationComment.isEmpty
209-
? element.documentationComment ?? ''
214+
? (element2 as Annotatable).documentationComment ?? ''
210215
: _getterSetterDocumentationComment;
211216

212217
@override
213218
bool get hasDocumentationComment =>
214219
_getterSetterDocumentationComment.isNotEmpty ||
215-
element.documentationComment != null;
220+
(element2 as Annotatable).documentationComment != null;
216221

217222
/// Derives a documentation comment for the combo by copying documentation
218223
/// from the [getter] and/or [setter].

lib/src/model/model_element.dart

+1-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ abstract class ModelElement
151151
if (e is TopLevelVariableElement) {
152152
assert(getter != null || setter != null);
153153
newModelElement =
154-
TopLevelVariable(e, library, packageGraph, getter, setter);
154+
TopLevelVariable(e.asElement2, library, packageGraph, getter, setter);
155155
} else if (e is FieldElement) {
156156
if (enclosingContainer is Extension) {
157157
newModelElement = Field(e, library, packageGraph,

lib/src/model/top_level_variable.dart

+15-8
Original file line numberDiff line numberDiff line change
@@ -2,9 +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
import 'package:analyzer/dart/element/element.dart';
6+
import 'package:analyzer/dart/element/element2.dart';
7+
// ignore: implementation_imports
8+
import 'package:analyzer/src/dart/element/element.dart';
89
import 'package:dartdoc/src/model/attribute.dart';
910
import 'package:dartdoc/src/model/comment_referable.dart';
1011
import 'package:dartdoc/src/model/kind.dart';
@@ -14,15 +15,21 @@ import 'package:dartdoc/src/model/model.dart';
1415
class TopLevelVariable extends ModelElement
1516
with GetterSetterCombo, Categorization {
1617
@override
17-
final TopLevelVariableElement element;
18+
// ignore: analyzer_use_new_elements
19+
TopLevelVariableElement get element =>
20+
// ignore: analyzer_use_new_elements
21+
(element2.firstFragment as TopLevelVariableElementImpl).declaration;
22+
23+
@override
24+
final TopLevelVariableElement2 element2;
1825

1926
@override
2027
final Accessor? getter;
2128
@override
2229
final Accessor? setter;
2330

24-
TopLevelVariable(this.element, super.library, super.packageGraph, this.getter,
25-
this.setter) {
31+
TopLevelVariable(this.element2, super.library, super.packageGraph,
32+
this.getter, this.setter) {
2633
getter?.enclosingCombo = this;
2734
setter?.enclosingCombo = this;
2835
}
@@ -59,18 +66,18 @@ class TopLevelVariable extends ModelElement
5966
}
6067

6168
@override
62-
bool get isConst => element.isConst;
69+
bool get isConst => element2.isConst;
6370

6471
@override
6572
bool get isFinal {
6673
/// isFinal returns true for the variable even if it has an explicit getter
6774
/// (which means we should not document it as "final").
6875
if (hasExplicitGetter) return false;
69-
return element.isFinal;
76+
return element2.isFinal;
7077
}
7178

7279
@override
73-
bool get isLate => isFinal && element.isLate;
80+
bool get isLate => isFinal && element2.isLate;
7481

7582
// For use in templates.
7683
bool get isProvidedByExtension => false;

0 commit comments

Comments
 (0)