Fix for invoking a generic method of a generic class from legacy code.

Bug: https://b.corp.google.com/issues/185971662
Change-Id: I71f4f251770e6e371bd6035911ca7c9562610540
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/196342
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
index 9f0dbdd..ba30eb0 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
@@ -16,6 +16,7 @@
 import 'package:analyzer/src/summary2/binary_format_doc.dart';
 import 'package:analyzer/src/summary2/data_writer.dart';
 import 'package:analyzer/src/summary2/reference.dart';
+import 'package:collection/collection.dart';
 
 Uint8List writeUnitToBytes({required CompilationUnit unit}) {
   var byteSink = ByteSink();
@@ -372,7 +373,7 @@
     required StringIndexer stringIndexer,
     required BufferedSink sink,
     required _BundleWriterReferences references,
-  })   : _stringIndexer = stringIndexer,
+  })  : _stringIndexer = stringIndexer,
         _sink = sink,
         _references2 = references;
 
@@ -596,7 +597,8 @@
       }
 
       return typeParameters
-          .map((typeParameter) => substitution[typeParameter]!)
+          .map((typeParameter) => substitution[typeParameter])
+          .whereNotNull()
           .toList(growable: false);
     }
 
diff --git a/pkg/analyzer/test/generated/invalid_code_test.dart b/pkg/analyzer/test/generated/invalid_code_test.dart
index acff967..ce22e20 100644
--- a/pkg/analyzer/test/generated/invalid_code_test.dart
+++ b/pkg/analyzer/test/generated/invalid_code_test.dart
@@ -449,6 +449,20 @@
 ''');
   }
 
+  test_methodInvocation_ofGenericClass_generic_static_fromLegacy() async {
+    newFile('$testPackageLibPath/a.dart', content: r'''
+class A<T> {
+  static void foo<T2>() {}
+}
+''');
+    await _assertCanBeAnalyzed('''
+// @dart = 2.9
+import 'a.dart';
+
+const bar = A.foo();
+''');
+  }
+
   Future<void> _assertCanBeAnalyzed(String text) async {
     await resolveTestCode(text);
     assertHasTestErrors();