Index: pkg/analyzer/lib/src/summary/summarize_elements.dart |
diff --git a/pkg/analyzer/lib/src/summary/summarize_elements.dart b/pkg/analyzer/lib/src/summary/summarize_elements.dart |
index ea21fde6e2c13c1aa9210b6dac0f19efc055b9ed..355397ab8fe3b91270335fcc1de3b501c8ca498e 100644 |
--- a/pkg/analyzer/lib/src/summary/summarize_elements.dart |
+++ b/pkg/analyzer/lib/src/summary/summarize_elements.dart |
@@ -7,6 +7,7 @@ library serialization.elements; |
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/member.dart'; |
import 'package:analyzer/src/dart/element/type.dart'; |
import 'package:analyzer/src/generated/ast.dart'; |
import 'package:analyzer/src/generated/resolver.dart'; |
@@ -538,14 +539,18 @@ class _CompilationUnitSerializer { |
b.kind = UnlinkedExecutableKind.constructor; |
b.isConst = executableElement.isConst; |
b.isFactory = executableElement.isFactory; |
- if (executableElement.redirectedConstructor != null) { |
+ ConstructorElement redirectedConstructor = |
+ executableElement.redirectedConstructor; |
+ if (redirectedConstructor != null) { |
b.isRedirectedConstructor = true; |
if (executableElement.isFactory) { |
- EntityRefBuilder typeRef = serializeTypeRef( |
- executableElement.redirectedConstructor.enclosingElement.type, |
- executableElement.redirectedConstructor.enclosingElement); |
- if (executableElement.redirectedConstructor.name.isNotEmpty) { |
- String name = executableElement.redirectedConstructor.name; |
+ InterfaceType returnType = redirectedConstructor is ConstructorMember |
+ ? redirectedConstructor.definingType |
+ : redirectedConstructor.enclosingElement.type; |
+ EntityRefBuilder typeRef = |
+ serializeTypeRef(returnType, executableElement); |
+ if (redirectedConstructor.name.isNotEmpty) { |
+ String name = redirectedConstructor.name; |
int typeId = typeRef.reference; |
LinkedReference typeLinkedRef = linkedReferences[typeId]; |
unlinkedReferences.add(new UnlinkedReferenceBuilder( |
@@ -559,8 +564,7 @@ class _CompilationUnitSerializer { |
b.redirectedConstructor = typeRef; |
} |
} else { |
- b.redirectedConstructorName = |
- executableElement.redirectedConstructor.name; |
+ b.redirectedConstructorName = redirectedConstructor.name; |
} |
} |
if (executableElement.isConst && |