Version 2.15.0-10.0.dev
Merge commit '29419292d5605a1fad8536c1b01bd4d0404db745' into 'dev'
diff --git a/pkg/analyzer_plugin/doc/tutorial/introduction.md b/pkg/analyzer_plugin/doc/tutorial/introduction.md
index d2da2ff..033031a 100644
--- a/pkg/analyzer_plugin/doc/tutorial/introduction.md
+++ b/pkg/analyzer_plugin/doc/tutorial/introduction.md
@@ -134,7 +134,7 @@
Navigation information can be requested both by an `analysis.getNavigation`
request and by a subscription. If the server has subscribed for navigation
-information in some set of files, the the plugin should send the information in
+information in some set of files, then the plugin should send the information in
an `analysis.navigation` notification whenever the information needs to be
updated.
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 160abbe..e80fead 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -9351,9 +9351,9 @@
closure_signature.FinalizeNameArray();
closure_function.InheritKernelOffsetFrom(*this);
- // Change covariant parameter types to either Object? for an opted-in implicit
- // closure or to Object* for a legacy implicit closure.
if (!is_static() && !IsConstructor()) {
+ // Change covariant parameter types to either Object? for an opted-in
+ // implicit closure or to Object* for a legacy implicit closure.
BitVector is_covariant(zone, NumParameters());
BitVector is_generic_covariant_impl(zone, NumParameters());
kernel::ReadParameterCovariance(*this, &is_covariant,
@@ -9372,6 +9372,22 @@
closure_signature.SetParameterTypeAt(i, object_type);
}
}
+ } else if (IsConstructor() && closure_signature.IsGeneric()) {
+ // Instantiate types of parameters as they may reference
+ // class type parameters.
+ const auto& instantiator_type_args = TypeArguments::Handle(
+ zone, AbstractType::Handle(zone, closure_signature.result_type())
+ .arguments());
+ auto& param_type = AbstractType::Handle(zone);
+ for (intptr_t i = kClosure; i < num_params; ++i) {
+ param_type = closure_signature.ParameterTypeAt(i);
+ if (!param_type.IsInstantiated()) {
+ param_type = param_type.InstantiateFrom(instantiator_type_args,
+ Object::null_type_arguments(),
+ kAllFree, Heap::kOld);
+ closure_signature.SetParameterTypeAt(i, param_type);
+ }
+ }
}
ASSERT(!closure_signature.IsFinalized());
closure_signature ^= ClassFinalizer::FinalizeType(closure_signature);
diff --git a/tools/VERSION b/tools/VERSION
index d25666f..5d291c9 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 15
PATCH 0
-PRERELEASE 9
+PRERELEASE 10
PRERELEASE_PATCH 0
\ No newline at end of file