Version 2.10.0-138.0.dev
Merge commit '122f07c7bb1ae8e7076de09e1deab9f7fd7ab85a' into 'dev'
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
index cc05f18..d05d23a 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
@@ -800,7 +800,9 @@
var element = parameter.enclosingElement;
if (element is ConstructorElement) {
if (Flutter.instance.isWidget(element.enclosingElement)) {
- var defaultValue = getDefaultStringParameterValue(parameter);
+ // Don't bother with nullability. It won't affect default list values.
+ var defaultValue =
+ getDefaultStringParameterValue(parameter, withNullability: false);
// TODO(devoncarew): Should we remove the check here? We would then
// suggest values for param types like closures.
if (defaultValue != null && defaultValue.text == '[]') {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart b/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
index 8063ce5..0568dba 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/utilities.dart
@@ -15,6 +15,7 @@
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart' as protocol
show Element, ElementKind;
+import 'package:meta/meta.dart';
/// The name of the type `dynamic`;
const DYNAMIC = 'dynamic';
@@ -169,7 +170,8 @@
}
/// Return a default argument value for the given [parameter].
-DefaultArgument getDefaultStringParameterValue(ParameterElement parameter) {
+DefaultArgument getDefaultStringParameterValue(ParameterElement parameter,
+ {@required bool withNullability}) {
if (parameter != null) {
var type = parameter.type;
if (type is InterfaceType) {
@@ -182,7 +184,8 @@
}
} else if (type is FunctionType) {
var params = type.parameters
- .map((p) => '${getTypeString(p.type)}${p.name}')
+ .map((p) =>
+ '${getTypeString(p.type, withNullability: withNullability)}${p.name}')
.join(', ');
// TODO(devoncarew): Support having this method return text with newlines.
var text = '($params) { }';
@@ -209,11 +212,11 @@
return content.substring(lineStartOffset, notWhitespaceOffset);
}
-String getTypeString(DartType type) {
+String getTypeString(DartType type, {@required bool withNullability}) {
if (type.isDynamic) {
return '';
} else {
- return type.getDisplayString(withNullability: false) + ' ';
+ return type.getDisplayString(withNullability: withNullability) + ' ';
}
}
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_required_argument.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_required_argument.dart
index ee07bf4..40e8f6f 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_missing_required_argument.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_missing_required_argument.dart
@@ -78,7 +78,9 @@
}
}
}
- var defaultValue = getDefaultStringParameterValue(missingParameter);
+ var defaultValue = getDefaultStringParameterValue(missingParameter,
+ withNullability: libraryElement.isNonNullableByDefault &&
+ missingParameter.library.isNonNullableByDefault);
await builder.addDartFileEdit(file, (builder) {
builder.addInsertion(offset, (builder) {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_missing_required_argument_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_missing_required_argument_test.dart
index fb1e129..2eb4fa8 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_missing_required_argument_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_missing_required_argument_test.dart
@@ -250,6 +250,99 @@
''');
}
+ Future<void> test_constructor_single_closure_nnbd() async {
+ createAnalysisOptionsFile(experiments: [EnableString.non_nullable]);
+ addMetaPackage();
+ addSource('/home/test/lib/a.dart', r'''
+import 'package:meta/meta.dart';
+
+typedef int Callback(int? a);
+
+class A {
+ A({@required Callback callback}) {}
+}
+''');
+ await resolveTestUnit('''
+import 'package:test/a.dart';
+
+main() {
+ A a = new A();
+ print(a);
+}
+''');
+ await assertHasFix('''
+import 'package:test/a.dart';
+
+main() {
+ A a = new A(callback: (int? a) { });
+ print(a);
+}
+''');
+ }
+
+ Future<void> test_constructor_single_closure_nnbd_from_legacy() async {
+ createAnalysisOptionsFile(experiments: [EnableString.non_nullable]);
+ addMetaPackage();
+ addSource('/home/test/lib/a.dart', r'''
+// @dart = 2.8
+import 'package:meta/meta.dart';
+
+typedef int Callback(int a);
+
+class A {
+ A({@required Callback callback}) {}
+}
+''');
+ await resolveTestUnit('''
+import 'package:test/a.dart';
+
+main() {
+ A a = new A();
+ print(a);
+}
+''');
+ await assertHasFix('''
+import 'package:test/a.dart';
+
+main() {
+ A a = new A(callback: (int a) { });
+ print(a);
+}
+''');
+ }
+
+ Future<void> test_constructor_single_closure_nnbd_into_legacy() async {
+ createAnalysisOptionsFile(experiments: [EnableString.non_nullable]);
+ addMetaPackage();
+ addSource('/home/test/lib/a.dart', r'''
+import 'package:meta/meta.dart';
+
+typedef int Callback(int? a);
+
+class A {
+ A({@required Callback callback}) {}
+}
+''');
+ await resolveTestUnit('''
+// @dart = 2.8
+import 'package:test/a.dart';
+
+main() {
+ A a = new A();
+ print(a);
+}
+''');
+ await assertHasFix('''
+// @dart = 2.8
+import 'package:test/a.dart';
+
+main() {
+ A a = new A(callback: (int a) { });
+ print(a);
+}
+''');
+ }
+
Future<void> test_constructor_single_list() async {
addMetaPackage();
addSource('/home/test/lib/a.dart', r'''
diff --git a/tests/language/variance/variance_downwards_inference_test.dart b/tests/language/variance/variance_downwards_inference_test.dart
index b6cd329..6e531b1 100644
--- a/tests/language/variance/variance_downwards_inference_test.dart
+++ b/tests/language/variance/variance_downwards_inference_test.dart
@@ -10,7 +10,7 @@
final T _x;
A(T x):_x = x;
T get x => _x;
- void set x(Object value) {}
+ void set x(Object? value) {}
}
class B<in T> {
@@ -22,7 +22,7 @@
final T _x;
C(T x, S y):_x = x;
T get x => _x;
- void set x(Object value) {}
+ void set x(Object? value) {}
void set y(S _value) {}
}
diff --git a/tools/VERSION b/tools/VERSION
index 52e320d..287371e 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 10
PATCH 0
-PRERELEASE 137
+PRERELEASE 138
PRERELEASE_PATCH 0
\ No newline at end of file