[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()));