Store isLegacy flag for elements into summary.
Bug: https://buganizer.corp.google.com/issues/153397493
Change-Id: I10c325bc63a8c057475b75240a4a641370016f61
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/143860
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/summary/format.dart b/pkg/analyzer/lib/src/summary/format.dart
index 0a6a1df..a97325c 100644
--- a/pkg/analyzer/lib/src/summary/format.dart
+++ b/pkg/analyzer/lib/src/summary/format.dart
@@ -16973,10 +16973,18 @@
class LinkedNodeTypeSubstitutionBuilder extends Object
with _LinkedNodeTypeSubstitutionMixin
implements idl.LinkedNodeTypeSubstitution {
+ bool _isLegacy;
List<LinkedNodeTypeBuilder> _typeArguments;
List<int> _typeParameters;
@override
+ bool get isLegacy => _isLegacy ??= false;
+
+ set isLegacy(bool value) {
+ this._isLegacy = value;
+ }
+
+ @override
List<LinkedNodeTypeBuilder> get typeArguments =>
_typeArguments ??= <LinkedNodeTypeBuilder>[];
@@ -16993,8 +17001,11 @@
}
LinkedNodeTypeSubstitutionBuilder(
- {List<LinkedNodeTypeBuilder> typeArguments, List<int> typeParameters})
- : _typeArguments = typeArguments,
+ {bool isLegacy,
+ List<LinkedNodeTypeBuilder> typeArguments,
+ List<int> typeParameters})
+ : _isLegacy = isLegacy,
+ _typeArguments = typeArguments,
_typeParameters = typeParameters;
/// Flush [informative] data recursively.
@@ -17020,6 +17031,7 @@
x?.collectApiSignature(signature);
}
}
+ signature.addBool(this._isLegacy == true);
}
fb.Offset finish(fb.Builder fbBuilder) {
@@ -17033,6 +17045,9 @@
offset_typeParameters = fbBuilder.writeListUint32(_typeParameters);
}
fbBuilder.startTable();
+ if (_isLegacy == true) {
+ fbBuilder.addBool(2, true);
+ }
if (offset_typeArguments != null) {
fbBuilder.addOffset(1, offset_typeArguments);
}
@@ -17061,10 +17076,17 @@
_LinkedNodeTypeSubstitutionImpl(this._bc, this._bcOffset);
+ bool _isLegacy;
List<idl.LinkedNodeType> _typeArguments;
List<int> _typeParameters;
@override
+ bool get isLegacy {
+ _isLegacy ??= const fb.BoolReader().vTableGet(_bc, _bcOffset, 2, false);
+ return _isLegacy;
+ }
+
+ @override
List<idl.LinkedNodeType> get typeArguments {
_typeArguments ??=
const fb.ListReader<idl.LinkedNodeType>(_LinkedNodeTypeReader())
@@ -17085,6 +17107,9 @@
@override
Map<String, Object> toJson() {
Map<String, Object> _result = <String, Object>{};
+ if (isLegacy != false) {
+ _result["isLegacy"] = isLegacy;
+ }
if (typeArguments.isNotEmpty) {
_result["typeArguments"] =
typeArguments.map((_value) => _value.toJson()).toList();
@@ -17097,6 +17122,7 @@
@override
Map<String, Object> toMap() => {
+ "isLegacy": isLegacy,
"typeArguments": typeArguments,
"typeParameters": typeParameters,
};
diff --git a/pkg/analyzer/lib/src/summary/format.fbs b/pkg/analyzer/lib/src/summary/format.fbs
index 7f390d5..cfd13d9 100644
--- a/pkg/analyzer/lib/src/summary/format.fbs
+++ b/pkg/analyzer/lib/src/summary/format.fbs
@@ -1219,6 +1219,8 @@
/// Information about a type substitution.
table LinkedNodeTypeSubstitution {
+ isLegacy:bool (id: 2);
+
typeArguments:[LinkedNodeType] (id: 1);
typeParameters:[uint] (id: 0);
diff --git a/pkg/analyzer/lib/src/summary/idl.dart b/pkg/analyzer/lib/src/summary/idl.dart
index 2175ef2..6e182ec 100644
--- a/pkg/analyzer/lib/src/summary/idl.dart
+++ b/pkg/analyzer/lib/src/summary/idl.dart
@@ -1839,6 +1839,9 @@
/// Information about a type substitution.
abstract class LinkedNodeTypeSubstitution extends base.SummaryClass {
+ @Id(2)
+ bool get isLegacy;
+
@Id(1)
List<LinkedNodeType> get typeArguments;
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
index 09fd0b0..c36c2ed 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
@@ -107,7 +107,12 @@
var typeArguments = substitutionNode.typeArguments.map(_readType).toList();
var substitution = Substitution.fromPairs(typeParameters, typeArguments);
- return ExecutableMember.from2(element, substitution);
+ var member = ExecutableMember.from2(element, substitution);
+ if (substitutionNode.isLegacy) {
+ member = Member.legacy(member);
+ }
+
+ return member;
}
T _getElement<T extends Element>(int index) {
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
index 4d0c8bf..497e564 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
@@ -1478,6 +1478,7 @@
var elementIndex = _indexOfElement(element.declaration);
var substitution = element.substitution.map;
var substitutionBuilder = LinkedNodeTypeSubstitutionBuilder(
+ isLegacy: element.isLegacy,
typeParameters: substitution.keys.map(_indexOfElement).toList(),
typeArguments: substitution.values.map(_writeType).toList(),
);
diff --git a/pkg/analyzer/test/src/dart/resolution/constant_test.dart b/pkg/analyzer/test/src/dart/resolution/constant_test.dart
index 2ad2114..25c3b3d 100644
--- a/pkg/analyzer/test/src/dart/resolution/constant_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/constant_test.dart
@@ -328,6 +328,24 @@
_assertIntValue(c, 42);
}
+ test_topLevelVariable_optOut3() async {
+ newFile('/test/lib/a.dart', content: r'''
+// @dart = 2.7
+const a = int.fromEnvironment('a', defaultValue: 42);
+''');
+
+ await assertNoErrorsInCode(r'''
+// @dart = 2.7
+import 'a.dart';
+
+const b = a;
+''');
+
+ var c = findElement.topVar('b');
+ assertType(c.type, 'int*');
+ _assertIntValue(c, 42);
+ }
+
void _assertIntValue(VariableElement element, int value) {
expect(element.constantValue.toIntValue(), value);
}