Elements. Move isExtensionTypeMember flag from fragments to elements.
Change-Id: I5d7d209725b3c75478b6fee741290bd531c1a9ea
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/441823
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 096c92c..aa640b1 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -109,7 +109,7 @@
// TODO(scheglov): Clean up the list of implicitly analyzed files.
class AnalysisDriver {
/// The version of data format, should be incremented on every format change.
- static const int DATA_VERSION = 508;
+ static const int DATA_VERSION = 509;
/// The number of exception contexts allowed to write. Once this field is
/// zero, we stop writing any new exception contexts in this process.
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 6a8525b..2590e70 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -2250,7 +2250,11 @@
@override
bool get isExtensionTypeMember {
- return firstFragment.isExtensionTypeMember;
+ return hasModifier(Modifier.EXTENSION_TYPE_MEMBER);
+ }
+
+ set isExtensionTypeMember(bool value) {
+ setModifier(Modifier.EXTENSION_TYPE_MEMBER, value);
}
@override
@@ -2438,15 +2442,6 @@
setModifier(Modifier.ASYNCHRONOUS, isAsynchronous);
}
- /// Whether the executable element is an extension type member.
- bool get isExtensionTypeMember {
- return hasModifier(Modifier.EXTENSION_TYPE_MEMBER);
- }
-
- set isExtensionTypeMember(bool value) {
- setModifier(Modifier.EXTENSION_TYPE_MEMBER, value);
- }
-
/// Whether the executable element is external.
///
/// Executable elements are external if they are explicitly marked as such
diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
index 85f7246..ec114ed 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
@@ -347,6 +347,7 @@
reference: reference,
firstFragment: fragments.first,
);
+ element.readModifiers(_reader);
// TODO(scheglov): type parameters
// TODO(scheglov): formal parameters
@@ -785,6 +786,7 @@
var fragments = _readFragmentsById<GetterFragmentImpl>();
// TODO(scheglov): link fragments.
var element = GetterElementImpl(reference, fragments.first);
+ element.readModifiers(_reader);
element.deferReadResolution(
_createDeferredReadResolutionCallback((reader) {
@@ -912,6 +914,7 @@
reference: reference,
firstFragment: fragments.first,
);
+ element.readModifiers(_reader);
element.typeInferenceError = _readTopLevelInferenceError();
// TODO(scheglov): type parameters
@@ -1108,6 +1111,7 @@
var fragments = _readFragmentsById<SetterFragmentImpl>();
// TODO(scheglov): link fragments.
var element = SetterElementImpl(reference, fragments.first);
+ element.readModifiers(_reader);
element.deferReadResolution(
_createDeferredReadResolutionCallback((reader) {
diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
index 1eeaeaa..89330a4 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
@@ -198,6 +198,7 @@
_sink.writeList(elements, (element) {
_writeReference(element.reference);
_sink.writeList(element.fragments, _writeFragmentId);
+ element.writeModifiers(_sink);
_writeElementResolution(() {
_resolutionSink.withTypeParameters(element.typeParameters, () {
@@ -476,6 +477,7 @@
_sink.writeList(elements, (element) {
_writeReference(element.reference);
_sink.writeList(element.fragments, _writeFragmentId);
+ element.writeModifiers(_sink);
_writeElementResolution(() {
_resolutionSink.writeType(element.returnType);
@@ -544,6 +546,7 @@
_sink.writeList(elements, (element) {
_writeReference(element.reference);
_sink.writeList(element.fragments, _writeFragmentId);
+ element.writeModifiers(_sink);
_sink._writeTopLevelInferenceError(element.typeInferenceError);
_writeElementResolution(() {
@@ -682,6 +685,7 @@
_sink.writeList(elements, (element) {
_writeReference(element.reference);
_sink.writeList(element.fragments, _writeFragmentId);
+ element.writeModifiers(_sink);
_writeElementResolution(() {
_resolutionSink.writeType(element.returnType);
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index ac55016..03929de 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -106,8 +106,7 @@
if (instanceElement is ExtensionTypeElementImpl) {
for (var executable in instanceElement.children) {
if (executable case ExecutableElementImpl executable) {
- // TODO(scheglov): should be a flag on the element instead
- executable.firstFragment.isExtensionTypeMember = true;
+ executable.isExtensionTypeMember = true;
}
}
}
diff --git a/pkg/analyzer/lib/src/summary2/element_flags.dart b/pkg/analyzer/lib/src/summary2/element_flags.dart
index 6a9beb0..877076d 100644
--- a/pkg/analyzer/lib/src/summary2/element_flags.dart
+++ b/pkg/analyzer/lib/src/summary2/element_flags.dart
@@ -267,11 +267,10 @@
static const int _isAbstract = 1 << 3;
static const int _isAsynchronous = 1 << 4;
static const int _isAugmentation = 1 << 5;
- static const int _isExtensionTypeMember = 1 << 6;
- static const int _isExternal = 1 << 7;
- static const int _isGenerator = 1 << 8;
- static const int _isStatic = 1 << 9;
- static const int _isSynthetic = 1 << 10;
+ static const int _isExternal = 1 << 6;
+ static const int _isGenerator = 1 << 7;
+ static const int _isStatic = 1 << 8;
+ static const int _isSynthetic = 1 << 9;
static void read(SummaryDataReader reader, MethodFragmentImpl element) {
var bits = reader.readUInt30();
@@ -282,7 +281,6 @@
element.isAbstract = (bits & _isAbstract) != 0;
element.isAsynchronous = (bits & _isAsynchronous) != 0;
element.isAugmentation = (bits & _isAugmentation) != 0;
- element.isExtensionTypeMember = (bits & _isExtensionTypeMember) != 0;
element.isExternal = (bits & _isExternal) != 0;
element.isGenerator = (bits & _isGenerator) != 0;
element.isStatic = (bits & _isStatic) != 0;
@@ -300,7 +298,6 @@
result |= element.isAbstract ? _isAbstract : 0;
result |= element.isAsynchronous ? _isAsynchronous : 0;
result |= element.isAugmentation ? _isAugmentation : 0;
- result |= element.isExtensionTypeMember ? _isExtensionTypeMember : 0;
result |= element.isExternal ? _isExternal : 0;
result |= element.isGenerator ? _isGenerator : 0;
result |= element.isStatic ? _isStatic : 0;
@@ -363,11 +360,10 @@
static const int _hasImplicitReturnType = 1 << 5;
static const int _isAbstract = 1 << 6;
static const int _isAsynchronous = 1 << 7;
- static const int _isExtensionTypeMember = 1 << 8;
- static const int _isExternal = 1 << 9;
- static const int _isGenerator = 1 << 10;
- static const int _isStatic = 1 << 11;
- static const int _isSynthetic = 1 << 12;
+ static const int _isExternal = 1 << 8;
+ static const int _isGenerator = 1 << 9;
+ static const int _isStatic = 1 << 10;
+ static const int _isSynthetic = 1 << 11;
static bool isGetter(int flags) => (flags & _isGetter) != 0;
@@ -390,7 +386,6 @@
element.hasImplicitReturnType = (byte & _hasImplicitReturnType) != 0;
element.isAbstract = (byte & _isAbstract) != 0;
element.isAsynchronous = (byte & _isAsynchronous) != 0;
- element.isExtensionTypeMember = (byte & _isExtensionTypeMember) != 0;
element.isExternal = (byte & _isExternal) != 0;
element.isGenerator = (byte & _isGenerator) != 0;
element.isStatic = (byte & _isStatic) != 0;
@@ -410,7 +405,6 @@
result |= element.hasImplicitReturnType ? _hasImplicitReturnType : 0;
result |= element.isAbstract ? _isAbstract : 0;
result |= element.isAsynchronous ? _isAsynchronous : 0;
- result |= element.isExtensionTypeMember ? _isExtensionTypeMember : 0;
result |= element.isExternal ? _isExternal : 0;
result |= element.isGenerator ? _isGenerator : 0;
result |= element.isStatic ? _isStatic : 0;