| Index: pkg/analyzer/lib/src/summary/summarize_ast.dart
|
| diff --git a/pkg/analyzer/lib/src/summary/summarize_ast.dart b/pkg/analyzer/lib/src/summary/summarize_ast.dart
|
| index 3c4ddb72bfc2dae71d6c982a25ab112b7ca1e72f..b0c465497919487efd4050aa3c53e057b98f5cdf 100644
|
| --- a/pkg/analyzer/lib/src/summary/summarize_ast.dart
|
| +++ b/pkg/analyzer/lib/src/summary/summarize_ast.dart
|
| @@ -7,6 +7,7 @@ library serialization.summarize_ast;
|
| import 'package:analyzer/dart/ast/ast.dart';
|
| import 'package:analyzer/dart/ast/token.dart';
|
| import 'package:analyzer/dart/ast/visitor.dart';
|
| +import 'package:analyzer/dart/element/type.dart' show DartType;
|
| import 'package:analyzer/src/generated/utilities_dart.dart';
|
| import 'package:analyzer/src/summary/format.dart';
|
| import 'package:analyzer/src/summary/idl.dart';
|
| @@ -49,20 +50,20 @@ class _ConstExprSerializer extends AbstractConstExprSerializer {
|
| Identifier name = annotation.name;
|
| EntityRefBuilder constructor;
|
| if (name is PrefixedIdentifier && annotation.constructorName == null) {
|
| - constructor = serializeConstructorName(
|
| - new TypeName(name.prefix, null), name.identifier);
|
| + constructor =
|
| + serializeConstructorRef(null, name.prefix, null, name.identifier);
|
| } else {
|
| - constructor = serializeConstructorName(
|
| - new TypeName(annotation.name, null), annotation.constructorName);
|
| + constructor = serializeConstructorRef(
|
| + null, annotation.name, null, annotation.constructorName);
|
| }
|
| serializeInstanceCreation(constructor, annotation.arguments);
|
| }
|
| }
|
|
|
| @override
|
| - EntityRefBuilder serializeConstructorName(
|
| - TypeName type, SimpleIdentifier name) {
|
| - EntityRefBuilder typeBuilder = serializeType(type);
|
| + EntityRefBuilder serializeConstructorRef(DartType type, Identifier typeName,
|
| + TypeArgumentList typeArguments, SimpleIdentifier name) {
|
| + EntityRefBuilder typeBuilder = serializeType(type, typeName, typeArguments);
|
| if (name == null) {
|
| return typeBuilder;
|
| } else {
|
| @@ -117,8 +118,9 @@ class _ConstExprSerializer extends AbstractConstExprSerializer {
|
| }
|
|
|
| @override
|
| - EntityRefBuilder serializeType(TypeName node) {
|
| - return visitor.serializeTypeName(node);
|
| + EntityRefBuilder serializeType(
|
| + DartType type, Identifier name, TypeArgumentList arguments) {
|
| + return visitor.serializeType(name, arguments);
|
| }
|
| }
|
|
|
| @@ -750,12 +752,12 @@ class _SummarizeAstVisitor extends RecursiveAstVisitor {
|
| * a [EntityRef]. Note that this method does the right thing if the
|
| * name doesn't refer to an entity other than a type (e.g. a class member).
|
| */
|
| - EntityRefBuilder serializeTypeName(TypeName node) {
|
| - if (node == null) {
|
| + EntityRefBuilder serializeType(
|
| + Identifier identifier, TypeArgumentList typeArguments) {
|
| + if (identifier == null) {
|
| return null;
|
| } else {
|
| EntityRefBuilder b = new EntityRefBuilder();
|
| - Identifier identifier = node.name;
|
| if (identifier is SimpleIdentifier) {
|
| String name = identifier.name;
|
| int indexOffset = 0;
|
| @@ -788,9 +790,9 @@ class _SummarizeAstVisitor extends RecursiveAstVisitor {
|
| throw new StateError(
|
| 'Unexpected identifier type: ${identifier.runtimeType}');
|
| }
|
| - if (node.typeArguments != null) {
|
| + if (typeArguments != null) {
|
| // Trailing type arguments of type 'dynamic' should be omitted.
|
| - NodeList<TypeName> args = node.typeArguments.arguments;
|
| + NodeList<TypeName> args = typeArguments.arguments;
|
| int numArgsToSerialize = args.length;
|
| while (
|
| numArgsToSerialize > 0 && isDynamic(args[numArgsToSerialize - 1])) {
|
| @@ -809,6 +811,16 @@ class _SummarizeAstVisitor extends RecursiveAstVisitor {
|
| }
|
|
|
| /**
|
| + * Serialize a type name (which might be defined in a nested scope, at top
|
| + * level within this library, or at top level within an imported library) to
|
| + * a [EntityRef]. Note that this method does the right thing if the
|
| + * name doesn't refer to an entity other than a type (e.g. a class member).
|
| + */
|
| + EntityRefBuilder serializeTypeName(TypeName node) {
|
| + return serializeType(node?.name, node?.typeArguments);
|
| + }
|
| +
|
| + /**
|
| * Serialize the given [typeParameters] into a list of [UnlinkedTypeParam]s,
|
| * and also store them in [typeParameterScope].
|
| */
|
| @@ -950,9 +962,10 @@ class _SummarizeAstVisitor extends RecursiveAstVisitor {
|
| b.isFactory = true;
|
| if (node.redirectedConstructor != null) {
|
| b.isRedirectedConstructor = true;
|
| + TypeName typeName = node.redirectedConstructor.type;
|
| b.redirectedConstructor = new _ConstExprSerializer(this, null)
|
| - .serializeConstructorName(node.redirectedConstructor.type,
|
| - node.redirectedConstructor.name);
|
| + .serializeConstructorRef(null, typeName.name,
|
| + typeName.typeArguments, node.redirectedConstructor.name);
|
| }
|
| } else {
|
| for (ConstructorInitializer initializer in node.initializers) {
|
|
|