@@ -56,11 +56,13 @@ import 'package:kernel/kernel.dart'
5656 VariableSet,
5757 VisitorDefault,
5858 VisitorVoidMixin,
59- Member;
59+ Member,
60+ TypeParameterType;
6061import 'package:kernel/kernel.dart' as kernel show Combinator;
6162import 'package:kernel/reference_from_index.dart' ;
6263import 'package:kernel/target/changed_structure_notifier.dart'
6364 show ChangedStructureNotifier;
65+ import 'package:kernel/type_algebra.dart' show Substitution;
6466import 'package:package_config/package_config.dart' show Package, PackageConfig;
6567
6668import '../api_prototype/experimental_flags.dart' ;
@@ -1863,6 +1865,25 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
18631865 cls,
18641866 offset,
18651867 );
1868+
1869+ Map <TypeParameter , TypeParameterType > substitutionMap = {};
1870+ Map <String , TypeParameter > typeDefinitionNamesMap = {};
1871+ for (TypeParameter typeDefinition in typeDefinitions) {
1872+ if (typeDefinition.name != null ) {
1873+ typeDefinitionNamesMap[typeDefinition.name! ] = typeDefinition;
1874+ }
1875+ }
1876+ for (TypeParameter typeParameter in foundScope.typeParameters) {
1877+ TypeParameter ? match = typeDefinitionNamesMap[typeParameter.name];
1878+ if (match != null ) {
1879+ substitutionMap[typeParameter] = new TypeParameterType (
1880+ match,
1881+ match.computeNullabilityFromBound (),
1882+ );
1883+ }
1884+ }
1885+ Substitution substitution = Substitution .fromMap (substitutionMap);
1886+
18661887 final bool alwaysInlineConstants = lastGoodKernelTarget
18671888 .backendTarget
18681889 .constantsBackend
@@ -1886,7 +1907,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
18861907 extraKnownVariables.add (
18871908 new VariableDeclarationImpl (
18881909 def.key,
1889- type: def.value.type,
1910+ type: substitution. substituteType ( def.value.type) ,
18901911 isConst: true ,
18911912 hasDeclaredInitializer: true ,
18921913 initializer: def.value.initializer,
@@ -1905,7 +1926,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
19051926 extraKnownVariables.add (
19061927 new VariableDeclarationImpl (
19071928 def.key,
1908- type: def.value.type,
1929+ type: substitution. substituteType ( def.value.type) ,
19091930 isConst: false ,
19101931 )..fileOffset = def.value.fileOffset,
19111932 );
@@ -1914,7 +1935,9 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
19141935 _ExtensionTypeFinder .isOrContainsExtensionType (
19151936 def.value.type,
19161937 )) {
1917- usedDefinitions[def.key] = def.value.type;
1938+ usedDefinitions[def.key] = substitution.substituteType (
1939+ def.value.type,
1940+ );
19181941 }
19191942 }
19201943 }
0 commit comments