@@ -319,8 +319,8 @@ class BodyBuilder extends ScopeListener<JumpTarget>
319319
320320 /// List of built type aliased generative constructor invocations that
321321 /// require unaliasing.
322- final List <ConstructorInvocation > typeAliasedConstructorInvocations =
323- < ConstructorInvocation > [];
322+ final List <TypeAliasedConstructorInvocationJudgment >
323+ typeAliasedConstructorInvocations = [];
324324
325325 /// List of built type aliased factory constructor invocations that require
326326 /// unaliasing.
@@ -1244,11 +1244,24 @@ class BodyBuilder extends ScopeListener<JumpTarget>
12441244 }
12451245
12461246 void _unaliasTypeAliasedConstructorInvocations () {
1247- for (ConstructorInvocation invocation
1247+ for (TypeAliasedConstructorInvocationJudgment invocation
12481248 in typeAliasedConstructorInvocations) {
1249- // TODO(eernst): Should replace aliased constructor invocations,
1250- // such that back ends don't see instance creations on type aliases.
1251- invocation.replaceWith (new NullLiteral ());
1249+ DartType unaliasedType = new TypedefType (
1250+ invocation.typeAliasBuilder.typedef ,
1251+ Nullability .nonNullable,
1252+ invocation.arguments.types)
1253+ .unalias;
1254+ List <DartType > invocationTypeArguments = null ;
1255+ if (unaliasedType is InterfaceType ) {
1256+ invocationTypeArguments = unaliasedType.typeArguments;
1257+ }
1258+ Arguments invocationArguments = new ArgumentsImpl (
1259+ invocation.arguments.positional,
1260+ types: invocationTypeArguments,
1261+ named: invocation.arguments.named);
1262+ invocation.replaceWith (new ConstructorInvocation (
1263+ invocation.target, invocationArguments,
1264+ isConst: invocation.isConst));
12521265 }
12531266 typeAliasedConstructorInvocations.clear ();
12541267 }
0 commit comments