Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(25)

Unified Diff: pkg/analyzer/lib/src/summary/summarize_ast.dart

Issue 1943013002: Fix for serializing annotations. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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) {

Powered by Google App Engine
This is Rietveld 408576698