Default parameters, more metadata, import dart:core.
R=brianwilkerson@google.com, paulberry@google.com
Change-Id: Ibf31dcc7e0fbea3935f75c7472a23eac4c2999eb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/96522
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 7323e95..5cf726d 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -2810,6 +2810,10 @@
DefaultParameterElementImpl(String name, int nameOffset)
: super(name, nameOffset);
+ DefaultParameterElementImpl.forLinkedNode(
+ ElementImpl enclosing, Reference reference, LinkedNode linkedNode)
+ : super.forLinkedNode(enclosing, reference, linkedNode);
+
/// Initialize a newly created parameter element to have the given [name].
DefaultParameterElementImpl.forNode(Identifier name) : super.forNode(name);
@@ -4370,14 +4374,26 @@
var formalParameters = context.getFormalParameters(linkedNode);
if (formalParameters != null) {
_parameters = formalParameters.map((node) {
- var name = context.getFormalParameterName(node);
- var reference = containerRef.getChild(name);
- reference.node = node;
- return ParameterElementImpl.forLinkedNodeFactory(
- this,
- reference,
- node,
- );
+ if (node.kind == LinkedNodeKind.defaultFormalParameter) {
+ var parameterNode = node.defaultFormalParameter_parameter;
+ var name = context.getFormalParameterName(parameterNode);
+ var reference = containerRef.getChild(name);
+ reference.node = node;
+ return DefaultParameterElementImpl.forLinkedNode(
+ this,
+ reference,
+ node,
+ );
+ } else {
+ var name = context.getFormalParameterName(node);
+ var reference = containerRef.getChild(name);
+ reference.node = node;
+ return ParameterElementImpl.forLinkedNodeFactory(
+ this,
+ reference,
+ node,
+ );
+ }
}).toList();
} else {
_parameters = const [];
@@ -7796,6 +7812,10 @@
@override
bool get isCovariant {
if (linkedNode != null) {
+ if (linkedNode.kind == LinkedNodeKind.defaultFormalParameter) {
+ var parameter = linkedNode.defaultFormalParameter_parameter;
+ return parameter.normalFormalParameter_isCovariant;
+ }
return linkedNode.normalFormalParameter_isCovariant;
}
if (isExplicitlyCovariant || inheritsCovariant) {
@@ -7822,6 +7842,10 @@
@override
bool get isFinal {
if (linkedNode != null) {
+ if (linkedNode.kind == LinkedNodeKind.defaultFormalParameter) {
+ var parameter = linkedNode.defaultFormalParameter_parameter;
+ return parameter.simpleFormalParameter_keyword != 0;
+ }
if (linkedNode.kind == LinkedNodeKind.fieldFormalParameter) {
return false;
}
@@ -7899,8 +7923,14 @@
if (_parameterKind != null) return _parameterKind;
if (linkedNode != null) {
- // TODO(scheglov) implement
- _parameterKind = ParameterKind.REQUIRED;
+ if (linkedNode.kind == LinkedNodeKind.defaultFormalParameter) {
+ if (linkedNode.defaultFormalParameter_isNamed) {
+ return _parameterKind = ParameterKind.NAMED;
+ } else {
+ return _parameterKind = ParameterKind.POSITIONAL;
+ }
+ }
+ return _parameterKind = ParameterKind.REQUIRED;
}
if (unlinkedParam != null) {
switch (unlinkedParam.kind) {
@@ -7932,7 +7962,13 @@
DartType get type {
if (linkedNode != null) {
if (_type != null) return _type;
- return _type ??= enclosingUnit.linkedContext.getType(
+ if (linkedNode.kind == LinkedNodeKind.defaultFormalParameter) {
+ var parameter = linkedNode.defaultFormalParameter_parameter;
+ return _type = enclosingUnit.linkedContext.getType(
+ parameter.simpleFormalParameter_type2,
+ );
+ }
+ return _type = enclosingUnit.linkedContext.getType(
linkedNode.simpleFormalParameter_type2,
);
}
@@ -8819,7 +8855,7 @@
var context = enclosingUnit.linkedContext;
return _bound = context.getTypeAnnotationType(bound);
} else {
- return _bound = context.typeProvider.objectType;
+ return null;
}
}
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
index 5feed77..33f51e3 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_reader.dart
@@ -263,17 +263,12 @@
T _getElement<T extends Element>(int index) {
var bundleContext = _unitContext.bundleContext;
- var reference = bundleContext.referenceOfIndex(index);
- return bundleContext.elementFactory.elementOfReference(reference);
+ return bundleContext.elementOfIndex(index);
}
List<T> _getElements<T extends Element>(List<int> indexList) {
- var result = List<T>(indexList.length);
- for (var i = 0; i < indexList.length; ++i) {
- var index = indexList[i];
- result[i] = _getElement(index);
- }
- return result;
+ var bundleContext = _unitContext.bundleContext;
+ return bundleContext.elementsOfIndexes(indexList);
}
Token _getToken(int index) {
@@ -1162,7 +1157,7 @@
leftBracket: _getToken(data.setOrMapLiteral_leftBracket),
typeArguments: readNode(data.typedLiteral_typeArguments),
rightBracket: _getToken(data.setOrMapLiteral_leftBracket),
- );
+ )..staticType = _readType(data.expression_type);
if (data.setOrMapLiteral_isMap) {
node.becomeMap();
} else if (data.setOrMapLiteral_isSet) {
diff --git a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
index b437a4e..1859e5e 100644
--- a/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/ast_binary_writer.dart
@@ -9,6 +9,7 @@
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/dart/element/member.dart';
import 'package:analyzer/src/summary/format.dart';
import 'package:analyzer/src/summary/idl.dart';
import 'package:analyzer/src/summary2/linking_bundle_context.dart';
@@ -1265,6 +1266,10 @@
int _getReferenceIndex(Element element) {
if (element == null) return 0;
+ if (element is Member) {
+ element = (element as Member).baseElement;
+ }
+
var reference = (element as ElementImpl).reference;
if (identical(element, DynamicElementImpl.instance)) {
reference = _linkingBundleContext.dynamicReference;
diff --git a/pkg/analyzer/lib/src/summary2/builder/source_library_builder.dart b/pkg/analyzer/lib/src/summary2/builder/source_library_builder.dart
index f4436fd..f029ec9 100644
--- a/pkg/analyzer/lib/src/summary2/builder/source_library_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/builder/source_library_builder.dart
@@ -68,6 +68,13 @@
}
}
if (!hasDartCore) {
+ var importDartCore = LinkedNodeBuilder.importDirective(
+ uriBasedDirective_uri: LinkedNodeBuilder.simpleStringLiteral(
+ simpleStringLiteral_value: 'dart:core',
+ ),
+ )..isSynthetic = true;
+ units[0].node.compilationUnit_directives.add(importDartCore);
+
// TODO(scheglov) This works only when dart:core is linked
var references = linker.elementFactory.exportsOfLibrary('dart:core');
_importExportedReferences(references);
diff --git a/pkg/analyzer/lib/src/summary2/linked_bundle_context.dart b/pkg/analyzer/lib/src/summary2/linked_bundle_context.dart
index d814b26a..fbaf454 100644
--- a/pkg/analyzer/lib/src/summary2/linked_bundle_context.dart
+++ b/pkg/analyzer/lib/src/summary2/linked_bundle_context.dart
@@ -4,6 +4,7 @@
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/summary/idl.dart';
import 'package:analyzer/src/summary2/linked_element_factory.dart';
@@ -19,6 +20,20 @@
: _references = List<Reference>.filled(referencesData.name.length, null,
growable: true);
+ T elementOfIndex<T extends Element>(int index) {
+ var reference = referenceOfIndex(index);
+ return elementFactory.elementOfReference(reference);
+ }
+
+ List<T> elementsOfIndexes<T extends Element>(List<int> indexList) {
+ var result = List<T>(indexList.length);
+ for (var i = 0; i < indexList.length; ++i) {
+ var index = indexList[i];
+ result[i] = elementOfIndex(index);
+ }
+ return result;
+ }
+
InterfaceType getInterfaceType(LinkedNodeType linkedType) {
var type = getType(linkedType);
if (type is InterfaceType && !type.element.isEnum) {
@@ -31,6 +46,20 @@
var kind = linkedType.kind;
if (kind == LinkedNodeTypeKind.dynamic_) {
return DynamicTypeImpl.instance;
+ } else if (kind == LinkedNodeTypeKind.function) {
+ var returnType = getType(linkedType.functionReturnType);
+ var typeParameters = linkedType.functionTypeParameters
+ .map(referenceOfIndex)
+ .map(elementFactory.elementOfReference)
+ .cast<TypeParameterElement>()
+ .toList();
+ var formalParameters = linkedType.functionFormalParameters
+ .map(referenceOfIndex)
+ .map(elementFactory.elementOfReference)
+ .cast<ParameterElement>()
+ .toList();
+ // TODO(scheglov) Rework this to purely synthetic types.
+ return FunctionElementImpl.synthetic(formalParameters, returnType).type;
} else if (kind == LinkedNodeTypeKind.interface) {
var reference = referenceOfIndex(linkedType.interfaceClass);
Element element = elementFactory.elementOfReference(reference);
diff --git a/pkg/analyzer/lib/src/summary2/linked_element_factory.dart b/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
index aa95877..7653ed6 100644
--- a/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
+++ b/pkg/analyzer/lib/src/summary2/linked_element_factory.dart
@@ -87,9 +87,7 @@
if (parentName == '@function') {
CompilationUnitElementImpl enclosing = elementOfReference(parent2);
- enclosing.functions;
- assert(reference.element != null);
- return reference.element;
+ return _function(enclosing, reference);
}
if (parentName == '@getter') {
@@ -97,11 +95,14 @@
return _getter(enclosing, reference);
}
+ if (parentName == '@method') {
+ var enclosing = elementOfReference(parent2);
+ return _method(enclosing, reference);
+ }
+
if (parentName == '@parameter') {
ExecutableElementImpl enclosing = elementOfReference(parent2);
- enclosing.parameters;
- assert(reference.element != null);
- return reference.element;
+ return _parameter(enclosing, reference);
}
if (parentName == '@typeAlias') {
@@ -111,10 +112,7 @@
if (parentName == '@typeParameter') {
var enclosing = elementOfReference(parent2) as TypeParameterizedElement;
- enclosing.typeParameters;
- // Requesting type parameters sets elements for all their references.
- assert(reference.element != null);
- return reference.element;
+ return _typeParameter(enclosing, reference);
}
if (parentName == '@unit') {
@@ -199,6 +197,12 @@
return reference.element = libraryElement;
}
+ Element _function(CompilationUnitElementImpl enclosing, Reference reference) {
+ enclosing.functions;
+ assert(reference.element != null);
+ return reference.element;
+ }
+
PropertyAccessorElementImpl _getter(
ElementImpl enclosing, Reference reference) {
if (enclosing is ClassElementImpl) {
@@ -252,6 +256,19 @@
}
}
+ MethodElementImpl _method(ClassElementImpl enclosing, Reference reference) {
+ enclosing.methods;
+ // Requesting methods sets elements for all of them.
+ assert(reference.element != null);
+ return reference.element;
+ }
+
+ Element _parameter(ExecutableElementImpl enclosing, Reference reference) {
+ enclosing.parameters;
+ assert(reference.element != null);
+ return reference.element;
+ }
+
GenericTypeAliasElementImpl _typeAlias(
CompilationUnitElementImpl unit, Reference reference) {
if (reference.node == null) {
@@ -264,6 +281,14 @@
reference.node,
);
}
+
+ Element _typeParameter(
+ TypeParameterizedElement enclosing, Reference reference) {
+ enclosing.typeParameters;
+ // Requesting type parameters sets elements for all their references.
+ assert(reference.element != null);
+ return reference.element;
+ }
}
class _Library {
diff --git a/pkg/analyzer/lib/src/summary2/linked_unit_context.dart b/pkg/analyzer/lib/src/summary2/linked_unit_context.dart
index fcaac18..b1bb1f4 100644
--- a/pkg/analyzer/lib/src/summary2/linked_unit_context.dart
+++ b/pkg/analyzer/lib/src/summary2/linked_unit_context.dart
@@ -93,6 +93,11 @@
kind == LinkedNodeKind.variableDeclaration) {
return node.annotatedNode_metadata;
}
+ if (kind == LinkedNodeKind.fieldFormalParameter ||
+ kind == LinkedNodeKind.functionTypedFormalParameter ||
+ kind == LinkedNodeKind.simpleFormalParameter) {
+ return node.normalFormalParameter_metadata;
+ }
return const <LinkedNode>[];
}
@@ -148,6 +153,8 @@
} else if (kind == LinkedNodeKind.classDeclaration ||
kind == LinkedNodeKind.mixinDeclaration) {
typeParameterList = node.classOrMixinDeclaration_typeParameters;
+ } else if (kind == LinkedNodeKind.constructorDeclaration) {
+ return const [];
} else if (kind == LinkedNodeKind.functionDeclaration) {
return getTypeParameters(node.functionDeclaration_functionExpression);
} else if (kind == LinkedNodeKind.functionExpression) {
@@ -331,6 +338,9 @@
}
Expression readInitializer(LinkedNode linkedNode) {
+ if (linkedNode.kind == LinkedNodeKind.defaultFormalParameter) {
+ return readNode(linkedNode.defaultFormalParameter_defaultValue);
+ }
return readNode(linkedNode.variableDeclaration_initializer);
}
diff --git a/pkg/analyzer/lib/src/summary2/metadata_resolver.dart b/pkg/analyzer/lib/src/summary2/metadata_resolver.dart
index 8c36981..2030086 100644
--- a/pkg/analyzer/lib/src/summary2/metadata_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/metadata_resolver.dart
@@ -34,6 +34,12 @@
_class(unit, unitDeclaration);
} else if (kind == LinkedNodeKind.enumDeclaration) {
_enumDeclaration(unit, unitDeclaration);
+ } else if (kind == LinkedNodeKind.functionDeclaration) {
+ var function = unitDeclaration.functionDeclaration_functionExpression;
+ _formalParameterList(
+ unit,
+ function.functionExpression_formalParameters,
+ );
} else if (kind == LinkedNodeKind.topLevelVariableDeclaration) {
_variables(
unit,
@@ -63,6 +69,11 @@
classMember,
classMember.fieldDeclaration_fields,
);
+ } else if (kind == LinkedNodeKind.methodDeclaration) {
+ _formalParameterList(
+ unit,
+ classMember.methodDeclaration_formalParameters,
+ );
}
}
}
@@ -76,6 +87,23 @@
}
}
+ void _formalParameterList(UnitBuilder unit, LinkedNodeBuilder node) {
+ if (node == null) return;
+
+ for (var parameter in node.formalParameterList_parameters) {
+ if (parameter.kind == LinkedNodeKind.defaultFormalParameter) {
+ var actual = parameter.defaultFormalParameter_parameter;
+ var unresolved = actual.normalFormalParameter_metadata;
+ var resolved = _list(unit, unresolved);
+ actual.normalFormalParameter_metadata = resolved;
+ } else {
+ var unresolved = parameter.normalFormalParameter_metadata;
+ var resolved = _list(unit, unresolved);
+ parameter.normalFormalParameter_metadata = resolved;
+ }
+ }
+ }
+
List<LinkedNodeBuilder> _list(UnitBuilder unit, List<LinkedNode> unresolved) {
var resolved = List<LinkedNodeBuilder>(unresolved.length);
for (var i = 0; i < unresolved.length; ++i) {
diff --git a/pkg/analyzer/lib/src/summary2/reference_resolver.dart b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
index 75c798f..f044c1b 100644
--- a/pkg/analyzer/lib/src/summary2/reference_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
@@ -143,6 +143,9 @@
}
void _functionDeclaration(LinkedNodeBuilder node) {
+ var name = unit.context.getUnitMemberName(node);
+ reference = reference.getChild('@function').getChild(name);
+
var function = node.functionDeclaration_functionExpression;
var typeParameters = function.functionExpression_typeParameters;
_withTypeParameters(typeParameters, () {
@@ -157,6 +160,8 @@
_node(function.functionExpression_formalParameters);
});
+
+ reference = reference.parent.parent;
}
void _functionExpression(LinkedNodeBuilder node) {
@@ -265,6 +270,8 @@
_compilationUnit(node);
} else if (node.kind == LinkedNodeKind.constructorDeclaration) {
_constructorDeclaration(node);
+ } else if (node.kind == LinkedNodeKind.defaultFormalParameter) {
+ _node(node.defaultFormalParameter_parameter);
} else if (node.kind == LinkedNodeKind.enumDeclaration) {
_enumDeclaration(node);
} else if (node.kind == LinkedNodeKind.enumConstantDeclaration) {
diff --git a/pkg/analyzer/lib/src/summary2/tokens_context.dart b/pkg/analyzer/lib/src/summary2/tokens_context.dart
index ba5ea17..36b9d5a 100644
--- a/pkg/analyzer/lib/src/summary2/tokens_context.dart
+++ b/pkg/analyzer/lib/src/summary2/tokens_context.dart
@@ -4,6 +4,7 @@
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/src/dart/ast/token.dart';
+import 'package:analyzer/src/summary/format.dart';
import 'package:analyzer/src/summary/idl.dart';
import 'package:analyzer/src/summary2/tokens_writer.dart';
@@ -24,6 +25,23 @@
TokensContext.fromResult(
this._tokens, this._indexToToken, this._tokenToIndex);
+ /// TODO(scheglov) Not used yet, maybe remove.
+ int addSyntheticToken(
+ UnlinkedTokenKind kind, UnlinkedTokenType type, String lexeme) {
+ var index = _tokens.kind.length;
+ UnlinkedTokensBuilder tokens = _tokens;
+ tokens.kind.add(kind);
+ tokens.lexeme.add(lexeme);
+ tokens.offset.add(0);
+ tokens.length.add(0);
+ tokens.type.add(type);
+ tokens.next.add(0);
+ tokens.endGroup.add(0);
+ tokens.precedingComment.add(0);
+ tokens.isSynthetic.add(true);
+ return index;
+ }
+
int indexOfToken(Token token) {
if (token == null) return 0;
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index d714997..ca02fea 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -57,13 +57,15 @@
bool withConstElements: true,
bool withOffsets: false,
bool withSyntheticAccessors: false,
- bool withSyntheticFields: false}) {
+ bool withSyntheticFields: false,
+ bool withTypes: false}) {
var writer = new _ElementWriter(
withCodeRanges: withCodeRanges,
withConstElements: withConstElements,
withOffsets: withOffsets,
withSyntheticAccessors: withSyntheticAccessors,
- withSyntheticFields: withSyntheticFields);
+ withSyntheticFields: withSyntheticFields,
+ withTypes: withTypes);
writer.writeLibraryElement(library);
String actualText = writer.buffer.toString();
@@ -129,6 +131,7 @@
final bool withConstElements;
final bool withSyntheticAccessors;
final bool withSyntheticFields;
+ final bool withTypes;
final StringBuffer buffer = new StringBuffer();
_ElementWriter(
@@ -136,7 +139,8 @@
this.withConstElements: true,
this.withOffsets: false,
this.withSyntheticAccessors: false,
- this.withSyntheticFields: false});
+ this.withSyntheticFields: false,
+ this.withTypes: false});
bool isDynamicType(DartType type) => type is DynamicTypeImpl;
@@ -387,6 +391,8 @@
}
if (e.typeArguments != null) {
writeList('<', '>', e.typeArguments.arguments, ', ', writeExpression);
+ } else if (withTypes) {
+ writeInterfaceTypeArgsComment(e);
}
writeList('[', ']', e.elements2, ', ', writeExpression,
includeEmpty: true);
@@ -399,6 +405,8 @@
}
if (e.typeArguments != null) {
writeList('<', '>', e.typeArguments.arguments, ', ', writeExpression);
+ } else if (withTypes) {
+ writeInterfaceTypeArgsComment(e);
}
writeList('{', '}', e.elements2, ', ', writeExpression,
includeEmpty: true);
@@ -479,6 +487,9 @@
(Token token) => buffer.write(token.lexeme));
} else if (e is ThisExpression) {
buffer.write('this');
+ } else if (e is ThrowExpression) {
+ buffer.write('throw ');
+ writeExpression(e.expression);
} else if (e is TypeName) {
writeExpression(e.name);
if (e.typeArguments != null) {
@@ -569,6 +580,11 @@
}
}
+ void writeInterfaceTypeArgsComment(Expression e) {
+ var typeArguments = (e.staticType as InterfaceType).typeArguments;
+ writeList('/*typeArgs=', '*/', typeArguments, ',', writeType);
+ }
+
void writeLibraryElement(LibraryElement e) {
if (e.documentationComment != null) {
buffer.writeln(e.documentationComment);
diff --git a/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart b/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
index f3b69e9..1d051a9 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_ast2_test.dart
@@ -27,6 +27,9 @@
class ResynthesizeAst2Test extends ResynthesizeTestStrategyTwoPhase
with ResynthesizeTestCases {
@override
+ bool get isAstBasedSummary => true;
+
+ @override
Future<LibraryElementImpl> checkLibrary(String text,
{bool allowErrors = false, bool dumpSummaries = false}) async {
var dartCoreSource = sourceFactory.forUri('dart:core');
@@ -54,6 +57,7 @@
abstract class String {
int get length;
+ String operator +(String other);
}
abstract class Symbol {}
@@ -64,9 +68,46 @@
abstract class double extends num {}
-abstract class int extends num {}
+abstract class int extends num {
+ bool get isEven => false;
+ bool get isNegative;
+
+ int operator &(int other);
+ int operator -();
+ int operator <<(int shiftAmount);
+ int operator >>(int shiftAmount);
+ int operator ^(int other);
+ int operator |(int other);
+ int operator ~();
+}
-abstract class num implements Comparable<num> {}
+abstract class num implements Comparable<num> {
+ bool operator <(num other);
+ bool operator <=(num other);
+ bool operator ==(Object other);
+ bool operator >(num other);
+ bool operator >=(num other);
+
+ double operator /(num other);
+ double toDouble();
+
+ int operator <<(int other);
+ int operator >>(int other);
+ int operator ^(int other);
+ int operator |(int other);
+ int operator ~();
+ int operator ~/(num other);
+
+ int round();
+ int toInt();
+ num abs();
+
+ num operator %(num other);
+ num operator *(num other);
+ num operator +(num other);
+ num operator -();
+ num operator -(num other);
+}
''';
var dartCoreResult = _link(dartCoreSource, dartCoreCode);
@@ -180,18 +221,6 @@
@override
@failingTest
- test_class_setter_invalid_named_parameter() async {
- await super.test_class_setter_invalid_named_parameter();
- }
-
- @override
- @failingTest
- test_class_setter_invalid_optional_parameter() async {
- await super.test_class_setter_invalid_optional_parameter();
- }
-
- @override
- @failingTest
test_class_type_parameters_f_bound_complex() async {
await super.test_class_type_parameters_f_bound_complex();
}
@@ -312,18 +341,6 @@
@override
@failingTest
- test_const_invokeConstructor_generic_named() async {
- await super.test_const_invokeConstructor_generic_named();
- }
-
- @override
- @failingTest
- test_const_invokeConstructor_generic_named_imported() async {
- await super.test_const_invokeConstructor_generic_named_imported();
- }
-
- @override
- @failingTest
test_const_invokeConstructor_generic_named_imported_withPrefix() async {
await super
.test_const_invokeConstructor_generic_named_imported_withPrefix();
@@ -331,24 +348,6 @@
@override
@failingTest
- test_const_invokeConstructor_generic_noTypeArguments() async {
- await super.test_const_invokeConstructor_generic_noTypeArguments();
- }
-
- @override
- @failingTest
- test_const_invokeConstructor_generic_unnamed() async {
- await super.test_const_invokeConstructor_generic_unnamed();
- }
-
- @override
- @failingTest
- test_const_invokeConstructor_generic_unnamed_imported() async {
- await super.test_const_invokeConstructor_generic_unnamed_imported();
- }
-
- @override
- @failingTest
test_const_invokeConstructor_generic_unnamed_imported_withPrefix() async {
await super
.test_const_invokeConstructor_generic_unnamed_imported_withPrefix();
@@ -416,24 +415,6 @@
@override
@failingTest
- test_const_length_staticMethod() async {
- await super.test_const_length_staticMethod();
- }
-
- @override
- @failingTest
- test_const_list_inferredType() async {
- await super.test_const_list_inferredType();
- }
-
- @override
- @failingTest
- test_const_map_inferredType() async {
- await super.test_const_map_inferredType();
- }
-
- @override
- @failingTest
test_const_parameterDefaultValue_initializingFormal_functionTyped() async {
await super
.test_const_parameterDefaultValue_initializingFormal_functionTyped();
@@ -454,24 +435,12 @@
@override
@failingTest
- test_const_parameterDefaultValue_normal() async {
- await super.test_const_parameterDefaultValue_normal();
- }
-
- @override
- @failingTest
test_const_reference_staticField_imported_withPrefix() async {
await super.test_const_reference_staticField_imported_withPrefix();
}
@override
@failingTest
- test_const_reference_staticMethod() async {
- await super.test_const_reference_staticMethod();
- }
-
- @override
- @failingTest
test_const_reference_staticMethod_imported() async {
await super.test_const_reference_staticMethod_imported();
}
@@ -484,24 +453,12 @@
@override
@failingTest
- test_const_reference_topLevelFunction() async {
- await super.test_const_reference_topLevelFunction();
- }
-
- @override
- @failingTest
test_const_reference_topLevelFunction_generic() async {
await super.test_const_reference_topLevelFunction_generic();
}
@override
@failingTest
- test_const_reference_topLevelFunction_imported() async {
- await super.test_const_reference_topLevelFunction_imported();
- }
-
- @override
- @failingTest
test_const_reference_topLevelFunction_imported_withPrefix() async {
await super.test_const_reference_topLevelFunction_imported_withPrefix();
}
@@ -520,12 +477,6 @@
@override
@failingTest
- test_const_reference_type() async {
- await super.test_const_reference_type();
- }
-
- @override
- @failingTest
test_const_reference_type_functionType() async {
await super.test_const_reference_type_functionType();
}
@@ -556,48 +507,6 @@
@override
@failingTest
- test_const_topLevel_binary() async {
- await super.test_const_topLevel_binary();
- }
-
- @override
- @failingTest
- test_const_topLevel_conditional() async {
- await super.test_const_topLevel_conditional();
- }
-
- @override
- @failingTest
- test_const_topLevel_identical() async {
- await super.test_const_topLevel_identical();
- }
-
- @override
- @failingTest
- test_const_topLevel_parenthesis() async {
- await super.test_const_topLevel_parenthesis();
- }
-
- @override
- @failingTest
- test_const_topLevel_prefix() async {
- await super.test_const_topLevel_prefix();
- }
-
- @override
- @failingTest
- test_const_topLevel_throw() async {
- await super.test_const_topLevel_throw();
- }
-
- @override
- @failingTest
- test_const_topLevel_typedList() async {
- await super.test_const_topLevel_typedList();
- }
-
- @override
- @failingTest
test_const_topLevel_typedList_importedWithPrefix() async {
await super.test_const_topLevel_typedList_importedWithPrefix();
}
@@ -610,12 +519,6 @@
@override
@failingTest
- test_const_topLevel_typedMap() async {
- await super.test_const_topLevel_typedMap();
- }
-
- @override
- @failingTest
test_constExpr_pushReference_field_simpleIdentifier() async {
await super.test_constExpr_pushReference_field_simpleIdentifier();
}
@@ -1061,18 +964,6 @@
@override
@failingTest
- test_function_parameter_kind_named() async {
- await super.test_function_parameter_kind_named();
- }
-
- @override
- @failingTest
- test_function_parameter_kind_positional() async {
- await super.test_function_parameter_kind_positional();
- }
-
- @override
- @failingTest
test_function_parameter_parameters() async {
await super.test_function_parameter_parameters();
}
@@ -1091,12 +982,6 @@
@override
@failingTest
- test_function_type_parameter() async {
- await super.test_function_type_parameter();
- }
-
- @override
- @failingTest
test_function_type_parameter_with_function_typed_parameter() async {
await super.test_function_type_parameter_with_function_typed_parameter();
}
@@ -1237,12 +1122,6 @@
@override
@failingTest
- test_infer_instanceCreation_fromArguments() async {
- await super.test_infer_instanceCreation_fromArguments();
- }
-
- @override
- @failingTest
test_inference_issue_32394() async {
await super.test_inference_issue_32394();
}
@@ -1428,24 +1307,12 @@
@override
@failingTest
- test_invalid_nameConflict_imported() async {
- await super.test_invalid_nameConflict_imported();
- }
-
- @override
- @failingTest
test_invalid_nameConflict_imported_exported() async {
await super.test_invalid_nameConflict_imported_exported();
}
@override
@failingTest
- test_invalid_nameConflict_local() async {
- await super.test_invalid_nameConflict_local();
- }
-
- @override
- @failingTest
test_invalid_setterParameter_fieldFormalParameter() async {
await super.test_invalid_setterParameter_fieldFormalParameter();
}
@@ -1602,12 +1469,6 @@
@override
@failingTest
- test_metadata_simpleFormalParameter() async {
- await super.test_metadata_simpleFormalParameter();
- }
-
- @override
- @failingTest
test_metadata_simpleFormalParameter_withDefault() async {
await super.test_metadata_simpleFormalParameter_withDefault();
}
@@ -1700,30 +1561,12 @@
@override
@failingTest
- test_parameterTypeNotInferred_constructor() async {
- await super.test_parameterTypeNotInferred_constructor();
- }
-
- @override
- @failingTest
test_parameterTypeNotInferred_initializingFormal() async {
await super.test_parameterTypeNotInferred_initializingFormal();
}
@override
@failingTest
- test_parameterTypeNotInferred_staticMethod() async {
- await super.test_parameterTypeNotInferred_staticMethod();
- }
-
- @override
- @failingTest
- test_parameterTypeNotInferred_topLevelFunction() async {
- await super.test_parameterTypeNotInferred_topLevelFunction();
- }
-
- @override
- @failingTest
test_parts() async {
await super.test_parts();
}
@@ -2018,12 +1861,6 @@
@override
@failingTest
- test_unresolved_annotation_namedConstructorCall_noConstructor() async {
- await super.test_unresolved_annotation_namedConstructorCall_noConstructor();
- }
-
- @override
- @failingTest
test_unresolved_annotation_prefixedIdentifier_noDeclaration() async {
await super.test_unresolved_annotation_prefixedIdentifier_noDeclaration();
}
@@ -2069,12 +1906,6 @@
@override
@failingTest
- test_unused_type_parameter() async {
- await super.test_unused_type_parameter();
- }
-
- @override
- @failingTest
test_variable_getterInLib_setterInPart() async {
await super.test_variable_getterInLib_setterInPart();
}
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index 7c2c962..eba2037 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -2564,10 +2564,19 @@
var library = await checkLibrary('''
const Object x = const [1];
''');
- checkElementText(library, '''
+ if (isAstBasedSummary) {
+ checkElementText(
+ library,
+ '''
+const Object x = const /*typeArgs=int*/[1];
+''',
+ withTypes: true);
+ } else {
+ checkElementText(library, '''
const Object x = const <
int/*location: dart:core;int*/>[1];
''');
+ }
}
test_const_map_inferredType() async {
@@ -2577,11 +2586,20 @@
var library = await checkLibrary('''
const Object x = const {1: 1.0};
''');
- checkElementText(library, '''
+ if (isAstBasedSummary) {
+ checkElementText(
+ library,
+ '''
+const Object x = const /*typeArgs=int,double*/{1: 1.0};
+''',
+ withTypes: true);
+ } else {
+ checkElementText(library, '''
const Object x = const <
int/*location: dart:core;int*/,
double/*location: dart:core;double*/>{1: 1.0};
''');
+ }
}
test_const_parameterDefaultValue_initializingFormal_functionTyped() async {
@@ -3071,18 +3089,30 @@
var library = await checkLibrary(r'''
const vConditional = (1 == 2) ? 11 : 22;
''');
- checkElementText(library, r'''
+ if (isAstBasedSummary) {
+ checkElementText(library, r'''
+const int vConditional = (1 == 2) ? 11 : 22;
+''');
+ } else {
+ checkElementText(library, r'''
const int vConditional = 1 == 2 ? 11 : 22;
''');
+ }
}
test_const_topLevel_identical() async {
var library = await checkLibrary(r'''
const vIdentical = (1 == 2) ? 11 : 22;
''');
- checkElementText(library, r'''
+ if (isAstBasedSummary) {
+ checkElementText(library, r'''
+const int vIdentical = (1 == 2) ? 11 : 22;
+''');
+ } else {
+ checkElementText(library, r'''
const int vIdentical = 1 == 2 ? 11 : 22;
''');
+ }
}
test_const_topLevel_ifNull() async {
@@ -3174,10 +3204,16 @@
var library = await checkLibrary(r'''
const c = throw 42;
''');
- // This is a bug.
- checkElementText(library, r'''
+ if (isAstBasedSummary) {
+ checkElementText(library, r'''
+const dynamic c = throw 42;
+''');
+ } else {
+ // This is a bug.
+ checkElementText(library, r'''
const dynamic c;
''');
+ }
}
test_const_topLevel_typedList() async {
@@ -6807,6 +6843,23 @@
''');
}
+ test_metadata_simpleFormalParameter_method() async {
+ var library = await checkLibrary('''
+const a = null;
+
+class C {
+ m(@a x) {}
+}
+''');
+ checkElementText(library, r'''
+class C {
+ dynamic m(@
+ a/*location: test.dart;a?*/ dynamic x) {}
+}
+const dynamic a = null;
+''');
+ }
+
test_metadata_simpleFormalParameter_withDefault() async {
var library = await checkLibrary('const a = null; f([@a x = null]) {}');
checkElementText(library, r'''
diff --git a/pkg/analyzer/test/src/summary/test_strategies.dart b/pkg/analyzer/test/src/summary/test_strategies.dart
index 0ceebdf..5094b40 100644
--- a/pkg/analyzer/test/src/summary/test_strategies.dart
+++ b/pkg/analyzer/test/src/summary/test_strategies.dart
@@ -98,6 +98,8 @@
set declaredVariables(DeclaredVariables declaredVariables);
+ bool get isAstBasedSummary => false;
+
MemoryResourceProvider get resourceProvider;
void set testFile(String value);
@@ -132,6 +134,9 @@
PackageBundleAssembler bundleAssembler = new PackageBundleAssembler();
+ @override
+ bool get isAstBasedSummary => false;
+
TestSummaryResynthesizer encodeLibrary(Source source) {
_serializeLibrary(source);