@@ -15,6 +15,7 @@ import 'package:analyzer/src/dart/element/member.dart';
15
15
import 'package:analyzer/src/dart/element/type.dart' ;
16
16
import 'package:analyzer/src/dart/resolver/scope.dart' ;
17
17
import 'package:analyzer/src/generated/engine.dart' show AnalysisContext;
18
+ import 'package:analyzer/src/generated/resolver.dart' show TypeProvider;
18
19
import 'package:analyzer/src/generated/testing/ast_test_factory.dart' ;
19
20
import 'package:analyzer/src/summary/summary_sdk.dart' ;
20
21
import 'package:front_end/src/base/resolve_relative_uri.dart' ;
@@ -437,6 +438,9 @@ class _ExprBuilder {
437
438
438
439
_ExprBuilder (this ._context, this ._contextElement);
439
440
441
+ TypeProvider get typeProvider =>
442
+ _context.libraryContext.resynthesizer._typeProvider;
443
+
440
444
Expression build (kernel.Expression expr) {
441
445
if (_hasInvalidExpression (expr)) {
442
446
return AstTestFactory .identifier3 ('#invalidConst' );
@@ -536,15 +540,17 @@ class _ExprBuilder {
536
540
537
541
if (expr is kernel.ListLiteral ) {
538
542
Keyword keyword = expr.isConst ? Keyword .CONST : null ;
539
- var typeArguments = _buildTypeArgumentList ([expr.typeArgument]);
543
+ var typeArguments = _getTypes ([expr.typeArgument]);
544
+ var typeArgumentNodes = _buildTypeArgumentList (typeArguments);
540
545
var elements = expr.expressions.map (_build).toList ();
541
- return AstTestFactory .listLiteral2 (keyword, typeArguments, elements);
546
+ return AstTestFactory .listLiteral2 (keyword, typeArgumentNodes, elements)
547
+ ..staticType = typeProvider.listType.instantiate (typeArguments);
542
548
}
543
549
544
550
if (expr is kernel.MapLiteral ) {
545
551
Keyword keyword = expr.isConst ? Keyword .CONST : null ;
546
- var typeArguments =
547
- _buildTypeArgumentList ([expr.keyType, expr.valueType] );
552
+ var typeArguments = _getTypes ([expr.keyType, expr.valueType]);
553
+ var typeArgumentNodes = _buildTypeArgumentList (typeArguments );
548
554
549
555
int numberOfEntries = expr.entries.length;
550
556
var entries = new List <MapLiteralEntry >(numberOfEntries);
@@ -555,7 +561,7 @@ class _ExprBuilder {
555
561
entries[i] = AstTestFactory .mapLiteralEntry2 (key, value);
556
562
}
557
563
558
- return AstTestFactory .mapLiteral (keyword, typeArguments , entries);
564
+ return AstTestFactory .mapLiteral (keyword, typeArgumentNodes , entries);
559
565
}
560
566
561
567
if (expr is kernel.StaticGet ) {
@@ -661,12 +667,12 @@ class _ExprBuilder {
661
667
}
662
668
663
669
if (expr is kernel.ConstructorInvocation ) {
664
- var element = _getElement (expr.targetReference);
670
+ ConstructorElementImpl element = _getElement (expr.targetReference);
665
671
666
672
// It's safe to pass null for the TypeEnvironment because it isn't
667
673
// needed to compute the type of a constructor invocation.
668
674
var kernelType = expr.getStaticType (null );
669
- var type = _context. getType (_contextElement, kernelType);
675
+ var type = _getType ( kernelType);
670
676
TypeName typeName = _buildType (type);
671
677
672
678
var constructorName = AstTestFactory .constructorName (
@@ -675,8 +681,11 @@ class _ExprBuilder {
675
681
676
682
var keyword = expr.isConst ? Keyword .CONST : Keyword .NEW ;
677
683
var arguments = _toArguments (expr.arguments);
678
- return AstTestFactory .instanceCreationExpression (
684
+ var creation = AstTestFactory .instanceCreationExpression (
679
685
keyword, constructorName, arguments);
686
+ creation.staticElement = element;
687
+ creation.staticType = type;
688
+ return creation;
680
689
}
681
690
682
691
if (expr is kernel.Instantiation ) {
@@ -689,7 +698,7 @@ class _ExprBuilder {
689
698
if (kernelType is kernel.FunctionType ) {
690
699
element = _getElement (kernelType.typedefReference);
691
700
} else {
692
- var type = _context. getType (_contextElement, kernelType);
701
+ var type = _getType ( kernelType);
693
702
element = type.element;
694
703
}
695
704
var identifier = AstTestFactory .identifier3 (element.name);
@@ -739,15 +748,15 @@ class _ExprBuilder {
739
748
return node;
740
749
}
741
750
742
- TypeArgumentList _buildTypeArgumentList (List <kernel. DartType > kernels ) {
743
- int length = kernels .length;
744
- var types = new List <TypeAnnotation >(length);
751
+ TypeArgumentList _buildTypeArgumentList (List <DartType > types ) {
752
+ int length = types .length;
753
+ var typeAnnotations = new List <TypeAnnotation >(length);
745
754
for (int i = 0 ; i < length; i++ ) {
746
- DartType type = _context. getType (_contextElement, kernels [i]) ;
755
+ DartType type = types [i];
747
756
TypeAnnotation typeAnnotation = _buildType (type);
748
- types [i] = typeAnnotation;
757
+ typeAnnotations [i] = typeAnnotation;
749
758
}
750
- return AstTestFactory .typeArgumentList (types );
759
+ return AstTestFactory .typeArgumentList (typeAnnotations );
751
760
}
752
761
753
762
List <TypeAnnotation > _buildTypeArguments (List <DartType > types) {
@@ -760,6 +769,20 @@ class _ExprBuilder {
760
769
.getElementFromCanonicalName (reference? .canonicalName);
761
770
}
762
771
772
+ DartType _getType (kernel.DartType kernel) {
773
+ return _context.getType (_contextElement, kernel);
774
+ }
775
+
776
+ List <DartType > _getTypes (List <kernel.DartType > kernels) {
777
+ int length = kernels.length;
778
+ var types = new List <DartType >(length);
779
+ for (int i = 0 ; i < length; i++ ) {
780
+ DartType type = _getType (kernels[i]);
781
+ types[i] = type;
782
+ }
783
+ return types;
784
+ }
785
+
763
786
InterpolationElement _newInterpolationElement (Expression expr) {
764
787
if (expr is SimpleStringLiteral ) {
765
788
return astFactory.interpolationString (expr.literal, expr.value);
0 commit comments