[vm/reload] Do class reload type parameter count check before finalization.

Fixes https://github.com/dart-lang/sdk/issues/45602

TEST=pkg/vm/test/incremental_compiler_test.dart

Change-Id: Iebf64c4d7ca8ba42209de27fe35ab1e03302d308
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/195305
Reviewed-by: RĂ©gis Crelier <regis@google.com>
Commit-Queue: Alexander Aprelev <aam@google.com>
diff --git a/runtime/vm/object_reload.cc b/runtime/vm/object_reload.cc
index 0a8c71f..e075887 100644
--- a/runtime/vm/object_reload.cc
+++ b/runtime/vm/object_reload.cc
@@ -657,6 +657,17 @@
   }
 
   if (is_finalized()) {
+    // Make sure the declaration types parameter count matches for the two
+    // classes.
+    // ex. class A<int,B> {} cannot be replace with class A<B> {}.
+    auto group_context = context->group_reload_context();
+    if (NumTypeParameters() != replacement.NumTypeParameters()) {
+      group_context->AddReasonForCancelling(
+          new (context->zone())
+              TypeParametersChanged(context->zone(), *this, replacement));
+      return;
+    }
+
     // Ensure the replacement class is also finalized.
     const Error& error =
         Error::Handle(replacement.EnsureIsFinalized(Thread::Current()));