Version 2.10.0-156.0.dev
Merge commit '5a120eae40e63116912bac7453ee8dc3e584da5b' into 'dev'
diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index 18686f8..12e1c33 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -11,7 +11,7 @@
"constraint, update this by running tools/generate_package_config.dart."
],
"configVersion": 2,
- "generated": "2020-09-18T09:56:27.880444",
+ "generated": "2020-08-18T15:38:52.410101",
"generator": "tools/generate_package_config.dart",
"packages": [
{
@@ -184,7 +184,7 @@
"name": "dart2js_info",
"rootUri": "../third_party/pkg/dart2js_info",
"packageUri": "lib/",
- "languageVersion": "2.3"
+ "languageVersion": "2.0"
},
{
"name": "dart2js_tools",
@@ -207,7 +207,8 @@
{
"name": "dart_style",
"rootUri": "../third_party/pkg_tested/dart_style",
- "packageUri": "lib/"
+ "packageUri": "lib/",
+ "languageVersion": "2.7"
},
{
"name": "dartdev",
@@ -347,7 +348,8 @@
{
"name": "js_runtime",
"rootUri": "../sdk/lib/_internal/js_runtime",
- "packageUri": "lib/"
+ "packageUri": "lib/",
+ "languageVersion": "2.10"
},
{
"name": "json_rpc_2",
@@ -482,7 +484,8 @@
{
"name": "pub",
"rootUri": "../third_party/pkg/pub",
- "packageUri": "lib/"
+ "packageUri": "lib/",
+ "languageVersion": "2.3"
},
{
"name": "pub_semver",
@@ -505,7 +508,8 @@
{
"name": "sdk_library_metadata",
"rootUri": "../sdk/lib/_internal/sdk_library_metadata",
- "packageUri": "lib/"
+ "packageUri": "lib/",
+ "languageVersion": "2.10"
},
{
"name": "shelf",
@@ -748,4 +752,4 @@
"languageVersion": "2.4"
}
]
-}
\ No newline at end of file
+}
diff --git a/DEPS b/DEPS
index 881deca..c6af26a 100644
--- a/DEPS
+++ b/DEPS
@@ -66,7 +66,7 @@
# Revisions of /third_party/* dependencies.
"args_tag": "1.6.0",
- "async_rev": "128c461a97dbdbd9336ba000ba5a5c02e79b8651",
+ "async_rev": "3fedad22c6940650526a86adebbf2872b81c2805",
"bazel_worker_rev": "26680d5e249b249c7216ab2fed0ac8ed4ee285c5",
"benchmark_harness_rev": "ec6b646f5443faa871e126ac1ba248c94ca06257",
"boolean_selector_rev": "665e6921ab246569420376f827bff4585dff0b14",
@@ -76,7 +76,7 @@
"charcode_rev": "4a685faba42d86ebd9d661eadd1e79d0a1c34c43",
"chrome_rev" : "19997",
"cli_util_tag" : "0.2.0",
- "collection_rev": "583693680fc067e34ca5b72503df25e8b80579f9",
+ "collection_rev": "65d3e58ee5289528ec280d361a67a631d65b3d7f",
"convert_rev": "c1b01f832835d3d8a06b0b246a361c0eaab35d3c",
"crypto_rev": "f7c48b334b1386bc5ab0f706fbcd6df8496a87fc",
"csslib_rev": "681a6603f86bbbe64e8af42d722aef63b028d241",
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/add_type_parameter.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/add_type_parameter.dart
index 885f1f1..50ef9fe 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/add_type_parameter.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/add_type_parameter.dart
@@ -39,9 +39,9 @@
@override
void apply(DartFileEditBuilder builder, DataDrivenFix fix, _Data data) {
if (data is _TypeArgumentData) {
- _applyToTypeArguments(builder, data);
+ _applyToTypeArguments(builder, fix, data);
} else if (data is _TypeParameterData) {
- _applyToTypeParameters(builder, data);
+ _applyToTypeParameters(builder, fix, data);
} else {
throw StateError('Unsupported class of data: ${data.runtimeType}');
}
@@ -50,23 +50,23 @@
@override
_Data validate(DataDrivenFix fix) {
var node = fix.node;
+ var context = TemplateContext(node, fix.utils);
if (node is NamedType) {
// wrong_number_of_type_arguments
// wrong_number_of_type_arguments_constructor
- var argument = argumentValue.generate(node, fix.utils);
- if (argument == null) {
+ if (!argumentValue.validate(context)) {
return null;
}
var typeArguments = node.typeArguments;
if (_isInvalidIndex(typeArguments?.arguments)) {
return null;
}
- return _TypeArgumentData(typeArguments, argument, node.name.end);
+ return _TypeArgumentData(typeArguments, node.name.end);
}
var parent = node.parent;
if (parent is InvocationExpression) {
// wrong_number_of_type_arguments_method
- var argument = argumentValue.generate(parent, fix.utils);
+ var argument = argumentValue.validate(context);
if (argument == null) {
return null;
}
@@ -74,60 +74,58 @@
if (_isInvalidIndex(typeArguments?.arguments)) {
return null;
}
- return _TypeArgumentData(
- typeArguments, argument, parent.argumentList.offset);
+ return _TypeArgumentData(typeArguments, parent.argumentList.offset);
} else if (parent is MethodDeclaration) {
// invalid_override
- String bound;
- if (extendedType != null) {
- bound = extendedType.generate(node, fix.utils);
- if (bound == null) {
- return null;
- }
+ if (extendedType != null && !extendedType.validate(context)) {
+ return null;
}
var typeParameters = parent.typeParameters;
if (_isInvalidIndex(typeParameters?.typeParameters)) {
return null;
}
- return _TypeParameterData(typeParameters, bound, parent.name.end);
+ return _TypeParameterData(typeParameters, parent.name.end);
} else if (node is TypeArgumentList && parent is ExtensionOverride) {
// wrong_number_of_type_arguments_extension
- var argument = argumentValue.generate(node, fix.utils);
+ var argument = argumentValue.validate(context);
if (argument == null) {
return null;
}
if (_isInvalidIndex(node?.arguments)) {
return null;
}
- return _TypeArgumentData(node, argument, parent.extensionName.end);
+ return _TypeArgumentData(node, parent.extensionName.end);
}
return null;
}
void _applyToTypeArguments(
- DartFileEditBuilder builder, _TypeArgumentData data) {
+ DartFileEditBuilder builder, DataDrivenFix fix, _TypeArgumentData data) {
var typeArguments = data.typeArguments;
- var argumentValue = data.argumentValue;
+ var argumentValueText = argumentValue.generate(fix.node, fix.utils);
if (typeArguments == null) {
// Adding the first type argument.
- builder.addSimpleInsertion(data.newListOffset, '<$argumentValue>');
+ builder.addSimpleInsertion(data.newListOffset, '<$argumentValueText>');
} else {
if (index == 0) {
// Inserting the type argument at the beginning of the list.
builder.addSimpleInsertion(
- typeArguments.leftBracket.end, '$argumentValue, ');
+ typeArguments.leftBracket.end, '$argumentValueText, ');
} else {
// Inserting the type argument after an existing type argument.
var previous = typeArguments.arguments[index - 1];
- builder.addSimpleInsertion(previous.end, ', $argumentValue');
+ builder.addSimpleInsertion(previous.end, ', $argumentValueText');
}
}
}
void _applyToTypeParameters(
- DartFileEditBuilder builder, _TypeParameterData data) {
- var argumentValue =
- data.bound == null ? name : '$name extends ${data.bound}';
+ DartFileEditBuilder builder, DataDrivenFix fix, _TypeParameterData data) {
+ var extendsClause = '';
+ if (extendedType != null) {
+ extendsClause = ' extends ${extendedType.generate(fix.node, fix.utils)}';
+ }
+ var argumentValue = '$name$extendsClause';
var typeParameters = data.typeParameters;
if (typeParameters == null) {
// Adding the first type argument.
@@ -160,15 +158,12 @@
/// `null` if the first type argument is being added.
final TypeArgumentList typeArguments;
- /// The value of the type argument being added.
- final String argumentValue;
-
/// The offset at which the type argument list should be inserted if
/// [typeArguments] is `null`.
final int newListOffset;
/// Initialize newly created data.
- _TypeArgumentData(this.typeArguments, this.argumentValue, this.newListOffset);
+ _TypeArgumentData(this.typeArguments, this.newListOffset);
}
/// The data returned when updating a type parameter list.
@@ -177,14 +172,10 @@
/// or `null` if the first type parameter is being added.
final TypeParameterList typeParameters;
- /// The bound of the type parameter being added, or `null` if there is no
- /// bound.
- final String bound;
-
/// The offset at which the type parameter list should be inserted if
/// [typeParameters] is `null`.
final int newListOffset;
/// Initialize newly created data.
- _TypeParameterData(this.typeParameters, this.bound, this.newListOffset);
+ _TypeParameterData(this.typeParameters, this.newListOffset);
}
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/code_template.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/code_template.dart
index 9729bfd..941d9be 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/code_template.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/code_template.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import 'package:analysis_server/src/services/correction/fix/data_driven/value_extractor.dart';
+import 'package:analysis_server/src/services/correction/fix/data_driven/value_generator.dart';
import 'package:analysis_server/src/services/correction/util.dart';
import 'package:analyzer/dart/ast/ast.dart';
@@ -26,6 +26,17 @@
}
return buffer.toString();
}
+
+ /// Use the [context] to validate that this template will be able to generate
+ /// a value.
+ bool validate(TemplateContext context) {
+ for (var component in components) {
+ if (!component.validate(context)) {
+ return false;
+ }
+ }
+ return true;
+ }
}
/// The kinds of code that can be generated by a template.
@@ -40,6 +51,10 @@
/// the [context] to access needed information that isn't already known to
/// this component.
void appendTo(StringSink sink, TemplateContext context);
+
+ /// Use the [context] to validate that this component will be able to generate
+ /// a value.
+ bool validate(TemplateContext context);
}
/// The context in which a template is being evaluated.
@@ -59,9 +74,9 @@
TemplateContext(this.node, this.utils);
/// Return the value of the variable with the given [name].
- String valueOf(ValueGenerator extractor) {
- return _variableValues.putIfAbsent(extractor, () {
- return extractor.from(this);
+ String valueOf(ValueGenerator generator) {
+ return _variableValues.putIfAbsent(generator, () {
+ return generator.from(this);
});
}
}
@@ -78,18 +93,28 @@
void appendTo(StringSink sink, TemplateContext context) {
sink.write(text);
}
+
+ @override
+ bool validate(TemplateContext context) {
+ return true;
+ }
}
/// A reference to a variable within a template.
class TemplateVariable extends TemplateComponent {
- /// The extractor used to compute the value of the variable.
- final ValueGenerator extractor;
+ /// The generator used to compute the value of the variable.
+ final ValueGenerator generator;
- /// Initialize a newly created template variable with the given [name].
- TemplateVariable(this.extractor);
+ /// Initialize a newly created template variable with the given [generator].
+ TemplateVariable(this.generator);
@override
void appendTo(StringSink sink, TemplateContext context) {
- sink.write(context.valueOf(extractor));
+ sink.write(context.valueOf(generator));
+ }
+
+ @override
+ bool validate(TemplateContext context) {
+ return generator.validate(context);
}
}
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_parser.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_parser.dart
index 0f48e1c..1521f7c 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_parser.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_parser.dart
@@ -12,7 +12,7 @@
import 'package:analysis_server/src/services/correction/fix/data_driven/transform.dart';
import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set.dart';
import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
-import 'package:analysis_server/src/services/correction/fix/data_driven/value_extractor.dart';
+import 'package:analysis_server/src/services/correction/fix/data_driven/value_generator.dart';
import 'package:analysis_server/src/utilities/extensions/yaml.dart';
import 'package:analyzer/error/listener.dart';
import 'package:meta/meta.dart';
@@ -127,9 +127,9 @@
}
/// Convert the given [template] into a list of components. Variable
- /// references in the template are looked up in the map of [extractors].
+ /// references in the template are looked up in the map of [generators].
List<TemplateComponent> _extractTemplateComponents(String template,
- Map<String, ValueGenerator> extractors, int templateOffset) {
+ Map<String, ValueGenerator> generators, int templateOffset) {
var components = <TemplateComponent>[];
var textStart = 0;
var variableStart = template.indexOf(_openComponent);
@@ -148,7 +148,7 @@
return null;
} else {
var name = template.substring(variableStart + 2, endIndex).trim();
- var extractor = extractors[name];
+ var extractor = generators[name];
if (extractor == null) {
errorReporter.reportErrorForOffset(
TransformSetErrorCode.undefinedVariable,
@@ -662,18 +662,18 @@
Map<String, ValueGenerator> _translateTemplateVariables(
YamlNode node, ErrorContext context) {
if (node is YamlMap) {
- var extractors = <String, ValueGenerator>{};
+ var generators = <String, ValueGenerator>{};
for (var entry in node.nodes.entries) {
var name = _translateKey(entry.key);
if (name != null) {
var value = _translateValueExtractor(
entry.value, ErrorContext(key: name, parentNode: node));
if (value != null) {
- extractors[name] = value;
+ generators[name] = value;
}
}
}
- return extractors;
+ return generators;
} else if (node == null) {
return const {};
} else {
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/value_extractor.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/value_generator.dart
similarity index 74%
rename from pkg/analysis_server/lib/src/services/correction/fix/data_driven/value_extractor.dart
rename to pkg/analysis_server/lib/src/services/correction/fix/data_driven/value_generator.dart
index 26239d9..43d83fc 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/value_extractor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/value_generator.dart
@@ -30,6 +30,19 @@
return null;
}
+ @override
+ bool validate(TemplateContext context) {
+ var argumentList = _getArgumentList(context.node);
+ if (argumentList == null) {
+ return false;
+ }
+ var expression = parameter.argumentFrom(argumentList);
+ if (expression != null) {
+ return false;
+ }
+ return true;
+ }
+
/// Return the argument list associated with the given [node].
ArgumentList _getArgumentList(AstNode node) {
if (node is ArgumentList) {
@@ -38,6 +51,13 @@
return node.argumentList;
} else if (node is InstanceCreationExpression) {
return node.argumentList;
+ } else if (node is TypeArgumentList) {
+ var parent = node.parent;
+ if (parent is InvocationExpression) {
+ return parent.argumentList;
+ } else if (parent is ExtensionOverride) {
+ return parent.argumentList;
+ }
}
return null;
}
@@ -59,6 +79,12 @@
// TODO(brianwilkerson) Figure out how to add the import when necessary.
return name;
}
+
+ @override
+ bool validate(TemplateContext context) {
+ // TODO(brianwilkerson) Validate that the import can be added.
+ return true;
+ }
}
/// An object used to generate the value of a template variable.
@@ -66,4 +92,8 @@
/// Use the [context] to generate the value of a template variable and return
/// the generated value.
String from(TemplateContext context);
+
+ /// Use the [context] to validate that this generator will be able to generate
+ /// a value.
+ bool validate(TemplateContext context);
}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/code_template_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/code_template_test.dart
index 46f405c..5713fb6 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/code_template_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/code_template_test.dart
@@ -4,7 +4,7 @@
import 'package:analysis_server/src/services/correction/fix/data_driven/code_template.dart';
import 'package:analysis_server/src/services/correction/fix/data_driven/parameter_reference.dart';
-import 'package:analysis_server/src/services/correction/fix/data_driven/value_extractor.dart';
+import 'package:analysis_server/src/services/correction/fix/data_driven/value_generator.dart';
import 'package:analysis_server/src/services/correction/util.dart';
import 'package:analyzer/dart/ast/ast.dart';
import 'package:test/test.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_parser_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_parser_test.dart
index 857d315..9e8c38a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_parser_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/transform_set_parser_test.dart
@@ -8,7 +8,7 @@
import 'package:analysis_server/src/services/correction/fix/data_driven/parameter_reference.dart';
import 'package:analysis_server/src/services/correction/fix/data_driven/rename.dart';
import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_error_code.dart';
-import 'package:analysis_server/src/services/correction/fix/data_driven/value_extractor.dart';
+import 'package:analysis_server/src/services/correction/fix/data_driven/value_generator.dart';
import 'package:matcher/matcher.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -60,7 +60,7 @@
var components = modification.argumentValue.components;
expect(components, hasLength(1));
var value =
- (components[0] as TemplateVariable).extractor as ArgumentExpression;
+ (components[0] as TemplateVariable).generator as ArgumentExpression;
var parameter = value.parameter as PositionalParameterReference;
expect(parameter.index, 1);
}
@@ -132,7 +132,7 @@
var components = modification.argumentValue.components;
expect(components, hasLength(1));
var value =
- (components[0] as TemplateVariable).extractor as ArgumentExpression;
+ (components[0] as TemplateVariable).generator as ArgumentExpression;
var parameter = value.parameter as PositionalParameterReference;
expect(parameter.index, 1);
}
@@ -174,7 +174,7 @@
var components = modification.argumentValue.components;
expect(components, hasLength(1));
var value =
- (components[0] as TemplateVariable).extractor as ArgumentExpression;
+ (components[0] as TemplateVariable).generator as ArgumentExpression;
var parameter = value.parameter as PositionalParameterReference;
expect(parameter.index, 1);
}
@@ -219,12 +219,12 @@
var components = modification.argumentValue.components;
expect(components, hasLength(4));
var extractorA =
- (components[0] as TemplateVariable).extractor as ArgumentExpression;
+ (components[0] as TemplateVariable).generator as ArgumentExpression;
var parameterA = extractorA.parameter as PositionalParameterReference;
expect(parameterA.index, 1);
expect((components[1] as TemplateText).text, '(');
var extractorB =
- (components[2] as TemplateVariable).extractor as ArgumentExpression;
+ (components[2] as TemplateVariable).generator as ArgumentExpression;
var parameterB = extractorB.parameter as PositionalParameterReference;
expect(parameterB.index, 2);
expect((components[3] as TemplateText).text, ')');
@@ -262,7 +262,7 @@
expect(change.name, 'T');
var components = change.argumentValue.components;
expect(components, hasLength(1));
- var value = (components[0] as TemplateVariable).extractor as ImportedName;
+ var value = (components[0] as TemplateVariable).generator as ImportedName;
expect(value.uris, ['dart:core']);
expect(value.name, 'String');
}
@@ -301,7 +301,7 @@
var components = change.argumentValue.components;
expect(components, hasLength(1));
var value =
- (components[0] as TemplateVariable).extractor as ArgumentExpression;
+ (components[0] as TemplateVariable).generator as ArgumentExpression;
var parameter = value.parameter as NamedParameterReference;
expect(parameter.name, 'p');
}
@@ -344,7 +344,7 @@
var argumentComponents = change.argumentValue.components;
expect(argumentComponents, hasLength(1));
- var value = (argumentComponents[0] as TemplateVariable).extractor
+ var value = (argumentComponents[0] as TemplateVariable).generator
as ArgumentExpression;
var parameter = value.parameter as PositionalParameterReference;
expect(parameter.index, 2);
diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_dead_code_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_dead_code_test.dart
index 6d4e023..93bea41 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/remove_dead_code_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/remove_dead_code_test.dart
@@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
import 'package:analysis_server/src/services/correction/fix.dart';
+import 'package:analyzer/src/dart/analysis/experiments.dart';
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -11,6 +12,7 @@
void main() {
defineReflectiveSuite(() {
defineReflectiveTests(RemoveDeadCodeTest);
+ defineReflectiveTests(RemoveDeadCodeWithNullSafetyTest);
});
}
@@ -136,3 +138,48 @@
''');
}
}
+
+@reflectiveTest
+class RemoveDeadCodeWithNullSafetyTest extends FixProcessorTest {
+ @override
+ List<String> get experiments => [EnableString.non_nullable];
+
+ @override
+ FixKind get kind => DartFixKind.REMOVE_DEAD_CODE;
+
+ @failingTest
+ Future<void> test_do_returnInBody() async {
+ // https://github.com/dart-lang/sdk/issues/43511
+ await resolveTestUnit('''
+void f(bool c) {
+ do {
+ print(c);
+ return;
+ } while (c);
+}
+''');
+ await assertHasFix('''
+void f(bool c) {
+ print(c);
+}
+''');
+ }
+
+ @failingTest
+ Future<void> test_for_returnInBody() async {
+ // https://github.com/dart-lang/sdk/issues/43511
+ await resolveTestUnit('''
+void f() {
+ for (int i = 0; i < 2; i++) {
+ print(i);
+ return;
+ }
+}
+''');
+ await assertHasFix('''
+void f() {
+ print(0);
+}
+''');
+ }
+}
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
index ee6204e..74f160b 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
@@ -8,7 +8,7 @@
/// The current version of the Dart language (or, for non-stable releases, the
/// version of the language currently in the process of being developed).
-const _currentVersion = '2.11.0';
+const _currentVersion = '2.10.0';
/// A map containing information about all known experimental flags.
final _knownFeatures = <String, ExperimentalFeature>{
@@ -68,7 +68,7 @@
isExpired: IsExpired.constant_update_2018,
documentation: 'Enhanced constant expressions',
experimentalReleaseVersion: null,
- releaseVersion: Version.parse('2.4.1'),
+ releaseVersion: Version.parse('2.0.0'),
);
static final control_flow_collections = ExperimentalFeature(
diff --git a/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
index 7b83ca3..0190caa 100644
--- a/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
@@ -59,6 +59,11 @@
var left = node.leftHandSide;
var right = node.rightHandSide;
+ if (left is IndexExpression) {
+ _resolve_IndexExpression(node, left);
+ return;
+ }
+
if (left is PrefixedIdentifier) {
_resolve_PrefixedIdentifier(node, left);
return;
@@ -241,13 +246,46 @@
}
}
+ void _resolve_IndexExpression(
+ AssignmentExpressionImpl node,
+ IndexExpression left,
+ ) {
+ left.target?.accept(_resolver);
+ _resolver.startNullAwareIndexExpression(left);
+
+ var operator = node.operator.type;
+ var hasRead = operator != TokenType.EQ;
+
+ var resolver = PropertyElementResolver(_resolver);
+ var result = resolver.resolveIndexExpression(
+ node: left,
+ hasRead: hasRead,
+ hasWrite: true,
+ );
+
+ var readElement = result.readElement;
+ var writeElement = result.writeElement;
+
+ InferenceContext.setType(left.index, result.indexContextType);
+ left.index.accept(_resolver);
+
+ if (hasRead) {
+ _resolver.setReadElement(left, readElement);
+ }
+ _resolver.setWriteElement(left, writeElement);
+
+ _setBackwardCompatibility(node);
+
+ var right = node.rightHandSide;
+ _resolve3(node, left, operator, right);
+ }
+
void _resolve_PrefixedIdentifier(
AssignmentExpressionImpl node,
PrefixedIdentifier left,
) {
left.prefix?.accept(_resolver);
- var propertyName = left.identifier;
var operator = node.operator.type;
var hasRead = operator != TokenType.EQ;
@@ -266,7 +304,7 @@
}
_resolver.setWriteElement(left, writeElement);
- _setBackwardCompatibility(node, propertyName);
+ _setBackwardCompatibility(node);
var right = node.rightHandSide;
_resolve3(node, left, operator, right);
@@ -278,7 +316,6 @@
) {
left.target?.accept(_resolver);
- var propertyName = left.propertyName;
var operator = node.operator.type;
var hasRead = operator != TokenType.EQ;
@@ -299,7 +336,7 @@
}
_resolver.setWriteElement(left, writeElement);
- _setBackwardCompatibility(node, propertyName);
+ _setBackwardCompatibility(node);
var right = node.rightHandSide;
_resolve3(node, left, operator, right);
@@ -329,7 +366,7 @@
receiverTypeObject: null,
);
- _setBackwardCompatibility(node, left);
+ _setBackwardCompatibility(node);
if (operator != TokenType.EQ) {
// TODO(scheglov) Change this method to work with elements.
@@ -391,32 +428,51 @@
/// TODO(scheglov) This is mostly necessary for backward compatibility.
/// Although we also use `staticElement` for `getType(left)` below.
- void _setBackwardCompatibility(
- AssignmentExpressionImpl node,
- SimpleIdentifier left,
- ) {
+ void _setBackwardCompatibility(AssignmentExpressionImpl node) {
var operator = node.operator.type;
- if (operator != TokenType.EQ) {
+ var left = node.leftHandSide;
+ var hasRead = operator != TokenType.EQ;
+
+ if (left is IndexExpression) {
+ if (hasRead) {
+ left.staticElement = node.writeElement;
+ left.auxiliaryElements = AuxiliaryElements(node.readElement);
+ _resolver.setReadElement(node, node.readElement);
+ _resolver.setWriteElement(node, node.writeElement);
+ } else {
+ left.staticElement = node.writeElement;
+ _resolver.setWriteElement(node, node.writeElement);
+ }
+ _recordStaticType(left, node.writeType);
+ return;
+ }
+
+ SimpleIdentifier leftIdentifier;
+ if (left is PrefixedIdentifier) {
+ leftIdentifier = left.identifier;
+ _recordStaticType(left, node.writeType);
+ } else if (left is PropertyAccess) {
+ leftIdentifier = left.propertyName;
+ _recordStaticType(left, node.writeType);
+ } else if (left is SimpleIdentifier) {
+ leftIdentifier = left;
+ }
+
+ if (hasRead) {
var readElement = node.readElement;
if (readElement is PropertyAccessorElement) {
- left.auxiliaryElements = AuxiliaryElements(readElement);
+ leftIdentifier.auxiliaryElements = AuxiliaryElements(readElement);
}
}
- left.staticElement = node.writeElement;
+ leftIdentifier.staticElement = node.writeElement;
if (node.readElement is VariableElement) {
- var leftType = _resolver.localVariableTypeProvider.getType(left);
- _recordStaticType(left, leftType);
+ var leftType =
+ _resolver.localVariableTypeProvider.getType(leftIdentifier);
+ _recordStaticType(leftIdentifier, leftType);
} else {
- _recordStaticType(left, node.writeType);
- }
-
- var parent = left.parent;
- if (parent is PrefixedIdentifier && parent.identifier == left) {
- _recordStaticType(parent, node.writeType);
- } else if (parent is PropertyAccess && parent.propertyName == left) {
- _recordStaticType(parent, node.writeType);
+ _recordStaticType(leftIdentifier, node.writeType);
}
}
diff --git a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
index 4d3fffb..b3ed076 100644
--- a/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/property_element_resolver.dart
@@ -5,11 +5,14 @@
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/error/error.dart';
import 'package:analyzer/error/listener.dart';
import 'package:analyzer/src/dart/element/element.dart';
import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
import 'package:analyzer/src/dart/element/type.dart';
+import 'package:analyzer/src/dart/element/type_system.dart';
import 'package:analyzer/src/dart/resolver/extension_member_resolver.dart';
+import 'package:analyzer/src/dart/resolver/resolution_result.dart';
import 'package:analyzer/src/error/assignment_verifier.dart';
import 'package:analyzer/src/error/codes.dart';
import 'package:analyzer/src/generated/resolver.dart';
@@ -27,6 +30,97 @@
ExtensionMemberResolver get _extensionResolver => _resolver.extensionResolver;
+ TypeSystemImpl get _typeSystem => _resolver.typeSystem;
+
+ PropertyElementResolverResult resolveIndexExpression({
+ @required IndexExpression node,
+ @required bool hasRead,
+ @required bool hasWrite,
+ }) {
+ var target = node.realTarget;
+ var targetType = target.staticType;
+ targetType = _resolveTypeParameter(targetType);
+
+ if (target is ExtensionOverride) {
+ var result = _extensionResolver.getOverrideMember(target, '[]');
+
+ // TODO(scheglov) Change ExtensionResolver to set `needsGetterError`.
+ if (hasRead && result.getter == null && !result.isAmbiguous) {
+ _reportUnresolvedIndex(
+ node,
+ CompileTimeErrorCode.UNDEFINED_EXTENSION_OPERATOR,
+ ['[]', target.staticElement.name],
+ );
+ }
+
+ if (hasWrite && result.setter == null && !result.isAmbiguous) {
+ _reportUnresolvedIndex(
+ node,
+ CompileTimeErrorCode.UNDEFINED_EXTENSION_OPERATOR,
+ ['[]=', target.staticElement.name],
+ );
+ }
+
+ return _toIndexResult(result);
+ }
+
+ if (targetType.isVoid) {
+ // TODO(scheglov) Report directly in TypePropertyResolver?
+ _reportUnresolvedIndex(
+ node,
+ CompileTimeErrorCode.USE_OF_VOID_RESULT,
+ );
+ return PropertyElementResolverResult();
+ }
+
+ if (identical(targetType, NeverTypeImpl.instance)) {
+ // TODO(scheglov) Report directly in TypePropertyResolver?
+ _errorReporter.reportErrorForNode(
+ HintCode.RECEIVER_OF_TYPE_NEVER,
+ target,
+ );
+ return PropertyElementResolverResult();
+ }
+
+ if (node.isNullAware) {
+ if (target is ExtensionOverride) {
+ // https://github.com/dart-lang/language/pull/953
+ } else {
+ targetType = _typeSystem.promoteToNonNull(targetType);
+ }
+ }
+
+ var result = _resolver.typePropertyResolver.resolve(
+ receiver: target,
+ receiverType: targetType,
+ name: '[]',
+ receiverErrorNode: target,
+ nameErrorEntity: target,
+ );
+
+ if (hasRead && result.needsGetterError) {
+ _reportUnresolvedIndex(
+ node,
+ target is SuperExpression
+ ? CompileTimeErrorCode.UNDEFINED_SUPER_OPERATOR
+ : CompileTimeErrorCode.UNDEFINED_OPERATOR,
+ ['[]', targetType],
+ );
+ }
+
+ if (hasWrite && result.needsSetterError) {
+ _reportUnresolvedIndex(
+ node,
+ target is SuperExpression
+ ? CompileTimeErrorCode.UNDEFINED_SUPER_OPERATOR
+ : CompileTimeErrorCode.UNDEFINED_OPERATOR,
+ ['[]=', targetType],
+ );
+ }
+
+ return _toIndexResult(result);
+ }
+
PropertyElementResolverResult resolvePrefixedIdentifier({
@required PrefixedIdentifier node,
@required bool hasRead,
@@ -130,10 +224,37 @@
);
}
+ DartType _computeIndexContextType({
+ @required ExecutableElement readElement,
+ @required ExecutableElement writeElement,
+ }) {
+ var method = writeElement ?? readElement;
+ var parameters = method is MethodElement ? method.parameters : null;
+
+ if (parameters != null && parameters.isNotEmpty) {
+ return parameters[0].type;
+ }
+
+ return null;
+ }
+
bool _isAccessible(ExecutableElement element) {
return element.isAccessibleIn(_definingLibrary);
}
+ void _reportUnresolvedIndex(
+ IndexExpression node,
+ ErrorCode errorCode, [
+ List<Object> arguments = const [],
+ ]) {
+ var leftBracket = node.leftBracket;
+ var rightBracket = node.rightBracket;
+ var offset = leftBracket.offset;
+ var length = rightBracket.end - offset;
+
+ _errorReporter.reportErrorForOffset(errorCode, offset, length, arguments);
+ }
+
PropertyElementResolverResult _resolve({
@required Expression target,
@required bool isCascaded,
@@ -192,7 +313,7 @@
}
if (isNullAware) {
- targetType = _resolver.typeSystem.promoteToNonNull(targetType);
+ targetType = _typeSystem.promoteToNonNull(targetType);
}
var result = _resolver.typePropertyResolver.resolve(
@@ -310,7 +431,7 @@
readElement ??= extension.getMethod(memberName);
if (readElement == null) {
- _resolver.errorReporter.reportErrorForNode(
+ _errorReporter.reportErrorForNode(
CompileTimeErrorCode.UNDEFINED_EXTENSION_GETTER,
propertyName,
[memberName, extension.name],
@@ -326,7 +447,7 @@
writeElement = extension.getSetter(memberName);
if (writeElement == null) {
- _resolver.errorReporter.reportErrorForNode(
+ _errorReporter.reportErrorForNode(
CompileTimeErrorCode.UNDEFINED_EXTENSION_SETTER,
propertyName,
[memberName, extension.name],
@@ -492,6 +613,20 @@
}
return type;
}
+
+ PropertyElementResolverResult _toIndexResult(ResolutionResult result) {
+ var readElement = result.getter;
+ var writeElement = result.setter;
+
+ return PropertyElementResolverResult(
+ readElementRequested: readElement,
+ writeElementRequested: writeElement,
+ indexContextType: _computeIndexContextType(
+ readElement: readElement,
+ writeElement: writeElement,
+ ),
+ );
+ }
}
class PropertyElementResolverResult {
@@ -500,11 +635,16 @@
final Element writeElementRequested;
final Element writeElementRecovery;
+ /// If [IndexExpression] is resolved, the context type of the index.
+ /// Might be `null` if `[]` or `[]=` are not resolved or invalid.
+ final DartType indexContextType;
+
PropertyElementResolverResult({
this.readElementRequested,
this.readElementRecovery,
this.writeElementRequested,
this.writeElementRecovery,
+ this.indexContextType,
});
Element get readElement {
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
index 5faf315..d80064f 100644
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
@@ -9,20 +9,15 @@
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/error/listener.dart';
import 'package:analyzer/src/dart/element/element.dart';
-import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/dart/element/type_provider.dart';
-import 'package:analyzer/src/dart/element/type_system.dart';
-import 'package:analyzer/src/dart/resolver/extension_member_resolver.dart';
import 'package:analyzer/src/dart/resolver/method_invocation_resolver.dart';
import 'package:analyzer/src/dart/resolver/property_element_resolver.dart';
-import 'package:analyzer/src/dart/resolver/resolution_result.dart';
import 'package:analyzer/src/dart/resolver/scope.dart';
import 'package:analyzer/src/dart/resolver/type_property_resolver.dart';
import 'package:analyzer/src/error/codes.dart';
import 'package:analyzer/src/generated/migratable_ast_info_provider.dart';
import 'package:analyzer/src/generated/resolver.dart';
import 'package:analyzer/src/generated/super_context.dart';
-import 'package:analyzer/src/task/strong/checker.dart';
/// An object used by instances of [ResolverVisitor] to resolve references
/// within the AST structure to the elements being referenced. The requirements
@@ -94,9 +89,6 @@
@Deprecated('This field is no longer used')
final bool reportConstEvaluationErrors;
- /// Helper for extension method resolution.
- final ExtensionMemberResolver _extensionResolver;
-
/// Helper for resolving properties on types.
final TypePropertyResolver _typePropertyResolver;
@@ -109,7 +101,6 @@
MigratableAstInfoProvider migratableAstInfoProvider =
const MigratableAstInfoProvider()})
: _definingLibrary = _resolver.definingLibrary,
- _extensionResolver = _resolver.extensionResolver,
_typePropertyResolver = _resolver.typePropertyResolver {
_dynamicType = _typeProvider.dynamicType;
_methodInvocationResolver = MethodInvocationResolver(
@@ -133,8 +124,6 @@
TypeProviderImpl get _typeProvider => _resolver.typeProvider;
- TypeSystemImpl get _typeSystem => _resolver.typeSystem;
-
@override
void visitBreakStatement(BreakStatement node) {
node.target = _lookupBreakOrContinueTarget(node, node.label, false);
@@ -387,64 +376,30 @@
@override
void visitIndexExpression(IndexExpression node) {
- Expression target = node.realTarget;
- DartType targetType = _getStaticType(target);
+ var hasRead = node.inGetterContext();
+ var hasWrite = node.inSetterContext();
- if (identical(targetType, NeverTypeImpl.instance)) {
- _resolver.errorReporter.reportErrorForNode(
- HintCode.RECEIVER_OF_TYPE_NEVER,
- target,
- );
- return;
+ var resolver = PropertyElementResolver(_resolver);
+ var result = resolver.resolveIndexExpression(
+ node: node,
+ hasRead: hasRead,
+ hasWrite: hasWrite,
+ );
+
+ if (hasRead && hasWrite) {
+ node.staticElement = result.writeElement;
+ node.auxiliaryElements = AuxiliaryElements(result.readElement);
+ _resolver.setReadElement(node, result.readElement);
+ _resolver.setWriteElement(node, result.writeElement);
+ } else if (hasRead) {
+ node.staticElement = result.readElement;
+ _resolver.setReadElement(node, result.readElement);
+ } else if (hasWrite) {
+ node.staticElement = result.writeElement;
+ _resolver.setWriteElement(node, result.writeElement);
}
- if (node.isNullAware) {
- if (target is ExtensionOverride) {
- // https://github.com/dart-lang/language/pull/953
- } else {
- targetType = _typeSystem.promoteToNonNull(targetType);
- }
- }
-
- String getterMethodName = TokenType.INDEX.lexeme;
- String setterMethodName = TokenType.INDEX_EQ.lexeme;
-
- ResolutionResult result;
- if (target is ExtensionOverride) {
- result = _extensionResolver.getOverrideMember(target, getterMethodName);
- } else {
- result = _typePropertyResolver.resolve(
- receiver: target,
- receiverType: targetType,
- name: getterMethodName,
- receiverErrorNode: target,
- nameErrorEntity: target,
- );
- }
-
- bool isInGetterContext = node.inGetterContext();
- bool isInSetterContext = node.inSetterContext();
- if (isInGetterContext && isInSetterContext) {
- node.staticElement = result.setter;
- node.auxiliaryElements = AuxiliaryElements(result.getter);
- _resolver.setReadElement(node, result.getter);
- _resolver.setWriteElement(node, result.setter);
- } else if (isInGetterContext) {
- node.staticElement = result.getter;
- _resolver.setReadElement(node, result.getter);
- } else if (isInSetterContext) {
- node.staticElement = result.setter;
- _resolver.setWriteElement(node, result.setter);
- }
-
- if (isInGetterContext) {
- _checkForUndefinedIndexOperator(node, target, getterMethodName, result,
- result.getter, result.needsGetterError, targetType);
- }
- if (isInSetterContext) {
- _checkForUndefinedIndexOperator(node, target, setterMethodName, result,
- result.setter, result.needsSetterError, targetType);
- }
+ InferenceContext.setType(node.index, result.indexContextType);
}
@override
@@ -869,69 +824,6 @@
_resolveAnnotations(node.metadata);
}
- /// Check that the given index [expression] was resolved, otherwise a
- /// [CompileTimeErrorCode.UNDEFINED_OPERATOR] is generated. The [target] is
- /// the target of the expression. The [methodName] is the name of the operator
- /// associated with the context of using of the given index expression.
- void _checkForUndefinedIndexOperator(
- IndexExpression expression,
- Expression target,
- String methodName,
- ResolutionResult result,
- ExecutableElement element,
- bool needsError,
- DartType staticType) {
- if (result.isAmbiguous) {
- return;
- }
- if (element != null) {
- return;
- }
- if (target is! ExtensionOverride) {
- if (staticType == null || staticType.isDynamic) {
- return;
- }
- }
-
- var leftBracket = expression.leftBracket;
- var rightBracket = expression.rightBracket;
- var offset = leftBracket.offset;
- var length = rightBracket.end - offset;
- if (target is ExtensionOverride) {
- _errorReporter.reportErrorForOffset(
- CompileTimeErrorCode.UNDEFINED_EXTENSION_OPERATOR,
- offset,
- length,
- [methodName, target.staticElement.name],
- );
- } else if (target is SuperExpression) {
- _errorReporter.reportErrorForOffset(
- CompileTimeErrorCode.UNDEFINED_SUPER_OPERATOR,
- offset,
- length,
- [methodName, staticType],
- );
- } else if (staticType.isVoid) {
- _errorReporter.reportErrorForOffset(
- CompileTimeErrorCode.USE_OF_VOID_RESULT,
- offset,
- length,
- );
- } else if (identical(staticType, NeverTypeImpl.instance)) {
- _resolver.errorReporter.reportErrorForNode(
- HintCode.RECEIVER_OF_TYPE_NEVER,
- target,
- );
- } else if (needsError) {
- _errorReporter.reportErrorForOffset(
- CompileTimeErrorCode.UNDEFINED_OPERATOR,
- offset,
- length,
- [methodName, staticType],
- );
- }
- }
-
/// Assuming that the given [identifier] is a prefix for a deferred import,
/// return the library that is being imported.
LibraryElement _getImportedLibrary(SimpleIdentifier identifier) {
@@ -941,16 +833,6 @@
return imports[0].importedLibrary;
}
- /// Return the static type of the given [expression] that is to be used for
- /// type analysis.
- DartType _getStaticType(Expression expression, {bool read = false}) {
- if (expression is NullLiteral) {
- return _typeProvider.nullType;
- }
- DartType type = read ? getReadType(expression) : expression.staticType;
- return _resolveTypeParameter(type);
- }
-
InterfaceType _instantiateAnnotationClass(ClassElement element) {
return element.instantiate(
typeArguments: List.filled(
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 43d1494..07ea52c 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -664,6 +664,15 @@
}
}
+ void startNullAwareIndexExpression(IndexExpression node) {
+ if (_migratableAstInfoProvider.isIndexExpressionNullAware(node) &&
+ _isNonNullableByDefault) {
+ _flowAnalysis.flow.nullAwareAccess_rightBegin(
+ node.target, node.realTarget.staticType ?? typeProvider.dynamicType);
+ _unfinishedNullShorts.add(node.nullShortingTermination);
+ }
+ }
+
void startNullAwarePropertyAccess(
PropertyAccess node,
) {
@@ -1462,21 +1471,8 @@
@override
void visitIndexExpression(IndexExpression node) {
node.target?.accept(this);
- if (_migratableAstInfoProvider.isIndexExpressionNullAware(node) &&
- _isNonNullableByDefault) {
- _flowAnalysis.flow.nullAwareAccess_rightBegin(
- node.target, node.realTarget.staticType ?? typeProvider.dynamicType);
- _unfinishedNullShorts.add(node.nullShortingTermination);
- }
+ startNullAwareIndexExpression(node);
node.accept(elementResolver);
- var method = node.staticElement;
- if (method != null) {
- var parameters = method.parameters;
- if (parameters.isNotEmpty) {
- var indexParam = parameters[0];
- InferenceContext.setType(node.index, indexParam.type);
- }
- }
node.index?.accept(this);
node.accept(typeAnalyzer);
}
diff --git a/pkg/analyzer/test/src/diagnostics/const_eval_throws_exception_test.dart b/pkg/analyzer/test/src/diagnostics/const_eval_throws_exception_test.dart
index a2d7705..23be73a 100644
--- a/pkg/analyzer/test/src/diagnostics/const_eval_throws_exception_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_eval_throws_exception_test.dart
@@ -10,7 +10,6 @@
main() {
defineReflectiveSuite(() {
- defineReflectiveTests(ConstEvalThrowsExceptionTest_language24);
defineReflectiveTests(ConstEvalThrowsExceptionTest);
defineReflectiveTests(ConstEvalThrowsExceptionWithNullSafetyTest);
});
@@ -19,9 +18,6 @@
@reflectiveTest
class ConstEvalThrowsExceptionTest extends PubPackageResolutionTest
with ConstEvalThrowsExceptionTestCases {
- @override
- bool get _constant_update_2018 => true;
-
test_binaryMinus_null() async {
await assertErrorsInCode('''
const dynamic D = null;
@@ -78,26 +74,7 @@
}
@reflectiveTest
-class ConstEvalThrowsExceptionTest_language24 extends PubPackageResolutionTest
- with ConstEvalThrowsExceptionTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
-
-@reflectiveTest
mixin ConstEvalThrowsExceptionTestCases on PubPackageResolutionTest {
- /// The expected state of this feature in the test.
- bool get _constant_update_2018;
-
test_assertInitializerThrows() async {
await assertErrorsInCode(r'''
class A {
@@ -278,77 +255,44 @@
}
test_ifElement_false_thenNotEvaluated() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic nil = null;
const c = [if (1 < 0) nil + 1];
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 37, 18),
- ]);
+''');
}
test_ifElement_nonBoolCondition_list() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic nonBool = 3;
const c = const [if (nonBool) 'a'];
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 48, 7),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 44, 16),
- error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 48, 7),
- ]);
+''', [
+ error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 48, 7),
+ ]);
}
test_ifElement_nonBoolCondition_map() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic nonBool = null;
const c = const {if (nonBool) 'a' : 1};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 51, 7),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 47, 20),
- error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 51, 7),
- ]);
+''', [
+ error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 51, 7),
+ ]);
}
test_ifElement_nonBoolCondition_set() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic nonBool = 'a';
const c = const {if (nonBool) 3};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 50, 7),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 46, 14),
- error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 50, 7),
- ]);
+''', [
+ error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 50, 7),
+ ]);
}
test_ifElement_true_elseNotEvaluated() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic nil = null;
const c = [if (0 < 1) 3 else nil + 1];
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 37, 25),
- ]);
+''');
}
test_invalid_constructorFieldInitializer_fromSeparateLibrary() async {
diff --git a/pkg/analyzer/test/src/diagnostics/const_set_element_type_implements_equals_test.dart b/pkg/analyzer/test/src/diagnostics/const_set_element_type_implements_equals_test.dart
index 054355c..817d86c 100644
--- a/pkg/analyzer/test/src/diagnostics/const_set_element_type_implements_equals_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_set_element_type_implements_equals_test.dart
@@ -9,38 +9,15 @@
main() {
defineReflectiveSuite(() {
- defineReflectiveTests(ConstSetElementTypeImplementsEqualsTest_language24);
defineReflectiveTests(ConstSetElementTypeImplementsEqualsTest);
});
}
@reflectiveTest
class ConstSetElementTypeImplementsEqualsTest extends PubPackageResolutionTest
- with ConstSetElementTypeImplementsEqualsTestCases {
- @override
- bool get _constant_update_2018 => true;
-}
-
-@reflectiveTest
-class ConstSetElementTypeImplementsEqualsTest_language24
- extends PubPackageResolutionTest
- with ConstSetElementTypeImplementsEqualsTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
+ with ConstSetElementTypeImplementsEqualsTestCases {}
mixin ConstSetElementTypeImplementsEqualsTestCases on PubPackageResolutionTest {
- bool get _constant_update_2018;
-
test_constField() async {
await assertErrorsInCode(r'''
class A {
@@ -135,8 +112,7 @@
}
test_spread_list() async {
- await assertErrorsInCode(
- r'''
+ await assertErrorsInCode(r'''
class A {
const A();
operator ==(other) => false;
@@ -145,23 +121,14 @@
main() {
const {...[A()]};
}
-''',
- _constant_update_2018
- ? [
- error(
- CompileTimeErrorCode
- .CONST_SET_ELEMENT_TYPE_IMPLEMENTS_EQUALS,
- 75,
- 8),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 75, 8),
- ]);
+''', [
+ error(
+ CompileTimeErrorCode.CONST_SET_ELEMENT_TYPE_IMPLEMENTS_EQUALS, 75, 8),
+ ]);
}
test_spread_set() async {
- await assertErrorsInCode(
- r'''
+ await assertErrorsInCode(r'''
class A {
const A();
operator ==(other) => false;
@@ -170,23 +137,10 @@
main() {
const {...{A()}};
}
-''',
- _constant_update_2018
- ? [
- error(
- CompileTimeErrorCode
- .CONST_SET_ELEMENT_TYPE_IMPLEMENTS_EQUALS,
- 79,
- 3),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 75, 8),
- error(
- CompileTimeErrorCode
- .CONST_SET_ELEMENT_TYPE_IMPLEMENTS_EQUALS,
- 79,
- 3),
- ]);
+''', [
+ error(
+ CompileTimeErrorCode.CONST_SET_ELEMENT_TYPE_IMPLEMENTS_EQUALS, 79, 3),
+ ]);
}
test_super() async {
diff --git a/pkg/analyzer/test/src/diagnostics/const_spread_expected_list_or_set_test.dart b/pkg/analyzer/test/src/diagnostics/const_spread_expected_list_or_set_test.dart
index d2470d0..0b71d6d 100644
--- a/pkg/analyzer/test/src/diagnostics/const_spread_expected_list_or_set_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_spread_expected_list_or_set_test.dart
@@ -10,209 +10,108 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ConstSpreadExpectedListOrSetTest);
- defineReflectiveTests(ConstSpreadExpectedListOrSetTest_language24);
});
}
@reflectiveTest
class ConstSpreadExpectedListOrSetTest extends PubPackageResolutionTest
- with ConstSpreadExpectedListOrSetTestCases {
- @override
- bool get _constant_update_2018 => true;
-}
-
-@reflectiveTest
-class ConstSpreadExpectedListOrSetTest_language24
- extends PubPackageResolutionTest
- with ConstSpreadExpectedListOrSetTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
+ with ConstSpreadExpectedListOrSetTestCases {}
mixin ConstSpreadExpectedListOrSetTestCases on PubPackageResolutionTest {
- bool get _constant_update_2018;
-
test_const_listInt() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic a = 5;
var b = const <int>[...a];
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.CONST_SPREAD_EXPECTED_LIST_OR_SET,
- 44, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 41, 4),
- ]);
+''', [
+ error(CompileTimeErrorCode.CONST_SPREAD_EXPECTED_LIST_OR_SET, 44, 1),
+ ]);
}
test_const_listList() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = [5];
var b = const <int>[...a];
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 43, 4),
- ]);
+''');
}
test_const_listMap() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic a = <int, int>{0: 1};
var b = const <int>[...a];
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.CONST_SPREAD_EXPECTED_LIST_OR_SET,
- 59, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 56, 4),
- ]);
+''', [
+ error(CompileTimeErrorCode.CONST_SPREAD_EXPECTED_LIST_OR_SET, 59, 1),
+ ]);
}
test_const_listNull() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic a = null;
var b = const <int>[...a];
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.CONST_SPREAD_EXPECTED_LIST_OR_SET,
- 47, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 44, 4),
- ]);
+''', [
+ error(CompileTimeErrorCode.CONST_SPREAD_EXPECTED_LIST_OR_SET, 47, 1),
+ ]);
}
test_const_listNull_nullable() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = null;
var b = const <int>[...?a];
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 44, 5),
- ]);
+''');
}
test_const_listSet() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = <int>{5};
var b = const <int>[...a];
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 48, 4),
- ]);
+''');
}
test_const_setInt() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic a = 5;
var b = const <int>{...a};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.CONST_SPREAD_EXPECTED_LIST_OR_SET,
- 44, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 41, 4),
- ]);
+''', [
+ error(CompileTimeErrorCode.CONST_SPREAD_EXPECTED_LIST_OR_SET, 44, 1),
+ ]);
}
test_const_setList() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = <int>[5];
var b = const <int>{...a};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 48, 4),
- ]);
+''');
}
test_const_setMap() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic a = <int, int>{1: 2};
var b = const <int>{...a};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.CONST_SPREAD_EXPECTED_LIST_OR_SET,
- 59, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 56, 4),
- ]);
+''', [
+ error(CompileTimeErrorCode.CONST_SPREAD_EXPECTED_LIST_OR_SET, 59, 1),
+ ]);
}
test_const_setNull() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic a = null;
var b = const <int>{...a};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.CONST_SPREAD_EXPECTED_LIST_OR_SET,
- 47, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 44, 4),
- ]);
+''', [
+ error(CompileTimeErrorCode.CONST_SPREAD_EXPECTED_LIST_OR_SET, 47, 1),
+ ]);
}
test_const_setNull_nullable() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = null;
var b = const <int>{...?a};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 44, 5),
- ]);
+''');
}
test_const_setSet() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = <int>{5};
var b = const <int>{...a};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 48, 4),
- ]);
+''');
}
test_nonConst_listInt() async {
diff --git a/pkg/analyzer/test/src/diagnostics/const_spread_expected_map_test.dart b/pkg/analyzer/test/src/diagnostics/const_spread_expected_map_test.dart
index 937a847..841c131 100644
--- a/pkg/analyzer/test/src/diagnostics/const_spread_expected_map_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_spread_expected_map_test.dart
@@ -10,64 +10,30 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ConstSpreadExpectedMapTest);
- defineReflectiveTests(ConstSpreadExpectedMapTest_language24);
});
}
@reflectiveTest
class ConstSpreadExpectedMapTest extends PubPackageResolutionTest
- with ConstSpreadExpectedMapTestCases {
- @override
- bool get _constant_update_2018 => true;
-}
-
-@reflectiveTest
-class ConstSpreadExpectedMapTest_language24 extends PubPackageResolutionTest
- with ConstSpreadExpectedMapTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
+ with ConstSpreadExpectedMapTestCases {}
mixin ConstSpreadExpectedMapTestCases on PubPackageResolutionTest {
- bool get _constant_update_2018;
-
test_const_mapInt() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic a = 5;
var b = const <int, int>{...a};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.CONST_SPREAD_EXPECTED_MAP, 49, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 46, 4),
- ]);
+''', [
+ error(CompileTimeErrorCode.CONST_SPREAD_EXPECTED_MAP, 49, 1),
+ ]);
}
test_const_mapList() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic a = <int>[5];
var b = const <int, int>{...a};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.CONST_SPREAD_EXPECTED_MAP, 56, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 53, 4),
- ]);
+''', [
+ error(CompileTimeErrorCode.CONST_SPREAD_EXPECTED_MAP, 56, 1),
+ ]);
}
test_const_mapMap() async {
@@ -78,18 +44,12 @@
}
test_const_mapNull() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic a = null;
var b = const <int, int>{...a};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.CONST_SPREAD_EXPECTED_MAP, 52, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 49, 4),
- ]);
+''', [
+ error(CompileTimeErrorCode.CONST_SPREAD_EXPECTED_MAP, 52, 1),
+ ]);
}
test_const_mapNull_nullable() async {
@@ -100,18 +60,12 @@
}
test_const_mapSet() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic a = <int>{5};
var b = const <int, int>{...a};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.CONST_SPREAD_EXPECTED_MAP, 56, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 53, 4),
- ]);
+''', [
+ error(CompileTimeErrorCode.CONST_SPREAD_EXPECTED_MAP, 56, 1),
+ ]);
}
test_nonConst_mapInt() async {
diff --git a/pkg/analyzer/test/src/diagnostics/equal_elements_in_const_set_test.dart b/pkg/analyzer/test/src/diagnostics/equal_elements_in_const_set_test.dart
index 726859c..381dc33 100644
--- a/pkg/analyzer/test/src/diagnostics/equal_elements_in_const_set_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/equal_elements_in_const_set_test.dart
@@ -10,36 +10,14 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(EqualElementsInConstSetTest);
- defineReflectiveTests(EqualElementsInConstSetTest_language24);
});
}
@reflectiveTest
class EqualElementsInConstSetTest extends PubPackageResolutionTest
- with EqualElementsInConstSetTestCases {
- @override
- bool get _constant_update_2018 => true;
-}
-
-@reflectiveTest
-class EqualElementsInConstSetTest_language24 extends PubPackageResolutionTest
- with EqualElementsInConstSetTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
+ with EqualElementsInConstSetTestCases {}
mixin EqualElementsInConstSetTestCases on PubPackageResolutionTest {
- bool get _constant_update_2018;
-
test_const_entry() async {
await assertErrorsInCode('''
var c = const {1, 2, 1};
@@ -50,85 +28,45 @@
}
test_const_ifElement_thenElseFalse() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
var c = const {1, if (1 < 0) 2 else 1};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.EQUAL_ELEMENTS_IN_CONST_SET, 36, 1,
- contextMessages: [
- message('$testPackageLibPath/test.dart', 15, 1)
- ]),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 18, 19),
- ]);
+''', [
+ error(CompileTimeErrorCode.EQUAL_ELEMENTS_IN_CONST_SET, 36, 1,
+ contextMessages: [message('$testPackageLibPath/test.dart', 15, 1)]),
+ ]);
}
test_const_ifElement_thenElseFalse_onlyElse() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
var c = const {if (0 < 1) 1 else 1};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 15, 19),
- ]);
+''');
}
test_const_ifElement_thenElseTrue() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
var c = const {1, if (0 < 1) 2 else 1};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 18, 19),
- ]);
+''');
}
test_const_ifElement_thenElseTrue_onlyThen() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
var c = const {if (0 < 1) 1 else 1};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 15, 19),
- ]);
+''');
}
test_const_ifElement_thenFalse() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
var c = const {2, if (1 < 0) 2};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 18, 12),
- ]);
+''');
}
test_const_ifElement_thenTrue() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
var c = const {1, if (0 < 1) 1};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.EQUAL_ELEMENTS_IN_CONST_SET, 29, 1,
- contextMessages: [
- message('$testPackageLibPath/test.dart', 15, 1)
- ]),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 18, 12),
- ]);
+''', [
+ error(CompileTimeErrorCode.EQUAL_ELEMENTS_IN_CONST_SET, 29, 1,
+ contextMessages: [message('$testPackageLibPath/test.dart', 15, 1)]),
+ ]);
}
test_const_instanceCreation_equalTypeArgs() async {
@@ -156,32 +94,18 @@
}
test_const_spread__noDuplicate() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
var c = const {1, ...{2}};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 18, 6),
- ]);
+''');
}
test_const_spread_hasDuplicate() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
var c = const {1, ...{1}};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.EQUAL_ELEMENTS_IN_CONST_SET, 21, 3,
- contextMessages: [
- message('$testPackageLibPath/test.dart', 15, 1)
- ]),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 18, 6),
- ]);
+''', [
+ error(CompileTimeErrorCode.EQUAL_ELEMENTS_IN_CONST_SET, 21, 3,
+ contextMessages: [message('$testPackageLibPath/test.dart', 15, 1)]),
+ ]);
}
test_nonConst_entry() async {
diff --git a/pkg/analyzer/test/src/diagnostics/equal_keys_in_const_map_test.dart b/pkg/analyzer/test/src/diagnostics/equal_keys_in_const_map_test.dart
index 2cc1a89..24da1be 100644
--- a/pkg/analyzer/test/src/diagnostics/equal_keys_in_const_map_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/equal_keys_in_const_map_test.dart
@@ -10,36 +10,14 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(EqualKeysInConstMapTest);
- defineReflectiveTests(EqualKeysInConstMapTest_language24);
});
}
@reflectiveTest
class EqualKeysInConstMapTest extends PubPackageResolutionTest
- with EqualKeysInConstMapTestCases {
- @override
- bool get _constant_update_2018 => true;
-}
-
-@reflectiveTest
-class EqualKeysInConstMapTest_language24 extends PubPackageResolutionTest
- with EqualKeysInConstMapTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
+ with EqualKeysInConstMapTestCases {}
mixin EqualKeysInConstMapTestCases on PubPackageResolutionTest {
- bool get _constant_update_2018;
-
test_const_entry() async {
await assertErrorsInCode('''
var c = const {1: null, 2: null, 1: null};
@@ -50,85 +28,45 @@
}
test_const_ifElement_thenElseFalse() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
var c = const {1: null, if (1 < 0) 2: null else 1: null};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.EQUAL_KEYS_IN_CONST_MAP, 48, 1,
- contextMessages: [
- message('$testPackageLibPath/test.dart', 15, 1)
- ]),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 24, 31),
- ]);
+''', [
+ error(CompileTimeErrorCode.EQUAL_KEYS_IN_CONST_MAP, 48, 1,
+ contextMessages: [message('$testPackageLibPath/test.dart', 15, 1)]),
+ ]);
}
test_const_ifElement_thenElseFalse_onlyElse() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
var c = const {if (0 < 1) 1: null else 1: null};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 15, 31),
- ]);
+''');
}
test_const_ifElement_thenElseTrue() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
var c = const {1: null, if (0 < 1) 2: null else 1: null};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 24, 31),
- ]);
+''');
}
test_const_ifElement_thenElseTrue_onlyThen() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
var c = const {if (0 < 1) 1: null else 1: null};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 15, 31),
- ]);
+''');
}
test_const_ifElement_thenFalse() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
var c = const {2: null, if (1 < 0) 2: 2};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 24, 15),
- ]);
+''');
}
test_const_ifElement_thenTrue() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
var c = const {1: null, if (0 < 1) 1: null};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.EQUAL_KEYS_IN_CONST_MAP, 35, 1,
- contextMessages: [
- message('$testPackageLibPath/test.dart', 15, 1)
- ]),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 24, 18),
- ]);
+''', [
+ error(CompileTimeErrorCode.EQUAL_KEYS_IN_CONST_MAP, 35, 1,
+ contextMessages: [message('$testPackageLibPath/test.dart', 15, 1)]),
+ ]);
}
test_const_instanceCreation_equalTypeArgs() async {
@@ -156,32 +94,18 @@
}
test_const_spread__noDuplicate() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
var c = const {1: null, ...{2: null}};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 24, 12),
- ]);
+''');
}
test_const_spread_hasDuplicate() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
var c = const {1: null, ...{1: null}};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.EQUAL_KEYS_IN_CONST_MAP, 27, 9,
- contextMessages: [
- message('$testPackageLibPath/test.dart', 15, 1)
- ]),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 24, 12),
- ]);
+''', [
+ error(CompileTimeErrorCode.EQUAL_KEYS_IN_CONST_MAP, 27, 9,
+ contextMessages: [message('$testPackageLibPath/test.dart', 15, 1)]),
+ ]);
}
test_nonConst_entry() async {
diff --git a/pkg/analyzer/test/src/diagnostics/if_element_condition_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/if_element_condition_from_deferred_library_test.dart
index 3d332b9..aca2e3d 100644
--- a/pkg/analyzer/test/src/diagnostics/if_element_condition_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/if_element_condition_from_deferred_library_test.dart
@@ -10,58 +10,26 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(IfElementConditionFromDeferredLibraryTest);
- defineReflectiveTests(IfElementConditionFromDeferredLibraryTest_language24);
});
}
@reflectiveTest
class IfElementConditionFromDeferredLibraryTest extends PubPackageResolutionTest
- with IfElementConditionFromDeferredLibraryTestCases {
- @override
- bool get _constant_update_2018 => true;
-}
-
-@reflectiveTest
-class IfElementConditionFromDeferredLibraryTest_language24
- extends PubPackageResolutionTest
- with IfElementConditionFromDeferredLibraryTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
+ with IfElementConditionFromDeferredLibraryTestCases {}
mixin IfElementConditionFromDeferredLibraryTestCases
on PubPackageResolutionTest {
- bool get _constant_update_2018;
-
test_inList_deferred() async {
newFile(convertPath('$testPackageLibPath/lib1.dart'), content: r'''
const bool c = true;''');
- await assertErrorsInCode(
- r'''
+ await assertErrorsInCode(r'''
import 'lib1.dart' deferred as a;
f() {
return const [if(a.c) 0];
-}''',
- _constant_update_2018
- ? [
- error(
- CompileTimeErrorCode
- .IF_ELEMENT_CONDITION_FROM_DEFERRED_LIBRARY,
- 59,
- 3),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 56, 9),
- ]);
+}''', [
+ error(CompileTimeErrorCode.IF_ELEMENT_CONDITION_FROM_DEFERRED_LIBRARY, 59,
+ 3),
+ ]);
}
test_inList_nonConst() async {
@@ -77,39 +45,24 @@
test_inList_notDeferred() async {
newFile(convertPath('$testPackageLibPath/lib1.dart'), content: r'''
const bool c = true;''');
- await assertErrorsInCode(
- r'''
+ await assertNoErrorsInCode(r'''
import 'lib1.dart' as a;
f() {
return const [if(a.c) 0];
-}''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 47, 9),
- ]);
+}''');
}
test_inMap_deferred() async {
newFile(convertPath('$testPackageLibPath/lib1.dart'), content: r'''
const bool c = true;''');
- await assertErrorsInCode(
- r'''
+ await assertErrorsInCode(r'''
import 'lib1.dart' deferred as a;
f() {
return const {if(a.c) 0 : 0};
-}''',
- _constant_update_2018
- ? [
- error(
- CompileTimeErrorCode
- .IF_ELEMENT_CONDITION_FROM_DEFERRED_LIBRARY,
- 59,
- 3),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 56, 13),
- ]);
+}''', [
+ error(CompileTimeErrorCode.IF_ELEMENT_CONDITION_FROM_DEFERRED_LIBRARY, 59,
+ 3),
+ ]);
}
test_inMap_notConst() async {
@@ -125,39 +78,24 @@
test_inMap_notDeferred() async {
newFile(convertPath('$testPackageLibPath/lib1.dart'), content: r'''
const bool c = true;''');
- await assertErrorsInCode(
- r'''
+ await assertNoErrorsInCode(r'''
import 'lib1.dart' as a;
f() {
return const {if(a.c) 0 : 0};
-}''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 47, 13),
- ]);
+}''');
}
test_inSet_deferred() async {
newFile(convertPath('$testPackageLibPath/lib1.dart'), content: r'''
const bool c = true;''');
- await assertErrorsInCode(
- r'''
+ await assertErrorsInCode(r'''
import 'lib1.dart' deferred as a;
f() {
return const {if(a.c) 0};
-}''',
- _constant_update_2018
- ? [
- error(
- CompileTimeErrorCode
- .IF_ELEMENT_CONDITION_FROM_DEFERRED_LIBRARY,
- 59,
- 3),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 56, 9),
- ]);
+}''', [
+ error(CompileTimeErrorCode.IF_ELEMENT_CONDITION_FROM_DEFERRED_LIBRARY, 59,
+ 3),
+ ]);
}
test_inSet_notConst() async {
@@ -173,16 +111,10 @@
test_inSet_notDeferred() async {
newFile(convertPath('$testPackageLibPath/lib1.dart'), content: r'''
const bool c = true;''');
- await assertErrorsInCode(
- r'''
+ await assertNoErrorsInCode(r'''
import 'lib1.dart' as a;
f() {
return const {if(a.c) 0};
-}''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 47, 9),
- ]);
+}''');
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/list_element_type_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/list_element_type_not_assignable_test.dart
index f2526bd..6c69432 100644
--- a/pkg/analyzer/test/src/diagnostics/list_element_type_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/list_element_type_not_assignable_test.dart
@@ -10,137 +10,67 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ListElementTypeNotAssignableTest);
- defineReflectiveTests(ListElementTypeNotAssignableTest_language24);
});
}
@reflectiveTest
class ListElementTypeNotAssignableTest extends PubPackageResolutionTest
- with ListElementTypeNotAssignableTestCases {
- @override
- bool get _constant_update_2018 => true;
-}
-
-@reflectiveTest
-class ListElementTypeNotAssignableTest_language24
- extends PubPackageResolutionTest
- with ListElementTypeNotAssignableTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
+ with ListElementTypeNotAssignableTestCases {}
mixin ListElementTypeNotAssignableTestCases on PubPackageResolutionTest {
- bool get _constant_update_2018;
-
test_const_ifElement_thenElseFalse_intInt() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = 0;
const dynamic b = 0;
var v = const <int>[if (1 < 0) a else b];
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 62, 19),
- ]);
+''');
}
test_const_ifElement_thenElseFalse_intString() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic a = 0;
const dynamic b = 'b';
var v = const <int>[if (1 < 0) a else b];
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 82,
- 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 64, 19),
- ]);
+''', [
+ error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 82, 1),
+ ]);
}
test_const_ifElement_thenFalse_intString() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
var v = const <int>[if (1 < 0) 'a'];
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 31,
- 3),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 20, 14),
- error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 31,
- 3),
- ]);
+''', [
+ error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 31, 3),
+ ]);
}
test_const_ifElement_thenFalse_intString_dynamic() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = 'a';
var v = const <int>[if (1 < 0) a];
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 43, 12),
- ]);
+''');
}
test_const_ifElement_thenTrue_intInt() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = 0;
var v = const <int>[if (true) a];
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 41, 11),
- ]);
+''');
}
test_const_ifElement_thenTrue_intString() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic a = 'a';
var v = const <int>[if (true) a];
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 53,
- 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 43, 11),
- ]);
+''', [
+ error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 53, 1),
+ ]);
}
test_const_spread_intInt() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
var v = const <int>[...[0, 1]];
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 20, 9),
- ]);
+''');
}
test_const_stringInt() async {
diff --git a/pkg/analyzer/test/src/diagnostics/map_key_type_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/map_key_type_not_assignable_test.dart
index 515fb56..55fcfd1 100644
--- a/pkg/analyzer/test/src/diagnostics/map_key_type_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/map_key_type_not_assignable_test.dart
@@ -10,135 +10,70 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(MapKeyTypeNotAssignableTest);
- defineReflectiveTests(MapKeyTypeNotAssignableTest_language24);
});
}
@reflectiveTest
class MapKeyTypeNotAssignableTest extends PubPackageResolutionTest
- with MapKeyTypeNotAssignableTestCases {
- @override
- bool get _constant_update_2018 => true;
-}
-
-@reflectiveTest
-class MapKeyTypeNotAssignableTest_language24 extends PubPackageResolutionTest
- with MapKeyTypeNotAssignableTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
+ with MapKeyTypeNotAssignableTestCases {}
mixin MapKeyTypeNotAssignableTestCases on PubPackageResolutionTest {
- bool get _constant_update_2018;
-
test_const_ifElement_thenElseFalse_intInt_dynamic() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = 0;
const dynamic b = 0;
var v = const <int, bool>{if (1 < 0) a: true else b: false};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 68, 32),
- ]);
+''');
}
test_const_ifElement_thenElseFalse_intString_dynamic() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic a = 0;
const dynamic b = 'b';
var v = const <int, bool>{if (1 < 0) a: true else b: false};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 94, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 70, 32),
- ]);
+''', [
+ error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 94, 1),
+ ]);
}
test_const_ifElement_thenFalse_intString_dynamic() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = 'a';
var v = const <int, bool>{if (1 < 0) a: true};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 49, 18),
- ]);
+''');
}
test_const_ifElement_thenFalse_intString_value() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
var v = const <int, bool>{if (1 < 0) 'a': true};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 37, 3),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 26, 20),
- error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 37, 3),
- ]);
+''', [
+ error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 37, 3),
+ ]);
}
test_const_ifElement_thenTrue_intInt_dynamic() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = 0;
var v = const <int, bool>{if (true) a: true};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 47, 17),
- ]);
+''');
}
test_const_ifElement_thenTrue_intString_dynamic() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic a = 'a';
var v = const <int, bool>{if (true) a: true};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 59, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 49, 17),
- ]);
+''', [
+ error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 59, 1),
+ ]);
}
test_const_ifElement_thenTrue_notConst() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final a = 0;
var v = const <int, bool>{if (1 < 2) a: true};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_KEY, 50, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 39, 18),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_KEY, 50, 1),
+ ]);
}
test_const_intInt_dynamic() async {
@@ -166,31 +101,18 @@
}
test_const_spread_intInt() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
var v = const <int, String>{...{1: 'a'}};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 28, 11),
- ]);
+''');
}
test_const_spread_intString_dynamic() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic a = 'a';
var v = const <int, String>{...{a: 'a'}};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 55, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 51, 11),
- error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 55, 1),
- ]);
+''', [
+ error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 55, 1),
+ ]);
}
test_key_type_is_assignable() async {
diff --git a/pkg/analyzer/test/src/diagnostics/map_value_type_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/map_value_type_not_assignable_test.dart
index fb15c1f..443ce2b 100644
--- a/pkg/analyzer/test/src/diagnostics/map_value_type_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/map_value_type_not_assignable_test.dart
@@ -10,139 +10,70 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(MapValueTypeNotAssignableTest);
- defineReflectiveTests(MapValueTypeNotAssignableTest_language24);
});
}
@reflectiveTest
class MapValueTypeNotAssignableTest extends PubPackageResolutionTest
- with MapValueTypeNotAssignableTestCases {
- @override
- bool get _constant_update_2018 => true;
-}
-
-@reflectiveTest
-class MapValueTypeNotAssignableTest_language24 extends PubPackageResolutionTest
- with MapValueTypeNotAssignableTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
+ with MapValueTypeNotAssignableTestCases {}
mixin MapValueTypeNotAssignableTestCases on PubPackageResolutionTest {
- bool get _constant_update_2018;
-
test_const_ifElement_thenElseFalse_intInt_dynamic() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = 0;
const dynamic b = 0;
var v = const <bool, int>{if (1 < 0) true: a else false: b};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 68, 32),
- ]);
+''');
}
test_const_ifElement_thenElseFalse_intString_dynamic() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic a = 0;
const dynamic b = 'b';
var v = const <bool, int>{if (1 < 0) true: a else false: b};
-''',
- _constant_update_2018
- ? [
- error(
- CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 101, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 70, 32),
- ]);
+''', [
+ error(CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 101, 1),
+ ]);
}
test_const_ifElement_thenFalse_intString_dynamic() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = 'a';
var v = const <bool, int>{if (1 < 0) true: a};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 49, 18),
- ]);
+''');
}
test_const_ifElement_thenFalse_intString_value() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
var v = const <bool, int>{if (1 < 0) true: 'a'};
-''',
- _constant_update_2018
- ? [
- error(
- CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 43, 3),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 26, 20),
- error(
- CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 43, 3),
- ]);
+''', [
+ error(CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 43, 3),
+ ]);
}
test_const_ifElement_thenTrue_intInt_dynamic() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = 0;
var v = const <bool, int>{if (true) true: a};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 47, 17),
- ]);
+''');
}
test_const_ifElement_thenTrue_intString_dynamic() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic a = 'a';
var v = const <bool, int>{if (true) true: a};
-''',
- _constant_update_2018
- ? [
- error(
- CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 65, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 49, 17),
- ]);
+''', [
+ error(CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 65, 1),
+ ]);
}
test_const_ifElement_thenTrue_notConst() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final a = 0;
var v = const <bool, int>{if (1 < 2) true: a};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 56, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 39, 18),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 56, 1),
+ ]);
}
test_const_intInt_dynamic() async {
@@ -170,33 +101,18 @@
}
test_const_spread_intInt() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
var v = const <bool, int>{...{true: 1}};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 26, 12),
- ]);
+''');
}
test_const_spread_intString_dynamic() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic a = 'a';
var v = const <bool, int>{...{true: a}};
-''',
- _constant_update_2018
- ? [
- error(
- CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 59, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 49, 12),
- error(
- CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 59, 1),
- ]);
+''', [
+ error(CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 59, 1),
+ ]);
}
test_nonConst_ifElement_thenElseFalse_intInt_dynamic() async {
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_list_element_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_list_element_from_deferred_library_test.dart
index 28ae14c..a0fcf9a 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_list_element_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_list_element_from_deferred_library_test.dart
@@ -9,33 +9,17 @@
main() {
defineReflectiveSuite(() {
- defineReflectiveTests(NonConstantListValueFromDeferredLibraryTest);
- defineReflectiveTests(
- NonConstantListElementFromDeferredLibraryTest_language24);
+ defineReflectiveTests(NonConstantListElementFromDeferredLibraryTest);
});
}
@reflectiveTest
-class NonConstantListElementFromDeferredLibraryTest_language24
+class NonConstantListElementFromDeferredLibraryTest
extends PubPackageResolutionTest
- with NonConstantListElementFromDeferredLibraryTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
+ with NonConstantListElementFromDeferredLibraryTestCases {}
mixin NonConstantListElementFromDeferredLibraryTestCases
on PubPackageResolutionTest {
- bool get _constant_update_2018;
-
@failingTest
test_const_ifElement_thenTrue_deferredElse() async {
// reports wrong error code (which is not crucial to fix)
@@ -56,23 +40,16 @@
test_const_ifElement_thenTrue_deferredThen() async {
newFile(convertPath('$testPackageLibPath/lib1.dart'), content: r'''
const int c = 1;''');
- await assertErrorsInCode(
- r'''
+ await assertErrorsInCode(r'''
import 'lib1.dart' deferred as a;
const cond = true;
var v = const [ if (cond) a.c ];
-''',
- _constant_update_2018
- ? [
- error(
- CompileTimeErrorCode
- .NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY,
- 79,
- 3),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 69, 13),
- ]);
+''', [
+ error(
+ CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT_FROM_DEFERRED_LIBRARY,
+ 79,
+ 3),
+ ]);
}
test_const_topLevel_deferred() async {
@@ -103,11 +80,3 @@
]);
}
}
-
-@reflectiveTest
-class NonConstantListValueFromDeferredLibraryTest
- extends PubPackageResolutionTest
- with NonConstantListElementFromDeferredLibraryTestCases {
- @override
- bool get _constant_update_2018 => true;
-}
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_list_element_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_list_element_test.dart
index f9038cd..5e51730 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_list_element_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_list_element_test.dart
@@ -10,36 +10,14 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(NonConstantListElementTest);
- defineReflectiveTests(NonConstantListElementTest_language24);
});
}
@reflectiveTest
class NonConstantListElementTest extends PubPackageResolutionTest
- with NonConstantListElementTestCases {
- @override
- bool get _constant_update_2018 => true;
-}
-
-@reflectiveTest
-class NonConstantListElementTest_language24 extends PubPackageResolutionTest
- with NonConstantListElementTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
+ with NonConstantListElementTestCases {}
mixin NonConstantListElementTestCases on PubPackageResolutionTest {
- bool get _constant_update_2018;
-
test_const_forElement() async {
await assertErrorsInCode(r'''
const Set set = {};
@@ -50,119 +28,71 @@
}
test_const_ifElement_thenElseFalse_finalElse() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const [if (1 < 0) 0 else a];
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 54, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 36, 19),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 54, 1),
+ ]);
}
test_const_ifElement_thenElseFalse_finalThen() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const [if (1 < 0) a else 0];
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 47, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 36, 19),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 47, 1),
+ ]);
}
test_const_ifElement_thenElseTrue_finalElse() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const [if (1 > 0) 0 else a];
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 54, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 36, 19),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 54, 1),
+ ]);
}
test_const_ifElement_thenElseTrue_finalThen() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const [if (1 > 0) a else 0];
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 47, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 36, 19),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 47, 1),
+ ]);
}
test_const_ifElement_thenFalse_constThen() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = 0;
var v = const [if (1 < 0) a];
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 36, 12),
- ]);
+''');
}
test_const_ifElement_thenFalse_finalThen() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const [if (1 < 0) a];
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 47, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 36, 12),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 47, 1),
+ ]);
}
test_const_ifElement_thenTrue_constThen() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = 0;
var v = const [if (1 > 0) a];
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 36, 12),
- ]);
+''');
}
test_const_ifElement_thenTrue_finalThen() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const [if (1 > 0) a];
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 47, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 36, 12),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 47, 1),
+ ]);
}
test_const_topVar() async {
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_map_element_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_map_element_test.dart
index 26828b8..f60e50d 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_map_element_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_map_element_test.dart
@@ -10,40 +10,16 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(NonConstantMapElementTest);
- defineReflectiveTests(NonConstantMapElementTest_language24);
defineReflectiveTests(NonConstantMapKeyTest);
- defineReflectiveTests(NonConstantMapKeyTest_language24);
defineReflectiveTests(NonConstantMapValueTest);
- defineReflectiveTests(NonConstantMapValueTest_language24);
});
}
@reflectiveTest
class NonConstantMapElementTest extends PubPackageResolutionTest
- with NonConstantMapElementTestCases {
- @override
- bool get _constant_update_2018 => true;
-}
-
-@reflectiveTest
-class NonConstantMapElementTest_language24 extends PubPackageResolutionTest
- with NonConstantMapElementTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
+ with NonConstantMapElementTestCases {}
mixin NonConstantMapElementTestCases on PubPackageResolutionTest {
- bool get _constant_update_2018;
-
test_forElement_cannotBeConst() async {
await assertErrorsInCode('''
void main() {
@@ -56,21 +32,14 @@
}
test_forElement_nested_cannotBeConst() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
void main() {
const {1: null, if (true) for (final x in const []) null: null};
}
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 42, 36),
- error(HintCode.UNUSED_LOCAL_VARIABLE, 53, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 32, 46),
- error(HintCode.UNUSED_LOCAL_VARIABLE, 53, 1),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 42, 36),
+ error(HintCode.UNUSED_LOCAL_VARIABLE, 53, 1),
+ ]);
}
test_forElement_notConst_noError() async {
@@ -83,238 +52,133 @@
}
test_ifElement_mayBeConst() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
void main() {
const {1: null, if (true) null: null};
}
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 32, 20),
- ]);
+''');
}
test_ifElement_nested_mayBeConst() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
void main() {
const {1: null, if (true) if (true) null: null};
}
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 32, 30),
- ]);
+''');
}
test_ifElement_notConstCondition() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
void main() {
bool notConst = true;
const {1: null, if (notConst) null: null};
}
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 60, 8),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 56, 24),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 60, 8),
+ ]);
}
test_ifElementWithElse_mayBeConst() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
void main() {
const isTrue = true;
const {1: null, if (isTrue) null: null else null: null};
}
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 55, 38),
- ]);
+''');
}
test_spreadElement_mayBeConst() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
void main() {
const {1: null, ...{null: null}};
}
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 32, 15),
- ]);
+''');
}
test_spreadElement_notConst() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
void main() {
var notConst = {};
const {1: null, ...notConst};
}
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 56, 8),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 53, 11),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 56, 8),
+ ]);
}
}
@reflectiveTest
class NonConstantMapKeyTest extends PubPackageResolutionTest
- with NonConstantMapKeyTestCases {
- @override
- bool get _constant_update_2018 => true;
-}
-
-@reflectiveTest
-class NonConstantMapKeyTest_language24 extends PubPackageResolutionTest
- with NonConstantMapKeyTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
+ with NonConstantMapKeyTestCases {}
@reflectiveTest
mixin NonConstantMapKeyTestCases on PubPackageResolutionTest {
- bool get _constant_update_2018;
-
test_const_ifElement_thenElseFalse_finalElse() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const <int, int>{if (1 < 0) 0: 0 else a: 0};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_KEY, 67, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 46, 25),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_KEY, 67, 1),
+ ]);
}
test_const_ifElement_thenElseFalse_finalThen() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const <int, int>{if (1 < 0) a: 0 else 0: 0};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_KEY, 57, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 46, 25),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_KEY, 57, 1),
+ ]);
}
test_const_ifElement_thenElseTrue_finalElse() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const <int, int>{if (1 > 0) 0: 0 else a: 0};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_KEY, 67, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 46, 25),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_KEY, 67, 1),
+ ]);
}
test_const_ifElement_thenElseTrue_finalThen() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const <int, int>{if (1 > 0) a: 0 else 0: 0};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_KEY, 57, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 46, 25),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_KEY, 57, 1),
+ ]);
}
test_const_ifElement_thenFalse_constThen() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = 0;
var v = const <int, int>{if (1 < 0) a: 0};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 46, 15),
- ]);
+''');
}
test_const_ifElement_thenFalse_finalThen() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const <int, int>{if (1 < 0) a: 0};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_KEY, 57, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 46, 15),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_KEY, 57, 1),
+ ]);
}
test_const_ifElement_thenTrue_constThen() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = 0;
var v = const <int, int>{if (1 > 0) a: 0};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 46, 15),
- ]);
+''');
}
test_const_ifElement_thenTrue_finalThen() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const <int, int>{if (1 > 0) a: 0};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_KEY, 57, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 46, 15),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_KEY, 57, 1),
+ ]);
}
test_const_topVar() async {
@@ -336,144 +200,75 @@
@reflectiveTest
class NonConstantMapValueTest extends PubPackageResolutionTest
- with NonConstantMapValueTestCases {
- @override
- bool get _constant_update_2018 => true;
-}
-
-@reflectiveTest
-class NonConstantMapValueTest_language24 extends PubPackageResolutionTest
- with NonConstantMapValueTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
+ with NonConstantMapValueTestCases {}
mixin NonConstantMapValueTestCases on PubPackageResolutionTest {
- bool get _constant_update_2018;
-
test_const_ifElement_thenElseFalse_finalElse() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const <int, int>{if (1 < 0) 0: 0 else 0: a};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 70, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 46, 25),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 70, 1),
+ ]);
}
test_const_ifElement_thenElseFalse_finalThen() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const <int, int>{if (1 < 0) 0: a else 0: 0};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 60, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 46, 25),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 60, 1),
+ ]);
}
test_const_ifElement_thenElseTrue_finalElse() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const <int, int>{if (1 > 0) 0: 0 else 0: a};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 70, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 46, 25),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 70, 1),
+ ]);
}
test_const_ifElement_thenElseTrue_finalThen() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const <int, int>{if (1 > 0) 0: a else 0: 0};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 60, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 46, 25),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 60, 1),
+ ]);
}
test_const_ifElement_thenFalse_constThen() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = 0;
var v = const <int, int>{if (1 < 0) 0: a};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 46, 15),
- ]);
+''');
}
test_const_ifElement_thenFalse_finalThen() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const <int, int>{if (1 < 0) 0: a};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 60, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 46, 15),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 60, 1),
+ ]);
}
test_const_ifElement_thenTrue_constThen() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = 0;
var v = const <int, int>{if (1 > 0) 0: a};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 46, 15),
- ]);
+''');
}
test_const_ifElement_thenTrue_finalThen() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const <int, int>{if (1 > 0) 0: a};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 60, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 46, 15),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 60, 1),
+ ]);
}
test_const_topVar() async {
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_map_key_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_map_key_from_deferred_library_test.dart
index f6526ff..1d8f643 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_map_key_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_map_key_from_deferred_library_test.dart
@@ -10,38 +10,15 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(NonConstantMapKeyFromDeferredLibraryTest);
- defineReflectiveTests(NonConstantMapKeyFromDeferredLibraryTest_language24);
});
}
@reflectiveTest
class NonConstantMapKeyFromDeferredLibraryTest extends PubPackageResolutionTest
- with NonConstantMapKeyFromDeferredLibraryTestCases {
- @override
- bool get _constant_update_2018 => true;
-}
-
-@reflectiveTest
-class NonConstantMapKeyFromDeferredLibraryTest_language24
- extends PubPackageResolutionTest
- with NonConstantMapKeyFromDeferredLibraryTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
+ with NonConstantMapKeyFromDeferredLibraryTestCases {}
mixin NonConstantMapKeyFromDeferredLibraryTestCases
on PubPackageResolutionTest {
- bool get _constant_update_2018;
-
@failingTest
test_const_ifElement_thenTrue_deferredElse() async {
// reports wrong error code
@@ -60,23 +37,14 @@
test_const_ifElement_thenTrue_deferredThen() async {
newFile(convertPath('$testPackageLibPath/lib1.dart'), content: r'''
const int c = 1;''');
- await assertErrorsInCode(
- r'''
+ await assertErrorsInCode(r'''
import 'lib1.dart' deferred as a;
const cond = true;
var v = const { if (cond) a.c : 0};
-''',
- _constant_update_2018
- ? [
- error(
- CompileTimeErrorCode
- .NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY,
- 79,
- 3),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 69, 17),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_KEY_FROM_DEFERRED_LIBRARY, 79,
+ 3),
+ ]);
}
test_const_topLevel_deferred() async {
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_map_key_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_map_key_test.dart
index f8b166b..8d42bf8 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_map_key_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_map_key_test.dart
@@ -10,66 +10,32 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(NonConstantMapKeyTest);
- defineReflectiveTests(NonConstantMapKeyTest_language24);
});
}
@reflectiveTest
class NonConstantMapKeyTest extends PubPackageResolutionTest
- with NonConstantMapKeyTestCases {
- @override
- bool get _constant_update_2018 => true;
-}
-
-@reflectiveTest
-class NonConstantMapKeyTest_language24 extends PubPackageResolutionTest
- with NonConstantMapKeyTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
+ with NonConstantMapKeyTestCases {}
mixin NonConstantMapKeyTestCases on PubPackageResolutionTest {
- bool get _constant_update_2018;
-
test_const_ifElement_thenTrue_elseFinal() async {
- await assertErrorsInCode(
- r'''
+ await assertErrorsInCode(r'''
final dynamic a = 0;
const cond = true;
var v = const {if (cond) 0: 1 else a : 0};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_KEY, 75, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 55, 25),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_KEY, 75, 1),
+ ]);
}
test_const_ifElement_thenTrue_thenFinal() async {
- await assertErrorsInCode(
- r'''
+ await assertErrorsInCode(r'''
final dynamic a = 0;
const cond = true;
var v = const {if (cond) a : 0};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_KEY, 65, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 55, 15),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_KEY, 65, 1),
+ ]);
}
test_const_topLevel() async {
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_map_value_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_map_value_from_deferred_library_test.dart
index ad0ec5b..f7b72d4 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_map_value_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_map_value_from_deferred_library_test.dart
@@ -10,40 +10,16 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(NonConstantMapValueFromDeferredLibraryTest);
- defineReflectiveTests(
- NonConstantMapValueFromDeferredLibraryTest_language24);
});
}
@reflectiveTest
class NonConstantMapValueFromDeferredLibraryTest
extends PubPackageResolutionTest
- with NonConstantMapValueFromDeferredLibraryTestCases {
- @override
- bool get _constant_update_2018 => true;
-}
-
-@reflectiveTest
-class NonConstantMapValueFromDeferredLibraryTest_language24
- extends PubPackageResolutionTest
- with NonConstantMapValueFromDeferredLibraryTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
+ with NonConstantMapValueFromDeferredLibraryTestCases {}
mixin NonConstantMapValueFromDeferredLibraryTestCases
on PubPackageResolutionTest {
- bool get _constant_update_2018;
-
@failingTest
test_const_ifElement_thenTrue_elseDeferred() async {
// reports wrong error code
@@ -62,23 +38,14 @@
test_const_ifElement_thenTrue_thenDeferred() async {
newFile(convertPath('$testPackageLibPath/lib1.dart'), content: r'''
const int c = 1;''');
- await assertErrorsInCode(
- r'''
+ await assertErrorsInCode(r'''
import 'lib1.dart' deferred as a;
const cond = true;
var v = const { if (cond) 'a' : a.c};
-''',
- _constant_update_2018
- ? [
- error(
- CompileTimeErrorCode
- .NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY,
- 85,
- 3),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 69, 19),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY,
+ 85, 3),
+ ]);
}
test_const_topLevel_deferred() async {
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_map_value_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_map_value_test.dart
index 74c3160..26a41df 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_map_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_map_value_test.dart
@@ -10,67 +10,32 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(NonConstantMapValueTest);
- defineReflectiveTests(NonConstantMapValueTest_language24);
});
}
@reflectiveTest
class NonConstantMapValueTest extends PubPackageResolutionTest
- with NonConstantMapValueTestCases {
- @override
- bool get _constant_update_2018 => true;
-}
-
-@reflectiveTest
-class NonConstantMapValueTest_language24 extends PubPackageResolutionTest
- with NonConstantMapValueTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
+ with NonConstantMapValueTestCases {}
mixin NonConstantMapValueTestCases on PubPackageResolutionTest {
- bool get _constant_update_2018;
-
test_const_ifTrue_elseFinal() async {
- await assertErrorsInCode(
- r'''
+ await assertErrorsInCode(r'''
final dynamic a = 0;
const cond = true;
var v = const {if (cond) 'a': 'b', 'c' : a};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 81, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 55, 18),
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 81, 1),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 81, 1),
+ ]);
}
test_const_ifTrue_thenFinal() async {
- await assertErrorsInCode(
- r'''
+ await assertErrorsInCode(r'''
final dynamic a = 0;
const cond = true;
var v = const {if (cond) 'a' : a};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 71, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 55, 17),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 71, 1),
+ ]);
}
test_const_topLevel() async {
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_set_element_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_set_element_test.dart
index 8adf61f..5e28579 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_set_element_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_set_element_test.dart
@@ -10,36 +10,14 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(NonConstantSetElementTest);
- defineReflectiveTests(NonConstantSetElementTest_language24);
});
}
@reflectiveTest
class NonConstantSetElementTest extends PubPackageResolutionTest
- with NonConstantSetElementTestCases {
- @override
- bool get _constant_update_2018 => true;
-}
-
-@reflectiveTest
-class NonConstantSetElementTest_language24 extends PubPackageResolutionTest
- with NonConstantSetElementTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
+ with NonConstantSetElementTestCases {}
mixin NonConstantSetElementTestCases on PubPackageResolutionTest {
- bool get _constant_update_2018;
-
test_const_forElement() async {
await assertErrorsInCode(r'''
const Set set = {};
@@ -50,119 +28,71 @@
}
test_const_ifElement_thenElseFalse_finalElse() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const <int>{if (1 < 0) 0 else a};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 59, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 41, 19),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 59, 1),
+ ]);
}
test_const_ifElement_thenElseFalse_finalThen() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const <int>{if (1 < 0) a else 0};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 52, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 41, 19),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 52, 1),
+ ]);
}
test_const_ifElement_thenElseTrue_finalElse() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const <int>{if (1 > 0) 0 else a};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 59, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 41, 19),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 59, 1),
+ ]);
}
test_const_ifElement_thenElseTrue_finalThen() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const <int>{if (1 > 0) a else 0};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 52, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 41, 19),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 52, 1),
+ ]);
}
test_const_ifElement_thenFalse_constThen() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = 0;
var v = const <int>{if (1 < 0) a};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 41, 12),
- ]);
+''');
}
test_const_ifElement_thenFalse_finalThen() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const <int>{if (1 < 0) a};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 52, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 41, 12),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 52, 1),
+ ]);
}
test_const_ifElement_thenTrue_constThen() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = 0;
var v = const <int>{if (1 > 0) a};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 41, 12),
- ]);
+''');
}
test_const_ifElement_thenTrue_finalThen() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
final dynamic a = 0;
var v = const <int>{if (1 > 0) a};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 52, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 41, 12),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 52, 1),
+ ]);
}
test_const_parameter() async {
@@ -175,18 +105,12 @@
}
test_const_spread_final() async {
- await assertErrorsInCode(
- r'''
+ await assertErrorsInCode(r'''
final Set x = null;
var v = const {...x};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 38, 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 35, 4),
- ]);
+''', [
+ error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 38, 1),
+ ]);
}
test_const_topVar() async {
diff --git a/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart b/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart
index 1ea665c..36645a4 100644
--- a/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/receiver_of_type_never_test.dart
@@ -157,7 +157,7 @@
findNode.index('x[0]'),
readElement: null,
writeElement: null,
- type: 'Never',
+ type: 'dynamic',
);
assertType(findNode.binary('1 + 2'), 'int');
diff --git a/pkg/analyzer/test/src/diagnostics/set_element_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/set_element_from_deferred_library_test.dart
index 1a89d0a..044914b 100644
--- a/pkg/analyzer/test/src/diagnostics/set_element_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/set_element_from_deferred_library_test.dart
@@ -10,37 +10,14 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(SetElementFromDeferredLibraryTest);
- defineReflectiveTests(SetElementFromDeferredLibraryTest_language24);
});
}
@reflectiveTest
class SetElementFromDeferredLibraryTest extends PubPackageResolutionTest
- with SetElementFromDeferredLibraryTestCases {
- @override
- bool get _constant_update_2018 => true;
-}
-
-@reflectiveTest
-class SetElementFromDeferredLibraryTest_language24
- extends PubPackageResolutionTest
- with SetElementFromDeferredLibraryTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
+ with SetElementFromDeferredLibraryTestCases {}
mixin SetElementFromDeferredLibraryTestCases on PubPackageResolutionTest {
- bool get _constant_update_2018;
-
@failingTest
test_const_ifElement_thenTrue_elseDeferred() async {
// reports wrong error code
@@ -58,20 +35,13 @@
test_const_ifElement_thenTrue_thenDeferred() async {
newFile(convertPath('$testPackageLibPath/lib1.dart'), content: r'''
const int c = 1;''');
- await assertErrorsInCode(
- r'''
+ await assertErrorsInCode(r'''
import 'lib1.dart' deferred as a;
const cond = true;
var v = const {if (cond) a.c};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.SET_ELEMENT_FROM_DEFERRED_LIBRARY,
- 78, 3),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 68, 13),
- ]);
+''', [
+ error(CompileTimeErrorCode.SET_ELEMENT_FROM_DEFERRED_LIBRARY, 78, 3),
+ ]);
}
test_const_topLevel_deferred() async {
diff --git a/pkg/analyzer/test/src/diagnostics/set_element_type_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/set_element_type_not_assignable_test.dart
index d7349b8..1d34872 100644
--- a/pkg/analyzer/test/src/diagnostics/set_element_type_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/set_element_type_not_assignable_test.dart
@@ -10,136 +10,67 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(SetElementTypeNotAssignableTest);
- defineReflectiveTests(SetElementTypeNotAssignableTest_language24);
});
}
@reflectiveTest
class SetElementTypeNotAssignableTest extends PubPackageResolutionTest
- with SetElementTypeNotAssignableTestCases {
- @override
- bool get _constant_update_2018 => true;
-}
-
-@reflectiveTest
-class SetElementTypeNotAssignableTest_language24
- extends PubPackageResolutionTest with SetElementTypeNotAssignableTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
+ with SetElementTypeNotAssignableTestCases {}
mixin SetElementTypeNotAssignableTestCases on PubPackageResolutionTest {
- bool get _constant_update_2018;
-
test_const_ifElement_thenElseFalse_intInt() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = 0;
const dynamic b = 0;
var v = const <int>{if (1 < 0) a else b};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 62, 19),
- ]);
+''');
}
test_const_ifElement_thenElseFalse_intString() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic a = 0;
const dynamic b = 'b';
var v = const <int>{if (1 < 0) a else b};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 82,
- 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 64, 19),
- ]);
+''', [
+ error(CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 82, 1),
+ ]);
}
test_const_ifElement_thenFalse_intString() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
var v = const <int>{if (1 < 0) 'a'};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 31,
- 3),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 20, 14),
- error(CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 31,
- 3),
- ]);
+''', [
+ error(CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 31, 3),
+ ]);
}
test_const_ifElement_thenFalse_intString_dynamic() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = 'a';
var v = const <int>{if (1 < 0) a};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 43, 12),
- ]);
+''');
}
test_const_ifElement_thenTrue_intInt() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
const dynamic a = 0;
var v = const <int>{if (true) a};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 41, 11),
- ]);
+''');
}
test_const_ifElement_thenTrue_intString() async {
- await assertErrorsInCode(
- '''
+ await assertErrorsInCode('''
const dynamic a = 'a';
var v = const <int>{if (true) a};
-''',
- _constant_update_2018
- ? [
- error(CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 53,
- 1),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 43, 11),
- ]);
+''', [
+ error(CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 53, 1),
+ ]);
}
test_const_spread_intInt() async {
- await assertErrorsInCode(
- '''
+ await assertNoErrorsInCode('''
var v = const <int>{...[0, 1]};
-''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 20, 9),
- ]);
+''');
}
test_explicitTypeArgs_const() async {
diff --git a/pkg/analyzer/test/src/diagnostics/spread_expression_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/spread_expression_from_deferred_library_test.dart
index 3c9b2a3..c868a771 100644
--- a/pkg/analyzer/test/src/diagnostics/spread_expression_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/spread_expression_from_deferred_library_test.dart
@@ -10,57 +10,25 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(SpreadExpressionFromDeferredLibraryTest);
- defineReflectiveTests(SpreadExpressionFromDeferredLibraryTest_language24);
});
}
@reflectiveTest
class SpreadExpressionFromDeferredLibraryTest extends PubPackageResolutionTest
- with SpreadExpressionFromDeferredLibraryTestCases {
- @override
- bool get _constant_update_2018 => true;
-}
-
-@reflectiveTest
-class SpreadExpressionFromDeferredLibraryTest_language24
- extends PubPackageResolutionTest
- with SpreadExpressionFromDeferredLibraryTestCases {
- @override
- bool get _constant_update_2018 => false;
-
- @override
- void setUp() {
- super.setUp();
- writeTestPackageConfig(
- PackageConfigFileBuilder(),
- languageVersion: '2.4',
- );
- }
-}
+ with SpreadExpressionFromDeferredLibraryTestCases {}
mixin SpreadExpressionFromDeferredLibraryTestCases on PubPackageResolutionTest {
- bool get _constant_update_2018;
-
test_inList_deferred() async {
newFile(convertPath('$testPackageLibPath/lib1.dart'), content: r'''
const List c = [];''');
- await assertErrorsInCode(
- r'''
+ await assertErrorsInCode(r'''
import 'lib1.dart' deferred as a;
f() {
return const [...a.c];
-}''',
- _constant_update_2018
- ? [
- error(
- CompileTimeErrorCode
- .SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY,
- 59,
- 3),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 56, 6),
- ]);
+}''', [
+ error(
+ CompileTimeErrorCode.SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY, 59, 3),
+ ]);
}
test_inList_deferred_notConst() async {
@@ -76,39 +44,24 @@
test_inList_notDeferred() async {
newFile(convertPath('$testPackageLibPath/lib1.dart'), content: r'''
const List c = [];''');
- await assertErrorsInCode(
- r'''
+ await assertNoErrorsInCode(r'''
import 'lib1.dart' as a;
f() {
return const [...a.c];
-}''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 47, 6),
- ]);
+}''');
}
test_inMap_deferred() async {
newFile(convertPath('$testPackageLibPath/lib1.dart'), content: r'''
const Map c = <int, int>{};''');
- await assertErrorsInCode(
- r'''
+ await assertErrorsInCode(r'''
import 'lib1.dart' deferred as a;
f() {
return const {...a.c};
-}''',
- _constant_update_2018
- ? [
- error(
- CompileTimeErrorCode
- .SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY,
- 59,
- 3),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 56, 6),
- ]);
+}''', [
+ error(
+ CompileTimeErrorCode.SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY, 59, 3),
+ ]);
}
test_inMap_notConst() async {
@@ -124,39 +77,24 @@
test_inMap_notDeferred() async {
newFile(convertPath('$testPackageLibPath/lib1.dart'), content: r'''
const Map c = <int, int>{};''');
- await assertErrorsInCode(
- r'''
+ await assertNoErrorsInCode(r'''
import 'lib1.dart' as a;
f() {
return const {...a.c};
-}''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 47, 6),
- ]);
+}''');
}
test_inSet_deferred() async {
newFile(convertPath('$testPackageLibPath/lib1.dart'), content: r'''
const Set c = <int>{};''');
- await assertErrorsInCode(
- r'''
+ await assertErrorsInCode(r'''
import 'lib1.dart' deferred as a;
f() {
return const {...a.c};
-}''',
- _constant_update_2018
- ? [
- error(
- CompileTimeErrorCode
- .SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY,
- 59,
- 3),
- ]
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 56, 6),
- ]);
+}''', [
+ error(
+ CompileTimeErrorCode.SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY, 59, 3),
+ ]);
}
test_inSet_notConst() async {
@@ -172,16 +110,10 @@
test_inSet_notDeferred() async {
newFile(convertPath('$testPackageLibPath/lib1.dart'), content: r'''
const Set c = <int>{};''');
- await assertErrorsInCode(
- r'''
+ await assertNoErrorsInCode(r'''
import 'lib1.dart' as a;
f() {
return const {...a.c};
-}''',
- _constant_update_2018
- ? []
- : [
- error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 47, 6),
- ]);
+}''');
}
}
diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
index 01c5fd8..80a1d09 100644
--- a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
+++ b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
@@ -24,17 +24,17 @@
}
const Version enableAlternativeInvalidationStrategyVersion =
- const Version(2, 11);
-const Version enableConstantUpdate2018Version = const Version(2, 4);
+ const Version(2, 10);
+const Version enableConstantUpdate2018Version = const Version(2, 0);
const Version enableControlFlowCollectionsVersion = const Version(2, 0);
const Version enableExtensionMethodsVersion = const Version(2, 6);
-const Version enableNonNullableVersion = const Version(2, 11);
-const Version enableNonfunctionTypeAliasesVersion = const Version(2, 11);
+const Version enableNonNullableVersion = const Version(2, 10);
+const Version enableNonfunctionTypeAliasesVersion = const Version(2, 10);
const Version enableSetLiteralsVersion = const Version(2, 0);
const Version enableSpreadCollectionsVersion = const Version(2, 0);
-const Version enableTripleShiftVersion = const Version(2, 11);
-const Version enableValueClassVersion = const Version(2, 11);
-const Version enableVarianceVersion = const Version(2, 11);
+const Version enableTripleShiftVersion = const Version(2, 10);
+const Version enableValueClassVersion = const Version(2, 10);
+const Version enableVarianceVersion = const Version(2, 10);
ExperimentalFlag parseExperimentalFlag(String flag) {
switch (flag) {
@@ -93,31 +93,31 @@
};
const Map<ExperimentalFlag, Version> experimentEnabledVersion = {
- ExperimentalFlag.alternativeInvalidationStrategy: const Version(2, 11),
- ExperimentalFlag.constantUpdate2018: const Version(2, 4),
- ExperimentalFlag.controlFlowCollections: const Version(2, 0),
- ExperimentalFlag.extensionMethods: const Version(2, 6),
- ExperimentalFlag.nonNullable: const Version(2, 11),
- ExperimentalFlag.nonfunctionTypeAliases: const Version(2, 11),
- ExperimentalFlag.setLiterals: const Version(2, 0),
- ExperimentalFlag.spreadCollections: const Version(2, 0),
- ExperimentalFlag.tripleShift: const Version(2, 11),
- ExperimentalFlag.valueClass: const Version(2, 11),
- ExperimentalFlag.variance: const Version(2, 11),
-};
-
-const Map<ExperimentalFlag, Version> experimentReleasedVersion = {
- ExperimentalFlag.alternativeInvalidationStrategy: const Version(2, 11),
- ExperimentalFlag.constantUpdate2018: const Version(2, 4),
+ ExperimentalFlag.alternativeInvalidationStrategy: const Version(2, 10),
+ ExperimentalFlag.constantUpdate2018: const Version(2, 0),
ExperimentalFlag.controlFlowCollections: const Version(2, 0),
ExperimentalFlag.extensionMethods: const Version(2, 6),
ExperimentalFlag.nonNullable: const Version(2, 10),
- ExperimentalFlag.nonfunctionTypeAliases: const Version(2, 11),
+ ExperimentalFlag.nonfunctionTypeAliases: const Version(2, 10),
ExperimentalFlag.setLiterals: const Version(2, 0),
ExperimentalFlag.spreadCollections: const Version(2, 0),
- ExperimentalFlag.tripleShift: const Version(2, 11),
- ExperimentalFlag.valueClass: const Version(2, 11),
- ExperimentalFlag.variance: const Version(2, 11),
+ ExperimentalFlag.tripleShift: const Version(2, 10),
+ ExperimentalFlag.valueClass: const Version(2, 10),
+ ExperimentalFlag.variance: const Version(2, 10),
+};
+
+const Map<ExperimentalFlag, Version> experimentReleasedVersion = {
+ ExperimentalFlag.alternativeInvalidationStrategy: const Version(2, 10),
+ ExperimentalFlag.constantUpdate2018: const Version(2, 0),
+ ExperimentalFlag.controlFlowCollections: const Version(2, 0),
+ ExperimentalFlag.extensionMethods: const Version(2, 6),
+ ExperimentalFlag.nonNullable: const Version(2, 10),
+ ExperimentalFlag.nonfunctionTypeAliases: const Version(2, 10),
+ ExperimentalFlag.setLiterals: const Version(2, 0),
+ ExperimentalFlag.spreadCollections: const Version(2, 0),
+ ExperimentalFlag.tripleShift: const Version(2, 10),
+ ExperimentalFlag.valueClass: const Version(2, 10),
+ ExperimentalFlag.variance: const Version(2, 10),
};
const AllowedExperimentalFlags defaultAllowedExperimentalFlags =
diff --git a/pkg/front_end/lib/src/fasta/source/value_kinds.dart b/pkg/front_end/lib/src/fasta/source/value_kinds.dart
index c16e23d..e533e56 100644
--- a/pkg/front_end/lib/src/fasta/source/value_kinds.dart
+++ b/pkg/front_end/lib/src/fasta/source/value_kinds.dart
@@ -14,32 +14,11 @@
import 'package:kernel/ast.dart' as type;
-import '../builder/builder.dart' as type;
-import '../builder/builtin_type_declaration_builder.dart' as type;
-import '../builder/class_builder.dart' as type;
-import '../builder/constructor_reference_builder.dart' as type;
-import '../builder/dynamic_type_declaration_builder.dart' as type;
-import '../builder/enum_builder.dart' as type;
-import '../builder/field_builder.dart' as type;
import '../builder/formal_parameter_builder.dart' as type;
-import '../builder/function_builder.dart' as type;
-import '../builder/function_type_builder.dart' as type;
-import '../builder/invalid_type_declaration_builder.dart' as type;
-import '../builder/library_builder.dart' as type;
-import '../builder/member_builder.dart' as type;
import '../builder/metadata_builder.dart' as type;
-import '../builder/mixin_application_builder.dart' as type;
-import '../builder/modifier_builder.dart' as type;
-import '../builder/name_iterator.dart' as type;
-import '../builder/named_type_builder.dart' as type;
-import '../builder/nullability_builder.dart' as type;
-import '../builder/prefix_builder.dart' as type;
-import '../builder/type_alias_builder.dart' as type;
import '../builder/type_builder.dart' as type;
-import '../builder/type_declaration_builder.dart' as type;
import '../builder/type_variable_builder.dart' as type;
import '../builder/unresolved_type.dart' as type;
-import '../builder/void_type_declaration_builder.dart' as type;
import '../identifiers.dart' as type;
diff --git a/pkg/js/CHANGELOG.md b/pkg/js/CHANGELOG.md
index a996ef1..3728fa9 100644
--- a/pkg/js/CHANGELOG.md
+++ b/pkg/js/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.6.3-nullsafety.1
+
+* Allow 2.10 stable and 2.11.0 dev SDK versions.
+
## 0.6.3-nullsafety
* Opt in to null safety.
diff --git a/pkg/js/pubspec.yaml b/pkg/js/pubspec.yaml
index 67165c3..b9d05c4 100644
--- a/pkg/js/pubspec.yaml
+++ b/pkg/js/pubspec.yaml
@@ -1,10 +1,10 @@
name: js
-version: 0.6.3-nullsafety
+version: 0.6.3-nullsafety.1
description: Annotations to create static Dart interfaces for JavaScript APIs.
homepage: https://github.com/dart-lang/sdk/tree/master/pkg/js
environment:
- sdk: '>=2.10.0-0 <2.10.0'
+ sdk: '>=2.10.0-0 <2.11.0'
dev_dependencies:
pedantic: ^1.9.0
diff --git a/pkg/kernel/lib/default_language_version.dart b/pkg/kernel/lib/default_language_version.dart
index eb90980..6b7b18c 100644
--- a/pkg/kernel/lib/default_language_version.dart
+++ b/pkg/kernel/lib/default_language_version.dart
@@ -9,4 +9,4 @@
import "ast.dart";
-Version defaultLanguageVersion = const Version(2, 11);
+Version defaultLanguageVersion = const Version(2, 10);
diff --git a/pkg/meta/CHANGELOG.md b/pkg/meta/CHANGELOG.md
index f79fbff..9e27c00 100644
--- a/pkg/meta/CHANGELOG.md
+++ b/pkg/meta/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.3.0-nullsafety.3
+
+* Allow 2.10 stable and 2.11.0 dev SDK versions.
+
## 1.3.0-nullsafety.2
* Update for the 2.10 dev sdk.
diff --git a/pkg/meta/pubspec.yaml b/pkg/meta/pubspec.yaml
index dfad765..be6237c 100644
--- a/pkg/meta/pubspec.yaml
+++ b/pkg/meta/pubspec.yaml
@@ -1,5 +1,5 @@
name: meta
-version: 1.3.0-nullsafety.2
+version: 1.3.0-nullsafety.3
homepage: https://github.com/dart-lang/sdk/tree/master/pkg/meta
description: >
This library contains the declarations of annotations that developers can use
@@ -8,4 +8,4 @@
to provide a better user experience.
environment:
# This must remain a tight constraint until nnbd is stable
- sdk: '>=2.10.0-0 <2.10.0'
+ sdk: '>=2.10.0-0 <2.11.0'
diff --git a/runtime/bin/main_options.cc b/runtime/bin/main_options.cc
index 7c54268..1d2f619 100644
--- a/runtime/bin/main_options.cc
+++ b/runtime/bin/main_options.cc
@@ -487,7 +487,6 @@
bool implicitly_use_dart_dev = false;
bool run_script = false;
- int script_or_cmd_index = -1;
// Get the script name.
if (i < argc) {
@@ -500,7 +499,6 @@
#else
bool is_potential_file_path = true;
#endif // !defined(DART_PRECOMPILED_RUNTIME)
- script_or_cmd_index = i;
if (Options::disable_dart_dev() ||
(is_potential_file_path && !enable_vm_service_)) {
*script_name = Utils::StrDup(argv[i]);
@@ -549,6 +547,9 @@
else { // NOLINT
return -1;
}
+ USE(enable_dartdev_analytics);
+ USE(disable_dartdev_analytics);
+
const char** vm_argv = temp_vm_options.arguments();
int vm_argc = temp_vm_options.count();
diff --git a/runtime/bin/main_options.h b/runtime/bin/main_options.h
index 48553df..6f612fd 100644
--- a/runtime/bin/main_options.h
+++ b/runtime/bin/main_options.h
@@ -79,9 +79,9 @@
kAppJIT,
};
-static const char* DEFAULT_VM_SERVICE_SERVER_IP = "localhost";
-static const int DEFAULT_VM_SERVICE_SERVER_PORT = 8181;
-static const int INVALID_VM_SERVICE_SERVER_PORT = -1;
+static constexpr const char* DEFAULT_VM_SERVICE_SERVER_IP = "localhost";
+static constexpr int DEFAULT_VM_SERVICE_SERVER_PORT = 8181;
+static constexpr int INVALID_VM_SERVICE_SERVER_PORT = -1;
class Options {
public:
diff --git a/runtime/include/dart_api_dl.c b/runtime/include/dart_api_dl.c
index 7709a02..1a49c9c 100644
--- a/runtime/include/dart_api_dl.c
+++ b/runtime/include/dart_api_dl.c
@@ -16,7 +16,7 @@
#undef DART_API_DL_DEFINITIONS
-typedef void (*DartApiEntry_function)();
+typedef void* DartApiEntry_function;
DartApiEntry_function FindFunctionPointer(const DartApiEntry* entries,
const char* name) {
diff --git a/runtime/tests/vm/dart/regress_42799_test.dart b/runtime/tests/vm/dart/regress_42799_test.dart
new file mode 100644
index 0000000..c091da7
--- /dev/null
+++ b/runtime/tests/vm/dart/regress_42799_test.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Verifies that AOT compiler doesn't crash when constant folding 'is'
+// test for a value which is a result of unreachable code
+// (result of inlined call of a method which doesn't return).
+// Regression test for https://github.com/dart-lang/sdk/issues/42799.
+
+import "package:expect/expect.dart";
+
+@pragma('vm:prefer-inline')
+dynamic foo0(int par1) {
+ if (par1 >= 39) {
+ return <String>[];
+ }
+ if (par1 >= 37) {
+ return <int>[];
+ }
+ throw 'hi';
+}
+
+main() {
+ Expect.throws(() {
+ if (foo0(0) is List<int>) {
+ print('not reachable');
+ }
+ }, (e) => e == 'hi');
+}
diff --git a/runtime/tests/vm/dart/send_instantiated_fun_test.dart b/runtime/tests/vm/dart/send_instantiated_fun_test.dart
index 751e8f8..ab58c88 100644
--- a/runtime/tests/vm/dart/send_instantiated_fun_test.dart
+++ b/runtime/tests/vm/dart/send_instantiated_fun_test.dart
@@ -16,7 +16,7 @@
// Prevent obfuscation.
@pragma('vm:entry-point')
List<T> decodeFrom<T>(String s) {
- return List();
+ return [];
}
// Prevent obfuscation.
diff --git a/runtime/tests/vm/dart_2/regress_42799_test.dart b/runtime/tests/vm/dart_2/regress_42799_test.dart
new file mode 100644
index 0000000..c091da7
--- /dev/null
+++ b/runtime/tests/vm/dart_2/regress_42799_test.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Verifies that AOT compiler doesn't crash when constant folding 'is'
+// test for a value which is a result of unreachable code
+// (result of inlined call of a method which doesn't return).
+// Regression test for https://github.com/dart-lang/sdk/issues/42799.
+
+import "package:expect/expect.dart";
+
+@pragma('vm:prefer-inline')
+dynamic foo0(int par1) {
+ if (par1 >= 39) {
+ return <String>[];
+ }
+ if (par1 >= 37) {
+ return <int>[];
+ }
+ throw 'hi';
+}
+
+main() {
+ Expect.throws(() {
+ if (foo0(0) is List<int>) {
+ print('not reachable');
+ }
+ }, (e) => e == 'hi');
+}
diff --git a/runtime/tests/vm/vm.status b/runtime/tests/vm/vm.status
index 42a3df8..c228d58 100644
--- a/runtime/tests/vm/vm.status
+++ b/runtime/tests/vm/vm.status
@@ -174,6 +174,9 @@
dart_2/data_uri_import_test/utf16: Crash
dart_2/data_uri_import_test/wrongmime: Crash
+[ $builder_tag != bytecode_interpreter_nnbd && $builder_tag != bytecode_mixed_nnbd && $builder_tag != vm_nnbd ]
+dart/*: SkipByDesign # Migrated tests are not supposed to run on non-NNBD bots.
+
[ $builder_tag == obfuscated && $compiler == dartkp ]
dart/extension_names_test: SkipByDesign # No demangling (obfuscated).
dart/extension_unnamed_names_test: SkipByDesign # No demangling (obfuscated).
@@ -382,9 +385,6 @@
[ $builder_tag == bytecode_interpreter_nnbd || $builder_tag == bytecode_mixed_nnbd || $builder_tag == vm_nnbd ]
dart_2/*: SkipByDesign # Legacy tests are not supposed to run on NNBD bots.
-[ $builder_tag != bytecode_interpreter_nnbd || $builder_tag != bytecode_mixed_nnbd || $builder_tag != vm_nnbd ]
-dart/*: SkipByDesign # Migrated tests are not supposed to run on non-NNBD bots.
-
[ $builder_tag == crossword || $builder_tag == crossword_ast ]
dart/bytecode_with_ast_in_aot_test: SkipByDesign # The test doesn't know location of cross-platform gen_snapshot
dart/emit_aot_size_info_flag_test: SkipByDesign # The test itself cannot determine the location of gen_snapshot (only tools/test.py knows where it is).
diff --git a/runtime/vm/clustered_snapshot.cc b/runtime/vm/clustered_snapshot.cc
index 72c1210..1918244 100644
--- a/runtime/vm/clustered_snapshot.cc
+++ b/runtime/vm/clustered_snapshot.cc
@@ -2206,14 +2206,14 @@
s->WriteUnsigned(WrittenCount());
// Set up references for those objects that will be written.
- for (auto const ref : canonical_wsrs_) {
+ for (auto const& ref : canonical_wsrs_) {
s->AssignRef(ref);
}
// In precompiled mode, set the object ID of each non-canonical WSR to
// its canonical counterpart's object ID. This ensures that any reference to
// it is serialized as a reference to the canonicalized one.
- for (auto const ref : objects_) {
+ for (auto const& ref : objects_) {
ASSERT(IsReachableReference(heap_->GetObjectId(ref)));
if (ShouldDrop(ref)) {
// For dropped references, reset their ID to be the unreachable
@@ -2238,7 +2238,7 @@
void WriteFill(Serializer* s) {
ASSERT(s->kind() == Snapshot::kFullAOT);
- for (auto const ref : canonical_wsrs_) {
+ for (auto const& ref : canonical_wsrs_) {
AutoTraceObject(ref);
// In precompiled mode, we drop the reference to the target and only
diff --git a/runtime/vm/compiler/backend/constant_propagator.cc b/runtime/vm/compiler/backend/constant_propagator.cc
index 20b25ca..5ed0188 100644
--- a/runtime/vm/compiler/backend/constant_propagator.cc
+++ b/runtime/vm/compiler/backend/constant_propagator.cc
@@ -438,29 +438,33 @@
if (IsNonConstant(value) || IsNonConstant(dst_type)) {
SetValue(instr, non_constant_);
- } else if (IsConstant(value) && IsConstant(dst_type)) {
+ return;
+ } else if (IsUnknown(value) || IsUnknown(dst_type)) {
+ return;
+ }
+ ASSERT(IsConstant(value) && IsConstant(dst_type));
+ if (dst_type.IsAbstractType()) {
// We are ignoring the instantiator and instantiator_type_arguments, but
// still monotonic and safe.
if (instr->value()->Type()->IsAssignableTo(AbstractType::Cast(dst_type))) {
SetValue(instr, value);
- } else {
- SetValue(instr, non_constant_);
+ return;
}
}
+ SetValue(instr, non_constant_);
}
void ConstantPropagator::VisitAssertSubtype(AssertSubtypeInstr* instr) {}
void ConstantPropagator::VisitAssertBoolean(AssertBooleanInstr* instr) {
const Object& value = instr->value()->definition()->constant_value();
- if (IsNonConstant(value)) {
+ if (IsUnknown(value)) {
+ return;
+ }
+ if (value.IsBool()) {
+ SetValue(instr, value);
+ } else {
SetValue(instr, non_constant_);
- } else if (IsConstant(value)) {
- if (value.IsBool()) {
- SetValue(instr, value);
- } else {
- SetValue(instr, non_constant_);
- }
}
}
@@ -500,7 +504,7 @@
// Otherwise evaluate string compare with propagated constants.
const Object& o1 = instr->ArgumentAt(0)->constant_value();
const Object& o2 = instr->ArgumentAt(1)->constant_value();
- if (IsConstant(o1) && IsConstant(o2) && o1.IsString() && o2.IsString()) {
+ if (o1.IsString() && o2.IsString()) {
SetValue(instr, Bool::Get(String::Cast(o1).Equals(String::Cast(o2))));
return;
}
@@ -511,7 +515,7 @@
ASSERT(instr->FirstArgIndex() == 0);
// Otherwise evaluate string length with propagated constants.
const Object& o = instr->ArgumentAt(0)->constant_value();
- if (IsConstant(o) && o.IsString()) {
+ if (o.IsString()) {
const auto& str = String::Cast(o);
if (kind == MethodRecognizer::kStringBaseLength) {
SetValue(instr, Integer::ZoneHandle(Z, Integer::New(str.Length())));
@@ -551,14 +555,16 @@
void ConstantPropagator::VisitIfThenElse(IfThenElseInstr* instr) {
instr->comparison()->Accept(this);
const Object& value = instr->comparison()->constant_value();
- if (IsNonConstant(value)) {
- SetValue(instr, non_constant_);
- } else if (IsConstant(value)) {
- ASSERT(!value.IsNull());
- ASSERT(value.IsBool());
+ ASSERT(!value.IsNull());
+ if (IsUnknown(value)) {
+ return;
+ }
+ if (value.IsBool()) {
bool result = Bool::Cast(value).value();
SetValue(instr, Smi::Handle(Z, Smi::New(result ? instr->if_true()
: instr->if_false())));
+ } else {
+ SetValue(instr, non_constant_);
}
}
@@ -649,17 +655,20 @@
const Object& right = instr->right()->definition()->constant_value();
if (IsNonConstant(left) || IsNonConstant(right)) {
SetValue(instr, non_constant_);
- } else if (IsConstant(left) && IsConstant(right)) {
- if (left.IsInteger() && right.IsInteger()) {
- const bool result = CompareIntegers(
- instr->kind(),
- Integer::Handle(Z, Integer::Cast(left).BitOp(Token::kBIT_AND,
- Integer::Cast(right))),
- Object::smi_zero());
- SetValue(instr, result ? Bool::True() : Bool::False());
- } else {
- SetValue(instr, non_constant_);
- }
+ return;
+ } else if (IsUnknown(left) || IsUnknown(right)) {
+ return;
+ }
+ ASSERT(IsConstant(left) && IsConstant(right));
+ if (left.IsInteger() && right.IsInteger()) {
+ const bool result = CompareIntegers(
+ instr->kind(),
+ Integer::Handle(Z, Integer::Cast(left).BitOp(Token::kBIT_AND,
+ Integer::Cast(right))),
+ Object::smi_zero());
+ SetValue(instr, result ? Bool::True() : Bool::False());
+ } else {
+ SetValue(instr, non_constant_);
}
}
@@ -758,29 +767,33 @@
void ConstantPropagator::VisitOneByteStringFromCharCode(
OneByteStringFromCharCodeInstr* instr) {
const Object& o = instr->char_code()->definition()->constant_value();
- if (o.IsNull() || IsNonConstant(o)) {
- SetValue(instr, non_constant_);
- } else if (IsConstant(o)) {
+ if (IsUnknown(o)) {
+ return;
+ }
+ if (o.IsSmi()) {
const intptr_t ch_code = Smi::Cast(o).Value();
ASSERT(ch_code >= 0);
if (ch_code < Symbols::kMaxOneCharCodeSymbol) {
StringPtr* table = Symbols::PredefinedAddress();
SetValue(instr, String::ZoneHandle(Z, table[ch_code]));
- } else {
- SetValue(instr, non_constant_);
+ return;
}
}
+ SetValue(instr, non_constant_);
}
void ConstantPropagator::VisitStringToCharCode(StringToCharCodeInstr* instr) {
const Object& o = instr->str()->definition()->constant_value();
- if (o.IsNull() || IsNonConstant(o)) {
- SetValue(instr, non_constant_);
- } else if (IsConstant(o)) {
+ if (IsUnknown(o)) {
+ return;
+ }
+ if (o.IsString()) {
const String& str = String::Cast(o);
const intptr_t result =
(str.Length() == 1) ? static_cast<intptr_t>(str.CharAt(0)) : -1;
SetValue(instr, Smi::ZoneHandle(Z, Smi::New(result)));
+ } else {
+ SetValue(instr, non_constant_);
}
}
@@ -858,11 +871,14 @@
void ConstantPropagator::VisitBooleanNegate(BooleanNegateInstr* instr) {
const Object& value = instr->value()->definition()->constant_value();
- if (IsNonConstant(value)) {
- SetValue(instr, non_constant_);
- } else if (IsConstant(value)) {
+ if (IsUnknown(value)) {
+ return;
+ }
+ if (value.IsBool()) {
bool val = value.raw() != Bool::True().raw();
SetValue(instr, Bool::Get(val));
+ } else {
+ SetValue(instr, non_constant_);
}
}
@@ -892,7 +908,7 @@
SetValue(instr, non_constant_);
}
} else if (IsConstant(value)) {
- if (value.IsInstance()) {
+ if (value.IsInstance() && (value.raw() != Object::sentinel().raw())) {
const Instance& instance = Instance::Cast(value);
if (instr->instantiator_type_arguments()->BindsToConstantNull() &&
instr->function_type_arguments()->BindsToConstantNull()) {
@@ -1001,13 +1017,13 @@
// Type refers to class type parameters.
const Object& instantiator_type_args_obj =
instr->instantiator_type_arguments()->definition()->constant_value();
- if (IsNonConstant(instantiator_type_args_obj)) {
- SetValue(instr, non_constant_);
+ if (IsUnknown(instantiator_type_args_obj)) {
return;
}
- if (IsConstant(instantiator_type_args_obj)) {
+ if (instantiator_type_args_obj.IsTypeArguments()) {
instantiator_type_args ^= instantiator_type_args_obj.raw();
} else {
+ SetValue(instr, non_constant_);
return;
}
}
@@ -1015,13 +1031,13 @@
// Type refers to function type parameters.
const Object& function_type_args_obj =
instr->function_type_arguments()->definition()->constant_value();
- if (IsNonConstant(function_type_args_obj)) {
- SetValue(instr, non_constant_);
+ if (IsUnknown(function_type_args_obj)) {
return;
}
- if (IsConstant(function_type_args_obj)) {
+ if (function_type_args_obj.IsTypeArguments()) {
function_type_args ^= function_type_args_obj.raw();
} else {
+ SetValue(instr, non_constant_);
return;
}
}
@@ -1040,13 +1056,14 @@
InstantiateTypeArgumentsInstr* instr) {
const auto& type_arguments_obj =
instr->type_arguments()->definition()->constant_value();
- if (!IsConstant(type_arguments_obj)) {
- if (IsNonConstant(type_arguments_obj)) {
- SetValue(instr, non_constant_);
- }
+ ASSERT(!type_arguments_obj.IsNull());
+ if (IsUnknown(type_arguments_obj)) {
return;
}
- ASSERT(!type_arguments_obj.IsNull());
+ if (!type_arguments_obj.IsTypeArguments()) {
+ SetValue(instr, non_constant_);
+ return;
+ }
const auto& type_arguments = TypeArguments::Cast(type_arguments_obj);
if (type_arguments.IsInstantiated()) {
ASSERT(type_arguments.IsCanonical());
@@ -1058,19 +1075,18 @@
// Type arguments refer to class type parameters.
const Object& instantiator_type_args_obj =
instr->instantiator_type_arguments()->definition()->constant_value();
- if (IsNonConstant(instantiator_type_args_obj)) {
+ if (IsUnknown(instantiator_type_args_obj)) {
+ return;
+ }
+ if (!instantiator_type_args_obj.IsTypeArguments()) {
SetValue(instr, non_constant_);
return;
}
- if (IsConstant(instantiator_type_args_obj)) {
- instantiator_type_args ^= instantiator_type_args_obj.raw();
- ASSERT(!instr->instantiator_class().IsNull());
- if (type_arguments.CanShareInstantiatorTypeArguments(
- instr->instantiator_class())) {
- SetValue(instr, instantiator_type_args);
- return;
- }
- } else {
+ instantiator_type_args ^= instantiator_type_args_obj.raw();
+ ASSERT(!instr->instantiator_class().IsNull());
+ if (type_arguments.CanShareInstantiatorTypeArguments(
+ instr->instantiator_class())) {
+ SetValue(instr, instantiator_type_args);
return;
}
}
@@ -1079,18 +1095,17 @@
// Type arguments refer to function type parameters.
const Object& function_type_args_obj =
instr->function_type_arguments()->definition()->constant_value();
- if (IsNonConstant(function_type_args_obj)) {
+ if (IsUnknown(function_type_args_obj)) {
+ return;
+ }
+ if (!function_type_args_obj.IsTypeArguments()) {
SetValue(instr, non_constant_);
return;
}
- if (IsConstant(function_type_args_obj)) {
- function_type_args ^= function_type_args_obj.raw();
- ASSERT(!instr->function().IsNull());
- if (type_arguments.CanShareFunctionTypeArguments(instr->function())) {
- SetValue(instr, function_type_args);
- return;
- }
- } else {
+ function_type_args ^= function_type_args_obj.raw();
+ ASSERT(!instr->function().IsNull());
+ if (type_arguments.CanShareFunctionTypeArguments(instr->function())) {
+ SetValue(instr, function_type_args);
return;
}
}
@@ -1118,7 +1133,14 @@
void ConstantPropagator::VisitBinaryIntegerOp(BinaryIntegerOpInstr* binary_op) {
const Object& left = binary_op->left()->definition()->constant_value();
const Object& right = binary_op->right()->definition()->constant_value();
- if (IsConstant(left) && IsConstant(right)) {
+ if (IsNonConstant(left) || IsNonConstant(right)) {
+ SetValue(binary_op, non_constant_);
+ return;
+ } else if (IsUnknown(left) || IsUnknown(right)) {
+ return;
+ }
+ ASSERT(IsConstant(left) && IsConstant(right));
+ if (left.IsInteger() && right.IsInteger()) {
const Integer& result = Integer::Handle(
Z, Evaluator::BinaryIntegerEvaluate(left, right, binary_op->op_kind(),
binary_op->is_truncating(),
@@ -1186,7 +1208,10 @@
void ConstantPropagator::VisitUnaryIntegerOp(UnaryIntegerOpInstr* unary_op) {
const Object& value = unary_op->value()->definition()->constant_value();
- if (IsConstant(value)) {
+ if (IsUnknown(value)) {
+ return;
+ }
+ if (value.IsInteger()) {
const Integer& result = Integer::Handle(
Z, Evaluator::UnaryIntegerEvaluate(value, unary_op->op_kind(),
unary_op->representation(), T));
@@ -1195,7 +1220,6 @@
return;
}
}
-
SetValue(unary_op, non_constant_);
}
@@ -1208,44 +1232,48 @@
}
void ConstantPropagator::VisitUnaryDoubleOp(UnaryDoubleOpInstr* instr) {
- const Object& value = instr->value()->definition()->constant_value();
- if (IsNonConstant(value)) {
- SetValue(instr, non_constant_);
- } else if (IsConstant(value)) {
- // TODO(kmillikin): Handle unary operations.
- SetValue(instr, non_constant_);
- }
+ // TODO(kmillikin): Handle unary operations.
+ SetValue(instr, non_constant_);
}
void ConstantPropagator::VisitSmiToDouble(SmiToDoubleInstr* instr) {
const Object& value = instr->value()->definition()->constant_value();
- if (IsConstant(value) && value.IsInteger()) {
+ if (IsUnknown(value)) {
+ return;
+ }
+ if (value.IsInteger()) {
SetValue(instr,
Double::Handle(Z, Double::New(Integer::Cast(value).AsDoubleValue(),
Heap::kOld)));
- } else if (!IsUnknown(value)) {
+ } else {
SetValue(instr, non_constant_);
}
}
void ConstantPropagator::VisitInt64ToDouble(Int64ToDoubleInstr* instr) {
const Object& value = instr->value()->definition()->constant_value();
- if (IsConstant(value) && value.IsInteger()) {
+ if (IsUnknown(value)) {
+ return;
+ }
+ if (value.IsInteger()) {
SetValue(instr,
Double::Handle(Z, Double::New(Integer::Cast(value).AsDoubleValue(),
Heap::kOld)));
- } else if (!IsUnknown(value)) {
+ } else {
SetValue(instr, non_constant_);
}
}
void ConstantPropagator::VisitInt32ToDouble(Int32ToDoubleInstr* instr) {
const Object& value = instr->value()->definition()->constant_value();
- if (IsConstant(value) && value.IsInteger()) {
+ if (IsUnknown(value)) {
+ return;
+ }
+ if (value.IsInteger()) {
SetValue(instr,
Double::Handle(Z, Double::New(Integer::Cast(value).AsDoubleValue(),
Heap::kOld)));
- } else if (!IsUnknown(value)) {
+ } else {
SetValue(instr, non_constant_);
}
}
@@ -1320,23 +1348,30 @@
void ConstantPropagator::VisitBinaryDoubleOp(BinaryDoubleOpInstr* instr) {
const Object& left = instr->left()->definition()->constant_value();
const Object& right = instr->right()->definition()->constant_value();
- if (IsConstant(left) && IsConstant(right)) {
- const bool both_are_integers = left.IsInteger() && right.IsInteger();
- if (IsIntegerOrDouble(left) && IsIntegerOrDouble(right) &&
- !both_are_integers) {
- const double result_val = Evaluator::EvaluateDoubleOp(
- ToDouble(left), ToDouble(right), instr->op_kind());
- const Double& result =
- Double::ZoneHandle(Double::NewCanonical(result_val));
- SetValue(instr, result);
- return;
- }
+ if (IsNonConstant(left) || IsNonConstant(right)) {
+ SetValue(instr, non_constant_);
+ return;
+ } else if (IsUnknown(left) || IsUnknown(right)) {
+ return;
+ }
+ ASSERT(IsConstant(left) && IsConstant(right));
+ const bool both_are_integers = left.IsInteger() && right.IsInteger();
+ if (IsIntegerOrDouble(left) && IsIntegerOrDouble(right) &&
+ !both_are_integers) {
+ const double result_val = Evaluator::EvaluateDoubleOp(
+ ToDouble(left), ToDouble(right), instr->op_kind());
+ const Double& result = Double::ZoneHandle(Double::NewCanonical(result_val));
+ SetValue(instr, result);
+ return;
}
SetValue(instr, non_constant_);
}
void ConstantPropagator::VisitDoubleTestOp(DoubleTestOpInstr* instr) {
const Object& value = instr->value()->definition()->constant_value();
+ if (IsUnknown(value)) {
+ return;
+ }
const bool is_negated = instr->kind() != Token::kEQ;
if (value.IsInteger()) {
SetValue(instr, is_negated ? Bool::True() : Bool::False());
@@ -1365,24 +1400,13 @@
}
void ConstantPropagator::VisitMathUnary(MathUnaryInstr* instr) {
- const Object& value = instr->value()->definition()->constant_value();
- if (IsNonConstant(value)) {
- SetValue(instr, non_constant_);
- } else if (IsConstant(value)) {
- // TODO(kmillikin): Handle Math's unary operations (sqrt, cos, sin).
- SetValue(instr, non_constant_);
- }
+ // TODO(kmillikin): Handle Math's unary operations (sqrt, cos, sin).
+ SetValue(instr, non_constant_);
}
void ConstantPropagator::VisitMathMinMax(MathMinMaxInstr* instr) {
- const Object& left = instr->left()->definition()->constant_value();
- const Object& right = instr->right()->definition()->constant_value();
- if (IsNonConstant(left) || IsNonConstant(right)) {
- SetValue(instr, non_constant_);
- } else if (IsConstant(left) && IsConstant(right)) {
- // TODO(srdjan): Handle min and max.
- SetValue(instr, non_constant_);
- }
+ // TODO(srdjan): Handle min and max.
+ SetValue(instr, non_constant_);
}
void ConstantPropagator::VisitCaseInsensitiveCompare(
@@ -1391,23 +1415,13 @@
}
void ConstantPropagator::VisitUnbox(UnboxInstr* instr) {
- const Object& value = instr->value()->definition()->constant_value();
- if (IsNonConstant(value)) {
- SetValue(instr, non_constant_);
- } else if (IsConstant(value)) {
- // TODO(kmillikin): Handle conversion.
- SetValue(instr, non_constant_);
- }
+ // TODO(kmillikin): Handle conversion.
+ SetValue(instr, non_constant_);
}
void ConstantPropagator::VisitBox(BoxInstr* instr) {
- const Object& value = instr->value()->definition()->constant_value();
- if (IsNonConstant(value)) {
- SetValue(instr, non_constant_);
- } else if (IsConstant(value)) {
- // TODO(kmillikin): Handle conversion.
- SetValue(instr, non_constant_);
- }
+ // TODO(kmillikin): Handle conversion.
+ SetValue(instr, non_constant_);
}
void ConstantPropagator::VisitBoxUint32(BoxUint32Instr* instr) {
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index 3c2b977..da62873 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -1826,13 +1826,13 @@
AlternativeReadingScopeWithNewData alt(&helper_->reader_,
&H.metadata_payloads(), md_offset);
- Thread* T = Thread::Current();
- Zone* Z = T->zone();
+ Thread* thread = Thread::Current();
+ Zone* zone = thread->zone();
intptr_t unit_count = helper_->ReadUInt();
- Array& loading_units = Array::Handle(Z, Array::New(unit_count + 1));
- LoadingUnit& unit = LoadingUnit::Handle(Z);
- LoadingUnit& parent = LoadingUnit::Handle(Z);
- Library& lib = Library::Handle(Z);
+ Array& loading_units = Array::Handle(zone, Array::New(unit_count + 1));
+ LoadingUnit& unit = LoadingUnit::Handle(zone);
+ LoadingUnit& parent = LoadingUnit::Handle(zone);
+ Library& lib = Library::Handle(zone);
for (int i = 0; i < unit_count; i++) {
intptr_t id = helper_->ReadUInt();
@@ -1849,7 +1849,7 @@
for (intptr_t j = 0; j < library_count; j++) {
const String& uri =
translation_helper_.DartSymbolPlain(helper_->ReadStringReference());
- lib = Library::LookupLibrary(T, uri);
+ lib = Library::LookupLibrary(thread, uri);
if (lib.IsNull()) {
FATAL1("Missing library: %s\n", uri.ToCString());
}
diff --git a/runtime/vm/compiler/frontend/scope_builder.cc b/runtime/vm/compiler/frontend/scope_builder.cc
index f28890b..bb55bba 100644
--- a/runtime/vm/compiler/frontend/scope_builder.cc
+++ b/runtime/vm/compiler/frontend/scope_builder.cc
@@ -148,8 +148,8 @@
(parent.num_fixed_parameters() != target.num_fixed_parameters())) {
needs_expr_temp_ = true;
}
- FALL_THROUGH;
}
+ FALL_THROUGH;
case FunctionLayout::kClosureFunction:
case FunctionLayout::kRegularFunction:
case FunctionLayout::kGetterFunction:
@@ -442,8 +442,8 @@
FOR_EACH_DYNAMIC_CLOSURE_CALL_VARIABLE(ADD_VAR);
#undef ADD_VAR
}
- FALL_THROUGH;
}
+ FALL_THROUGH;
case FunctionLayout::kNoSuchMethodDispatcher: {
for (intptr_t i = 0; i < function.NumParameters(); ++i) {
LocalVariable* variable = MakeVariable(
diff --git a/runtime/vm/compiler/stub_code_compiler_ia32.cc b/runtime/vm/compiler/stub_code_compiler_ia32.cc
index 4e81b70..369f95b 100644
--- a/runtime/vm/compiler/stub_code_compiler_ia32.cc
+++ b/runtime/vm/compiler/stub_code_compiler_ia32.cc
@@ -3121,6 +3121,7 @@
__ pushl(AllocateTypedDataArrayABI::kLengthReg);
NOT_IN_PRODUCT(__ MaybeTraceAllocation(cid, ECX, &call_runtime, false));
+ __ movl(EDI, AllocateTypedDataArrayABI::kLengthReg);
/* Check that length is a positive Smi. */
/* EDI: requested array length argument. */
__ testl(EDI, Immediate(kSmiTagMask));
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index 8c96d22..0046562 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -3528,14 +3528,12 @@
}
TEST_CASE(DartAPI_FinalizableHandleCallback) {
- Dart_FinalizableHandle weak_ref = nullptr;
int peer = 0;
{
Dart_EnterScope();
Dart_Handle obj = NewString("new string");
EXPECT_VALID(obj);
- weak_ref = Dart_NewFinalizableHandle(obj, &peer, 0,
- FinalizableHandlePeerFinalizer);
+ Dart_NewFinalizableHandle(obj, &peer, 0, FinalizableHandlePeerFinalizer);
EXPECT(peer == 0);
Dart_ExitScope();
}
@@ -3676,26 +3674,22 @@
Heap* heap = Isolate::Current()->heap();
EXPECT(heap->ExternalInWords(Heap::kNew) == 0);
EXPECT(heap->ExternalInWords(Heap::kOld) == 0);
- Dart_FinalizableHandle weak1 = nullptr;
static const intptr_t kWeak1ExternalSize = 1 * KB;
{
Dart_EnterScope();
Dart_Handle obj = NewString("weakly referenced string");
EXPECT_VALID(obj);
- weak1 = Dart_NewFinalizableHandle(obj, nullptr, kWeak1ExternalSize,
- NopCallback);
+ Dart_NewFinalizableHandle(obj, nullptr, kWeak1ExternalSize, NopCallback);
Dart_ExitScope();
}
Dart_PersistentHandle strong_ref = nullptr;
- Dart_FinalizableHandle weak2 = nullptr;
static const intptr_t kWeak2ExternalSize = 2 * KB;
{
Dart_EnterScope();
Dart_Handle obj = NewString("strongly referenced string");
EXPECT_VALID(obj);
strong_ref = Dart_NewPersistentHandle(obj);
- weak2 = Dart_NewFinalizableHandle(obj, nullptr, kWeak2ExternalSize,
- NopCallback);
+ Dart_NewFinalizableHandle(obj, nullptr, kWeak2ExternalSize, NopCallback);
EXPECT_VALID(AsHandle(strong_ref));
Dart_ExitScope();
}
@@ -3810,7 +3804,6 @@
Dart_Handle live = AllocateOldString("live");
EXPECT_VALID(live);
Dart_WeakPersistentHandle weak = NULL;
- Dart_WeakPersistentHandle weak2 = NULL;
{
TransitionNativeToVM transition(thread);
GCTestHelper::WaitForGCTasks(); // Finalize GC for accurate live size.
@@ -3834,8 +3827,7 @@
}
// Large enough to trigger GC in old space. Not actually allocated.
const intptr_t kHugeExternalSize = (kWordSize == 4) ? 513 * MB : 1025 * MB;
- weak2 =
- Dart_NewWeakPersistentHandle(live, NULL, kHugeExternalSize, NopCallback);
+ Dart_NewWeakPersistentHandle(live, NULL, kHugeExternalSize, NopCallback);
{
TransitionNativeToVM transition(thread);
GCTestHelper::WaitForGCTasks(); // Finalize GC for accurate live size.
@@ -3852,7 +3844,6 @@
Dart_EnterScope();
Dart_Handle live = AllocateOldString("live");
EXPECT_VALID(live);
- Dart_FinalizableHandle weak = NULL;
{
TransitionNativeToVM transition(thread);
GCTestHelper::WaitForGCTasks(); // Finalize GC for accurate live size.
@@ -3863,8 +3854,7 @@
Dart_EnterScope();
Dart_Handle dead = AllocateOldString("dead");
EXPECT_VALID(dead);
- weak = Dart_NewFinalizableHandle(dead, nullptr, kSmallExternalSize,
- NopCallback);
+ Dart_NewFinalizableHandle(dead, nullptr, kSmallExternalSize, NopCallback);
Dart_ExitScope();
}
{
diff --git a/runtime/vm/heap/scavenger.cc b/runtime/vm/heap/scavenger.cc
index cfed7d7..41f1f99 100644
--- a/runtime/vm/heap/scavenger.cc
+++ b/runtime/vm/heap/scavenger.cc
@@ -50,7 +50,8 @@
// If the forwarded bit and pointer tag bit are the same, we can avoid a few
// conversions.
-COMPILE_ASSERT(kForwarded == kHeapObjectTag);
+COMPILE_ASSERT(static_cast<uword>(kForwarded) ==
+ static_cast<uword>(kHeapObjectTag));
static inline bool IsForwarding(uword header) {
uword bits = header & kForwardingMask;
diff --git a/runtime/vm/image_snapshot.cc b/runtime/vm/image_snapshot.cc
index 7c8ba6a..3d52db5 100644
--- a/runtime/vm/image_snapshot.cc
+++ b/runtime/vm/image_snapshot.cc
@@ -259,7 +259,7 @@
ASSERT(count != nullptr && size != nullptr);
*count = 0;
*size = 0;
- for (auto const data : instructions_) {
+ for (auto const& data : instructions_) {
if (data.trampoline_length != 0) {
*count += 1;
*size += data.trampoline_length;
diff --git a/runtime/vm/kernel_isolate.cc b/runtime/vm/kernel_isolate.cc
index 8fdc9d0..d2cdbb5 100644
--- a/runtime/vm/kernel_isolate.cc
+++ b/runtime/vm/kernel_isolate.cc
@@ -1055,17 +1055,11 @@
const char* original_working_directory) {
// Start the kernel Isolate if it is not already running.
if (!Start()) {
- Dart_KernelCompilationResult result = {};
- result.status = Dart_KernelCompilationStatus_Unknown;
- result.error = Utils::StrDup("Error while starting Kernel isolate task");
return false;
}
// Wait for Kernel isolate to finish initialization.
Dart_Port kernel_port = WaitForKernelPort();
if (kernel_port == ILLEGAL_PORT) {
- Dart_KernelCompilationResult result = {};
- result.status = Dart_KernelCompilationStatus_Unknown;
- result.error = Utils::StrDup("Error while initializing Kernel isolate");
return false;
}
KernelCompilationRequest request;
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index b14b8e9..22e2810 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -4923,8 +4923,8 @@
intptr_t index() const { return raw_ptr()->index_; }
void set_index(intptr_t value) const {
- ASSERT(value == -1 ||
- value >= 0 && value < std::numeric_limits<classid_t>::max());
+ ASSERT((value == -1) ||
+ ((value >= 0) && (value < std::numeric_limits<classid_t>::max())));
StoreNonPointer(&raw_ptr()->index_, value);
}
diff --git a/sdk/lib/_internal/js_runtime/pubspec.yaml b/sdk/lib/_internal/js_runtime/pubspec.yaml
index f42b2cd..96abf65 100644
--- a/sdk/lib/_internal/js_runtime/pubspec.yaml
+++ b/sdk/lib/_internal/js_runtime/pubspec.yaml
@@ -2,3 +2,5 @@
# make it easier to develop on dart2js.
name: js_runtime
publish_to: none
+environment:
+ sdk: '>=2.10.0-0.0 <3.0.0'
diff --git a/sdk/lib/_internal/sdk_library_metadata/pubspec.yaml b/sdk/lib/_internal/sdk_library_metadata/pubspec.yaml
index 79b69ee..8f46e53 100644
--- a/sdk/lib/_internal/sdk_library_metadata/pubspec.yaml
+++ b/sdk/lib/_internal/sdk_library_metadata/pubspec.yaml
@@ -2,3 +2,5 @@
# make it easer to depend on libraries.dart from sdk packages like dart2js.
name: sdk_library_metadata
publish_to: none
+environment:
+ sdk: '>=2.10.0-0.0 <3.0.0'
diff --git a/tools/VERSION b/tools/VERSION
index e02ec4d..6b0416f 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -25,7 +25,7 @@
#
CHANNEL dev
MAJOR 2
-MINOR 11
+MINOR 10
PATCH 0
-PRERELEASE 155
+PRERELEASE 156
PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml
index 8446bb3..b7276b8 100644
--- a/tools/experimental_features.yaml
+++ b/tools/experimental_features.yaml
@@ -93,7 +93,7 @@
# default 'language' "category" with code generated for both CFE and Analyzer,
# while other categories can be tailored more specifically.
-current-version: '2.11.0'
+current-version: '2.10.0'
features:
non-nullable:
@@ -126,7 +126,7 @@
constant-update-2018:
help: "Enhanced constant expressions"
- enabledIn: '2.4.1'
+ enabledIn: '2.0.0'
expired: true
control-flow-collections: