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 <paulberry@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 8459e0a..43bdd18 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -1919,7 +1919,7 @@
final Token augmentedKeyword;
@override
- Fragment? fragment;
+ FragmentImpl? fragment;
@generated
AugmentedExpressionImpl({required this.augmentedKeyword});
@@ -2013,7 +2013,7 @@
ArgumentListImpl _arguments;
@override
- ExecutableFragment? fragment;
+ ExecutableFragmentImpl? fragment;
@generated
AugmentedInvocationImpl({
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 16fa55a..b0e14de 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -3949,7 +3949,7 @@
/// A shared internal interface of `Element` and [Member].
/// Used during migration to avoid referencing `Element`.
-abstract class FragmentOrMember {
+abstract class FragmentOrMember implements Fragment {
/// The analysis context in which this element is defined.
AnalysisContext get context;
@@ -8273,6 +8273,7 @@
/// The code of the default value, or `null` if no default value.
String? get defaultValueCode;
+ @override
FormalParameterElementImpl get element;
/// Whether the parameter is covariant, meaning it is allowed to have a
@@ -8473,7 +8474,8 @@
/// Currently we write [Element] using the first fragment.
/// Usually this works (as good as a hack can), but [PrefixElementImpl2]
/// does not have [FragmentImpl] fragments. So, we use this fake element.
-// TODO(scheglov): resonsider how we write Element2.
+// TODO(scheglov): reconsider how we write Element2.
+// TODO(scheglov): remove this class
class PrefixElementImpl extends FragmentImpl {
final PrefixElementImpl2 element2;
@@ -8485,10 +8487,37 @@
);
@override
+ List<Fragment> get children3 => throw UnimplementedError();
+
+ @override
+ Element get element => throw UnimplementedError();
+
+ @override
+ Fragment? get enclosingFragment => throw UnimplementedError();
+
+ @override
ElementKind get kind => ElementKind.PREFIX;
@override
Null get library => null;
+
+ @override
+ LibraryFragment? get libraryFragment => throw UnimplementedError();
+
+ @override
+ String? get name2 => throw UnimplementedError();
+
+ @override
+ int? get nameOffset2 => throw UnimplementedError();
+
+ @override
+ Fragment? get nextFragment => throw UnimplementedError();
+
+ @override
+ int get offset => throw UnimplementedError();
+
+ @override
+ Fragment? get previousFragment => throw UnimplementedError();
}
class PrefixElementImpl2 extends ElementImpl2 implements PrefixElement {
diff --git a/pkg/analyzer/lib/src/dart/element/member.dart b/pkg/analyzer/lib/src/dart/element/member.dart
index 3504f7d..0331426 100644
--- a/pkg/analyzer/lib/src/dart/element/member.dart
+++ b/pkg/analyzer/lib/src/dart/element/member.dart
@@ -747,6 +747,10 @@
Element get baseElement;
@override
+ // TODO(scheglov): stop implementing [Fragment] and remove
+ List<Fragment> get children3 => throw UnimplementedError();
+
+ @override
AnalysisContext get context => _declaration.context;
@override
@@ -759,6 +763,14 @@
String? get documentationComment => _declaration.documentationComment;
@override
+ // TODO(scheglov): stop implementing [Fragment] and remove
+ Element get element => throw UnimplementedError();
+
+ @override
+ // TODO(scheglov): stop implementing [Fragment] and remove
+ Fragment? get enclosingFragment => throw UnimplementedError();
+
+ @override
int get id => _declaration.id;
@override
@@ -774,6 +786,10 @@
ElementKind get kind => _declaration.kind;
@override
+ // TODO(scheglov): stop implementing [Fragment] and remove
+ LibraryFragment? get libraryFragment => throw UnimplementedError();
+
+ @override
Source? get librarySource => _declaration.librarySource;
@override
@@ -785,12 +801,32 @@
String? get name => _declaration.name;
@override
+ // TODO(scheglov): stop implementing [Fragment] and remove
+ String? get name2 => throw UnimplementedError();
+
+ @override
int get nameLength => _declaration.nameLength;
@override
int get nameOffset => _declaration.nameOffset;
@override
+ // TODO(scheglov): stop implementing [Fragment] and remove
+ int? get nameOffset2 => throw UnimplementedError();
+
+ @override
+ // TODO(scheglov): stop implementing [Fragment] and remove
+ Fragment? get nextFragment => throw UnimplementedError();
+
+ @override
+ // TODO(scheglov): stop implementing [Fragment] and remove
+ int get offset => throw UnimplementedError();
+
+ @override
+ // TODO(scheglov): stop implementing [Fragment] and remove
+ Fragment? get previousFragment => throw UnimplementedError();
+
+ @override
AnalysisSession? get session => _declaration.session;
@override
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
index abc4fd9..53b5b09 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
@@ -283,7 +283,7 @@
AugmentedExpression _readAugmentedExpression() {
var node = AugmentedExpressionImpl(augmentedKeyword: Tokens.augmented());
- node.fragment = _reader.readFragmentOrMember() as Fragment?;
+ node.fragment = _reader.readFragmentOrMember() as FragmentImpl?;
_readExpressionResolution(node);
return node;
}
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
index b1dd656..a74e2b8 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
@@ -92,18 +92,18 @@
}
@override
- void visitAugmentedExpression(AugmentedExpression node) {
+ void visitAugmentedExpression(covariant AugmentedExpressionImpl node) {
_writeByte(Tag.AugmentedExpression);
- _sink.writeFragment(node.fragment);
+ _sink.writeFragmentOrMember(node.fragment);
_storeExpression(node);
}
@override
- void visitAugmentedInvocation(AugmentedInvocation node) {
+ void visitAugmentedInvocation(covariant AugmentedInvocationImpl node) {
_writeByte(Tag.AugmentedInvocation);
_writeOptionalNode(node.typeArguments);
_writeNode(node.arguments);
- _sink.writeFragment(node.fragment);
+ _sink.writeFragmentOrMember(node.fragment);
_storeExpression(node);
}
diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
index 89f5272..28c7cda 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
@@ -718,10 +718,6 @@
}
}
- void writeFragment(Fragment? fragment) {
- writeFragmentOrMember(fragment as FragmentImpl?);
- }
-
// TODO(scheglov): Triage places where we write elements.
// Some of then cannot be members, e.g. type names.
void writeFragmentOrMember(FragmentOrMember? element) {
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index 52ee0b8..14c197b 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -865,10 +865,9 @@
void _writeFragmentCodeRange(Fragment f) {
if (configuration.withCodeRanges) {
if (f is FragmentImpl) {
- var e = f as FragmentImpl;
- if (!e.isSynthetic) {
- _sink.writelnWithIndent('codeOffset: ${e.codeOffset}');
- _sink.writelnWithIndent('codeLength: ${e.codeLength}');
+ if (!f.isSynthetic) {
+ _sink.writelnWithIndent('codeOffset: ${f.codeOffset}');
+ _sink.writelnWithIndent('codeLength: ${f.codeLength}');
}
}
}