| Index: pkg/front_end/lib/src/fasta/kernel/kernel_mixin_application_builder.dart
|
| diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_mixin_application_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_mixin_application_builder.dart
|
| index 840febc64a52be6f72ab101ebc634f5b21f483d1..c73a92f7047734830a857752a82ff9a5aeb76280 100644
|
| --- a/pkg/front_end/lib/src/fasta/kernel/kernel_mixin_application_builder.dart
|
| +++ b/pkg/front_end/lib/src/fasta/kernel/kernel_mixin_application_builder.dart
|
| @@ -64,9 +64,10 @@ class KernelMixinApplicationBuilder
|
|
|
| TypeBuilder applyMixin(TypeBuilder supertype, TypeBuilder mixin) {
|
| KernelLibraryBuilder library = this.library.partOfLibrary ?? this.library;
|
| - List<TypeVariableBuilder> newTypeVariables;
|
| List<KernelTypeBuilder> typeArguments;
|
| + List<TypeVariableBuilder> newTypeVariables;
|
| if (typeVariables != null) {
|
| + assert(subclassName != null);
|
| newTypeVariables = library.copyTypeVariables(typeVariables);
|
| Map<TypeVariableBuilder, TypeBuilder> substitution =
|
| <TypeVariableBuilder, TypeBuilder>{};
|
| @@ -84,18 +85,32 @@ class KernelMixinApplicationBuilder
|
| String name = subclassName != null
|
| ? "${subclassName}^${mixin.name}"
|
| : "${supertype.name}&${mixin.name}";
|
| - SourceClassBuilder cls = new SourceClassBuilder(null, abstractMask, name,
|
| - newTypeVariables, supertype, null, <String, Builder>{}, library,
|
| - <ConstructorReferenceBuilder>[], charOffset, null, mixin);
|
| - library.addImplementationBuilder(name, cls, charOffset);
|
| - if (newTypeVariables != null) {
|
| - for (KernelTypeVariableBuilder t in newTypeVariables) {
|
| - cls.cls.typeParameters.add(t.parameter);
|
| +
|
| + SourceClassBuilder cls =
|
| + library.mixinApplicationClasses.putIfAbsent(name, () {
|
| + SourceClassBuilder cls = new SourceClassBuilder(
|
| + null,
|
| + abstractMask,
|
| + name,
|
| + newTypeVariables,
|
| + supertype,
|
| + null,
|
| + <String, Builder>{},
|
| + library,
|
| + <ConstructorReferenceBuilder>[],
|
| + charOffset,
|
| + null,
|
| + mixin);
|
| + library.addImplementationBuilder(name, cls, charOffset);
|
| + if (newTypeVariables != null) {
|
| + for (KernelTypeVariableBuilder t in newTypeVariables) {
|
| + cls.cls.typeParameters.add(t.parameter);
|
| + }
|
| + setParents(cls.cls.typeParameters, cls.cls);
|
| }
|
| - setParents(cls.cls.typeParameters, cls.cls);
|
| - }
|
| - return new KernelNamedTypeBuilder(name, typeArguments, charOffset,
|
| - library.fileUri)
|
| - ..builder = cls;
|
| + return cls;
|
| + });
|
| + return new KernelNamedTypeBuilder(
|
| + name, typeArguments, charOffset, library.fileUri)..builder = cls;
|
| }
|
| }
|
|
|