Skip to content

Commit 34c5794

Browse files
scheglovCommit Queue
authored and
Commit Queue
committed
Elements. Make FragmentOrMember implement Fragment.
I few references to `Fragment` were converted to `FragmentImpl` because it was a convenient time to do. We added throwing implementations of `Fragment` methods to `PrefixElementImpl` and `Member` temporarily. We remove `PrefixElementImpl` completely in the next CL, and eventually `Member` also will stop implementing `Fragment`, and will implement only `Element`. But for now it would be a too big change to me to do at once. Change-Id: I9cf9034a9c45e9baee6ab7421d7ba4d50b6c45c5 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/431622 Reviewed-by: Paul Berry <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent 9d22935 commit 34c5794

File tree

7 files changed

+77
-17
lines changed

7 files changed

+77
-17
lines changed

pkg/analyzer/lib/src/dart/ast/ast.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1919,7 +1919,7 @@ final class AugmentedExpressionImpl extends ExpressionImpl
19191919
final Token augmentedKeyword;
19201920

19211921
@override
1922-
Fragment? fragment;
1922+
FragmentImpl? fragment;
19231923

19241924
@generated
19251925
AugmentedExpressionImpl({required this.augmentedKeyword});
@@ -2013,7 +2013,7 @@ final class AugmentedInvocationImpl extends ExpressionImpl
20132013
ArgumentListImpl _arguments;
20142014

20152015
@override
2016-
ExecutableFragment? fragment;
2016+
ExecutableFragmentImpl? fragment;
20172017

