Skip to content

Commit 016310d

Browse files
scheglovCommit Queue
authored andcommitted
Elements. Add PropertyInducingElement2.hasInitializer
Change-Id: I236a8fc6748fef8f6fa8b7d18066778e157c9c68 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/395682 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 9468f60 commit 016310d

25 files changed

+1910
-1897
lines changed

pkg/analyzer/lib/dart/element/element2.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2102,6 +2102,9 @@ abstract class PropertyInducingElement2
21022102
/// getter associated with it will be synthetic.
21032103
GetterElement? get getter2;
21042104

2105+
/// Whether any fragment of this variable has an initializer at declaration.
2106+
bool get hasInitializer;
2107+
21052108
/// The setter associated with this variable.
21062109
///
21072110
/// Returns `null` if the variable is effectively `final` and therefore does

pkg/analyzer/lib/src/dart/element/element.dart

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4172,8 +4172,8 @@ class FieldElementImpl extends PropertyInducingElementImpl
41724172

41734173
class FieldElementImpl2 extends PropertyInducingElementImpl2
41744174
with
4175-
FragmentedAnnotatableElementMixin<FieldFragment>,
4176-
FragmentedElementMixin<FieldFragment>
4175+
FragmentedAnnotatableElementMixin<FieldElementImpl>,
4176+
FragmentedElementMixin<FieldElementImpl>
41774177
implements FieldElement2 {
41784178
@override
41794179
final FieldElementImpl firstFragment;
@@ -9689,7 +9689,14 @@ abstract class PropertyInducingElementImpl
96899689
}
96909690

96919691
abstract class PropertyInducingElementImpl2 extends VariableElementImpl2
9692-
implements PropertyInducingElement2 {}
9692+
implements PropertyInducingElement2 {
9693+
@override
9694+
bool get hasInitializer {
9695+
return _fragments.any((f) => f.hasInitializer);
9696+
}
9697+
9698+
List<PropertyInducingElementImpl> get _fragments;
9699+
}
96939700

96949701
/// Instances of this class are set for fields and top-level variables
96959702
/// to perform top-level type inference during linking.
@@ -9967,8 +9974,8 @@ class TopLevelVariableElementImpl extends PropertyInducingElementImpl
99679974

99689975
class TopLevelVariableElementImpl2 extends PropertyInducingElementImpl2
99699976
with
9970-
FragmentedAnnotatableElementMixin<TopLevelVariableFragment>,
9971-
FragmentedElementMixin<TopLevelVariableFragment>
9977+
FragmentedAnnotatableElementMixin<TopLevelVariableElementImpl>,
9978+
FragmentedElementMixin<TopLevelVariableElementImpl>
99729979
implements TopLevelVariableElement2 {
99739980
@override
99749981
final Reference reference;

pkg/analyzer/lib/src/error/constructor_fields_verifier.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,7 @@ class ConstructorFieldsVerifier {
8181
if (element is EnumElement2 && field.name3 == 'index') {
8282
continue;
8383
}
84-
// TODO(scheglov): this is wrong
85-
fieldMap[field] = field.firstFragment.hasInitializer
84+
fieldMap[field] = field.hasInitializer
8685
? _InitState.initInDeclaration
8786
: _InitState.notInit;
8887
}

pkg/analyzer/test/src/summary/element_text.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,7 @@ class _Element2Writer extends _AbstractElementWriter {
493493
_sink.writeIf(e.isConst, 'const ');
494494
_sink.writeIf(e.isEnumConstant, 'enumConstant ');
495495
_sink.writeIf(e.isPromotable, 'promotable ');
496+
_sink.writeIf(e.hasInitializer, 'hasInitializer ');
496497

497498
_writeElementName(e);
498499
});
@@ -550,6 +551,7 @@ class _Element2Writer extends _AbstractElementWriter {
550551
_sink.writeIndentedLine(() {
551552
_sink.writeIf(f.isAugmentation, 'augment ');
552553
_sink.writeIf(f.isSynthetic, 'synthetic ');
554+
_sink.writeIf(f.hasInitializer, 'hasInitializer ');
553555

554556
_writeFragmentName(f);
555557
});
@@ -1808,6 +1810,7 @@ class _Element2Writer extends _AbstractElementWriter {
18081810
_sink.writeIf(e.isLate, 'late ');
18091811
_sink.writeIf(e.isFinal, 'final ');
18101812
_sink.writeIf(e.isConst, 'const ');
1813+
_sink.writeIf(e.hasInitializer, 'hasInitializer ');
18111814

18121815
_writeElementName(e);
18131816
});
@@ -1863,6 +1866,7 @@ class _Element2Writer extends _AbstractElementWriter {
18631866
_sink.writeIndentedLine(() {
18641867
_sink.writeIf(f.isAugmentation, 'augment ');
18651868
_sink.writeIf(f.isSynthetic, 'synthetic ');
1869+
_sink.writeIf(f.hasInitializer, 'hasInitializer ');
18661870

18671871
_writeFragmentName(f);
18681872
});

0 commit comments

Comments
 (0)