Strict-inference: be lenient on @optionalTypeArgs classes

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

Change-Id: I01c7b12cdb36d06ab9d44fb080b15b30684cba3a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/156583
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
This commit is contained in:
Sam Rawlins 2020-07-30 22:48:04 +00:00 committed by commit-bot@chromium.org
parent c6deb3793f
commit 9f49ef9d82
2 changed files with 19 additions and 2 deletions

View file

@ -224,7 +224,10 @@ class GenericInferrer {
// by [infer], with [typeParam] filled in as its bounds. This is
// considered a failure of inference, under the "strict-inference"
// mode.
if (errorNode is ConstructorName) {
if (errorNode is ConstructorName &&
!(errorNode.type.type as InterfaceType)
.element
.hasOptionalTypeArgs) {
String constructorName = errorNode.name == null
? errorNode.type.name.name
: '${errorNode.type}.${errorNode.name}';

View file

@ -4,6 +4,7 @@
import 'package:analyzer/src/error/codes.dart';
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/test_utilities/package_mixin.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
@ -16,7 +17,8 @@ main() {
}
@reflectiveTest
class InferenceFailureOnInstanceCreationTest extends DriverResolutionTest {
class InferenceFailureOnInstanceCreationTest extends DriverResolutionTest
with PackageMixin {
@override
AnalysisOptionsImpl get analysisOptions =>
AnalysisOptionsImpl()..strictInference = true;
@ -74,6 +76,18 @@ void f() {
]);
}
test_missingTypeArgument_noInference_optionalTypeArgs() async {
addMetaPackage();
await assertNoErrorsInCode(r'''
import 'package:meta/meta.dart';
@optionalTypeArgs
class C<T> {}
void f() {
C();
}
''');
}
test_missingTypeArgument_upwardInference() async {
await assertNoErrorsInCode(r'''
import 'dart:collection';