20182018
@generated
20192019
AugmentedInvocationImpl({

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

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3949,7 +3949,7 @@ abstract class FragmentImpl implements FragmentOrMember {
39493949

39503950
/// A shared internal interface of `Element` and [Member].
39513951
/// Used during migration to avoid referencing `Element`.
3952-
abstract class FragmentOrMember {
3952+
abstract class FragmentOrMember implements Fragment {
39533953
/// The analysis context in which this element is defined.
39543954
AnalysisContext get context;
39553955

@@ -8273,6 +8273,7 @@ mixin ParameterElementMixin implements VariableElementOrMember {
82738273
/// The code of the default value, or `null` if no default value.
82748274
String? get defaultValueCode;
82758275

8276+
@override
82768277
FormalParameterElementImpl get element;
82778278

82788279
/// Whether the parameter is covariant, meaning it is allowed to have a
@@ -8473,7 +8474,8 @@ class PatternVariableFragmentImpl extends LocalVariableFragmentImpl
84738474
/// Currently we write [Element] using the first fragment.
84748475
/// Usually this works (as good as a hack can), but [PrefixElementImpl2]
84758476
/// does not have [FragmentImpl] fragments. So, we use this fake element.
8476-
// TODO(scheglov): resonsider how we write Element2.
8477+
// TODO(scheglov): reconsider how we write Element2.
8478+
// TODO(scheglov): remove this class
84778479
class PrefixElementImpl extends FragmentImpl {
84788480
final PrefixElementImpl2 element2;
84798481

@@ -8484,11 +8486,38 @@ class PrefixElementImpl extends FragmentImpl {
84848486
reference: element2.reference,
84858487
);
84868488

8489+
@override
8490+
List<Fragment> get children3 => throw UnimplementedError();
8491+
8492+
@override
8493+
Element get element => throw UnimplementedError();
8494+
8495+
@override
8496+
Fragment? get enclosingFragment => throw UnimplementedError();
8497+
84878498
@override
84888499
ElementKind get kind => ElementKind.PREFIX;
84898500

84908501
@override
84918502
Null get library => null;
8503+
8504+
@override
8505+
LibraryFragment? get libraryFragment => throw UnimplementedError();
8506+
8507+
@override
8508+
String? get name2 => throw UnimplementedError();
8509+
8510+
@override
8511+
int? get nameOffset2 => throw UnimplementedError();
8512+
8513+
@override
8514+
Fragment? get nextFragment => throw UnimplementedError();
8515+
8516+
@override
8517+
int get offset => throw UnimplementedError();
8518+
8519+
@override
8520+
Fragment? get previousFragment => throw UnimplementedError();
84928521
}
84938522

84948523
class PrefixElementImpl2 extends ElementImpl2 implements PrefixElement {

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

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -746,6 +746,10 @@ abstract class Member implements FragmentOrMember {
746746

747747
Element get baseElement;
748748

749+
@override
750+
// TODO(scheglov): stop implementing [Fragment] and remove
751+
List<Fragment> get children3 => throw UnimplementedError();
752+
749753
@override
750754
AnalysisContext get context => _declaration.context;
751755

@@ -758,6 +762,14 @@ abstract class Member implements FragmentOrMember {
758762
@override
759763
String? get documentationComment => _declaration.documentationComment;
760764

765+
@override
766+
// TODO(scheglov): stop implementing [Fragment] and remove
767+
Element get element => throw UnimplementedError();
768+
769+
@override
770+
// TODO(scheglov): stop implementing [Fragment] and remove
771+
Fragment? get enclosingFragment => throw UnimplementedError();
772+
761773
@override
762774
int get id => _declaration.id;
763775

@@ -773,6 +785,10 @@ abstract class Member implements FragmentOrMember {
773785
@override
774786
ElementKind get kind => _declaration.kind;
775787

788+
@override
789+
// TODO(scheglov): stop implementing [Fragment] and remove
790+
LibraryFragment? get libraryFragment => throw UnimplementedError();
791+
776792
@override
777793
Source? get librarySource => _declaration.librarySource;
778794

@@ -784,12 +800,32 @@ abstract class Member implements FragmentOrMember {
784800
@override
785801
String? get name => _declaration.name;
786802

803+
@override
804+
// TODO(scheglov): stop implementing [Fragment] and remove
805+
String? get name2 => throw UnimplementedError();
806+
787807
@override
788808
int get nameLength => _declaration.nameLength;
789809

790810
@override
791811
int get nameOffset => _declaration.nameOffset;
792812

813+
@override
814+
// TODO(scheglov): stop implementing [Fragment] and remove
815+
int? get nameOffset2 => throw UnimplementedError();
816+
817+
@override
818+
// TODO(scheglov): stop implementing [Fragment] and remove
819+
Fragment? get nextFragment => throw UnimplementedError();
820+
821+
@override
822+
// TODO(scheglov): stop implementing [Fragment] and remove
823+
int get offset => throw UnimplementedError();
824+
825+
@override
826+
// TODO(scheglov): stop implementing [Fragment] and remove
827+
Fragment? get previousFragment => throw UnimplementedError();
828+
793829
@override
794830
AnalysisSession? get session => _declaration.session;
795831

pkg/analyzer/lib/src/summary2/ast_binary_reader.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ class AstBinaryReader {
283283

284284
AugmentedExpression _readAugmentedExpression() {
285285
var node = AugmentedExpressionImpl(augmentedKeyword: Tokens.augmented());
286-
node.fragment = _reader.readFragmentOrMember() as Fragment?;
286+
node.fragment = _reader.readFragmentOrMember() as FragmentImpl?;
287287
_readExpressionResolution(node);
288288
return node;
289289
}

pkg/analyzer/lib/src/summary2/ast_binary_writer.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,18 +92,18 @@ class AstBinaryWriter extends ThrowingAstVisitor<void> {
9292
}
9393

9494
@override
95-
void visitAugmentedExpression(AugmentedExpression node) {
95+
void visitAugmentedExpression(covariant AugmentedExpressionImpl node) {
9696
_writeByte(Tag.AugmentedExpression);
97-
_sink.writeFragment(node.fragment);
97+
_sink.writeFragmentOrMember(node.fragment);
9898
_storeExpression(node);
9999
}
100100

101101
@override
102-
void visitAugmentedInvocation(AugmentedInvocation node) {
102+
void visitAugmentedInvocation(covariant AugmentedInvocationImpl node) {
103103
_writeByte(Tag.AugmentedInvocation);
104104
_writeOptionalNode(node.typeArguments);
105105
_writeNode(node.arguments);
106-
_sink.writeFragment(node.fragment);
106+
_sink.writeFragmentOrMember(node.fragment);
107107
_storeExpression(node);
108108
}
109109

pkg/analyzer/lib/src/summary2/bundle_writer.dart

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -718,10 +718,6 @@ class ResolutionSink extends _SummaryDataWriter {
718718
}
719719
}
720720

721-
void writeFragment(Fragment? fragment) {
722-
writeFragmentOrMember(fragment as FragmentImpl?);
723-
}
724-
725721
// TODO(scheglov): Triage places where we write elements.
726722
// Some of then cannot be members, e.g. type names.
727723
void writeFragmentOrMember(FragmentOrMember? element) {

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -865,10 +865,9 @@ class _Element2Writer extends _AbstractElementWriter {
865865
void _writeFragmentCodeRange(Fragment f) {
866866
if (configuration.withCodeRanges) {
867867
if (f is FragmentImpl) {
868-
var e = f as FragmentImpl;
869-
if (!e.isSynthetic) {
870-
_sink.writelnWithIndent('codeOffset: ${e.codeOffset}');
871-
_sink.writelnWithIndent('codeLength: ${e.codeLength}');
868+
if (!f.isSynthetic) {
869+
_sink.writelnWithIndent('codeOffset: ${f.codeOffset}');
870+
_sink.writelnWithIndent('codeLength: ${f.codeLength}');
872871
}
873872
}
874873
}

0 commit comments

Comments
 (0)