Version 2.10.0-1.0.dev
Merge commit '01c217ecc9d17f6e2d35300525605d53a750cda0' into dev
diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index 6cfa6ab..57c4b70 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -354,6 +354,12 @@
"languageVersion": "2.2"
},
{
+ "name": "language_versioning_2.7_test",
+ "rootUri": "../pkg/language_versioning_2.7_test",
+ "packageUri": "lib/",
+ "languageVersion": "2.7"
+ },
+ {
"name": "linter",
"rootUri": "../third_party/pkg/linter",
"packageUri": "lib/",
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c69d96a..465ff3e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
## 2.10.0
+### Dart VM
+
+* Introduces `Dart_FinalizableHandle`s. They do auto-delete, and the weakly
+ referred object cannot be accessed through them.
+
## 2.9.0
### Language
@@ -72,6 +77,11 @@
[#42714]: https://github.com/dart-lang/sdk/issues/42714
+#### `dart:typed_data`
+
+* Class `BytesBuilder` is moved from `dart:io` to `dart:typed_data`.
+ It's temporarily being exported from `dart:io` as well.
+
### Tools
#### dartfmt
@@ -136,7 +146,7 @@
* Preserve Windows line endings in `pubspec.lock` if they are already there
([#2489](https://github.com/dart-lang/pub/pull/2489)).
* Better terminal color-detection. Use colors in terminals on Windows.
-* Fix git folder names in cache, allowing for ssh-style git
+* Fix git folder names in cache, allowing for ssh-style git
dependencies.
* Fix: Avoid precompilation of dependencies of global packages.
diff --git a/DEPS b/DEPS
index 842b0bd..85f2bd0 100644
--- a/DEPS
+++ b/DEPS
@@ -39,7 +39,7 @@
# Checked-in SDK version. The checked-in SDK is a Dart SDK distribution in a
# cipd package used to run Dart scripts in the build and test infrastructure.
- "sdk_tag": "version:2.10.0-0.2-preview",
+ "sdk_tag": "version:2.10.0-0.0.dev",
# co19 is a cipd package. Use update.sh in tests/co19[_2] to update these
# hashes. It requires access to the dart-build-access group, which EngProd
@@ -54,10 +54,10 @@
# As Flutter does, we use Fuchsia's GN and Clang toolchain. These revision
# should be kept up to date with the revisions pulled by the Flutter engine.
# The list of revisions for these tools comes from Fuchsia, here:
- # https://fuchsia.googlesource.com/buildtools/+/master/fuchsia.ensure
+ # https://fuchsia.googlesource.com/integration/+/HEAD/prebuilts
# If there are problems with the toolchain, contact fuchsia-toolchain@.
"clang_revision": "7e9747b50bcb1be28d4a3236571e8050835497a6",
- "gn_revision": "239533d2d91a04b3317ca9101cf7189f4e651e4d",
+ "gn_revision": "1e3fd10c5df6b704fc764ee388149e4f32862823",
# Scripts that make 'git cl format' work.
"clang_format_scripts_rev": "c09c8deeac31f05bd801995c475e7c8070f9ecda",
@@ -539,7 +539,7 @@
"packages": [
{
"package": "dart/cfe/dart2js_dills",
- "version": "binary_version:43_2",
+ "version": "binary_version:44_2",
}
],
"dep_type": "cipd",
diff --git a/build/toolchain/mac/BUILD.gn b/build/toolchain/mac/BUILD.gn
index 2c1839f..c6f28d3 100644
--- a/build/toolchain/mac/BUILD.gn
+++ b/build/toolchain/mac/BUILD.gn
@@ -130,7 +130,7 @@
temporary_tocname = dylib + ".tmp"
does_reexport_command = "[ ! -e $dylib -o ! -e $tocname ] || otool -l $dylib | grep -q LC_REEXPORT_DYLIB"
- link_command = "$ld -shared $sysroot_flags $toolchain_flags {{ldflags}} -o $dylib -Wl,-filelist,$rspfile {{solibs}} {{libs}}"
+ link_command = "$ld -shared $sysroot_flags $toolchain_flags {{ldflags}} -o $dylib -Wl,-filelist,$rspfile {{solibs}} {{libs}} {{frameworks}}"
replace_command = "if ! cmp -s $temporary_tocname $tocname; then mv $temporary_tocname $tocname"
extract_toc_command = "{ otool -l $dylib | grep LC_ID_DYLIB -A 5; nm -gP $dylib | cut -f1-2 -d' ' | grep -v U\$\$; true; }"
@@ -171,7 +171,7 @@
stripped_outfile = "{{root_out_dir}}/exe.stripped/$exename"
}
- command = "$ld $sysroot_flags $toolchain_flags {{ldflags}} -Xlinker -rpath -Xlinker @executable_path/Frameworks -o $outfile -Wl,-filelist,$rspfile {{solibs}} {{libs}}"
+ command = "$ld $sysroot_flags $toolchain_flags {{ldflags}} -Xlinker -rpath -Xlinker @executable_path/Frameworks -o $outfile -Wl,-filelist,$rspfile {{solibs}} {{libs}} {{frameworks}}"
if (defined(invoker.strip)) {
strip = invoker.strip
strip_command = "${strip} -x -o $stripped_outfile $outfile"
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index 0ebf75a..276b71e 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -1309,6 +1309,14 @@
}
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeConstEvalNonNull = messageConstEvalNonNull;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageConstEvalNonNull = const MessageCode(
+ "ConstEvalNonNull",
+ message: r"""Constant expression must be non-null.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Code<Null> codeConstEvalNotListOrSetInSpread =
messageConstEvalNotListOrSetInSpread;
diff --git a/pkg/analysis_server/benchmark/benchmarks.dart b/pkg/analysis_server/benchmark/benchmarks.dart
index 788ab0f..f43c4e6 100644
--- a/pkg/analysis_server/benchmark/benchmarks.dart
+++ b/pkg/analysis_server/benchmark/benchmarks.dart
@@ -224,8 +224,6 @@
benchmarks.firstWhere((b) => b.id == benchmarkId, orElse: () {
print("Benchmark '$benchmarkId' not found.");
exit(1);
- // Never reached.
- return null;
});
var actualIterations = repeatCount;
diff --git a/pkg/analysis_server/lib/src/cider/completion.dart b/pkg/analysis_server/lib/src/cider/completion.dart
index d9f2189..fac8c25 100644
--- a/pkg/analysis_server/lib/src/cider/completion.dart
+++ b/pkg/analysis_server/lib/src/cider/completion.dart
@@ -11,6 +11,7 @@
import 'package:analysis_server/src/services/completion/dart/local_library_contributor.dart';
import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
import 'package:analysis_server/src/services/completion/filtering/fuzzy_matcher.dart';
+import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/element/element.dart' show LibraryElement;
import 'package:analyzer/src/dart/analysis/performance_logger.dart';
import 'package:analyzer/src/dart/micro/resolve_file.dart';
@@ -56,6 +57,7 @@
@required String path,
@required int line,
@required int column,
+ @visibleForTesting void Function(ResolvedUnitResult) testResolvedUnit,
}) async {
return _performanceRoot.runAsync('completion', (performance) async {
var resolvedUnit = performance.run('resolution', (performance) {
@@ -67,6 +69,10 @@
);
});
+ if (testResolvedUnit != null) {
+ testResolvedUnit(resolvedUnit);
+ }
+
var lineInfo = resolvedUnit.lineInfo;
var offset = lineInfo.getOffsetOfLine(line) + column;
@@ -97,6 +103,7 @@
return await manager.computeSuggestions(
performance,
completionRequest,
+ enableOverrideContributor: false,
enableUriContributor: false,
);
});
@@ -200,6 +207,8 @@
@required LibraryElement element,
@required OperationPerformanceImpl performance,
}) {
+ performance.getDataInt('libraryCount').increment();
+
var path = element.source.fullName;
var signature = _fileResolver.getLibraryLinkedSignature(
path: path,
@@ -208,6 +217,7 @@
var cacheEntry = _cache._importedLibraries[path];
if (cacheEntry == null || cacheEntry.signature != signature) {
+ performance.getDataInt('libraryCompute').increment();
computedImportedLibraries.add(path);
var suggestions = _librarySuggestions(element);
cacheEntry = _CiderImportedLibrarySuggestions(
diff --git a/pkg/analysis_server/lib/src/domain_completion.dart b/pkg/analysis_server/lib/src/domain_completion.dart
index a9d146d..2d0f0b1 100644
--- a/pkg/analysis_server/lib/src/domain_completion.dart
+++ b/pkg/analysis_server/lib/src/domain_completion.dart
@@ -104,11 +104,7 @@
await perf.runAsync(contributorTag, (performance) async {
try {
suggestions.addAll(
- await manager.computeSuggestions(
- performance,
- request,
- enableUriContributor: true,
- ),
+ await manager.computeSuggestions(performance, request),
);
} on AbortCompletion {
suggestions.clear();
diff --git a/pkg/analysis_server/lib/src/domains/execution/completion.dart b/pkg/analysis_server/lib/src/domains/execution/completion.dart
index ead5ad2..ff2796b 100644
--- a/pkg/analysis_server/lib/src/domains/execution/completion.dart
+++ b/pkg/analysis_server/lib/src/domains/execution/completion.dart
@@ -96,7 +96,6 @@
return await contributor.computeSuggestions(
performance,
request,
- enableUriContributor: true,
);
},
);
diff --git a/pkg/analysis_server/lib/src/edit/edit_domain.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart
index a175b2e..8ce7662 100644
--- a/pkg/analysis_server/lib/src/edit/edit_domain.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
@@ -21,6 +21,7 @@
import 'package:analysis_server/src/services/completion/statement/statement_completion.dart';
import 'package:analysis_server/src/services/correction/assist.dart';
import 'package:analysis_server/src/services/correction/assist_internal.dart';
+import 'package:analysis_server/src/services/correction/bulk_fix_processor.dart';
import 'package:analysis_server/src/services/correction/change_workspace.dart';
import 'package:analysis_server/src/services/correction/fix.dart';
import 'package:analysis_server/src/services/correction/fix/analysis_options/fix_generator.dart';
@@ -37,7 +38,6 @@
import 'package:analyzer/dart/analysis/session.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/error/error.dart' as engine;
-import 'package:analyzer/error/error.dart';
import 'package:analyzer/exception/exception.dart';
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/source/line_info.dart';
@@ -111,34 +111,11 @@
resource.collectDartFilePaths(paths);
}
- var errors = await _getErrors(params.included);
-
- var sourceChange = SourceChange('bulk_fix');
-
- // todo (pq): push loop into a BulkFixProcessor
- for (var error in errors) {
- // todo (pq): filtering will happen in processor
- List<AnalysisErrorFixes> fixes;
- while (fixes == null) {
- try {
- fixes = await _computeServerErrorFixes(
- request, error.source.fullName, error.offset);
- } on InconsistentAnalysisException {
- // Loop around to try again to compute the fixes.
- }
- }
-
- // In the long run we'll want to support the case where the desired fix
- // is the first one. For now, we just assume that the first way is the
- // only or best way.
- var edits = fixes[0].fixes[0].edits;
- for (var edit in edits) {
- sourceChange.addFileEdit(edit);
- }
- }
-
- var response =
- EditBulkFixesResult(sourceChange.edits).toResponse(request.id);
+ var workspace = DartChangeWorkspace(server.currentSessions);
+ var processor = BulkFixProcessor(workspace);
+ var changeBuilder = await processor.fixErrorsInLibraries(paths);
+ var response = EditBulkFixesResult(changeBuilder.sourceChange.edits)
+ .toResponse(request.id);
server.sendResponse(response);
} catch (exception, stackTrace) {
server.sendServerErrorNotification('Exception while getting bulk fixes',
@@ -859,39 +836,6 @@
server.sendResponse(result.toResponse(request.id));
}
- /// todo (pq): (temporary) -> to be moved and redesigned in BulkFixesProcessor
- Future<List<AnalysisError>> _getErrors(List<String> pathsToProcess) async {
- var errors = <AnalysisError>[];
-
- var pathsProcessed = <String>{};
- for (var path in pathsToProcess) {
- var driver = server.getAnalysisDriver(path);
- switch (await driver.getSourceKind(path)) {
- case SourceKind.PART:
- // todo (pq): ensure parts are processed (see `edit_dartfix.dart`)
- continue;
- break;
- case SourceKind.LIBRARY:
- var result = await driver.getResolvedLibrary(path);
- if (result != null) {
- for (var unit in result.units) {
- if (pathsToProcess.contains(unit.path) &&
- !pathsProcessed.contains(unit.path)) {
- for (var error in unit.errors) {
- errors.add(error);
- }
- pathsProcessed.add(unit.path);
- }
- }
- }
- break;
- default:
- break;
- }
- }
- return errors;
- }
-
YamlMap _getOptions(SourceFactory sourceFactory, String content) {
var optionsProvider = AnalysisOptionsProvider(sourceFactory);
try {
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
index e96b54a..272057f 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_completion.dart
@@ -217,7 +217,6 @@
final serverSuggestions = await contributor.computeSuggestions(
perf,
completionRequest,
- enableUriContributor: true,
);
if (token.isCancellationRequested) {
diff --git a/pkg/analysis_server/lib/src/server/driver.dart b/pkg/analysis_server/lib/src/server/driver.dart
index 78a4734..24504db 100644
--- a/pkg/analysis_server/lib/src/server/driver.dart
+++ b/pkg/analysis_server/lib/src/server/driver.dart
@@ -327,6 +327,14 @@
analysisServerOptions.newAnalysisDriverLog =
results[NEW_ANALYSIS_DRIVER_LOG];
analysisServerOptions.clientId = results[CLIENT_ID];
+ analysisServerOptions.useLanguageServerProtocol = results[USE_LSP];
+ // For clients that don't supply their own identifier, use a default based on
+ // whether the server will run in LSP mode or not.
+ analysisServerOptions.clientId ??=
+ analysisServerOptions.useLanguageServerProtocol
+ ? 'unknown.client.lsp'
+ : 'unknown.client.classic';
+
analysisServerOptions.clientVersion = results[CLIENT_VERSION];
analysisServerOptions.cacheFolder = results[CACHE_FOLDER];
if (results.wasParsed(ENABLE_EXPERIMENT_OPTION)) {
@@ -334,7 +342,6 @@
(results[ENABLE_EXPERIMENT_OPTION] as List).cast<String>().toList();
}
analysisServerOptions.useFastaParser = results[USE_FASTA_PARSER];
- analysisServerOptions.useLanguageServerProtocol = results[USE_LSP];
analysisServerOptions.useNewRelevance = results[USE_NEW_RELEVANCE];
// Read in any per-SDK overrides specified in <sdk>/config/settings.json.
@@ -383,8 +390,7 @@
analysisServerOptions.analytics = analytics;
// Record the client name as the application installer ID.
- analytics.setSessionValue(
- 'aiid', analysisServerOptions.clientId ?? 'not-set');
+ analytics.setSessionValue('aiid', analysisServerOptions.clientId);
if (analysisServerOptions.clientVersion != null) {
analytics.setSessionValue('cd1', analysisServerOptions.clientVersion);
}
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
index 2d677c2..e2e4478 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
@@ -51,7 +51,6 @@
import 'package:analyzer_plugin/protocol/protocol_common.dart' as protocol;
import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
import 'package:analyzer_plugin/src/utilities/completion/optype.dart';
-import 'package:meta/meta.dart';
/// [DartCompletionManager] determines if a completion request is Dart specific
/// and forwards those requests to all [DartCompletionContributor]s.
@@ -103,7 +102,8 @@
Future<List<CompletionSuggestion>> computeSuggestions(
OperationPerformanceImpl performance,
CompletionRequest request, {
- @required bool enableUriContributor,
+ bool enableOverrideContributor = true,
+ bool enableUriContributor = true,
}) async {
request.checkAborted();
if (!AnalysisEngine.isDartFileName(request.result.path)) {
@@ -146,7 +146,7 @@
LocalLibraryContributor(),
LocalReferenceContributor(),
NamedConstructorContributor(),
- OverrideContributor(),
+ if (enableOverrideContributor) OverrideContributor(),
StaticMemberContributor(),
TypeMemberContributor(),
if (enableUriContributor) UriContributor(),
diff --git a/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart b/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart
index 6b19e69..6c0dc57 100644
--- a/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart
+++ b/pkg/analysis_server/lib/src/services/completion/statement/statement_completion.dart
@@ -975,7 +975,7 @@
if (catchNode.onKeyword != null) {
if (catchNode.exceptionType.length == 0 ||
null !=
- _findError(StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE,
+ _findError(CompileTimeErrorCode.NON_TYPE_IN_CATCH_CLAUSE,
partialMatch: "name 'catch")) {
var src = utils.getNodeText(catchNode);
if (src.startsWith(RegExp(r'on[ \t]+'))) {
diff --git a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
index 4c83d54..ee307b7 100644
--- a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
@@ -8,6 +8,7 @@
import 'package:analysis_server/plugin/edit/fix/fix_dart.dart';
import 'package:analysis_server/src/services/correction/change_workspace.dart';
import 'package:analysis_server/src/services/correction/dart/abstract_producer.dart';
+import 'package:analysis_server/src/services/correction/dart/add_override.dart';
import 'package:analysis_server/src/services/correction/dart/convert_documentation_into_line.dart';
import 'package:analysis_server/src/services/correction/dart/remove_const.dart';
import 'package:analysis_server/src/services/correction/dart/remove_unnecessary_new.dart';
@@ -27,6 +28,7 @@
/// correction producer used to build a fix for that diagnostic. The
/// generators used for non-lint diagnostics are in the [nonLintProducerMap].
static const Map<String, ProducerGenerator> lintProducerMap = {
+ LintNames.annotate_overrides: AddOverride.newInstance,
LintNames.avoid_single_cascade_in_expression_statements:
ReplaceCascadeWithDot.newInstance,
LintNames.prefer_equal_for_default_values:
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/add_diagnostic_property_reference.dart b/pkg/analysis_server/lib/src/services/correction/dart/add_diagnostic_property_reference.dart
index fb8c61b..30ae5ef 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/add_diagnostic_property_reference.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/add_diagnostic_property_reference.dart
@@ -27,6 +27,13 @@
if (node is! SimpleIdentifier) {
return;
}
+
+ var classDeclaration = node.thisOrAncestorOfType<ClassOrMixinDeclaration>();
+ if (classDeclaration == null ||
+ !flutter.isDiagnosticable(classDeclaration.declaredElement.thisType)) {
+ return;
+ }
+
SimpleIdentifier name = node;
final parent = node.parent;
@@ -98,10 +105,6 @@
builder.writeln("$constructorName('${name.name}', ${name.name}));");
}
- final classDeclaration = parent.thisOrAncestorOfType<ClassDeclaration>();
- if (classDeclaration == null) {
- return;
- }
final debugFillProperties =
classDeclaration.getMethod('debugFillProperties');
if (debugFillProperties == null) {
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
index 3c8f0c8..af90fd1 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/create_constructor.dart
@@ -65,10 +65,10 @@
// prepare target ClassDeclaration
ClassElement targetElement = targetType.element;
var targetResult = await sessionHelper.getElementDeclaration(targetElement);
- if (targetResult.node is! ClassOrMixinDeclaration) {
+ var targetNode = targetResult.node;
+ if (targetNode is! ClassDeclaration) {
return;
}
- ClassOrMixinDeclaration targetNode = targetResult.node;
// prepare location
var targetLocation = CorrectionUtils(targetResult.resolvedUnit)
@@ -108,10 +108,10 @@
// prepare target ClassDeclaration
var targetElement = constructorElement.enclosingElement;
var targetResult = await sessionHelper.getElementDeclaration(targetElement);
- if (targetResult.node is! ClassOrMixinDeclaration) {
+ var targetNode = targetResult.node;
+ if (targetNode is! ClassDeclaration) {
return;
}
- ClassOrMixinDeclaration targetNode = targetResult.node;
// prepare location
var targetLocation = CorrectionUtils(targetResult.resolvedUnit)
diff --git a/pkg/analysis_server/lib/src/services/correction/fix.dart b/pkg/analysis_server/lib/src/services/correction/fix.dart
index ee5e519..b9c3497 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix.dart
@@ -14,27 +14,29 @@
/// Return true if this [errorCode] is likely to have a fix associated with it.
bool hasFix(ErrorCode errorCode) =>
- errorCode == StaticWarningCode.UNDEFINED_CLASS_BOOLEAN ||
- errorCode == StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER ||
- errorCode == StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR ||
+ errorCode == CompileTimeErrorCode.UNDEFINED_CLASS_BOOLEAN ||
+ errorCode == CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER ||
+ errorCode == CompileTimeErrorCode.NEW_WITH_UNDEFINED_CONSTRUCTOR ||
errorCode ==
- StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE ||
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE ||
errorCode ==
- StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO ||
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO ||
errorCode ==
- StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE ||
+ CompileTimeErrorCode
+ .NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE ||
errorCode ==
- StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR ||
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR ||
errorCode ==
- StaticWarningCode
+ CompileTimeErrorCode
.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS ||
- errorCode == StaticWarningCode.CAST_TO_NON_TYPE ||
- errorCode == StaticWarningCode.TYPE_TEST_WITH_UNDEFINED_NAME ||
- errorCode == StaticWarningCode.FINAL_NOT_INITIALIZED ||
- errorCode == StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1 ||
- errorCode == StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2 ||
- errorCode == StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS ||
- errorCode == StaticWarningCode.UNDEFINED_IDENTIFIER ||
+ errorCode == CompileTimeErrorCode.CAST_TO_NON_TYPE ||
+ errorCode == CompileTimeErrorCode.TYPE_TEST_WITH_UNDEFINED_NAME ||
+ errorCode == CompileTimeErrorCode.FINAL_NOT_INITIALIZED ||
+ errorCode == CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1 ||
+ errorCode == CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2 ||
+ errorCode ==
+ CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS ||
+ errorCode == CompileTimeErrorCode.UNDEFINED_IDENTIFIER ||
errorCode ==
CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE ||
errorCode == CompileTimeErrorCode.INTEGER_LITERAL_IMPRECISE_AS_DOUBLE ||
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index c7dca1e..90f10f5 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -490,6 +490,9 @@
/// generators used for lint rules are in the [lintMultiProducerMap].
static const Map<ErrorCode, List<MultiProducerGenerator>>
nonLintMultiProducerMap = {
+ CompileTimeErrorCode.CAST_TO_NON_TYPE: [
+ ImportLibrary.forType,
+ ],
CompileTimeErrorCode.CONST_WITH_NON_TYPE: [
ImportLibrary.forType,
],
@@ -512,6 +515,9 @@
CompileTimeErrorCode.MIXIN_OF_NON_CLASS: [
ImportLibrary.forType,
],
+ CompileTimeErrorCode.NEW_WITH_NON_TYPE: [
+ ImportLibrary.forType,
+ ],
CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT: [
AddSuperConstructorInvocation.newInstance,
],
@@ -519,6 +525,15 @@
AddSuperConstructorInvocation.newInstance,
CreateConstructorSuper.newInstance,
],
+ CompileTimeErrorCode.NON_TYPE_IN_CATCH_CLAUSE: [
+ ImportLibrary.forType,
+ ],
+ CompileTimeErrorCode.NOT_A_TYPE: [
+ ImportLibrary.forType,
+ ],
+ CompileTimeErrorCode.TYPE_TEST_WITH_UNDEFINED_NAME: [
+ ImportLibrary.forType,
+ ],
CompileTimeErrorCode.UNDEFINED_ANNOTATION: [
ImportLibrary.forTopLevelVariable,
ImportLibrary.forType,
@@ -529,6 +544,12 @@
CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT: [
AddSuperConstructorInvocation.newInstance,
],
+ CompileTimeErrorCode.UNDEFINED_IDENTIFIER: [
+ ImportLibrary.forExtension,
+ ImportLibrary.forFunction,
+ ImportLibrary.forTopLevelVariable,
+ ImportLibrary.forType,
+ ],
CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER: [
ChangeArgumentName.newInstance,
],
@@ -541,27 +562,6 @@
HintCode.SDK_VERSION_ASYNC_EXPORTED_FROM_CORE: [
ImportLibrary.dartAsync,
],
- StaticWarningCode.CAST_TO_NON_TYPE: [
- ImportLibrary.forType,
- ],
- StaticWarningCode.NEW_WITH_NON_TYPE: [
- ImportLibrary.forType,
- ],
- StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE: [
- ImportLibrary.forType,
- ],
- StaticWarningCode.NOT_A_TYPE: [
- ImportLibrary.forType,
- ],
- StaticWarningCode.TYPE_TEST_WITH_UNDEFINED_NAME: [
- ImportLibrary.forType,
- ],
- StaticWarningCode.UNDEFINED_IDENTIFIER: [
- ImportLibrary.forExtension,
- ImportLibrary.forFunction,
- ImportLibrary.forTopLevelVariable,
- ImportLibrary.forType,
- ],
StaticTypeWarningCode.NON_TYPE_AS_TYPE_ARGUMENT: [
ImportLibrary.forType,
],
@@ -584,12 +584,31 @@
/// correction producers used to build fixes for those diagnostics. The
/// generators used for lint rules are in the [lintProducerMap].
static const Map<ErrorCode, List<ProducerGenerator>> nonLintProducerMap = {
+ CompileTimeErrorCode.ASSIGNMENT_TO_FINAL: [
+ MakeFieldNotFinal.newInstance,
+ ],
+ CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL: [
+ MakeVariableNotFinal.newInstance,
+ ],
+ CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE: [
+ WrapInText.newInstance,
+ ],
CompileTimeErrorCode.ASYNC_FOR_IN_WRONG_CONTEXT: [
AddAsync.newInstance,
],
CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT: [
AddAsync.newInstance,
],
+ CompileTimeErrorCode.CAST_TO_NON_TYPE: [
+ ChangeTo.classOrMixin,
+ CreateClass.newInstance,
+ CreateMixin.newInstance,
+ ],
+ CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER: [
+ CreateMissingOverrides.newInstance,
+ CreateNoSuchMethod.newInstance,
+ MakeClassAbstract.newInstance,
+ ],
CompileTimeErrorCode.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE: [
UseConst.newInstance,
],
@@ -619,6 +638,19 @@
CreateConstructor.newInstance,
ConvertToNamedArguments.newInstance,
],
+ CompileTimeErrorCode.FINAL_NOT_INITIALIZED: [
+ AddLate.newInstance,
+ CreateConstructorForFinalFields.newInstance,
+ ],
+ CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1: [
+ AddFieldFormalParameters.newInstance,
+ ],
+ CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2: [
+ AddFieldFormalParameters.newInstance,
+ ],
+ CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS: [
+ AddFieldFormalParameters.newInstance,
+ ],
CompileTimeErrorCode.IMPLEMENTS_NON_CLASS: [
ChangeTo.classOrMixin,
CreateClass.newInstance,
@@ -643,6 +675,43 @@
ChangeTo.classOrMixin,
CreateClass.newInstance,
],
+ CompileTimeErrorCode.NEW_WITH_NON_TYPE: [
+ ChangeTo.classOrMixin,
+ ],
+ CompileTimeErrorCode.NEW_WITH_UNDEFINED_CONSTRUCTOR: [
+ CreateConstructor.newInstance,
+ ],
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS:
+ [
+ CreateMissingOverrides.newInstance,
+ CreateNoSuchMethod.newInstance,
+ MakeClassAbstract.newInstance,
+ ],
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR: [
+ CreateMissingOverrides.newInstance,
+ CreateNoSuchMethod.newInstance,
+ MakeClassAbstract.newInstance,
+ ],
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE: [
+ CreateMissingOverrides.newInstance,
+ CreateNoSuchMethod.newInstance,
+ MakeClassAbstract.newInstance,
+ ],
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE: [
+ CreateMissingOverrides.newInstance,
+ CreateNoSuchMethod.newInstance,
+ MakeClassAbstract.newInstance,
+ ],
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO: [
+ CreateMissingOverrides.newInstance,
+ CreateNoSuchMethod.newInstance,
+ MakeClassAbstract.newInstance,
+ ],
+ CompileTimeErrorCode.NOT_A_TYPE: [
+ ChangeTo.classOrMixin,
+ CreateClass.newInstance,
+ CreateMixin.newInstance,
+ ],
CompileTimeErrorCode.NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD: [
AddLate.newInstance,
],
@@ -658,6 +727,11 @@
CompileTimeErrorCode.NULLABLE_TYPE_IN_WITH_CLAUSE: [
RemoveQuestionMark.newInstance,
],
+ CompileTimeErrorCode.TYPE_TEST_WITH_UNDEFINED_NAME: [
+ ChangeTo.classOrMixin,
+ CreateClass.newInstance,
+ CreateMixin.newInstance,
+ ],
CompileTimeErrorCode.UNDEFINED_ANNOTATION: [
ChangeTo.annotation,
CreateClass.newInstance,
@@ -667,6 +741,9 @@
CreateClass.newInstance,
CreateMixin.newInstance,
],
+ CompileTimeErrorCode.UNDEFINED_CLASS_BOOLEAN: [
+ ReplaceBooleanWithBool.newInstance,
+ ],
CompileTimeErrorCode.UNDEFINED_EXTENSION_GETTER: [
ChangeTo.getterOrSetter,
CreateGetter.newInstance,
@@ -679,6 +756,19 @@
ChangeTo.getterOrSetter,
CreateSetter.newInstance,
],
+ CompileTimeErrorCode.UNDEFINED_IDENTIFIER: [
+ ChangeTo.getterOrSetter,
+ CreateClass.newInstance,
+ CreateField.newInstance,
+ CreateGetter.newInstance,
+ CreateLocalVariable.newInstance,
+ CreateMethodOrFunction.newInstance,
+ CreateMixin.newInstance,
+ CreateSetter.newInstance,
+ ],
+ CompileTimeErrorCode.UNDEFINED_IDENTIFIER_AWAIT: [
+ AddAsync.newInstance,
+ ],
CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER: [
AddMissingParameterNamed.newInstance,
ConvertFlutterChild.newInstance,
@@ -908,101 +998,12 @@
// updated so that only the appropriate subset is generated.
QualifyReference.newInstance,
],
- StaticWarningCode.ASSIGNMENT_TO_FINAL: [
- MakeFieldNotFinal.newInstance,
- ],
- StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL: [
- MakeVariableNotFinal.newInstance,
- ],
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE: [
- WrapInText.newInstance,
- ],
- StaticWarningCode.CAST_TO_NON_TYPE: [
- ChangeTo.classOrMixin,
- CreateClass.newInstance,
- CreateMixin.newInstance,
- ],
- StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER: [
- CreateMissingOverrides.newInstance,
- CreateNoSuchMethod.newInstance,
- MakeClassAbstract.newInstance,
- ],
StaticWarningCode.DEAD_NULL_AWARE_EXPRESSION: [
RemoveDeadIfNull.newInstance,
],
- StaticWarningCode.FINAL_NOT_INITIALIZED: [
- AddLate.newInstance,
- CreateConstructorForFinalFields.newInstance,
- ],
- StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1: [
- AddFieldFormalParameters.newInstance,
- ],
- StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2: [
- AddFieldFormalParameters.newInstance,
- ],
- StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS: [
- AddFieldFormalParameters.newInstance,
- ],
StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH: [
AddMissingEnumCaseClauses.newInstance,
],
- StaticWarningCode.NEW_WITH_NON_TYPE: [
- ChangeTo.classOrMixin,
- ],
- StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR: [
- CreateConstructor.newInstance,
- ],
- StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS: [
- CreateMissingOverrides.newInstance,
- CreateNoSuchMethod.newInstance,
- MakeClassAbstract.newInstance,
- ],
- StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR: [
- CreateMissingOverrides.newInstance,
- CreateNoSuchMethod.newInstance,
- MakeClassAbstract.newInstance,
- ],
- StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE: [
- CreateMissingOverrides.newInstance,
- CreateNoSuchMethod.newInstance,
- MakeClassAbstract.newInstance,
- ],
- StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE: [
- CreateMissingOverrides.newInstance,
- CreateNoSuchMethod.newInstance,
- MakeClassAbstract.newInstance,
- ],
- StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO: [
- CreateMissingOverrides.newInstance,
- CreateNoSuchMethod.newInstance,
- MakeClassAbstract.newInstance,
- ],
- StaticWarningCode.NOT_A_TYPE: [
- ChangeTo.classOrMixin,
- CreateClass.newInstance,
- CreateMixin.newInstance,
- ],
- StaticWarningCode.TYPE_TEST_WITH_UNDEFINED_NAME: [
- ChangeTo.classOrMixin,
- CreateClass.newInstance,
- CreateMixin.newInstance,
- ],
- StaticWarningCode.UNDEFINED_CLASS_BOOLEAN: [
- ReplaceBooleanWithBool.newInstance,
- ],
- StaticWarningCode.UNDEFINED_IDENTIFIER: [
- ChangeTo.getterOrSetter,
- CreateClass.newInstance,
- CreateField.newInstance,
- CreateGetter.newInstance,
- CreateLocalVariable.newInstance,
- CreateMethodOrFunction.newInstance,
- CreateMixin.newInstance,
- CreateSetter.newInstance,
- ],
- StaticWarningCode.UNDEFINED_IDENTIFIER_AWAIT: [
- AddAsync.newInstance,
- ],
};
final DartFixContext fixContext;
diff --git a/pkg/analysis_server/lib/src/utilities/flutter.dart b/pkg/analysis_server/lib/src/utilities/flutter.dart
index d8cc17b..c7f167f 100644
--- a/pkg/analysis_server/lib/src/utilities/flutter.dart
+++ b/pkg/analysis_server/lib/src/utilities/flutter.dart
@@ -36,6 +36,9 @@
final Uri _uriContainer = Uri.parse(
'package:flutter/src/widgets/container.dart',
);
+ final Uri _uriDiagnostics = Uri.parse(
+ 'package:flutter/src/foundation/diagnostics.dart',
+ );
final Uri _uriEdgeInsets = Uri.parse(
'package:flutter/src/painting/edge_insets.dart',
);
@@ -337,6 +340,35 @@
return isColorElement(type.element);
}
+ /// Return `true` if the given [type] is the flutter mixin `Diagnosticable`
+ /// or its subtype.
+ bool isDiagnosticable(DartType type) {
+ if (type is! InterfaceType) {
+ return false;
+ }
+
+ bool isDiagnosticableElement(ClassElement element) {
+ if (element == null) {
+ return false;
+ }
+
+ bool isExactDiagnosticable(ClassElement element) =>
+ element?.name == 'Diagnosticable' &&
+ element.source.uri == _uriDiagnostics;
+ if (isExactDiagnosticable(element)) {
+ return true;
+ }
+ for (var type in element.allSupertypes) {
+ if (isExactDiagnosticable(type.element)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ return isDiagnosticableElement(type.element);
+ }
+
/// Return `true` if the [element] is the Flutter class `Alignment`.
bool isExactAlignment(ClassElement element) {
return _isExactWidget(element, 'Alignment', _uriAlignment);
@@ -432,8 +464,8 @@
isWidgetType(type.typeArguments[0]);
}
- /// Return `true` if the given [type] is the dart.ui class `Color`, or its
- /// subtype.
+ /// Return `true` if the given [type] is the vector_math_64 class `Matrix4`,
+ /// or its subtype.
bool isMatrix4(DartType type) {
if (type is! InterfaceType) {
return false;
diff --git a/pkg/analysis_server/test/analysis/notification_errors_test.dart b/pkg/analysis_server/test/analysis/notification_errors_test.dart
index f003fd6..07aa487e 100644
--- a/pkg/analysis_server/test/analysis/notification_errors_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_errors_test.dart
@@ -426,9 +426,14 @@
Future<void> test_StaticWarning() async {
createProject();
addTestFile('''
-main() {
- final int foo;
- print(foo);
+enum E {e1, e2}
+
+void f(E e) {
+ switch (e) {
+ case E.e1:
+ print(0);
+ break;
+ }
}
''');
await waitForTasksFinished();
@@ -436,7 +441,7 @@
var errors = filesErrors[testFile];
expect(errors, hasLength(1));
var error = errors[0];
- expect(error.severity, AnalysisErrorSeverity.ERROR);
+ expect(error.severity, AnalysisErrorSeverity.WARNING);
expect(error.type, AnalysisErrorType.STATIC_WARNING);
}
}
diff --git a/pkg/analysis_server/test/analysis/notification_highlights2_test.dart b/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
index 1113017..411e163 100644
--- a/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_highlights2_test.dart
@@ -17,7 +17,7 @@
defineReflectiveSuite(() {
defineReflectiveTests(AnalysisNotificationHighlightsTest);
defineReflectiveTests(HighlightsWithControlFlowCollectionsTest);
- defineReflectiveTests(HighlightsWithNnbdTest);
+ defineReflectiveTests(HighlightsWithNullSafetyTest);
defineReflectiveTests(HighlightTypeTest);
});
}
@@ -1297,7 +1297,7 @@
}
@reflectiveTest
-class HighlightsWithNnbdTest extends HighlightsTestSupport {
+class HighlightsWithNullSafetyTest extends HighlightsTestSupport {
@override
void createProject({Map<String, String> packageRoots}) {
addAnalysisOptionsFile('''
diff --git a/pkg/analysis_server/test/analysis/notification_highlights_test.dart b/pkg/analysis_server/test/analysis/notification_highlights_test.dart
index d35cfe3..9432795 100644
--- a/pkg/analysis_server/test/analysis/notification_highlights_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_highlights_test.dart
@@ -17,7 +17,7 @@
defineReflectiveSuite(() {
defineReflectiveTests(AnalysisNotificationHighlightsTest);
defineReflectiveTests(HighlightsWithControlFlowCollectionsTest);
- defineReflectiveTests(HighlightsWithNnbdTest);
+ defineReflectiveTests(HighlightsWithNullSafetyTest);
defineReflectiveTests(HighlightTypeTest);
});
}
@@ -1145,7 +1145,7 @@
}
@reflectiveTest
-class HighlightsWithNnbdTest extends HighlightsTestSupport {
+class HighlightsWithNullSafetyTest extends HighlightsTestSupport {
@override
void createProject({Map<String, String> packageRoots}) {
addAnalysisOptionsFile('''
diff --git a/pkg/analysis_server/test/edit/bulk_fixes_test.dart b/pkg/analysis_server/test/edit/bulk_fixes_test.dart
index 52fd967..d72f623 100644
--- a/pkg/analysis_server/test/edit/bulk_fixes_test.dart
+++ b/pkg/analysis_server/test/edit/bulk_fixes_test.dart
@@ -36,30 +36,21 @@
handler = EditDomainHandler(server);
}
- Future<void> test_missingOverride() async {
+ Future<void> test_unnecessaryNew() async {
createProject();
addAnalysisOptionsFile('''
linter:
rules:
- - annotate_overrides
+ - unnecessary_new
''');
addTestFile('''
-class A {
- void f() {}
-}
-class B extends A {
- void f() { }
-}
+class A {}
+A f() => new A();
''');
await assertEditEquals('''
-class A {
- void f() {}
-}
-class B extends A {
- @override
- void f() { }
-}
+class A {}
+A f() => A();
''');
}
diff --git a/pkg/analysis_server/test/mock_packages/flutter/lib/src/foundation/diagnostics.dart b/pkg/analysis_server/test/mock_packages/flutter/lib/src/foundation/diagnostics.dart
index 978d497..c2bae69 100644
--- a/pkg/analysis_server/test/mock_packages/flutter/lib/src/foundation/diagnostics.dart
+++ b/pkg/analysis_server/test/mock_packages/flutter/lib/src/foundation/diagnostics.dart
@@ -2,10 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-abstract class Diagnosticable with DiagnosticableMixin {}
-
+///// todo (pq): remove when linter 0.1.118 is integrated.
mixin DiagnosticableMixin {}
+mixin Diagnosticable {}
+
+abstract class DiagnosticableTree with Diagnosticable {}
+
class DiagnosticPropertiesBuilder {
void add(DiagnosticsNode property) {}
}
diff --git a/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/framework.dart b/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/framework.dart
index 3bc94fd7..bbe243f 100644
--- a/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/framework.dart
+++ b/pkg/analysis_server/test/mock_packages/flutter/lib/src/widgets/framework.dart
@@ -47,7 +47,7 @@
Widget build(BuildContext context) => null;
}
-class Widget {
+class Widget extends DiagnosticableTree {
final Key key;
const Widget({this.key});
diff --git a/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
index e6bab18..32b6dc8 100644
--- a/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
@@ -16,7 +16,7 @@
void main() {
defineReflectiveSuite(() {
defineReflectiveTests(KeywordContributorTest);
- defineReflectiveTests(KeywordContributorWithNnbdTest);
+ defineReflectiveTests(KeywordContributorWithNullSafetyTest);
});
}
@@ -2348,7 +2348,7 @@
}
@reflectiveTest
-class KeywordContributorWithNnbdTest extends KeywordContributorTest {
+class KeywordContributorWithNullSafetyTest extends KeywordContributorTest {
@override
void setupResourceProvider() {
super.setupResourceProvider();
diff --git a/pkg/analysis_server/test/services/completion/dart/relevance/named_argument_relevance_test.dart b/pkg/analysis_server/test/services/completion/dart/relevance/named_argument_relevance_test.dart
index 21fdd4d..8a51410 100644
--- a/pkg/analysis_server/test/services/completion/dart/relevance/named_argument_relevance_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/relevance/named_argument_relevance_test.dart
@@ -11,7 +11,7 @@
void main() {
defineReflectiveSuite(() {
defineReflectiveTests(NamedArgumentRelevanceTest);
- defineReflectiveTests(NamedArgumentRelevanceWithNnbdTest);
+ defineReflectiveTests(NamedArgumentRelevanceWithNullSafetyTest);
});
}
@@ -47,7 +47,8 @@
}
@reflectiveTest
-class NamedArgumentRelevanceWithNnbdTest extends NamedArgumentRelevanceTest {
+class NamedArgumentRelevanceWithNullSafetyTest
+ extends NamedArgumentRelevanceTest {
@override
List<String> get enabledExperiments => ['non-nullable'];
diff --git a/pkg/analysis_server/test/src/cider/completion_test.dart b/pkg/analysis_server/test/src/cider/completion_test.dart
index 4e0e47b..48875ac 100644
--- a/pkg/analysis_server/test/src/cider/completion_test.dart
+++ b/pkg/analysis_server/test/src/cider/completion_test.dart
@@ -3,7 +3,9 @@
// BSD-style license that can be found in the LICENSE file.
import 'package:analysis_server/src/cider/completion.dart';
+import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/source/line_info.dart';
+import 'package:analyzer/src/test_utilities/function_ast_visitor.dart';
import 'package:analyzer_plugin/protocol/protocol_common.dart'
show CompletionSuggestion, CompletionSuggestionKind, ElementKind;
import 'package:meta/meta.dart';
@@ -23,11 +25,11 @@
final CiderCompletionCache _completionCache = CiderCompletionCache();
CiderCompletionComputer _computer;
+ void Function(ResolvedUnitResult) _testResolvedUnit;
+
CiderCompletionResult _completionResult;
List<CompletionSuggestion> _suggestions;
- Future<void> test_limitedResolution_;
-
@override
void setUp() {
super.setUp();
@@ -295,10 +297,34 @@
]);
}
- Future<void> test_limitedResolution_class_method() async {
+ Future<void> test_limitedResolution_class_field_startWithType() async {
+ _configureToCheckNotResolved(
+ identifiers: {'print'},
+ );
+
+ await _compute(r'''
+class A {
+ void foo() {
+ print(0);
+ }
+
+ Str^
+}
+''');
+
+ _assertHasClass(text: 'String');
+ }
+
+ Future<void> test_limitedResolution_class_method_body() async {
+ _configureToCheckNotResolved(
+ identifiers: {'print'},
+ );
+
await _compute(r'''
class A<T> {
- void foo() {}
+ void foo() {
+ print(0);
+ }
void bar<U>(int a) {
^
@@ -323,9 +349,66 @@
_assertHasTypeParameter(text: 'U');
}
- Future<void> test_limitedResolution_unit_function() async {
+ Future<void> test_limitedResolution_class_method_parameterType() async {
+ _configureToCheckNotResolved(
+ identifiers: {'print'},
+ );
+
await _compute(r'''
-void foo() {}
+class A {
+ void foo() {
+ print(0);
+ }
+
+ void bar(Str^) {}
+}
+''');
+
+ _assertHasClass(text: 'String');
+ }
+
+ Future<void>
+ test_limitedResolution_class_method_returnType_hasPartial() async {
+ _configureToCheckNotResolved(
+ identifiers: {'print'},
+ );
+
+ await _compute(r'''
+class A {
+ void foo() {
+ print(0);
+ }
+
+ Str^ bar() {}
+}
+''');
+
+ _assertHasClass(text: 'String');
+ }
+
+ Future<void> test_limitedResolution_hasPart() async {
+ newFile('/workspace/dart/test/lib/a.dart', content: r'''
+class A {}
+''');
+
+ await _compute(r'''
+part 'a.dart';
+^
+''');
+
+ _assertHasClass(text: 'int');
+ _assertHasClass(text: 'A');
+ }
+
+ Future<void> test_limitedResolution_unit_function_body() async {
+ _configureToCheckNotResolved(
+ identifiers: {'print'},
+ );
+
+ await _compute(r'''
+void foo() {
+ print(0);
+}
void bar(int a) {
^
@@ -347,20 +430,6 @@
_assertHasGetter(text: 'isEven');
}
- Future<void> test_partialResolution_hasPart() async {
- newFile('/workspace/dart/test/lib/a.dart', content: r'''
-class A {}
-''');
-
- await _compute(r'''
-part 'a.dart';
-^
-''');
-
- _assertHasClass(text: 'int');
- _assertHasClass(text: 'A');
- }
-
Future<void> test_warmUp_cachesImportedLibraries() async {
var aPath = convertPath('/workspace/dart/test/lib/a.dart');
newFile(aPath, content: r'''
@@ -550,10 +619,28 @@
path: convertPath(testPath),
line: context.line,
column: context.character,
+ testResolvedUnit: _testResolvedUnit,
);
_suggestions = _completionResult.suggestions;
}
+ /// Configure the [CiderCompletionComputer] to check that when resolving
+ /// for completion we don't resolve unnecessary node.
+ void _configureToCheckNotResolved({Set<String> identifiers}) {
+ _testResolvedUnit = (resolvedUnitResult) {
+ var unit = resolvedUnitResult.unit;
+ unit.accept(
+ FunctionAstVisitor(
+ simpleIdentifier: (node) {
+ if (identifiers.contains(node.name) && node.staticElement != null) {
+ fail('Unexpectedly resolved node: $node');
+ }
+ },
+ ),
+ );
+ };
+ }
+
/// TODO(scheglov) Implement incremental updating
void _createFileResolver() {
createFileResolver();
diff --git a/pkg/analysis_server/test/src/services/correction/assist/add_diagnostic_property_reference_test.dart b/pkg/analysis_server/test/src/services/correction/assist/add_diagnostic_property_reference_test.dart
index f4bad61..ded7a23 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/add_diagnostic_property_reference_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/add_diagnostic_property_reference_test.dart
@@ -21,8 +21,11 @@
/// Full coverage in fix/add_diagnostic_property_reference_test.dart
Future<void> test_boolField_debugFillProperties() async {
- verifyNoTestUnitErrors = false;
+ addFlutterPackage();
await resolveTestUnit('''
+import 'package:flutter/foundation.dart';
+import 'package:flutter/widgets.dart';
+
class W extends Widget {
bool /*caret*/property;
@override
@@ -32,6 +35,9 @@
}
''');
await assertHasAssist('''
+import 'package:flutter/foundation.dart';
+import 'package:flutter/widgets.dart';
+
class W extends Widget {
bool property;
@override
@@ -52,4 +58,14 @@
''');
await assertNoAssist();
}
+
+ Future<void> test_notAvailable_outsideDiagnosticable() async {
+ addFlutterPackage();
+ await resolveTestUnit('''
+class C {
+ String get f/*caret*/ => null;
+}
+''');
+ await assertNoAssist();
+ }
}
diff --git a/pkg/analysis_server/test/src/services/correction/assist/shadow_field_test.dart b/pkg/analysis_server/test/src/services/correction/assist/shadow_field_test.dart
index d4c1df0..09acc3d74 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/shadow_field_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/shadow_field_test.dart
@@ -12,7 +12,7 @@
void main() {
defineReflectiveSuite(() {
defineReflectiveTests(ShadowFieldTest);
- defineReflectiveTests(ShadowFieldWithNNBDTest);
+ defineReflectiveTests(ShadowFieldWithNullSafetyTest);
});
}
@@ -108,7 +108,7 @@
}
@reflectiveTest
-class ShadowFieldWithNNBDTest extends ShadowFieldTest {
+class ShadowFieldWithNullSafetyTest extends ShadowFieldTest {
@override
void setUp() {
super.setUp();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_async_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_async_test.dart
index 0c2a51a..a7e5fb1 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_async_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_async_test.dart
@@ -72,7 +72,7 @@
return 1;
}
''', errorFilter: (AnalysisError error) {
- return error.errorCode == StaticWarningCode.UNDEFINED_IDENTIFIER_AWAIT;
+ return error.errorCode == CompileTimeErrorCode.UNDEFINED_IDENTIFIER_AWAIT;
});
}
@@ -91,7 +91,7 @@
void doStuff() => takeFutureCallback(() async => await 1);
''', errorFilter: (AnalysisError error) {
- return error.errorCode == StaticWarningCode.UNDEFINED_IDENTIFIER_AWAIT;
+ return error.errorCode == CompileTimeErrorCode.UNDEFINED_IDENTIFIER_AWAIT;
});
}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_diagnostic_property_reference_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_diagnostic_property_reference_test.dart
index 5e8a9e2..b4fdc40 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_diagnostic_property_reference_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_diagnostic_property_reference_test.dart
@@ -31,6 +31,7 @@
}
Future<void> test_boolField() async {
+ // todo(pq): when linter 0.1.118 is integrated, update DiagnosticableMixin to Diagnosticable
await resolveTestUnit('''
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_required_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_required_test.dart
index c45b6ca..9b90123 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_required_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_required_test.dart
@@ -13,7 +13,7 @@
void main() {
defineReflectiveSuite(() {
defineReflectiveTests(AddRequiredTest);
- defineReflectiveTests(AddRequiredWithNNBDTest);
+ defineReflectiveTests(AddRequiredWithNullSafetyTest);
});
}
@@ -40,7 +40,7 @@
}
@reflectiveTest
-class AddRequiredWithNNBDTest extends FixProcessorTest {
+class AddRequiredWithNullSafetyTest extends FixProcessorTest {
@override
List<String> get experiments => [EnableString.non_nullable];
diff --git a/pkg/analysis_server/test/src/services/correction/fix/bulk/add_override_test.dart b/pkg/analysis_server/test/src/services/correction/fix/bulk/add_override_test.dart
new file mode 100644
index 0000000..afd882d
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/bulk/add_override_test.dart
@@ -0,0 +1,47 @@
+// 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.
+
+import 'package:analysis_server/src/services/linter/lint_names.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'bulk_fix_processor.dart';
+
+void main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(AddOverrideTest);
+ });
+}
+
+@reflectiveTest
+class AddOverrideTest extends BulkFixProcessorTest {
+ @override
+ String get lintCode => LintNames.annotate_overrides;
+
+ Future<void> test_singleFile() async {
+ await resolveTestUnit('''
+class A {
+ void a() {}
+ void aa() {}
+}
+
+class B extends A {
+ void a() {}
+ void aa() {}
+}
+''');
+ await assertHasFix('''
+class A {
+ void a() {}
+ void aa() {}
+}
+
+class B extends A {
+ @override
+ void a() {}
+ @override
+ void aa() {}
+}
+''');
+ }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/bulk/test_all.dart b/pkg/analysis_server/test/src/services/correction/fix/bulk/test_all.dart
index b344a3a..77d9e26 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/bulk/test_all.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/bulk/test_all.dart
@@ -4,6 +4,7 @@
import 'package:test_reflective_loader/test_reflective_loader.dart';
+import 'add_override_test.dart' as add_override;
import 'convert_documentation_into_line_test.dart'
as convert_documentation_into_line;
import 'remove_unnecessary_const_test.dart' as remove_unnecessary_const;
@@ -12,6 +13,7 @@
void main() {
defineReflectiveSuite(() {
+ add_override.main();
convert_documentation_into_line.main();
remove_unnecessary_const.main();
remove_unnecessary_new.main();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_class_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_class_test.dart
index 82181b0..10f5a1a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_class_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_class_test.dart
@@ -196,7 +196,7 @@
class Test {
}
''', errorFilter: (error) {
- return error.errorCode == StaticWarningCode.UNDEFINED_IDENTIFIER;
+ return error.errorCode == CompileTimeErrorCode.UNDEFINED_IDENTIFIER;
});
assertLinkedGroup(change.linkedEditGroups[0], ['Test])', 'Test {']);
}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_constructor_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_constructor_test.dart
index 83eb64c..0512623 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_constructor_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_constructor_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/error/codes.dart';
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -104,6 +105,19 @@
''');
}
+ Future<void> test_mixin() async {
+ verifyNoTestUnitErrors = false;
+ await resolveTestUnit('''
+mixin M {}
+void f() {
+ new M(3);
+}
+''');
+ await assertNoFix(
+ errorFilter: (error) =>
+ error.errorCode != CompileTimeErrorCode.MIXIN_INSTANTIATE);
+ }
+
Future<void> test_named() async {
await resolveTestUnit('''
class A {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/create_mixin_test.dart b/pkg/analysis_server/test/src/services/correction/fix/create_mixin_test.dart
index 0fd84b2..3945682 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/create_mixin_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/create_mixin_test.dart
@@ -134,7 +134,7 @@
mixin Test {
}
''', errorFilter: (error) {
- return error.errorCode == StaticWarningCode.UNDEFINED_IDENTIFIER;
+ return error.errorCode == CompileTimeErrorCode.UNDEFINED_IDENTIFIER;
});
assertLinkedGroup(change.linkedEditGroups[0], ['Test])', 'Test {']);
}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/import_library_sdk_test.dart b/pkg/analysis_server/test/src/services/correction/fix/import_library_sdk_test.dart
index b64f017..600d792 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/import_library_sdk_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/import_library_sdk_test.dart
@@ -211,7 +211,7 @@
@MyAnnotation(int, const [Completer])
main() {}
''', errorFilter: (error) {
- return error.errorCode == StaticWarningCode.UNDEFINED_IDENTIFIER;
+ return error.errorCode == CompileTimeErrorCode.UNDEFINED_IDENTIFIER;
});
}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/inline_typedef_test.dart b/pkg/analysis_server/test/src/services/correction/fix/inline_typedef_test.dart
index ceefcc5..3eeb26c 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/inline_typedef_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/inline_typedef_test.dart
@@ -13,7 +13,7 @@
void main() {
defineReflectiveSuite(() {
defineReflectiveTests(InlineTypedefTest);
- defineReflectiveTests(InlineTypedefWithNNBDTest);
+ defineReflectiveTests(InlineTypedefWithNullSafetyTest);
});
}
@@ -137,7 +137,7 @@
}
@reflectiveTest
-class InlineTypedefWithNNBDTest extends InlineTypedefTest {
+class InlineTypedefWithNullSafetyTest extends InlineTypedefTest {
@override
List<String> get experiments => [EnableString.non_nullable];
diff --git a/pkg/analysis_server/test/src/services/correction/fix/make_final_test.dart b/pkg/analysis_server/test/src/services/correction/fix/make_final_test.dart
index 4d4dd62..7486e14 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/make_final_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/make_final_test.dart
@@ -14,7 +14,7 @@
defineReflectiveSuite(() {
defineReflectiveTests(PreferFinalInForEachTest);
defineReflectiveTests(PreferFinalFieldsTest);
- defineReflectiveTests(PreferFinalFieldsWithNNBDTest);
+ defineReflectiveTests(PreferFinalFieldsWithNullSafetyTest);
});
}
@@ -58,7 +58,7 @@
}
@reflectiveTest
-class PreferFinalFieldsWithNNBDTest extends FixProcessorLintTest {
+class PreferFinalFieldsWithNullSafetyTest extends FixProcessorLintTest {
@override
List<String> get experiments => [EnableString.non_nullable];
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_boolean_with_bool_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_boolean_with_bool_test.dart
index d3e3acc..a9ad68a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_boolean_with_bool_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_boolean_with_bool_test.dart
@@ -27,7 +27,7 @@
boolean w;
}
''');
- await assertHasFixAllFix(StaticWarningCode.UNDEFINED_CLASS_BOOLEAN, '''
+ await assertHasFixAllFix(CompileTimeErrorCode.UNDEFINED_CLASS_BOOLEAN, '''
main() {
bool v;
bool w;
diff --git a/pkg/analysis_server/test/src/services/correction/fix/replace_cascade_with_dot_test.dart b/pkg/analysis_server/test/src/services/correction/fix/replace_cascade_with_dot_test.dart
index f69a43a..28abf56 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/replace_cascade_with_dot_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/replace_cascade_with_dot_test.dart
@@ -13,7 +13,7 @@
void main() {
defineReflectiveSuite(() {
defineReflectiveTests(ReplaceCascadeWithDotTest);
- defineReflectiveTests(ReplaceCascadeWithDotWithNNBDTest);
+ defineReflectiveTests(ReplaceCascadeWithDotWithNullSafetyTest);
});
}
@@ -99,7 +99,8 @@
}
@reflectiveTest
-class ReplaceCascadeWithDotWithNNBDTest extends ReplaceCascadeWithDotTest {
+class ReplaceCascadeWithDotWithNullSafetyTest
+ extends ReplaceCascadeWithDotTest {
@override
List<String> get experiments => [EnableString.non_nullable];
diff --git a/pkg/analysis_server/test/stress/completion/completion_runner.dart b/pkg/analysis_server/test/stress/completion/completion_runner.dart
index 19a23db..51c2445 100644
--- a/pkg/analysis_server/test/stress/completion/completion_runner.dart
+++ b/pkg/analysis_server/test/stress/completion/completion_runner.dart
@@ -106,7 +106,6 @@
return await contributor.computeSuggestions(
performance,
request,
- enableUriContributor: true,
);
},
);
diff --git a/pkg/analysis_server/test/stress/replay/replay.dart b/pkg/analysis_server/test/stress/replay/replay.dart
index ce02311..f453567 100644
--- a/pkg/analysis_server/test/stress/replay/replay.dart
+++ b/pkg/analysis_server/test/stress/replay/replay.dart
@@ -129,7 +129,6 @@
server.printStatistics();
}
exit(0);
- return null;
}
/// Create and return a parser that can be used to parse the command-line
diff --git a/pkg/analysis_server/tool/completion_metrics/completion_metrics.dart b/pkg/analysis_server/tool/completion_metrics/completion_metrics.dart
index 73091f0..3e57965 100644
--- a/pkg/analysis_server/tool/completion_metrics/completion_metrics.dart
+++ b/pkg/analysis_server/tool/completion_metrics/completion_metrics.dart
@@ -721,11 +721,7 @@
suggestions = await DartCompletionManager(
dartdocDirectiveInfo: DartdocDirectiveInfo(),
listener: listener,
- ).computeSuggestions(
- performance,
- request,
- enableUriContributor: true,
- );
+ ).computeSuggestions(performance, request);
} else {
// available suggestions == true
var includedElementKinds = <protocol.ElementKind>{};
@@ -739,11 +735,7 @@
includedElementNames: includedElementNames,
includedSuggestionRelevanceTags: includedSuggestionRelevanceTagList,
listener: listener,
- ).computeSuggestions(
- performance,
- request,
- enableUriContributor: true,
- );
+ ).computeSuggestions(performance, request);
computeIncludedSetList(declarationsTracker, request.result,
includedSuggestionSetList, includedElementNames);
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index c5d67c1..9c29e83 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -1,7 +1,10 @@
-## 0.39.15-dev
+## 0.39.15
* Move `asInstanceOf(ClassElement)` to `DartType`, so that it is also
supported for `TypeParameterType` when its bound implements the
requested interface.
+* Fixed invalid implicit downcast in `InterfaceType.allSupertypes`.
+* The internal `currentVersion` of the language updated to `2.10`.
+* Bug fixes: 41065, 42797, 42770, 42668.
## 0.39.14
* Removed `defaultSdkDirectory()` and `getSdkProperty()` from internal
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index fbd5b03..e281f0d 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -68,12 +68,19 @@
CompileTimeErrorCode.ACCESS_PRIVATE_ENUM_FIELD,
CompileTimeErrorCode.AMBIGUOUS_EXPORT,
CompileTimeErrorCode.AMBIGUOUS_EXTENSION_MEMBER_ACCESS,
+ CompileTimeErrorCode.AMBIGUOUS_IMPORT,
CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_BOTH,
CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER,
CompileTimeErrorCode.ANNOTATION_WITH_NON_CLASS,
- // ignore: deprecated_member_use_from_same_package
- CompileTimeErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS,
+ CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
CompileTimeErrorCode.ASSERT_IN_REDIRECTING_CONSTRUCTOR,
+ CompileTimeErrorCode.ASSIGNMENT_TO_CONST,
+ CompileTimeErrorCode.ASSIGNMENT_TO_FINAL,
+ CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL,
+ CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_NO_SETTER,
+ CompileTimeErrorCode.ASSIGNMENT_TO_FUNCTION,
+ CompileTimeErrorCode.ASSIGNMENT_TO_METHOD,
+ CompileTimeErrorCode.ASSIGNMENT_TO_TYPE,
CompileTimeErrorCode.ASYNC_FOR_IN_WRONG_CONTEXT,
CompileTimeErrorCode.AWAIT_IN_LATE_LOCAL_VARIABLE_INITIALIZER,
CompileTimeErrorCode.AWAIT_IN_WRONG_CONTEXT,
@@ -85,8 +92,11 @@
CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_NAME,
CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME,
CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME,
+ CompileTimeErrorCode.CASE_BLOCK_NOT_TERMINATED,
CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IMPLEMENTS_EQUALS,
CompileTimeErrorCode.CASE_EXPRESSION_TYPE_IS_NOT_SWITCH_EXPRESSION_SUBTYPE,
+ CompileTimeErrorCode.CAST_TO_NON_TYPE,
+ CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER,
CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_FIELD,
CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_AND_STATIC_METHOD,
CompileTimeErrorCode.CONFLICTING_FIELD_AND_METHOD,
@@ -129,6 +139,7 @@
CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR,
CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT,
CompileTimeErrorCode.CONTINUE_LABEL_ON_SWITCH,
+ CompileTimeErrorCode.COULD_NOT_INFER,
CompileTimeErrorCode.DEFAULT_LIST_CONSTRUCTOR,
CompileTimeErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPED_PARAMETER,
CompileTimeErrorCode.DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR,
@@ -160,14 +171,24 @@
CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS,
CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED,
CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS,
+ CompileTimeErrorCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION,
CompileTimeErrorCode.FIELD_INITIALIZED_IN_PARAMETER_AND_INITIALIZER,
CompileTimeErrorCode.FIELD_INITIALIZER_FACTORY_CONSTRUCTOR,
+ CompileTimeErrorCode.FIELD_INITIALIZER_NOT_ASSIGNABLE,
CompileTimeErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR,
CompileTimeErrorCode.FIELD_INITIALIZER_REDIRECTING_CONSTRUCTOR,
+ CompileTimeErrorCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE,
+ CompileTimeErrorCode.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR,
CompileTimeErrorCode.FINAL_INITIALIZED_MULTIPLE_TIMES,
+ CompileTimeErrorCode.FINAL_NOT_INITIALIZED,
+ CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1,
+ CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2,
+ CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS,
CompileTimeErrorCode.FOR_IN_WITH_CONST_VARIABLE,
CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND,
CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_TYPE_ARGUMENT,
+ CompileTimeErrorCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES,
+ CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES,
CompileTimeErrorCode.IF_ELEMENT_CONDITION_FROM_DEFERRED_LIBRARY,
CompileTimeErrorCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE,
CompileTimeErrorCode.ILLEGAL_SYNC_GENERATOR_RETURN_TYPE,
@@ -189,6 +210,7 @@
CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_STATIC_FIELD,
CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_FACTORY,
CompileTimeErrorCode.INSTANCE_MEMBER_ACCESS_FROM_STATIC,
+ CompileTimeErrorCode.INSTANTIATE_ABSTRACT_CLASS,
CompileTimeErrorCode.INSTANTIATE_ENUM,
CompileTimeErrorCode.INTEGER_LITERAL_IMPRECISE_AS_DOUBLE,
CompileTimeErrorCode.INTEGER_LITERAL_OUT_OF_RANGE,
@@ -212,21 +234,22 @@
CompileTimeErrorCode.INVALID_MODIFIER_ON_SETTER,
CompileTimeErrorCode.INVALID_OVERRIDE,
CompileTimeErrorCode.INVALID_REFERENCE_TO_THIS,
+ CompileTimeErrorCode.INVALID_SUPER_INVOCATION,
CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_LIST,
CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_MAP,
CompileTimeErrorCode.INVALID_TYPE_ARGUMENT_IN_CONST_SET,
CompileTimeErrorCode.INVALID_URI,
CompileTimeErrorCode.INVALID_USE_OF_COVARIANT,
- // ignore: deprecated_member_use_from_same_package
- CompileTimeErrorCode.INVALID_USE_OF_COVARIANT_IN_EXTENSION,
+ CompileTimeErrorCode.INVALID_USE_OF_NULL_VALUE,
CompileTimeErrorCode.INVOCATION_OF_EXTENSION_WITHOUT_CALL,
CompileTimeErrorCode.LABEL_IN_OUTER_SCOPE,
CompileTimeErrorCode.LABEL_UNDEFINED,
CompileTimeErrorCode.LATE_FINAL_FIELD_WITH_CONST_CONSTRUCTOR,
CompileTimeErrorCode.LATE_FINAL_LOCAL_ALREADY_ASSIGNED,
+ CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,
CompileTimeErrorCode.MAP_ENTRY_NOT_IN_MAP,
- // ignore: deprecated_member_use_from_same_package
- CompileTimeErrorCode.MEMBER_WITH_CLASS_NAME,
+ CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE,
+ CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE,
CompileTimeErrorCode.MISSING_CONST_IN_LIST_LITERAL,
CompileTimeErrorCode.MISSING_CONST_IN_MAP_LITERAL,
CompileTimeErrorCode.MISSING_CONST_IN_SET_LITERAL,
@@ -253,10 +276,18 @@
CompileTimeErrorCode.MIXINS_SUPER_CLASS,
CompileTimeErrorCode.MULTIPLE_REDIRECTING_CONSTRUCTOR_INVOCATIONS,
CompileTimeErrorCode.MULTIPLE_SUPER_INITIALIZERS,
+ CompileTimeErrorCode.NEW_WITH_NON_TYPE,
+ CompileTimeErrorCode.NEW_WITH_UNDEFINED_CONSTRUCTOR,
+ CompileTimeErrorCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT,
CompileTimeErrorCode.NO_ANNOTATION_CONSTRUCTOR_ARGUMENTS,
CompileTimeErrorCode.NO_COMBINED_SUPER_SIGNATURE,
CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT,
CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT,
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS,
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR,
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE,
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO,
CompileTimeErrorCode.NON_CONST_MAP_AS_EXPRESSION_STATEMENT,
CompileTimeErrorCode.NON_CONSTANT_ANNOTATION_CONSTRUCTOR,
CompileTimeErrorCode.NON_CONSTANT_CASE_EXPRESSION,
@@ -271,14 +302,14 @@
CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE,
CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY,
CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT,
- // ignore: deprecated_member_use_from_same_package
- CompileTimeErrorCode.NON_CONSTANT_VALUE_IN_INITIALIZER,
CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR,
CompileTimeErrorCode.NON_SYNC_FACTORY,
+ CompileTimeErrorCode.NON_TYPE_IN_CATCH_CLAUSE,
+ CompileTimeErrorCode.NON_VOID_RETURN_FOR_OPERATOR,
+ CompileTimeErrorCode.NON_VOID_RETURN_FOR_SETTER,
+ CompileTimeErrorCode.NOT_A_TYPE,
CompileTimeErrorCode.NOT_ASSIGNED_POTENTIALLY_NON_NULLABLE_LOCAL_VARIABLE,
CompileTimeErrorCode.NOT_ENOUGH_POSITIONAL_ARGUMENTS,
- // ignore: deprecated_member_use_from_same_package
- CompileTimeErrorCode.NOT_ENOUGH_REQUIRED_ARGUMENTS,
CompileTimeErrorCode.NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD,
CompileTimeErrorCode.NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD_CONSTRUCTOR,
CompileTimeErrorCode.NOT_INITIALIZED_NON_NULLABLE_VARIABLE,
@@ -293,6 +324,7 @@
CompileTimeErrorCode.OBJECT_CANNOT_EXTEND_ANOTHER_CLASS,
CompileTimeErrorCode.ON_REPEATED,
CompileTimeErrorCode.OPTIONAL_PARAMETER_IN_OPERATOR,
+ CompileTimeErrorCode.PART_OF_DIFFERENT_LIBRARY,
CompileTimeErrorCode.PART_OF_NON_PART,
CompileTimeErrorCode.PART_OF_UNNAMED_LIBRARY,
CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER,
@@ -312,6 +344,8 @@
CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR,
CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_NON_GENERATIVE_CONSTRUCTOR,
CompileTimeErrorCode.REDIRECT_TO_ABSTRACT_CLASS_CONSTRUCTOR,
+ CompileTimeErrorCode.REDIRECT_TO_INVALID_FUNCTION_TYPE,
+ CompileTimeErrorCode.REDIRECT_TO_INVALID_RETURN_TYPE,
CompileTimeErrorCode.REDIRECT_TO_MISSING_CONSTRUCTOR,
CompileTimeErrorCode.REDIRECT_TO_NON_CLASS,
CompileTimeErrorCode.REDIRECT_TO_NON_CONST_CONSTRUCTOR,
@@ -319,32 +353,44 @@
CompileTimeErrorCode.RETHROW_OUTSIDE_CATCH,
CompileTimeErrorCode.RETURN_IN_GENERATIVE_CONSTRUCTOR,
CompileTimeErrorCode.RETURN_IN_GENERATOR,
+ CompileTimeErrorCode.RETURN_WITHOUT_VALUE,
CompileTimeErrorCode.SET_ELEMENT_FROM_DEFERRED_LIBRARY,
+ CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE,
CompileTimeErrorCode.SHARED_DEFERRED_PREFIX,
CompileTimeErrorCode.SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY,
+ CompileTimeErrorCode.STATIC_ACCESS_TO_INSTANCE_MEMBER,
CompileTimeErrorCode.SUPER_IN_EXTENSION,
CompileTimeErrorCode.SUPER_IN_INVALID_CONTEXT,
CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR,
CompileTimeErrorCode.SUPER_INITIALIZER_IN_OBJECT,
CompileTimeErrorCode.SWITCH_CASE_COMPLETES_NORMALLY,
+ CompileTimeErrorCode.SWITCH_EXPRESSION_NOT_ASSIGNABLE,
CompileTimeErrorCode.THROW_OF_INVALID_TYPE,
+ CompileTimeErrorCode.TOP_LEVEL_CYCLE,
CompileTimeErrorCode.TYPE_ALIAS_CANNOT_REFERENCE_ITSELF,
+ CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS,
CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS,
- // ignore: deprecated_member_use_from_same_package
- CompileTimeErrorCode.TYPE_PARAMETER_ON_CONSTRUCTOR,
+ CompileTimeErrorCode.TYPE_PARAMETER_REFERENCED_BY_STATIC,
+ CompileTimeErrorCode.TYPE_TEST_WITH_NON_TYPE,
+ CompileTimeErrorCode.TYPE_TEST_WITH_UNDEFINED_NAME,
+ CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE,
CompileTimeErrorCode.UNDEFINED_ANNOTATION,
CompileTimeErrorCode.UNDEFINED_CLASS,
+ CompileTimeErrorCode.UNDEFINED_CLASS_BOOLEAN,
CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER,
CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT,
CompileTimeErrorCode.UNDEFINED_EXTENSION_GETTER,
CompileTimeErrorCode.UNDEFINED_EXTENSION_METHOD,
CompileTimeErrorCode.UNDEFINED_EXTENSION_OPERATOR,
CompileTimeErrorCode.UNDEFINED_EXTENSION_SETTER,
+ CompileTimeErrorCode.UNDEFINED_IDENTIFIER,
+ CompileTimeErrorCode.UNDEFINED_IDENTIFIER_AWAIT,
CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER,
CompileTimeErrorCode.UNQUALIFIED_REFERENCE_TO_STATIC_MEMBER_OF_EXTENDED_TYPE,
CompileTimeErrorCode.URI_DOES_NOT_EXIST,
CompileTimeErrorCode.URI_HAS_NOT_BEEN_GENERATED,
CompileTimeErrorCode.URI_WITH_INTERPOLATION,
+ CompileTimeErrorCode.USE_OF_VOID_RESULT,
CompileTimeErrorCode.WRONG_EXPLICIT_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE,
CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR,
CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS,
@@ -417,8 +463,6 @@
HintCode.INVALID_OVERRIDE_OF_NON_VIRTUAL_MEMBER,
HintCode.INVALID_REQUIRED_NAMED_PARAM,
HintCode.INVALID_REQUIRED_OPTIONAL_POSITIONAL_PARAM,
- // ignore: deprecated_member_use_from_same_package
- HintCode.INVALID_REQUIRED_PARAM,
HintCode.INVALID_REQUIRED_POSITIONAL_PARAM,
HintCode.INVALID_SEALED_ANNOTATION,
HintCode.INVALID_USE_OF_PROTECTED_MEMBER,
@@ -719,8 +763,6 @@
StaticTypeWarningCode.NON_BOOL_NEGATION_EXPRESSION,
StaticTypeWarningCode.NON_BOOL_OPERAND,
StaticTypeWarningCode.NON_TYPE_AS_TYPE_ARGUMENT,
- // ignore: deprecated_member_use_from_same_package
- StaticTypeWarningCode.RETURN_OF_INVALID_TYPE,
StaticTypeWarningCode.RETURN_OF_INVALID_TYPE_FROM_CLOSURE,
StaticTypeWarningCode.RETURN_OF_INVALID_TYPE_FROM_CONSTRUCTOR,
StaticTypeWarningCode.RETURN_OF_INVALID_TYPE_FROM_FUNCTION,
@@ -742,91 +784,13 @@
StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR,
StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_METHOD,
StaticTypeWarningCode.YIELD_OF_INVALID_TYPE,
- StaticWarningCode.AMBIGUOUS_IMPORT,
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
- StaticWarningCode.ASSIGNMENT_TO_CONST,
- StaticWarningCode.ASSIGNMENT_TO_FINAL,
- StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL,
- StaticWarningCode.ASSIGNMENT_TO_FINAL_NO_SETTER,
- StaticWarningCode.ASSIGNMENT_TO_FUNCTION,
- StaticWarningCode.ASSIGNMENT_TO_METHOD,
- StaticWarningCode.ASSIGNMENT_TO_TYPE,
- StaticWarningCode.CASE_BLOCK_NOT_TERMINATED,
- StaticWarningCode.CAST_TO_NON_TYPE,
- StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER,
- // ignore: deprecated_member_use_from_same_package
- StaticWarningCode.CONST_WITH_ABSTRACT_CLASS,
StaticWarningCode.DEAD_NULL_AWARE_EXPRESSION,
- // ignore: deprecated_member_use_from_same_package
- StaticWarningCode.EXTRA_POSITIONAL_ARGUMENTS,
- // ignore: deprecated_member_use_from_same_package
- StaticWarningCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED,
- StaticWarningCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION,
- StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE,
- StaticWarningCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE,
- StaticWarningCode.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR,
- StaticWarningCode.FINAL_NOT_INITIALIZED,
- StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1,
- StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2,
- StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS,
- StaticWarningCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES,
- StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES,
- // ignore: deprecated_member_use_from_same_package
- StaticWarningCode.IMPORT_OF_NON_LIBRARY,
- StaticWarningCode.INSTANTIATE_ABSTRACT_CLASS,
StaticWarningCode.INVALID_NULL_AWARE_OPERATOR,
StaticWarningCode.INVALID_NULL_AWARE_OPERATOR_AFTER_SHORT_CIRCUIT,
StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED,
StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL,
- StaticWarningCode.INVALID_USE_OF_NULL_VALUE,
- StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,
- StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE,
- StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE,
StaticWarningCode.MISSING_ENUM_CONSTANT_IN_SWITCH,
- // ignore: deprecated_member_use_from_same_package
- StaticWarningCode.MIXED_RETURN_TYPES,
- // ignore: deprecated_member_use_from_same_package
- StaticWarningCode.NEW_WITH_ABSTRACT_CLASS,
- StaticWarningCode.NEW_WITH_NON_TYPE,
- StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR,
- StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT,
- StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS,
- StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR,
- StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
- StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE,
- StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO,
- StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE,
- StaticWarningCode.NON_VOID_RETURN_FOR_OPERATOR,
- StaticWarningCode.NON_VOID_RETURN_FOR_SETTER,
- StaticWarningCode.NOT_A_TYPE,
- // ignore: deprecated_member_use_from_same_package
- StaticWarningCode.NOT_ENOUGH_REQUIRED_ARGUMENTS,
- StaticWarningCode.PART_OF_DIFFERENT_LIBRARY,
- StaticWarningCode.REDIRECT_TO_INVALID_FUNCTION_TYPE,
- StaticWarningCode.REDIRECT_TO_INVALID_RETURN_TYPE,
- // ignore: deprecated_member_use_from_same_package
- StaticWarningCode.REDIRECT_TO_MISSING_CONSTRUCTOR,
- // ignore: deprecated_member_use_from_same_package
- StaticWarningCode.REDIRECT_TO_NON_CLASS,
- StaticWarningCode.RETURN_WITHOUT_VALUE,
- StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE,
- StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER,
- StaticWarningCode.SWITCH_EXPRESSION_NOT_ASSIGNABLE,
- StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS,
- StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC,
- StaticWarningCode.TYPE_TEST_WITH_NON_TYPE,
- StaticWarningCode.TYPE_TEST_WITH_UNDEFINED_NAME,
- StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE,
- // ignore: deprecated_member_use_from_same_package
- StaticWarningCode.UNDEFINED_CLASS,
- StaticWarningCode.UNDEFINED_CLASS_BOOLEAN,
- StaticWarningCode.UNDEFINED_IDENTIFIER,
- StaticWarningCode.UNDEFINED_IDENTIFIER_AWAIT,
- // ignore: deprecated_member_use_from_same_package
- StaticWarningCode.UNDEFINED_NAMED_PARAMETER,
StaticWarningCode.UNNECESSARY_NON_NULL_ASSERTION,
- StaticWarningCode.USE_OF_VOID_RESULT,
- StrongModeCode.COULD_NOT_INFER,
StrongModeCode.IMPLICIT_DYNAMIC_FIELD,
StrongModeCode.IMPLICIT_DYNAMIC_FUNCTION,
StrongModeCode.IMPLICIT_DYNAMIC_INVOKE,
@@ -837,9 +801,6 @@
StrongModeCode.IMPLICIT_DYNAMIC_RETURN,
StrongModeCode.IMPLICIT_DYNAMIC_TYPE,
StrongModeCode.IMPLICIT_DYNAMIC_VARIABLE,
- StrongModeCode.INVALID_PARAMETER_DECLARATION,
- StrongModeCode.INVALID_SUPER_INVOCATION,
- StrongModeCode.TOP_LEVEL_CYCLE,
StrongModeCode.TOP_LEVEL_FUNCTION_LITERAL_BLOCK,
StrongModeCode.TOP_LEVEL_IDENTIFIER_NO_TYPE,
StrongModeCode.TOP_LEVEL_INSTANCE_GETTER,
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 30b0a74..81e5485 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -91,7 +91,7 @@
/// TODO(scheglov) Clean up the list of implicitly analyzed files.
class AnalysisDriver implements AnalysisDriverGeneric {
/// The version of data format, should be incremented on every format change.
- static const int DATA_VERSION = 106;
+ static const int DATA_VERSION = 108;
/// The length of the list returned by [_computeDeclaredVariablesSignature].
static const int _declaredVariablesSignatureLength = 4;
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index 8e31e2a..b60196a 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -650,7 +650,7 @@
[name]);
} else if (libraryNameNode.name != name) {
libraryErrorReporter.reportErrorForNode(
- StaticWarningCode.PART_OF_DIFFERENT_LIBRARY,
+ CompileTimeErrorCode.PART_OF_DIFFERENT_LIBRARY,
partUri,
[libraryNameNode.name, name]);
}
@@ -658,7 +658,7 @@
Source source = nameOrSource.source;
if (source != _library.source) {
libraryErrorReporter.reportErrorForNode(
- StaticWarningCode.PART_OF_DIFFERENT_LIBRARY,
+ CompileTimeErrorCode.PART_OF_DIFFERENT_LIBRARY,
partUri,
[_library.uriStr, source.uri]);
}
diff --git a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
index 881e523..db95be9 100644
--- a/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
+++ b/pkg/analyzer/lib/src/dart/constant/constant_verifier.dart
@@ -795,7 +795,7 @@
bool _validateListExpression(Expression expression, DartObjectImpl value) {
if (!verifier._evaluationEngine.runtimeTypeMatch(value, listElementType)) {
verifier._errorReporter.reportErrorForNode(
- StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,
+ CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE,
expression,
[value.type, listElementType],
);
@@ -872,7 +872,7 @@
if (!verifier._evaluationEngine.runtimeTypeMatch(keyValue, mapKeyType)) {
verifier._errorReporter.reportErrorForNode(
- StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE,
+ CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE,
keyExpression,
[keyType, mapKeyType],
);
@@ -902,7 +902,7 @@
if (!verifier._evaluationEngine
.runtimeTypeMatch(valueValue, mapValueType)) {
verifier._errorReporter.reportErrorForNode(
- StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE,
+ CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE,
valueExpression,
[valueValue.type, mapValueType],
);
@@ -950,7 +950,7 @@
bool _validateSetExpression(Expression expression, DartObjectImpl value) {
if (!verifier._evaluationEngine.runtimeTypeMatch(value, setElementType)) {
verifier._errorReporter.reportErrorForNode(
- StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE,
+ CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE,
expression,
[value.type, setElementType],
);
diff --git a/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart b/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
index 0cd3aa6..29ca0cc 100644
--- a/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
+++ b/pkg/analyzer/lib/src/dart/element/generic_inferrer.dart
@@ -17,7 +17,8 @@
import 'package:analyzer/src/dart/element/type_demotion.dart';
import 'package:analyzer/src/dart/element/type_schema.dart';
import 'package:analyzer/src/dart/element/type_system.dart';
-import 'package:analyzer/src/error/codes.dart' show HintCode, StrongModeCode;
+import 'package:analyzer/src/error/codes.dart'
+ show CompileTimeErrorCode, HintCode;
import 'package:meta/meta.dart';
/// Tracks upper and lower type bounds for a set of type parameters.
@@ -187,7 +188,7 @@
if (!success) {
if (failAtError) return null;
errorReporter?.reportErrorForNode(
- StrongModeCode.COULD_NOT_INFER,
+ CompileTimeErrorCode.COULD_NOT_INFER,
errorNode,
[typeParam.name, _formatError(typeParam, inferred, constraints)]);
@@ -201,8 +202,8 @@
if (failAtError) return null;
var typeFormals = (inferred as FunctionType).typeFormals;
var typeFormalsStr = typeFormals.map(_elementStr).join(', ');
- errorReporter
- ?.reportErrorForNode(StrongModeCode.COULD_NOT_INFER, errorNode, [
+ errorReporter?.reportErrorForNode(
+ CompileTimeErrorCode.COULD_NOT_INFER, errorNode, [
typeParam.name,
' Inferred candidate type ${_typeStr(inferred)} has type parameters'
' [$typeFormalsStr], but a function with'
@@ -248,8 +249,8 @@
var typeParamBound = Substitution.fromPairs(typeFormals, inferredTypes)
.substituteType(typeParam.bound ?? typeProvider.objectType);
// TODO(jmesserly): improve this error message.
- errorReporter
- ?.reportErrorForNode(StrongModeCode.COULD_NOT_INFER, errorNode, [
+ errorReporter?.reportErrorForNode(
+ CompileTimeErrorCode.COULD_NOT_INFER, errorNode, [
typeParam.name,
"\nRecursive bound cannot be instantiated: '$typeParamBound'."
"\nConsider passing explicit type argument(s) "
diff --git a/pkg/analyzer/lib/src/dart/element/type.dart b/pkg/analyzer/lib/src/dart/element/type.dart
index 3d6e3df..4eea090 100644
--- a/pkg/analyzer/lib/src/dart/element/type.dart
+++ b/pkg/analyzer/lib/src/dart/element/type.dart
@@ -719,7 +719,9 @@
@override
List<InterfaceType> get allSupertypes {
var substitution = Substitution.fromInterfaceType(this);
- return element.allSupertypes.map(substitution.substituteType).toList();
+ return element.allSupertypes
+ .map((t) => substitution.substituteType(t) as InterfaceType)
+ .toList();
}
@override
diff --git a/pkg/analyzer/lib/src/dart/element/type_provider.dart b/pkg/analyzer/lib/src/dart/element/type_provider.dart
index 1180bc1..04e4051 100644
--- a/pkg/analyzer/lib/src/dart/element/type_provider.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_provider.dart
@@ -96,9 +96,6 @@
InterfaceTypeImpl _nullStar;
- InterfaceType _iterableForSetMapDisambiguation;
- InterfaceType _mapForSetMapDisambiguation;
-
Set<ClassElement> _nonSubtypableClasses;
/// Initialize a newly created type provider to provide the types defined in
@@ -258,25 +255,6 @@
return _iterableElement ??= _getClassElement(_coreLibrary, 'Iterable');
}
- /// Return the type that should be used during disambiguation between `Set`
- /// and `Map` literals. If NNBD enabled, use `Iterable<Object?, Object?>`,
- /// otherwise use `Iterable<Object*, Object*>*`.
- InterfaceType get iterableForSetMapDisambiguation {
- if (_iterableForSetMapDisambiguation == null) {
- var objectType = objectElement.instantiate(
- typeArguments: const [],
- nullabilitySuffix: _questionOrStarSuffix,
- );
- _iterableForSetMapDisambiguation = iterableElement.instantiate(
- typeArguments: [
- objectType,
- ],
- nullabilitySuffix: _questionOrStarSuffix,
- );
- }
- return _iterableForSetMapDisambiguation;
- }
-
@override
InterfaceType get iterableObjectType {
_iterableObjectType ??= InterfaceTypeImpl(
@@ -309,26 +287,6 @@
return _mapElement ??= _getClassElement(_coreLibrary, 'Map');
}
- /// Return the type that should be used during disambiguation between `Set`
- /// and `Map` literals. If NNBD enabled, use `Map<Object?, Object?>`,
- /// otherwise use `Map<Object*, Object*>*`.
- InterfaceType get mapForSetMapDisambiguation {
- if (_mapForSetMapDisambiguation == null) {
- var objectType = objectElement.instantiate(
- typeArguments: const [],
- nullabilitySuffix: _questionOrStarSuffix,
- );
- _mapForSetMapDisambiguation = mapElement.instantiate(
- typeArguments: [
- objectType,
- objectType,
- ],
- nullabilitySuffix: _questionOrStarSuffix,
- );
- }
- return _mapForSetMapDisambiguation;
- }
-
@override
InterfaceType get mapObjectObjectType {
_mapObjectObjectType ??= InterfaceTypeImpl(
@@ -491,12 +449,6 @@
}
}
- NullabilitySuffix get _questionOrStarSuffix {
- return isNonNullableByDefault
- ? NullabilitySuffix.question
- : NullabilitySuffix.star;
- }
-
@override
InterfaceType futureOrType2(DartType valueType) {
return futureOrElement.instantiate(
diff --git a/pkg/analyzer/lib/src/dart/element/type_system.dart b/pkg/analyzer/lib/src/dart/element/type_system.dart
index e9a450b..01a252f 100644
--- a/pkg/analyzer/lib/src/dart/element/type_system.dart
+++ b/pkg/analyzer/lib/src/dart/element/type_system.dart
@@ -90,6 +90,19 @@
return type;
}
+ DartType futureOrBase(DartType type) {
+ // If `T` is `FutureOr<S>` for some `S`,
+ // then `futureOrBase(T)` = `futureOrBase(S)`
+ if (type is InterfaceType && type.isDartAsyncFutureOr) {
+ return futureOrBase(
+ type.typeArguments[0],
+ );
+ }
+
+ // Otherwise `futureOrBase(T)` = `T`.
+ return type;
+ }
+
List<InterfaceType> gatherMixinSupertypeConstraintsForInference(
ClassElement mixinElement) {
List<InterfaceType> candidates;
@@ -259,30 +272,6 @@
return inferredTypes;
}
- /// Searches the superinterfaces of [type] for implementations of
- /// [genericType] and returns the most specific type argument used for that
- /// generic type.
- ///
- /// For a more general/robust solution, use [InterfaceTypeImpl.asInstanceOf].
- ///
- /// For example, given [type] `List<int>` and [genericType] `Iterable<T>`,
- /// returns [int].
- ///
- /// Returns `null` if [type] does not implement [genericType].
- DartType mostSpecificTypeArgument(DartType type, DartType genericType) {
- if (type is! InterfaceType) return null;
- if (genericType is! InterfaceType) return null;
-
- var asInstanceOf =
- type.asInstanceOf((genericType as InterfaceType).element);
-
- if (asInstanceOf != null) {
- return asInstanceOf.typeArguments[0];
- }
-
- return null;
- }
-
/// Returns a non-nullable version of [type]. This is equivalent to the
/// operation `NonNull` defined in the spec.
@override
diff --git a/pkg/analyzer/lib/src/dart/error/hint_codes.dart b/pkg/analyzer/lib/src/dart/error/hint_codes.dart
index 15b3b1e..ddd22b4 100644
--- a/pkg/analyzer/lib/src/dart/error/hint_codes.dart
+++ b/pkg/analyzer/lib/src/dart/error/hint_codes.dart
@@ -204,6 +204,13 @@
hasPublishedDocs: true);
/**
+ * `Function` should not be extended anymore.
+ */
+ static const HintCode DEPRECATED_EXTENDS_FUNCTION = HintCode(
+ 'DEPRECATED_EXTENDS_FUNCTION', "Extending 'Function' is deprecated.",
+ correction: "Try removing 'Function' from the 'extends' clause.");
+
+ /**
* Users should not create a class named `Function` anymore.
*/
static const HintCode DEPRECATED_FUNCTION_CLASS_DECLARATION = HintCode(
@@ -212,13 +219,6 @@
correction: "Try renaming the class.");
/**
- * `Function` should not be extended anymore.
- */
- static const HintCode DEPRECATED_EXTENDS_FUNCTION = HintCode(
- 'DEPRECATED_EXTENDS_FUNCTION', "Extending 'Function' is deprecated.",
- correction: "Try removing 'Function' from the 'extends' clause.");
-
- /**
* Parameters:
* 0: the name of the member
*/
@@ -323,6 +323,14 @@
correction: "Try re-writing the expression to use the '~/' operator.");
/**
+ * Duplicate hidden names.
+ */
+ static const HintCode DUPLICATE_HIDDEN_NAME =
+ HintCode('DUPLICATE_HIDDEN_NAME', "Duplicate hidden name.",
+ correction: "Try removing the repeated name from the list of hidden "
+ "members.");
+
+ /**
* Duplicate imports.
*
* No parameters.
@@ -359,14 +367,6 @@
hasPublishedDocs: true);
/**
- * Duplicate hidden names.
- */
- static const HintCode DUPLICATE_HIDDEN_NAME =
- HintCode('DUPLICATE_HIDDEN_NAME', "Duplicate hidden name.",
- correction: "Try removing the repeated name from the list of hidden "
- "members.");
-
- /**
* Duplicate shown names.
*/
static const HintCode DUPLICATE_SHOWN_NAME =
@@ -595,6 +595,157 @@
'INVALID_IMMUTABLE_ANNOTATION',
"Only classes can be annotated as being immutable.");
+ /// Invalid Dart language version comments don't follow the specification [1].
+ /// If a comment begins with "@dart" or "dart" (letters in any case),
+ /// followed by optional whitespace, followed by optional non-alphanumeric,
+ /// non-whitespace characters, followed by optional whitespace, followed by
+ /// an optional alphabetical character, followed by a digit, then the
+ /// comment is considered to be an attempt at a language version override
+ /// comment. If this attempted language version override comment is not a
+ /// valid language version override comment, it is reported.
+ ///
+ /// [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+ static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_AT_SIGN =
+ HintCodeWithUniqueName(
+ 'INVALID_LANGUAGE_VERSION_OVERRIDE',
+ 'HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_AT_SIGN',
+ "The Dart language version override number must begin with '@dart'",
+ correction: "Specify a Dart language version override with a comment "
+ "like '// @dart = 2.0'.");
+
+ /// Invalid Dart language version comments don't follow the specification [1].
+ /// If a comment begins with "@dart" or "dart" (letters in any case),
+ /// followed by optional whitespace, followed by optional non-alphanumeric,
+ /// non-whitespace characters, followed by optional whitespace, followed by
+ /// an optional alphabetical character, followed by a digit, then the
+ /// comment is considered to be an attempt at a language version override
+ /// comment. If this attempted language version override comment is not a
+ /// valid language version override comment, it is reported.
+ ///
+ /// [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+ static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_EQUALS =
+ HintCodeWithUniqueName(
+ 'INVALID_LANGUAGE_VERSION_OVERRIDE',
+ 'HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_EQUALS',
+ "The Dart language version override comment must be specified with "
+ "an '=' character",
+ correction: "Specify a Dart language version override with a comment "
+ "like '// @dart = 2.0'.");
+
+ static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_GREATER =
+ HintCodeWithUniqueName(
+ 'INVALID_LANGUAGE_VERSION_OVERRIDE',
+ 'INVALID_LANGUAGE_VERSION_OVERRIDE_GREATER',
+ "The language version override can't specify a version greater than the "
+ "latest known language version: {0}.{1}",
+ correction: "Try removing the language version override.",
+ );
+
+ static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_LOCATION =
+ HintCodeWithUniqueName(
+ 'INVALID_LANGUAGE_VERSION_OVERRIDE',
+ 'INVALID_LANGUAGE_VERSION_OVERRIDE_LOCATION',
+ "The language version override must be before any declaration or "
+ "directive.",
+ correction:
+ "Try moving the language version override to the top of the file.",
+ );
+
+ /// Invalid Dart language version comments don't follow the specification [1].
+ /// If a comment begins with "@dart" or "dart" (letters in any case),
+ /// followed by optional whitespace, followed by optional non-alphanumeric,
+ /// non-whitespace characters, followed by optional whitespace, followed by
+ /// an optional alphabetical character, followed by a digit, then the
+ /// comment is considered to be an attempt at a language version override
+ /// comment. If this attempted language version override comment is not a
+ /// valid language version override comment, it is reported.
+ ///
+ /// [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+ static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_LOWER_CASE =
+ HintCodeWithUniqueName(
+ 'INVALID_LANGUAGE_VERSION_OVERRIDE',
+ 'HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_LOWER_CASE',
+ "The Dart language version override comment must be specified with "
+ "the word 'dart' in all lower case",
+ correction: "Specify a Dart language version override with a comment "
+ "like '// @dart = 2.0'.");
+
+ /// Invalid Dart language version comments don't follow the specification [1].
+ /// If a comment begins with "@dart" or "dart" (letters in any case),
+ /// followed by optional whitespace, followed by optional non-alphanumeric,
+ /// non-whitespace characters, followed by optional whitespace, followed by
+ /// an optional alphabetical character, followed by a digit, then the
+ /// comment is considered to be an attempt at a language version override
+ /// comment. If this attempted language version override comment is not a
+ /// valid language version override comment, it is reported.
+ ///
+ /// [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+ static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_NUMBER =
+ HintCodeWithUniqueName(
+ 'INVALID_LANGUAGE_VERSION_OVERRIDE',
+ 'HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_NUMBER',
+ "The Dart language version override comment must be specified with a "
+ "version number, like '2.0', after the '=' character.",
+ correction: "Specify a Dart language version override with a comment "
+ "like '// @dart = 2.0'.");
+
+ /// Invalid Dart language version comments don't follow the specification [1].
+ /// If a comment begins with "@dart" or "dart" (letters in any case),
+ /// followed by optional whitespace, followed by optional non-alphanumeric,
+ /// non-whitespace characters, followed by optional whitespace, followed by
+ /// an optional alphabetical character, followed by a digit, then the
+ /// comment is considered to be an attempt at a language version override
+ /// comment. If this attempted language version override comment is not a
+ /// valid language version override comment, it is reported.
+ ///
+ /// [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+ static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_PREFIX =
+ HintCodeWithUniqueName(
+ 'INVALID_LANGUAGE_VERSION_OVERRIDE',
+ 'HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_PREFIX',
+ "The Dart language version override number can't be prefixed with "
+ "a letter",
+ correction: "Specify a Dart language version override with a comment "
+ "like '// @dart = 2.0'.");
+
+ /// Invalid Dart language version comments don't follow the specification [1].
+ /// If a comment begins with "@dart" or "dart" (letters in any case),
+ /// followed by optional whitespace, followed by optional non-alphanumeric,
+ /// non-whitespace characters, followed by optional whitespace, followed by
+ /// an optional alphabetical character, followed by a digit, then the
+ /// comment is considered to be an attempt at a language version override
+ /// comment. If this attempted language version override comment is not a
+ /// valid language version override comment, it is reported.
+ ///
+ /// [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+ static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_TRAILING_CHARACTERS =
+ HintCodeWithUniqueName(
+ 'INVALID_LANGUAGE_VERSION_OVERRIDE',
+ 'HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_TRAILING_CHARACTERS',
+ "The Dart language version override comment can't be followed by "
+ "any non-whitespace characters",
+ correction: "Specify a Dart language version override with a comment "
+ "like '// @dart = 2.0'.");
+
+ /// Invalid Dart language version comments don't follow the specification [1].
+ /// If a comment begins with "@dart" or "dart" (letters in any case),
+ /// followed by optional whitespace, followed by optional non-alphanumeric,
+ /// non-whitespace characters, followed by optional whitespace, followed by
+ /// an optional alphabetical character, followed by a digit, then the
+ /// comment is considered to be an attempt at a language version override
+ /// comment. If this attempted language version override comment is not a
+ /// valid language version override comment, it is reported.
+ ///
+ /// [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
+ static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_TWO_SLASHES =
+ HintCodeWithUniqueName(
+ 'INVALID_LANGUAGE_VERSION_OVERRIDE',
+ 'HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_TWO_SLASHES',
+ 'The Dart language version override comment must be specified with '
+ 'exactly two slashes.',
+ correction: "Specify a Dart language version override with a comment "
+ "like '// @dart = 2.0'.");
+
/**
* No parameters.
*/
@@ -790,157 +941,6 @@
'INVALID_USE_OF_VISIBLE_FOR_TESTING_MEMBER',
"The member '{0}' can only be used within '{1}' or a test.");
- /// Invalid Dart language version comments don't follow the specification [1].
- /// If a comment begins with "@dart" or "dart" (letters in any case),
- /// followed by optional whitespace, followed by optional non-alphanumeric,
- /// non-whitespace characters, followed by optional whitespace, followed by
- /// an optional alphabetical character, followed by a digit, then the
- /// comment is considered to be an attempt at a language version override
- /// comment. If this attempted language version override comment is not a
- /// valid language version override comment, it is reported.
- ///
- /// [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
- static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_AT_SIGN =
- HintCodeWithUniqueName(
- 'INVALID_LANGUAGE_VERSION_OVERRIDE',
- 'HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_AT_SIGN',
- "The Dart language version override number must begin with '@dart'",
- correction: "Specify a Dart language version override with a comment "
- "like '// @dart = 2.0'.");
-
- /// Invalid Dart language version comments don't follow the specification [1].
- /// If a comment begins with "@dart" or "dart" (letters in any case),
- /// followed by optional whitespace, followed by optional non-alphanumeric,
- /// non-whitespace characters, followed by optional whitespace, followed by
- /// an optional alphabetical character, followed by a digit, then the
- /// comment is considered to be an attempt at a language version override
- /// comment. If this attempted language version override comment is not a
- /// valid language version override comment, it is reported.
- ///
- /// [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
- static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_EQUALS =
- HintCodeWithUniqueName(
- 'INVALID_LANGUAGE_VERSION_OVERRIDE',
- 'HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_EQUALS',
- "The Dart language version override comment must be specified with "
- "an '=' character",
- correction: "Specify a Dart language version override with a comment "
- "like '// @dart = 2.0'.");
-
- static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_GREATER =
- HintCodeWithUniqueName(
- 'INVALID_LANGUAGE_VERSION_OVERRIDE',
- 'INVALID_LANGUAGE_VERSION_OVERRIDE_GREATER',
- "The language version override can't specify a version greater than the "
- "latest known language version: {0}.{1}",
- correction: "Try removing the language version override.",
- );
-
- static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_LOCATION =
- HintCodeWithUniqueName(
- 'INVALID_LANGUAGE_VERSION_OVERRIDE',
- 'INVALID_LANGUAGE_VERSION_OVERRIDE_LOCATION',
- "The language version override must be before any declaration or "
- "directive.",
- correction:
- "Try moving the language version override to the top of the file.",
- );
-
- /// Invalid Dart language version comments don't follow the specification [1].
- /// If a comment begins with "@dart" or "dart" (letters in any case),
- /// followed by optional whitespace, followed by optional non-alphanumeric,
- /// non-whitespace characters, followed by optional whitespace, followed by
- /// an optional alphabetical character, followed by a digit, then the
- /// comment is considered to be an attempt at a language version override
- /// comment. If this attempted language version override comment is not a
- /// valid language version override comment, it is reported.
- ///
- /// [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
- static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_LOWER_CASE =
- HintCodeWithUniqueName(
- 'INVALID_LANGUAGE_VERSION_OVERRIDE',
- 'HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_LOWER_CASE',
- "The Dart language version override comment must be specified with "
- "the word 'dart' in all lower case",
- correction: "Specify a Dart language version override with a comment "
- "like '// @dart = 2.0'.");
-
- /// Invalid Dart language version comments don't follow the specification [1].
- /// If a comment begins with "@dart" or "dart" (letters in any case),
- /// followed by optional whitespace, followed by optional non-alphanumeric,
- /// non-whitespace characters, followed by optional whitespace, followed by
- /// an optional alphabetical character, followed by a digit, then the
- /// comment is considered to be an attempt at a language version override
- /// comment. If this attempted language version override comment is not a
- /// valid language version override comment, it is reported.
- ///
- /// [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
- static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_NUMBER =
- HintCodeWithUniqueName(
- 'INVALID_LANGUAGE_VERSION_OVERRIDE',
- 'HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_NUMBER',
- "The Dart language version override comment must be specified with a "
- "version number, like '2.0', after the '=' character.",
- correction: "Specify a Dart language version override with a comment "
- "like '// @dart = 2.0'.");
-
- /// Invalid Dart language version comments don't follow the specification [1].
- /// If a comment begins with "@dart" or "dart" (letters in any case),
- /// followed by optional whitespace, followed by optional non-alphanumeric,
- /// non-whitespace characters, followed by optional whitespace, followed by
- /// an optional alphabetical character, followed by a digit, then the
- /// comment is considered to be an attempt at a language version override
- /// comment. If this attempted language version override comment is not a
- /// valid language version override comment, it is reported.
- ///
- /// [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
- static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_PREFIX =
- HintCodeWithUniqueName(
- 'INVALID_LANGUAGE_VERSION_OVERRIDE',
- 'HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_PREFIX',
- "The Dart language version override number can't be prefixed with "
- "a letter",
- correction: "Specify a Dart language version override with a comment "
- "like '// @dart = 2.0'.");
-
- /// Invalid Dart language version comments don't follow the specification [1].
- /// If a comment begins with "@dart" or "dart" (letters in any case),
- /// followed by optional whitespace, followed by optional non-alphanumeric,
- /// non-whitespace characters, followed by optional whitespace, followed by
- /// an optional alphabetical character, followed by a digit, then the
- /// comment is considered to be an attempt at a language version override
- /// comment. If this attempted language version override comment is not a
- /// valid language version override comment, it is reported.
- ///
- /// [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
- static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_TRAILING_CHARACTERS =
- HintCodeWithUniqueName(
- 'INVALID_LANGUAGE_VERSION_OVERRIDE',
- 'HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_TRAILING_CHARACTERS',
- "The Dart language version override comment can't be followed by "
- "any non-whitespace characters",
- correction: "Specify a Dart language version override with a comment "
- "like '// @dart = 2.0'.");
-
- /// Invalid Dart language version comments don't follow the specification [1].
- /// If a comment begins with "@dart" or "dart" (letters in any case),
- /// followed by optional whitespace, followed by optional non-alphanumeric,
- /// non-whitespace characters, followed by optional whitespace, followed by
- /// an optional alphabetical character, followed by a digit, then the
- /// comment is considered to be an attempt at a language version override
- /// comment. If this attempted language version override comment is not a
- /// valid language version override comment, it is reported.
- ///
- /// [1] https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/feature-specification.md#individual-library-language-version-override
- static const HintCode INVALID_LANGUAGE_VERSION_OVERRIDE_TWO_SLASHES =
- HintCodeWithUniqueName(
- 'INVALID_LANGUAGE_VERSION_OVERRIDE',
- 'HintCode.INVALID_LANGUAGE_VERSION_OVERRIDE_TWO_SLASHES',
- 'The Dart language version override comment must be specified with '
- 'exactly two slashes.',
- correction: "Specify a Dart language version override with a comment "
- "like '// @dart = 2.0'.");
-
/**
* This hint is generated anywhere where a private declaration is annotated
* with `@visibleForTemplate` or `@visibleForTesting`.
@@ -1458,20 +1458,6 @@
correction: "Try implementing 'hashCode'.");
/**
- * A getter with the override annotation does not override an existing getter.
- *
- * No parameters.
- */
- static const HintCode OVERRIDE_ON_NON_OVERRIDING_GETTER =
- HintCodeWithUniqueName(
- 'OVERRIDE_ON_NON_OVERRIDING_MEMBER',
- 'HintCode.OVERRIDE_ON_NON_OVERRIDING_GETTER',
- "The getter doesn't override an inherited getter.",
- correction: "Try updating this class to match the superclass, or "
- "removing the override annotation.",
- hasPublishedDocs: true);
-
- /**
* A field with the override annotation does not override a getter or setter.
*
* No parameters.
@@ -1486,6 +1472,20 @@
hasPublishedDocs: true);
/**
+ * A getter with the override annotation does not override an existing getter.
+ *
+ * No parameters.
+ */
+ static const HintCode OVERRIDE_ON_NON_OVERRIDING_GETTER =
+ HintCodeWithUniqueName(
+ 'OVERRIDE_ON_NON_OVERRIDING_MEMBER',
+ 'HintCode.OVERRIDE_ON_NON_OVERRIDING_GETTER',
+ "The getter doesn't override an inherited getter.",
+ correction: "Try updating this class to match the superclass, or "
+ "removing the override annotation.",
+ hasPublishedDocs: true);
+
+ /**
* A method with the override annotation does not override an existing method.
*
* No parameters.
@@ -1583,61 +1583,6 @@
*/
// #### Description
//
- // The analyzer produces this diagnostic when either the class `Future` or
- // `Stream` is referenced in a library that doesn't import `dart:async` in
- // code that has an SDK constraint whose lower bound is less than 2.1.0. In
- // earlier versions, these classes weren't defined in `dart:core`, so the
- // import was necessary.
- //
- // #### Examples
- //
- // Here's an example of a pubspec that defines an SDK constraint with a lower
- // bound of less than 2.1.0:
- //
- // ```yaml
- // %uri="pubspec.yaml"
- // environment:
- // sdk: '>=2.0.0 <2.4.0'
- // ```
- //
- // In the package that has that pubspec, code like the following produces this
- // diagnostic:
- //
- // ```dart
- // void f([!Future!] f) {}
- // ```
- //
- // #### Common fixes
- //
- // If you don't need to support older versions of the SDK, then you can
- // increase the SDK constraint to allow the classes to be referenced:
- //
- // ```yaml
- // environment:
- // sdk: '>=2.1.0 <2.4.0'
- // ```
- //
- // If you need to support older versions of the SDK, then import the
- // `dart:async` library.
- //
- // ```dart
- // import 'dart:async';
- //
- // void f(Future f) {}
- // ```
- static const HintCode SDK_VERSION_ASYNC_EXPORTED_FROM_CORE = HintCode(
- 'SDK_VERSION_ASYNC_EXPORTED_FROM_CORE',
- "The class '{0}' wasn't exported from 'dart:core' until version 2.1, "
- "but this code is required to be able to run on earlier versions.",
- correction:
- "Try either importing 'dart:async' or updating the SDK constraints.",
- hasPublishedDocs: true);
-
- /**
- * No parameters.
- */
- // #### Description
- //
// The analyzer produces this diagnostic when an `as` expression inside a
// [constant context](#constant-context) is found in code that has an SDK
// constraint whose lower bound is less than 2.3.2. Using an `as` expression
@@ -1695,6 +1640,61 @@
*/
// #### Description
//
+ // The analyzer produces this diagnostic when either the class `Future` or
+ // `Stream` is referenced in a library that doesn't import `dart:async` in
+ // code that has an SDK constraint whose lower bound is less than 2.1.0. In
+ // earlier versions, these classes weren't defined in `dart:core`, so the
+ // import was necessary.
+ //
+ // #### Examples
+ //
+ // Here's an example of a pubspec that defines an SDK constraint with a lower
+ // bound of less than 2.1.0:
+ //
+ // ```yaml
+ // %uri="pubspec.yaml"
+ // environment:
+ // sdk: '>=2.0.0 <2.4.0'
+ // ```
+ //
+ // In the package that has that pubspec, code like the following produces this
+ // diagnostic:
+ //
+ // ```dart
+ // void f([!Future!] f) {}
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If you don't need to support older versions of the SDK, then you can
+ // increase the SDK constraint to allow the classes to be referenced:
+ //
+ // ```yaml
+ // environment:
+ // sdk: '>=2.1.0 <2.4.0'
+ // ```
+ //
+ // If you need to support older versions of the SDK, then import the
+ // `dart:async` library.
+ //
+ // ```dart
+ // import 'dart:async';
+ //
+ // void f(Future f) {}
+ // ```
+ static const HintCode SDK_VERSION_ASYNC_EXPORTED_FROM_CORE = HintCode(
+ 'SDK_VERSION_ASYNC_EXPORTED_FROM_CORE',
+ "The class '{0}' wasn't exported from 'dart:core' until version 2.1, "
+ "but this code is required to be able to run on earlier versions.",
+ correction:
+ "Try either importing 'dart:async' or updating the SDK constraints.",
+ hasPublishedDocs: true);
+
+ /**
+ * No parameters.
+ */
+ // #### Description
+ //
// The analyzer produces this diagnostic when any use of the `&`, `|`, or `^`
// operators on the class `bool` inside a
// [constant context](#constant-context) is found in code that has an SDK
@@ -1989,57 +1989,6 @@
/**
* No parameters.
*/
- // #### Description
- //
- // The analyzer produces this diagnostic when a set literal is found in code
- // that has an SDK constraint whose lower bound is less than 2.2.0. Set
- // literals weren't supported in earlier versions, so this code won't be able
- // to run against earlier versions of the SDK.
- //
- // #### Examples
- //
- // Here's an example of a pubspec that defines an SDK constraint with a lower
- // bound of less than 2.2.0:
- //
- // ```yaml
- // %uri="pubspec.yaml"
- // environment:
- // sdk: '>=2.1.0 <2.4.0'
- // ```
- //
- // In the package that has that pubspec, code like the following produces this
- // diagnostic:
- //
- // ```dart
- // var s = [!<int>{}!];
- // ```
- //
- // #### Common fixes
- //
- // If you don't need to support older versions of the SDK, then you can
- // increase the SDK constraint to allow the syntax to be used:
- //
- // ```yaml
- // environment:
- // sdk: '>=2.2.0 <2.4.0'
- // ```
- //
- // If you do need to support older versions of the SDK, then replace the set
- // literal with code that creates the set without the use of a literal:
- //
- // ```dart
- // var s = new Set<int>();
- // ```
- static const HintCode SDK_VERSION_SET_LITERAL = HintCode(
- 'SDK_VERSION_SET_LITERAL',
- "Set literals weren't supported until version 2.2, but this code is "
- "required to be able to run on earlier versions.",
- correction: "Try updating the SDK constraints.",
- hasPublishedDocs: true);
-
- /**
- * No parameters.
- */
/* // #### Description
//
// The analyzer produces this diagnostic when a reference to the class `Never`
@@ -2094,6 +2043,57 @@
*/
// #### Description
//
+ // The analyzer produces this diagnostic when a set literal is found in code
+ // that has an SDK constraint whose lower bound is less than 2.2.0. Set
+ // literals weren't supported in earlier versions, so this code won't be able
+ // to run against earlier versions of the SDK.
+ //
+ // #### Examples
+ //
+ // Here's an example of a pubspec that defines an SDK constraint with a lower
+ // bound of less than 2.2.0:
+ //
+ // ```yaml
+ // %uri="pubspec.yaml"
+ // environment:
+ // sdk: '>=2.1.0 <2.4.0'
+ // ```
+ //
+ // In the package that has that pubspec, code like the following produces this
+ // diagnostic:
+ //
+ // ```dart
+ // var s = [!<int>{}!];
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If you don't need to support older versions of the SDK, then you can
+ // increase the SDK constraint to allow the syntax to be used:
+ //
+ // ```yaml
+ // environment:
+ // sdk: '>=2.2.0 <2.4.0'
+ // ```
+ //
+ // If you do need to support older versions of the SDK, then replace the set
+ // literal with code that creates the set without the use of a literal:
+ //
+ // ```dart
+ // var s = new Set<int>();
+ // ```
+ static const HintCode SDK_VERSION_SET_LITERAL = HintCode(
+ 'SDK_VERSION_SET_LITERAL',
+ "Set literals weren't supported until version 2.2, but this code is "
+ "required to be able to run on earlier versions.",
+ correction: "Try updating the SDK constraints.",
+ hasPublishedDocs: true);
+
+ /**
+ * No parameters.
+ */
+ // #### Description
+ //
// The analyzer produces this diagnostic when a for, if, or spread element is
// found in code that has an SDK constraint whose lower bound is less than
// 2.3.0. Using a for, if, or spread element wasn't supported in earlier
diff --git a/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart b/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
index f4297a2..790541d 100644
--- a/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/micro/library_analyzer.dart
@@ -127,12 +127,16 @@
// Resolve URIs in directives to corresponding sources.
FeatureSet featureSet = units[_library].featureSet;
- units.forEach((file, unit) {
- _validateFeatureSet(unit, featureSet);
- _resolveUriBasedDirectives(file, unit);
+ performance.run('resolveUriDirectives', (performance) {
+ units.forEach((file, unit) {
+ _validateFeatureSet(unit, featureSet);
+ _resolveUriBasedDirectives(file, unit);
+ });
});
- _libraryElement = _elementFactory.libraryOfUri(_library.uriStr);
+ performance.run('libraryElement', (performance) {
+ _libraryElement = _elementFactory.libraryOfUri(_library.uriStr);
+ });
performance.run('resolveDirectives', (performance) {
_resolveDirectives(units, forCompletion);
@@ -628,7 +632,7 @@
[name]);
} else if (libraryNameNode.name != name) {
libraryErrorReporter.reportErrorForNode(
- StaticWarningCode.PART_OF_DIFFERENT_LIBRARY,
+ CompileTimeErrorCode.PART_OF_DIFFERENT_LIBRARY,
partUri,
[libraryNameNode.name, name]);
}
@@ -636,7 +640,7 @@
Source source = nameOrSource.source;
if (source != _library.source) {
libraryErrorReporter.reportErrorForNode(
- StaticWarningCode.PART_OF_DIFFERENT_LIBRARY,
+ CompileTimeErrorCode.PART_OF_DIFFERENT_LIBRARY,
partUri,
[_library.uriStr, source.uri]);
}
@@ -712,7 +716,7 @@
featureSet: unit.featureSet, flowAnalysisHelper: flowAnalysisHelper);
if (completionOffset != null) {
- var node = NodeLocator2(completionOffset).searchWithin(unit);
+ var node = NodeLocator(completionOffset).searchWithin(unit);
var enclosingExecutable = node?.thisOrAncestorMatching((e) {
return e.parent is ClassDeclaration || e.parent is CompilationUnit;
});
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 5ae37cd..165da43 100644
--- a/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/assignment_expression_resolver.dart
@@ -197,7 +197,7 @@
if (operatorType != TokenType.EQ) {
if (staticType != null && staticType.isVoid) {
_errorReporter.reportErrorForToken(
- StaticWarningCode.USE_OF_VOID_RESULT,
+ CompileTimeErrorCode.USE_OF_VOID_RESULT,
operator,
);
return;
diff --git a/pkg/analyzer/lib/src/dart/resolver/exit_detector.dart b/pkg/analyzer/lib/src/dart/resolver/exit_detector.dart
index f9c6f1c..4c10a69 100644
--- a/pkg/analyzer/lib/src/dart/resolver/exit_detector.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/exit_detector.dart
@@ -6,6 +6,7 @@
import 'package:analyzer/dart/ast/token.dart';
import 'package:analyzer/dart/ast/visitor.dart';
import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/src/dart/element/type.dart';
/// Instances of the class `ExitDetector` determine whether the visited AST node
/// is guaranteed to terminate by executing a `return` statement, `throw`
@@ -423,7 +424,7 @@
}
}
Element element = node.methodName.staticElement;
- if (element != null && element.hasAlwaysThrows) {
+ if (_elementExits(element)) {
return true;
}
return _nodeExits(node.argumentList);
@@ -660,4 +661,14 @@
static bool exits(AstNode node) {
return ExitDetector()._nodeExits(node);
}
+
+ static bool _elementExits(Element element) {
+ if (element is ExecutableElement) {
+ var declaration = element.declaration;
+ return declaration.hasAlwaysThrows ||
+ identical(declaration.returnType, NeverTypeImpl.instance);
+ }
+
+ return false;
+ }
}
diff --git a/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart
index a8a6d9e..5285ca7 100644
--- a/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/extension_member_resolver.dart
@@ -160,7 +160,7 @@
if (receiverType.isVoid) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.USE_OF_VOID_RESULT, receiverExpression);
+ CompileTimeErrorCode.USE_OF_VOID_RESULT, receiverExpression);
} else if (!_typeSystem.isAssignableTo2(receiverType, node.extendedType)) {
_errorReporter.reportErrorForNode(
CompileTimeErrorCode.EXTENSION_OVERRIDE_ARGUMENT_NOT_ASSIGNABLE,
diff --git a/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart b/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
index 29e89fe..cc18f5e 100644
--- a/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/invocation_inference_helper.dart
@@ -45,8 +45,7 @@
/// type that is being invoked.
DartType computeInvokeReturnType(DartType type) {
if (type is FunctionType) {
- // TODO(scheglov) https://github.com/dart-lang/sdk/issues/41065
- return type.returnType ?? DynamicTypeImpl.instance;
+ return type.returnType;
} else {
return DynamicTypeImpl.instance;
}
diff --git a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
index 0118d45..ceb24d4 100644
--- a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
@@ -228,7 +228,7 @@
ExecutableElement element, SimpleIdentifier nameNode) {
if (!element.isStatic) {
_resolver.errorReporter.reportErrorForNode(
- StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER,
+ CompileTimeErrorCode.STATIC_ACCESS_TO_INSTANCE_MEMBER,
nameNode,
[nameNode.name],
);
@@ -264,7 +264,7 @@
void _reportUseOfVoidType(MethodInvocation node, AstNode errorNode) {
_setDynamicResolution(node);
_resolver.errorReporter.reportErrorForNode(
- StaticWarningCode.USE_OF_VOID_RESULT,
+ CompileTimeErrorCode.USE_OF_VOID_RESULT,
errorNode,
);
}
diff --git a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
index 6ed6207..5674c42 100644
--- a/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/resolution_visitor.dart
@@ -109,7 +109,6 @@
libraryElement.typeSystem,
typeProvider,
isNonNullableByDefault,
- libraryElement,
errorReporter,
);
diff --git a/pkg/analyzer/lib/src/dart/resolver/scope.dart b/pkg/analyzer/lib/src/dart/resolver/scope.dart
index 78c625c..af28859 100644
--- a/pkg/analyzer/lib/src/dart/resolver/scope.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/scope.dart
@@ -14,13 +14,17 @@
/// The scope defined by a block.
class BlockScope {
- /// Return the elements that are declared directly in the given [block]. This
- /// does not include elements declared in nested blocks.
- static Iterable<Element> elementsInBlock(Block block) sync* {
- NodeList<Statement> statements = block.statements;
+ /// Return the elements that are declared directly in the given [statements].
+ /// This does not include elements declared in nested blocks.
+ static Iterable<Element> elementsInStatements(
+ List<Statement> statements,
+ ) sync* {
int statementCount = statements.length;
for (int i = 0; i < statementCount; i++) {
Statement statement = statements[i];
+ if (statement is LabeledStatement) {
+ statement = (statement as LabeledStatement).statement;
+ }
if (statement is VariableDeclarationStatement) {
NodeList<VariableDeclaration> variables = statement.variables.variables;
int variableCount = variables.length;
diff --git a/pkg/analyzer/lib/src/dart/resolver/type_name_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/type_name_resolver.dart
index 1c99b27..b6a88ef 100644
--- a/pkg/analyzer/lib/src/dart/resolver/type_name_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/type_name_resolver.dart
@@ -24,7 +24,6 @@
final TypeSystemImpl typeSystem;
final DartType dynamicType;
final bool isNonNullableByDefault;
- final LibraryElement definingLibrary; // TODO(scheglov) remove
final ErrorReporter errorReporter;
Scope nameScope;
@@ -52,7 +51,7 @@
ConstructorName rewriteResult;
TypeNameResolver(this.typeSystem, TypeProvider typeProvider,
- this.isNonNullableByDefault, this.definingLibrary, this.errorReporter)
+ this.isNonNullableByDefault, this.errorReporter)
: dynamicType = typeProvider.dynamicType;
NullabilitySuffix get _noneOrStarSuffix {
@@ -69,55 +68,51 @@
rewriteResult = null;
var typeIdentifier = node.name;
-
- if (typeIdentifier is SimpleIdentifier && typeIdentifier.name == 'void') {
- node.type = VoidTypeImpl.instance;
- return;
- }
-
- // TODO(scheglov) Update to use `lookup2`.
- var element = nameScope.lookupIdentifier(typeIdentifier);
-
- // TODO(scheglov) When fixing the previous TODO, report the prefix sooner.
if (typeIdentifier is PrefixedIdentifier) {
var prefix = typeIdentifier.prefix;
- var prefixElement = prefix.staticElement;
- if (prefixElement != null &&
- prefixElement is! PrefixElement &&
- prefixElement is! ClassElement) {
- errorReporter.reportErrorForNode(
- CompileTimeErrorCode.PREFIX_SHADOWED_BY_LOCAL_DECLARATION,
- prefix,
- [prefix.name],
- );
- node.type = dynamicType;
+ var prefixName = prefix.name;
+ var prefixElement = nameScope.lookup2(prefixName).getter;
+ prefix.staticElement = prefixElement;
+
+ if (prefixElement == null) {
+ _resolveToElement(node, null);
return;
}
- }
- if (element is MultiplyDefinedElement) {
- _setElement(typeIdentifier, element);
+ if (prefixElement is ClassElement) {
+ _rewriteToConstructorName(node, typeIdentifier);
+ return;
+ }
+
+ if (prefixElement is PrefixElement) {
+ var nameNode = typeIdentifier.identifier;
+ var name = nameNode.name;
+
+ var element = prefixElement.scope.lookup2(name).getter;
+ nameNode.staticElement = element;
+ _resolveToElement(node, element);
+ return;
+ }
+
+ errorReporter.reportErrorForNode(
+ CompileTimeErrorCode.PREFIX_SHADOWED_BY_LOCAL_DECLARATION,
+ prefix,
+ [prefix.name],
+ );
node.type = dynamicType;
- return;
- }
+ } else {
+ var nameNode = typeIdentifier as SimpleIdentifier;
+ var name = nameNode.name;
- if (element != null) {
- _setElement(typeIdentifier, element);
- node.type = _instantiateElement(node, element);
- return;
- }
+ if (name == 'void') {
+ node.type = VoidTypeImpl.instance;
+ return;
+ }
- // TODO(scheglov) Can we do rewriting better with using `lookup2`?
- if (_rewriteToConstructorName(node)) {
- return;
+ var element = nameScope.lookup2(name).getter;
+ nameNode.staticElement = element;
+ _resolveToElement(node, element);
}
-
- node.type = dynamicType;
- if (nameScope.shouldIgnoreUndefined(typeIdentifier)) {
- return;
- }
-
- _ErrorHelper(errorReporter).reportNullOrNonTypeElement(node, null);
}
/// Return type arguments, exactly [parameterCount].
@@ -306,61 +301,66 @@
}
}
- /// We parse `foo.bar` as `prefix.Name` with the expectation that `prefix`
- /// will be a [PrefixElement]. But we checked and found that `foo.bar` is
- /// not in the scope, so try to see if it is `Class.constructor`.
- ///
- /// Return `true` if the node was rewritten as `Class.constructor`.
- bool _rewriteToConstructorName(TypeName node) {
- var typeIdentifier = node.name;
- var constructorName = node.parent;
- if (typeIdentifier is PrefixedIdentifier &&
- constructorName is ConstructorName &&
- constructorName.name == null) {
- var classIdentifier = typeIdentifier.prefix;
- var classElement = nameScope.lookupIdentifier(classIdentifier);
- if (classElement is ClassElement) {
- var constructorIdentifier = typeIdentifier.identifier;
-
- var typeArguments = node.typeArguments;
- if (typeArguments != null) {
- errorReporter.reportErrorForNode(
- StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR,
- typeArguments,
- [classIdentifier.name, constructorIdentifier.name],
- );
- var instanceCreation = constructorName.parent;
- if (instanceCreation is InstanceCreationExpressionImpl) {
- instanceCreation.typeArguments = typeArguments;
- }
- }
-
- node.name = classIdentifier;
- node.typeArguments = null;
-
- constructorName.period = typeIdentifier.period;
- constructorName.name = constructorIdentifier;
-
- rewriteResult = constructorName;
- return true;
+ void _resolveToElement(TypeName node, Element element) {
+ if (element == null) {
+ node.type = dynamicType;
+ if (!nameScope.shouldIgnoreUndefined(node.name)) {
+ _ErrorHelper(errorReporter).reportNullOrNonTypeElement(node, null);
}
+ return;
}
- return false;
+ if (element is MultiplyDefinedElement) {
+ node.type = dynamicType;
+ return;
+ }
+
+ node.type = _instantiateElement(node, element);
}
- /// Records the new Element for a TypeName's Identifier.
- ///
- /// A null may be passed in to indicate that the element can't be resolved.
- /// (During a re-run of a task, it's important to clear any previous value
- /// of the element.)
- void _setElement(Identifier typeName, Element element) {
- if (typeName is SimpleIdentifier) {
- typeName.staticElement = element;
- } else if (typeName is PrefixedIdentifier) {
- typeName.identifier.staticElement = element;
- SimpleIdentifier prefix = typeName.prefix;
- prefix.staticElement = nameScope.lookupIdentifier(prefix);
+ /// We parse `foo.bar` as `prefix.Name` with the expectation that `prefix`
+ /// will be a [PrefixElement]. But when we resolved the `prefix` it turned
+ /// out to be a [ClassElement], so it is probably a `Class.constructor`.
+ void _rewriteToConstructorName(
+ TypeName node,
+ PrefixedIdentifier typeIdentifier,
+ ) {
+ var constructorName = node.parent;
+ if (constructorName is ConstructorName && constructorName.name == null) {
+ var classIdentifier = typeIdentifier.prefix;
+ var constructorIdentifier = typeIdentifier.identifier;
+
+ var typeArguments = node.typeArguments;
+ if (typeArguments != null) {
+ errorReporter.reportErrorForNode(
+ StaticTypeWarningCode.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR,
+ typeArguments,
+ [classIdentifier.name, constructorIdentifier.name],
+ );
+ var instanceCreation = constructorName.parent;
+ if (instanceCreation is InstanceCreationExpressionImpl) {
+ instanceCreation.typeArguments = typeArguments;
+ }
+ }
+
+ node.name = classIdentifier;
+ node.typeArguments = null;
+
+ constructorName.period = typeIdentifier.period;
+ constructorName.name = constructorIdentifier;
+
+ rewriteResult = constructorName;
+ return;
+ }
+
+ if (_isInstanceCreation(node)) {
+ _ErrorHelper(errorReporter).reportNewWithNonType(node);
+ } else {
+ errorReporter.reportErrorForNode(
+ CompileTimeErrorCode.NOT_A_TYPE,
+ typeIdentifier,
+ [typeIdentifier.name],
+ );
}
}
@@ -386,7 +386,7 @@
errorReporter.reportErrorForNode(
instanceCreation.isConst
? CompileTimeErrorCode.CONST_WITH_NON_TYPE
- : StaticWarningCode.NEW_WITH_NON_TYPE,
+ : CompileTimeErrorCode.NEW_WITH_NON_TYPE,
errorNode,
[identifier.name],
);
@@ -402,7 +402,7 @@
if (errorNode.name == 'boolean') {
errorReporter.reportErrorForNode(
- StaticWarningCode.UNDEFINED_CLASS_BOOLEAN,
+ CompileTimeErrorCode.UNDEFINED_CLASS_BOOLEAN,
errorNode,
);
return;
@@ -410,7 +410,7 @@
if (_isTypeInCatchClause(node)) {
errorReporter.reportErrorForNode(
- StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE,
+ CompileTimeErrorCode.NON_TYPE_IN_CATCH_CLAUSE,
identifier,
[identifier.name],
);
@@ -419,7 +419,7 @@
if (_isTypeInAsExpression(node)) {
errorReporter.reportErrorForNode(
- StaticWarningCode.CAST_TO_NON_TYPE,
+ CompileTimeErrorCode.CAST_TO_NON_TYPE,
identifier,
[identifier.name],
);
@@ -429,13 +429,13 @@
if (_isTypeInIsExpression(node)) {
if (element != null) {
errorReporter.reportErrorForNode(
- StaticWarningCode.TYPE_TEST_WITH_NON_TYPE,
+ CompileTimeErrorCode.TYPE_TEST_WITH_NON_TYPE,
identifier,
[identifier.name],
);
} else {
errorReporter.reportErrorForNode(
- StaticWarningCode.TYPE_TEST_WITH_UNDEFINED_NAME,
+ CompileTimeErrorCode.TYPE_TEST_WITH_UNDEFINED_NAME,
identifier,
[identifier.name],
);
@@ -489,7 +489,7 @@
if (element != null) {
errorReporter.reportErrorForNode(
- StaticWarningCode.NOT_A_TYPE,
+ CompileTimeErrorCode.NOT_A_TYPE,
identifier,
[identifier.name],
);
@@ -498,7 +498,7 @@
if (identifier is SimpleIdentifier && identifier.name == 'await') {
errorReporter.reportErrorForNode(
- StaticWarningCode.UNDEFINED_IDENTIFIER_AWAIT,
+ CompileTimeErrorCode.UNDEFINED_IDENTIFIER_AWAIT,
node,
);
return;
diff --git a/pkg/analyzer/lib/src/dart/resolver/typed_literal_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/typed_literal_resolver.dart
index 84d9c7b0..b36521c 100644
--- a/pkg/analyzer/lib/src/dart/resolver/typed_literal_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/typed_literal_resolver.dart
@@ -12,7 +12,6 @@
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_schema.dart';
import 'package:analyzer/src/dart/element/type_system.dart';
import 'package:analyzer/src/error/codes.dart';
import 'package:analyzer/src/generated/engine.dart';
@@ -176,22 +175,37 @@
return _typeProvider.dynamicType;
} else if (element is SpreadElement) {
var expressionType = element.expression.staticType;
+
+ var iterableType = expressionType.asInstanceOf(
+ _typeProvider.iterableElement,
+ );
+ if (iterableType != null) {
+ return iterableType.typeArguments[0];
+ }
+
if (expressionType.isDynamic) {
- return expressionType;
- } else if (expressionType is InterfaceType) {
+ return _typeProvider.dynamicType;
+ }
+
+ if (_typeSystem.isNonNullableByDefault) {
+ if (_typeSystem.isSubtypeOf2(expressionType, NeverTypeImpl.instance)) {
+ return NeverTypeImpl.instance;
+ }
+ if (_typeSystem.isSubtypeOf2(expressionType, _typeSystem.nullNone)) {
+ if (element.isNullAware) {
+ return NeverTypeImpl.instance;
+ }
+ return _typeProvider.dynamicType;
+ }
+ } else {
if (expressionType.isDartCoreNull) {
if (element.isNullAware) {
return expressionType;
}
- } else {
- var iterableType = expressionType.asInstanceOf(
- _typeProvider.iterableElement,
- );
- if (iterableType != null) {
- return iterableType.typeArguments[0];
- }
+ return _typeProvider.dynamicType;
}
}
+
// TODO(brianwilkerson) Report this as an error.
return _typeProvider.dynamicType;
}
@@ -252,39 +266,42 @@
return _LiteralResolution(_LiteralResolutionKind.ambiguous, null);
}
- /// If [contextType] is defined and is a subtype of `Iterable<Object>` and
- /// [contextType] is not a subtype of `Map<Object, Object>`, then *e* is a set
+ /// If [contextType] implements `Iterable`, but not `Map`, then *e* is a set
/// literal.
///
- /// If [contextType] is defined and is a subtype of `Map<Object, Object>` and
- /// [contextType] is not a subtype of `Iterable<Object>` then *e* is a map
+ /// If [contextType] implements `Map`, but not `Iterable`, then *e* is a map
/// literal.
_LiteralResolution _fromContextType(DartType contextType) {
if (contextType != null) {
- DartType unwrap(DartType type) {
- if (type is InterfaceType &&
- type.isDartAsyncFutureOr &&
- type.typeArguments.length == 1) {
- return unwrap(type.typeArguments[0]);
- }
- return type;
- }
-
- DartType unwrappedContextType = unwrap(contextType);
+ var unwrappedContextType = _typeSystem.futureOrBase(contextType);
// TODO(brianwilkerson) Find out what the "greatest closure" is and use that
// where [unwrappedContextType] is used below.
- bool isIterable = _typeSystem.isSubtypeOf2(
- unwrappedContextType, _typeProvider.iterableForSetMapDisambiguation);
- bool isMap = _typeSystem.isSubtypeOf2(
- unwrappedContextType, _typeProvider.mapForSetMapDisambiguation);
+ var iterableType = unwrappedContextType.asInstanceOf(
+ _typeProvider.iterableElement,
+ );
+ var mapType = unwrappedContextType.asInstanceOf(
+ _typeProvider.mapElement,
+ );
+ var isIterable = iterableType != null;
+ var isMap = mapType != null;
+
+ // When `S` implements `Iterable` but not `Map`, `e` is a set literal.
if (isIterable && !isMap) {
return _LiteralResolution(
- _LiteralResolutionKind.set, unwrappedContextType);
- } else if (isMap && !isIterable) {
+ _LiteralResolutionKind.set,
+ unwrappedContextType,
+ );
+ }
+
+ // When `S` implements `Map` but not `Iterable`, `e` is a map literal.
+ if (isMap && !isIterable) {
return _LiteralResolution(
- _LiteralResolutionKind.map, unwrappedContextType);
+ _LiteralResolutionKind.map,
+ unwrappedContextType,
+ );
}
}
+
return _LiteralResolution(_LiteralResolutionKind.ambiguous, null);
}
@@ -332,39 +349,69 @@
valueType: element.value.staticType);
} else if (element is SpreadElement) {
DartType expressionType = element.expression.staticType;
- bool isNull = expressionType.isDartCoreNull;
- if (!isNull && expressionType is InterfaceType) {
- if (_typeSystem.isSubtypeOf2(
- expressionType, _typeProvider.iterableForSetMapDisambiguation)) {
- InterfaceType iterableType =
- expressionType.asInstanceOf(_typeProvider.iterableElement);
- return _InferredCollectionElementTypeInformation(
- elementType: iterableType.typeArguments[0],
- keyType: null,
- valueType: null);
- } else if (_typeSystem.isSubtypeOf2(
- expressionType, _typeProvider.mapForSetMapDisambiguation)) {
- InterfaceType mapType =
- expressionType.asInstanceOf(_typeProvider.mapElement);
- List<DartType> typeArguments = mapType.typeArguments;
- return _InferredCollectionElementTypeInformation(
- elementType: null,
- keyType: typeArguments[0],
- valueType: typeArguments[1]);
- }
- } else if (expressionType.isDynamic) {
+
+ var iterableType = expressionType.asInstanceOf(
+ _typeProvider.iterableElement,
+ );
+ if (iterableType != null) {
return _InferredCollectionElementTypeInformation(
- elementType: expressionType,
- keyType: expressionType,
- valueType: expressionType);
- } else if (isNull && element.isNullAware) {
- return _InferredCollectionElementTypeInformation(
- elementType: expressionType,
- keyType: expressionType,
- valueType: expressionType);
+ elementType: iterableType.typeArguments[0],
+ keyType: null,
+ valueType: null,
+ );
}
+
+ var mapType = expressionType.asInstanceOf(
+ _typeProvider.mapElement,
+ );
+ if (mapType != null) {
+ return _InferredCollectionElementTypeInformation(
+ elementType: null,
+ keyType: mapType.typeArguments[0],
+ valueType: mapType.typeArguments[1],
+ );
+ }
+
+ if (expressionType.isDynamic) {
+ return _InferredCollectionElementTypeInformation(
+ elementType: expressionType,
+ keyType: expressionType,
+ valueType: expressionType,
+ );
+ }
+
+ if (_typeSystem.isNonNullableByDefault) {
+ if (_typeSystem.isSubtypeOf2(expressionType, NeverTypeImpl.instance)) {
+ return _InferredCollectionElementTypeInformation(
+ elementType: NeverTypeImpl.instance,
+ keyType: NeverTypeImpl.instance,
+ valueType: NeverTypeImpl.instance,
+ );
+ }
+ if (_typeSystem.isSubtypeOf2(expressionType, _typeSystem.nullNone)) {
+ if (element.isNullAware) {
+ return _InferredCollectionElementTypeInformation(
+ elementType: NeverTypeImpl.instance,
+ keyType: NeverTypeImpl.instance,
+ valueType: NeverTypeImpl.instance,
+ );
+ }
+ }
+ } else {
+ if (expressionType.isDartCoreNull && element.isNullAware) {
+ return _InferredCollectionElementTypeInformation(
+ elementType: expressionType,
+ keyType: expressionType,
+ valueType: expressionType,
+ );
+ }
+ }
+
return _InferredCollectionElementTypeInformation(
- elementType: null, keyType: null, valueType: null);
+ elementType: null,
+ keyType: null,
+ valueType: null,
+ );
} else {
throw StateError('Unknown element type ${element.runtimeType}');
}
@@ -468,38 +515,54 @@
} else if (canBeAMap && mustBeAMap) {
return _toMapType(literal, contextType, inferredTypes);
}
+
// Note: according to the spec, the following computations should be based
// on the greatest closure of the context type (unless the context type is
// `_`). In practice, we can just use the context type directly, because
// the only way the greatest closure of the context type could possibly have
// a different subtype relationship to `Iterable<Object>` and
// `Map<Object, Object>` is if the context type is `_`.
- bool contextProvidesAmbiguityResolutionClues =
- contextType != null && contextType is! UnknownInferredType;
- bool contextIsIterable = contextProvidesAmbiguityResolutionClues &&
- _typeSystem.isSubtypeOf2(
- contextType, _typeProvider.iterableForSetMapDisambiguation);
- bool contextIsMap = contextProvidesAmbiguityResolutionClues &&
- _typeSystem.isSubtypeOf2(
- contextType, _typeProvider.mapForSetMapDisambiguation);
- if (contextIsIterable && !contextIsMap) {
- return _toSetType(literal, contextType, inferredTypes);
- } else if ((contextIsMap && !contextIsIterable) || elements.isEmpty) {
- return _toMapType(literal, contextType, inferredTypes);
- } else {
- // Ambiguous. We're not going to get any more information to resolve the
- // ambiguity. We don't want to make an arbitrary decision at this point
- // because it will interfere with future type inference (see
- // dartbug.com/36210), so we return a type of `dynamic`.
- if (mustBeAMap && mustBeASet) {
- _errorReporter.reportErrorForNode(
- CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_BOTH, literal);
- } else {
- _errorReporter.reportErrorForNode(
- CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER, literal);
+ if (contextType != null) {
+ var contextIterableType = contextType.asInstanceOf(
+ _typeProvider.iterableElement,
+ );
+ var contextMapType = contextType.asInstanceOf(
+ _typeProvider.mapElement,
+ );
+ var contextIsIterable = contextIterableType != null;
+ var contextIsMap = contextMapType != null;
+
+ // When `S` implements `Iterable` but not `Map`, `e` is a set literal.
+ if (contextIsIterable && !contextIsMap) {
+ return _toSetType(literal, contextType, inferredTypes);
}
- return _typeProvider.dynamicType;
+
+ // When `S` implements `Map` but not `Iterable`, `e` is a map literal.
+ if (contextIsMap && !contextIsIterable) {
+ return _toMapType(literal, contextType, inferredTypes);
+ }
}
+
+ // When `e` is of the form `{}` and `S` is undefined, `e` is a map literal.
+ if (elements.isEmpty && contextType == null) {
+ return _typeProvider.mapType2(
+ DynamicTypeImpl.instance,
+ DynamicTypeImpl.instance,
+ );
+ }
+
+ // Ambiguous. We're not going to get any more information to resolve the
+ // ambiguity. We don't want to make an arbitrary decision at this point
+ // because it will interfere with future type inference (see
+ // dartbug.com/36210), so we return a type of `dynamic`.
+ if (mustBeAMap && mustBeASet) {
+ _errorReporter.reportErrorForNode(
+ CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_BOTH, literal);
+ } else {
+ _errorReporter.reportErrorForNode(
+ CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER, literal);
+ }
+ return _typeProvider.dynamicType;
}
DartType _inferSetTypeDownwards(SetOrMapLiteral node, DartType contextType) {
diff --git a/pkg/analyzer/lib/src/dart/resolver/yield_statement_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/yield_statement_resolver.dart
index 00aea98..f12a3d2 100644
--- a/pkg/analyzer/lib/src/dart/resolver/yield_statement_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/yield_statement_resolver.dart
@@ -41,7 +41,7 @@
/// it returns 'void'. Or, in rare cases, when other types of expressions are
/// void, such as identifiers.
///
- /// See [StaticWarningCode.USE_OF_VOID_RESULT].
+ /// See [CompileTimeErrorCode.USE_OF_VOID_RESULT].
///
/// TODO(scheglov) This is duplicate
/// TODO(scheglov) Also in [BoolExpressionVerifier]
@@ -52,12 +52,12 @@
if (expression is MethodInvocation) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.USE_OF_VOID_RESULT,
+ CompileTimeErrorCode.USE_OF_VOID_RESULT,
expression.methodName,
);
} else {
_errorReporter.reportErrorForNode(
- StaticWarningCode.USE_OF_VOID_RESULT,
+ CompileTimeErrorCode.USE_OF_VOID_RESULT,
expression,
);
}
diff --git a/pkg/analyzer/lib/src/error/bool_expression_verifier.dart b/pkg/analyzer/lib/src/error/bool_expression_verifier.dart
index 3769e07..cf46b92 100644
--- a/pkg/analyzer/lib/src/error/bool_expression_verifier.dart
+++ b/pkg/analyzer/lib/src/error/bool_expression_verifier.dart
@@ -79,12 +79,12 @@
if (expression is MethodInvocation) {
SimpleIdentifier methodName = expression.methodName;
_errorReporter.reportErrorForNode(
- StaticWarningCode.USE_OF_VOID_RESULT,
+ CompileTimeErrorCode.USE_OF_VOID_RESULT,
methodName,
);
} else {
_errorReporter.reportErrorForNode(
- StaticWarningCode.USE_OF_VOID_RESULT,
+ CompileTimeErrorCode.USE_OF_VOID_RESULT,
expression,
);
}
diff --git a/pkg/analyzer/lib/src/error/codes.dart b/pkg/analyzer/lib/src/error/codes.dart
index 70e254d..bc93306 100644
--- a/pkg/analyzer/lib/src/error/codes.dart
+++ b/pkg/analyzer/lib/src/error/codes.dart
@@ -3,7 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/dart/error/syntactic_errors.dart';
import 'analyzer_error_code.dart';
@@ -323,6 +322,81 @@
hasPublishedDocs: true);
/**
+ * Parameters:
+ * 0: the name of the ambiguous type
+ * 1: the name of the first library that the type is found
+ * 2: the name of the second library that the type is found
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when a name is referenced that is
+ // declared in two or more imported libraries.
+ //
+ // #### Examples
+ //
+ // Given a library (`a.dart`) that defines a class (`C` in this example):
+ //
+ // ```dart
+ // %uri="lib/a.dart"
+ // class A {}
+ // class C {}
+ // ```
+ //
+ // And a library (`b.dart`) that defines a different class with the same name:
+ //
+ // ```dart
+ // %uri="lib/b.dart"
+ // class B {}
+ // class C {}
+ // ```
+ //
+ // The following code produces this diagnostic:
+ //
+ // ```dart
+ // import 'a.dart';
+ // import 'b.dart';
+ //
+ // void f([!C!] c1, [!C!] c2) {}
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If any of the libraries aren't needed, then remove the import directives
+ // for them:
+ //
+ // ```dart
+ // import 'a.dart';
+ //
+ // void f(C c1, C c2) {}
+ // ```
+ //
+ // If the name is still defined by more than one library, then add a `hide`
+ // clause to the import directives for all except one library:
+ //
+ // ```dart
+ // import 'a.dart' hide C;
+ // import 'b.dart';
+ //
+ // void f(C c1, C c2) {}
+ // ```
+ //
+ // If you must be able to reference more than one of these types, then add a
+ // prefix to each of the import directives, and qualify the references with
+ // the appropriate prefix:
+ //
+ // ```dart
+ // import 'a.dart' as a;
+ // import 'b.dart' as b;
+ //
+ // void f(a.C c1, b.C c2) {}
+ // ```
+ static const CompileTimeErrorCode AMBIGUOUS_IMPORT = CompileTimeErrorCode(
+ 'AMBIGUOUS_IMPORT', "The name '{0}' is defined in the libraries {1}.",
+ correction: "Try using 'as prefix' for one of the import directives, or "
+ "hiding the name from all but one of the imports.",
+ hasPublishedDocs: true);
+
+ /**
* No parameters.
*/
// #### Description
@@ -487,15 +561,279 @@
"correcting the name to match a defined class, or "
"defining a class with the given name.");
- @Deprecated('Use ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS')
- static const ParserErrorCode ANNOTATION_WITH_TYPE_ARGUMENTS =
- ParserErrorCode.ANNOTATION_WITH_TYPE_ARGUMENTS;
+ /**
+ * Parameters:
+ * 0: the name of the actual argument type
+ * 1: the name of the expected type
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when the static type of an argument
+ // can't be assigned to the static type of the corresponding parameter.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because a `num` can't be
+ // assigned to a `String`:
+ //
+ // ```dart
+ // String f(String x) => x;
+ // String g(num y) => f([!y!]);
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If possible, rewrite the code so that the static type is assignable. In the
+ // example above you might be able to change the type of the parameter `y`:
+ //
+ // ```dart
+ // String f(String x) => x;
+ // String g(String y) => f(y);
+ // ```
+ //
+ // If that fix isn't possible, then add code to handle the case where the
+ // argument value isn't the required type. One approach is to coerce other
+ // types to the required type:
+ //
+ // ```dart
+ // String f(String x) => x;
+ // String g(num y) => f(y.toString());
+ // ```
+ //
+ // Another approach is to add explicit type tests and fallback code:
+ //
+ // ```dart
+ // String f(String x) => x;
+ // String g(num y) => f(y is String ? y : '');
+ // ```
+ //
+ // If you believe that the runtime type of the argument will always be the
+ // same as the static type of the parameter, and you're willing to risk having
+ // an exception thrown at runtime if you're wrong, then add an explicit cast:
+ //
+ // ```dart
+ // String f(String x) => x;
+ // String g(num y) => f(y as String);
+ // ```
+ static const CompileTimeErrorCode ARGUMENT_TYPE_NOT_ASSIGNABLE =
+ CompileTimeErrorCode(
+ 'ARGUMENT_TYPE_NOT_ASSIGNABLE',
+ "The argument type '{0}' can't be assigned to the parameter type "
+ "'{1}'.",
+ hasPublishedDocs: true);
static const CompileTimeErrorCode ASSERT_IN_REDIRECTING_CONSTRUCTOR =
CompileTimeErrorCode('ASSERT_IN_REDIRECTING_CONSTRUCTOR',
"A redirecting constructor can't have an 'assert' initializer.");
/**
+ * 5 Variables: Attempting to assign to a final variable elsewhere will cause
+ * a NoSuchMethodError to be thrown, because no setter is defined for it. The
+ * assignment will also give rise to a static warning for the same reason.
+ *
+ * A constant variable is always implicitly final.
+ */
+ static const CompileTimeErrorCode ASSIGNMENT_TO_CONST = CompileTimeErrorCode(
+ 'ASSIGNMENT_TO_CONST', "Constant variables can't be assigned a value.",
+ correction: "Try removing the assignment, or "
+ "remove the modifier 'const' from the variable.");
+
+ /**
+ * Parameters:
+ * 0: the name of the final variable
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when it finds an invocation of a
+ // setter, but there's no setter because the field with the same name was
+ // declared to be `final` or `const`.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because `v` is final:
+ //
+ // ```dart
+ // class C {
+ // final v = 0;
+ // }
+ //
+ // f(C c) {
+ // c.[!v!] = 1;
+ // }
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If you need to be able to set the value of the field, then remove the
+ // modifier `final` from the field:
+ //
+ // ```dart
+ // class C {
+ // int v = 0;
+ // }
+ //
+ // f(C c) {
+ // c.v = 1;
+ // }
+ // ```
+ static const CompileTimeErrorCode ASSIGNMENT_TO_FINAL = CompileTimeErrorCode(
+ 'ASSIGNMENT_TO_FINAL',
+ "'{0}' can't be used as a setter because it's final.",
+ correction: "Try finding a different setter, or making '{0}' non-final.",
+ hasPublishedDocs: true);
+
+ /**
+ * No parameters.
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when a local variable that was
+ // declared to be final is assigned after it was initialized.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because `x` is final, so it
+ // can't have a value assigned to it after it was initialized:
+ //
+ // ```dart
+ // void f() {
+ // final x = 0;
+ // [!x!] = 3;
+ // print(x);
+ // }
+ // ```
+ //
+ // #### Common fixes
+ //
+ // Remove the keyword `final`, and replace it with `var` if there's no type
+ // annotation:
+ //
+ // ```dart
+ // void f() {
+ // var x = 0;
+ // x = 3;
+ // print(x);
+ // }
+ // ```
+ static const CompileTimeErrorCode ASSIGNMENT_TO_FINAL_LOCAL =
+ CompileTimeErrorCode('ASSIGNMENT_TO_FINAL_LOCAL',
+ "The final variable '{0}' can only be set once.",
+ correction: "Try making '{0}' non-final.", hasPublishedDocs: true);
+
+ /**
+ * No parameters.
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when a reference to a setter is
+ // found; there is no setter defined for the type; but there is a getter
+ // defined with the same name.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because there is no setter
+ // named `x` in `C`, but there is a getter named `x`:
+ //
+ // ```dart
+ // class C {
+ // int get x => 0;
+ // set y(int p) {}
+ // }
+ //
+ // void f(C c) {
+ // c.[!x!] = 1;
+ // }
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If you want to invoke an existing setter, then correct the name:
+ //
+ // ```dart
+ // class C {
+ // int get x => 0;
+ // set y(int p) {}
+ // }
+ //
+ // void f(C c) {
+ // c.y = 1;
+ // }
+ // ```
+ //
+ // If you want to invoke the setter but it just doesn't exist yet, then
+ // declare it:
+ //
+ // ```dart
+ // class C {
+ // int get x => 0;
+ // set x(int p) {}
+ // set y(int p) {}
+ // }
+ //
+ // void f(C c) {
+ // c.x = 1;
+ // }
+ // ```
+ static const CompileTimeErrorCode ASSIGNMENT_TO_FINAL_NO_SETTER =
+ CompileTimeErrorCode('ASSIGNMENT_TO_FINAL_NO_SETTER',
+ "There isn’t a setter named '{0}' in class '{1}'.",
+ correction:
+ "Try correcting the name to reference an existing setter, or "
+ "declare the setter.",
+ hasPublishedDocs: true);
+
+ /**
+ * 12.18 Assignment: It is as static warning if an assignment of the form
+ * <i>v = e</i> occurs inside a top level or static function (be it function,
+ * method, getter, or setter) or variable initializer and there is neither a
+ * local variable declaration with name <i>v</i> nor setter declaration with
+ * name <i>v=</i> in the lexical scope enclosing the assignment.
+ */
+ static const CompileTimeErrorCode ASSIGNMENT_TO_FUNCTION =
+ CompileTimeErrorCode(
+ 'ASSIGNMENT_TO_FUNCTION', "Functions can't be assigned a value.");
+
+ /**
+ * No parameters.
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when the target of an assignment is a
+ // method.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because `f` can't be assigned a
+ // value because it's a method:
+ //
+ // ```dart
+ // class C {
+ // void f() {}
+ //
+ // void g() {
+ // [!f!] = null;
+ // }
+ // }
+ // ```
+ //
+ // #### Common fixes
+ //
+ // Rewrite the code so that there isn't an assignment to a method.
+ static const CompileTimeErrorCode ASSIGNMENT_TO_METHOD = CompileTimeErrorCode(
+ 'ASSIGNMENT_TO_METHOD', "Methods can't be assigned a value.",
+ hasPublishedDocs: true);
+
+ /**
+ * 12.18 Assignment: It is as static warning if an assignment of the form
+ * <i>v = e</i> occurs inside a top level or static function (be it function,
+ * method, getter, or setter) or variable initializer and there is neither a
+ * local variable declaration with name <i>v</i> nor setter declaration with
+ * name <i>v=</i> in the lexical scope enclosing the assignment.
+ */
+ static const CompileTimeErrorCode ASSIGNMENT_TO_TYPE = CompileTimeErrorCode(
+ 'ASSIGNMENT_TO_TYPE', "Types can't be assigned a value.");
+
+ /**
* 17.6.3 Asynchronous For-in: It is a compile-time error if an asynchronous
* for-in statement appears inside a synchronous function.
*/
@@ -713,10 +1051,12 @@
* Parameters:
* 0: the built-in identifier that is being used
*/
- static const CompileTimeErrorCode BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME =
- CompileTimeErrorCode('BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME',
- "The built-in identifier '{0}' can't be used as a typedef name.",
- correction: "Try choosing a different name for the typedef.");
+ static const CompileTimeErrorCode BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME =
+ CompileTimeErrorCode(
+ 'BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME',
+ "The built-in identifier '{0}' can't be used as a type parameter "
+ "name.",
+ correction: "Try choosing a different name for the type parameter.");
/**
* 16.33 Identifier Reference: It is a compile-time error if a built-in
@@ -726,12 +1066,58 @@
* Parameters:
* 0: the built-in identifier that is being used
*/
- static const CompileTimeErrorCode BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME =
+ static const CompileTimeErrorCode BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME =
+ CompileTimeErrorCode('BUILT_IN_IDENTIFIER_AS_TYPEDEF_NAME',
+ "The built-in identifier '{0}' can't be used as a typedef name.",
+ correction: "Try choosing a different name for the typedef.");
+
+ /**
+ * No parameters.
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when the last statement in a `case`
+ // block isn't one of the required terminators: `break`, `continue`,
+ // `rethrow`, `return`, or `throw`.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because the `case` block ends
+ // with an assignment:
+ //
+ // ```dart
+ // void f(int x) {
+ // switch (x) {
+ // [!case!] 0:
+ // x += 2;
+ // default:
+ // x += 1;
+ // }
+ // }
+ // ```
+ //
+ // #### Common fixes
+ //
+ // Add one of the required terminators:
+ //
+ // ```dart
+ // void f(int x) {
+ // switch (x) {
+ // case 0:
+ // x += 2;
+ // break;
+ // default:
+ // x += 1;
+ // }
+ // }
+ // ```
+ static const CompileTimeErrorCode CASE_BLOCK_NOT_TERMINATED =
CompileTimeErrorCode(
- 'BUILT_IN_IDENTIFIER_AS_TYPE_PARAMETER_NAME',
- "The built-in identifier '{0}' can't be used as a type parameter "
- "name.",
- correction: "Try choosing a different name for the type parameter.");
+ 'CASE_BLOCK_NOT_TERMINATED',
+ "The last statement of the 'case' should be 'break', 'continue', "
+ "'rethrow', 'return', or 'throw'.",
+ correction: "Try adding one of the required statements.",
+ hasPublishedDocs: true);
/**
* 13.9 Switch: It is a compile-time error if the class <i>C</i> implements
@@ -808,6 +1194,86 @@
hasPublishedDocs: true);
/**
+ * No parameters.
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when the name following the `as` in a
+ // cast expression is defined to be something other than a type.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because `x` is a variable, not
+ // a type:
+ //
+ // ```dart
+ // num x = 0;
+ // int y = x as [!x!];
+ // ```
+ //
+ // #### Common fixes
+ //
+ // Replace the name with the name of a type:
+ //
+ // ```dart
+ // num x = 0;
+ // int y = x as int;
+ // ```
+ static const CompileTimeErrorCode CAST_TO_NON_TYPE = CompileTimeErrorCode(
+ 'CAST_TO_NON_TYPE',
+ "The name '{0}' isn't a type, so it can't be used in an 'as' expression.",
+ correction: "Try changing the name to the name of an existing type, or "
+ "creating a type with the name '{0}'.",
+ hasPublishedDocs: true);
+
+ /**
+ * Parameters:
+ * 0: the name of the abstract method
+ * 1: the name of the enclosing class
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when a member of a concrete class is
+ // found that doesn't have a concrete implementation. Concrete classes aren't
+ // allowed to contain abstract members.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because `m` is an abstract
+ // method but `C` isn't an abstract class:
+ //
+ // ```dart
+ // class C {
+ // [!void m();!]
+ // }
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If it's valid to create instances of the class, provide an implementation
+ // for the member:
+ //
+ // ```dart
+ // class C {
+ // void m() {}
+ // }
+ // ```
+ //
+ // If it isn't valid to create instances of the class, mark the class as being
+ // abstract:
+ //
+ // ```dart
+ // abstract class C {
+ // void m();
+ // }
+ // ```
+ static const CompileTimeErrorCode CONCRETE_CLASS_WITH_ABSTRACT_MEMBER =
+ CompileTimeErrorCode('CONCRETE_CLASS_WITH_ABSTRACT_MEMBER',
+ "'{0}' must have a method body because '{1}' isn't abstract.",
+ correction: "Try making '{1}' abstract, or adding a body to '{0}'.",
+ hasPublishedDocs: true);
+
+ /**
* 10.11 Class Member Conflicts: Let `C` be a class. It is a compile-time
* error if `C` declares a constructor named `C.n`, and a static member with
* basename `n`.
@@ -856,6 +1322,14 @@
"renaming the field to a name that doesn't conflict.");
/**
+ * Parameters:
+ * 0: the name of the type parameter
+ * 1: detail text explaining why the type could not be inferred
+ */
+ static const CompileTimeErrorCode COULD_NOT_INFER = CompileTimeErrorCode(
+ 'COULD_NOT_INFER', "Couldn't infer type parameter '{0}'.{1}");
+
+ /**
* 10.10 Superinterfaces: It is a compile-time error if a class `C` has two
* superinterfaces that are different instantiations of the same generic
* class. For example, a class may not have both `List<int>` and `List<num>`
@@ -864,7 +1338,7 @@
* Parameters:
* 0: the name of the class implementing the conflicting interface
* 1: the first conflicting type
- * 1: the second conflicting type
+ * 2: the second conflicting type
*/
static const CompileTimeErrorCode CONFLICTING_GENERIC_INTERFACES =
CompileTimeErrorCode(
@@ -1121,6 +1595,24 @@
"changing the import to not be deferred.");
/**
+ * 16.12.2 Const: It is a compile-time error if evaluation of a constant
+ * object results in an uncaught exception being thrown.
+ */
+ static const CompileTimeErrorCode CONST_EVAL_THROWS_EXCEPTION =
+ CompileTimeErrorCode('CONST_EVAL_THROWS_EXCEPTION',
+ "Evaluation of this constant expression throws an exception.");
+
+ /**
+ * 16.12.2 Const: It is a compile-time error if evaluation of a constant
+ * object results in an uncaught exception being thrown.
+ */
+ static const CompileTimeErrorCode CONST_EVAL_THROWS_IDBZE =
+ CompileTimeErrorCode(
+ 'CONST_EVAL_THROWS_IDBZE',
+ "Evaluation of this constant expression throws an "
+ "IntegerDivisionByZeroException.");
+
+ /**
* 16.12.2 Const: An expression of one of the forms !e, e1 && e2 or e1 || e2,
* where e, e1 and e2 are constant expressions that evaluate to a boolean
* value.
@@ -1179,24 +1671,6 @@
"'Type'.");
/**
- * 16.12.2 Const: It is a compile-time error if evaluation of a constant
- * object results in an uncaught exception being thrown.
- */
- static const CompileTimeErrorCode CONST_EVAL_THROWS_EXCEPTION =
- CompileTimeErrorCode('CONST_EVAL_THROWS_EXCEPTION',
- "Evaluation of this constant expression throws an exception.");
-
- /**
- * 16.12.2 Const: It is a compile-time error if evaluation of a constant
- * object results in an uncaught exception being thrown.
- */
- static const CompileTimeErrorCode CONST_EVAL_THROWS_IDBZE =
- CompileTimeErrorCode(
- 'CONST_EVAL_THROWS_IDBZE',
- "Evaluation of this constant expression throws an "
- "IntegerDivisionByZeroException.");
-
- /**
* 6.2 Formal Parameters: It is a compile-time error if a formal parameter is
* declared as a constant variable.
*/
@@ -2138,18 +2612,6 @@
hasPublishedDocs: true);
/**
- * Parameters:
- * 0: The name of the disallowed type
- */
- static const CompileTimeErrorCode EXTENDS_DISALLOWED_CLASS =
- // TODO(scheglov) We might want to restore specific code with FrontEnd.
- // https://github.com/dart-lang/sdk/issues/31821
- CompileTimeErrorCodeWithUniqueName('SUBTYPE_OF_DISALLOWED_TYPE',
- 'EXTENDS_DISALLOWED_CLASS', "Classes can't extend '{0}'.",
- correction: "Try specifying a different superclass, or "
- "removing the extends clause.");
-
- /**
* 7.9 Superclasses: It is a compile-time error if the extends clause of a
* class <i>C</i> includes a deferred type expression.
*
@@ -2166,6 +2628,18 @@
/**
* Parameters:
+ * 0: The name of the disallowed type
+ */
+ static const CompileTimeErrorCode EXTENDS_DISALLOWED_CLASS =
+ // TODO(scheglov) We might want to restore specific code with FrontEnd.
+ // https://github.com/dart-lang/sdk/issues/31821
+ CompileTimeErrorCodeWithUniqueName('SUBTYPE_OF_DISALLOWED_TYPE',
+ 'EXTENDS_DISALLOWED_CLASS', "Classes can't extend '{0}'.",
+ correction: "Try specifying a different superclass, or "
+ "removing the extends clause.");
+
+ /**
+ * Parameters:
* 0: the name in the extends clause
*/
// #### Description
@@ -2640,6 +3114,58 @@
correction: "Try removing one of the initializations.");
/**
+ * No parameters.
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when a final field is initialized in
+ // both the declaration of the field and in an initializer in a constructor.
+ // Final fields can only be assigned once, so it can't be initialized in both
+ // places.
+ //
+ // #### Example
+ //
+ // The following code produces this diagnostic because `f` is :
+ //
+ // ```dart
+ // class C {
+ // final int f = 0;
+ // C() : [!f!] = 1;
+ // }
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If the initialization doesn't depend on any values passed to the
+ // constructor, and if all of the constructors need to initialize the field to
+ // the same value, then remove the initializer from the constructor:
+ //
+ // ```dart
+ // class C {
+ // final int f = 0;
+ // C();
+ // }
+ // ```
+ //
+ // If the initialization depends on a value passed to the constructor, or if
+ // different constructors need to initialize the field differently, then
+ // remove the initializer in the field's declaration:
+ //
+ // ```dart
+ // class C {
+ // final int f;
+ // C() : f = 1;
+ // }
+ // ```
+ static const CompileTimeErrorCode
+ FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION = CompileTimeErrorCode(
+ 'FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION',
+ "Fields can't be initialized in the constructor if they are final "
+ "and were already initialized at their declaration.",
+ correction: "Try removing one of the initializations.",
+ hasPublishedDocs: true);
+
+ /**
* 7.6.1 Generative Constructors: Let <i>k</i> be a generative constructor. It
* is a compile time error if <i>k</i>'s initializer list contains an
* initializer for a variable that is initialized by means of an initializing
@@ -2665,6 +3191,60 @@
correction: "Try using a normal parameter.");
/**
+ * Parameters:
+ * 0: the name of the type of the initializer expression
+ * 1: the name of the type of the field
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when the initializer list of a
+ // constructor initializes a field to a value that isn't assignable to the
+ // field.
+ //
+ // #### Example
+ //
+ // The following code produces this diagnostic because `0` has the type `int`,
+ // and an `int` can't be assigned to a field of type `String`:
+ //
+ // ```dart
+ // class C {
+ // String s;
+ //
+ // C() : s = [!0!];
+ // }
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If the type of the field is correct, then change the value assigned to it
+ // so that the value has a valid type:
+ //
+ // ```dart
+ // class C {
+ // String s;
+ //
+ // C() : s = '0';
+ // }
+ // ```
+ //
+ // If the type of the value is correct, then change the type of the field to
+ // allow the assignment:
+ //
+ // ```dart
+ // class C {
+ // int s;
+ //
+ // C() : s = 0;
+ // }
+ // ```
+ static const CompileTimeErrorCode FIELD_INITIALIZER_NOT_ASSIGNABLE =
+ CompileTimeErrorCode(
+ 'FIELD_INITIALIZER_NOT_ASSIGNABLE',
+ "The initializer type '{0}' can't be assigned to the field type "
+ "'{1}'.",
+ hasPublishedDocs: true);
+
+ /**
* 7.6.1 Generative Constructors: It is a compile-time error if an
* initializing formal is used by a function other than a non-redirecting
* generative constructor.
@@ -2688,6 +3268,36 @@
correction: "Try using a normal parameter.");
/**
+ * 7.6.1 Generative Constructors: An initializing formal has the form
+ * <i>this.id</i>. It is a static warning if the static type of <i>id</i> is
+ * not assignable to <i>T<sub>id</sub></i>.
+ *
+ * Parameters:
+ * 0: the name of the type of the field formal parameter
+ * 1: the name of the type of the field
+ */
+ static const CompileTimeErrorCode FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE =
+ CompileTimeErrorCode('FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE',
+ "The parameter type '{0}' is incompatible with the field type '{1}'.",
+ correction: "Try changing or removing the parameter's type, or "
+ "changing the field's type.");
+
+ /**
+ * 5. Variables: It is a static warning if a final instance variable that has
+ * been initialized at its point of declaration is also initialized in a
+ * constructor.
+ *
+ * Parameters:
+ * 0: the name of the field in question
+ */
+ static const CompileTimeErrorCode
+ FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR = CompileTimeErrorCode(
+ 'FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR',
+ "'{0}' is final and was given a value when it was declared, "
+ "so it can't be set to a new value.",
+ correction: "Try removing one of the initializations.");
+
+ /**
* 5 Variables: It is a compile-time error if a final instance variable that
* has is initialized by means of an initializing formal of a constructor is
* also initialized elsewhere in the same constructor.
@@ -2700,6 +3310,183 @@
"'{0}' is a final field and so can only be set once.",
correction: "Try removing all but one of the initializations.");
+ /**
+ * Parameters:
+ * 0: the name of the uninitialized final variable
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when a final field or variable isn't
+ // initialized.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because `x` doesn't have an
+ // initializer:
+ //
+ // ```dart
+ // final [!x!];
+ // ```
+ //
+ // #### Common fixes
+ //
+ // For variables and static fields, you can add an initializer:
+ //
+ // ```dart
+ // final x = 0;
+ // ```
+ //
+ // For instance fields, you can add an initializer as shown in the previous
+ // example, or you can initialize the field in every constructor. You can
+ // initialize the field by using a field formal parameter:
+ //
+ // ```dart
+ // class C {
+ // final int x;
+ // C(this.x);
+ // }
+ // ```
+ //
+ // You can also initialize the field by using an initializer in the
+ // constructor:
+ //
+ // ```dart
+ // class C {
+ // final int x;
+ // C(int y) : x = y * 2;
+ // }
+ // ```
+ static const CompileTimeErrorCode FINAL_NOT_INITIALIZED =
+ CompileTimeErrorCode('FINAL_NOT_INITIALIZED',
+ "The final variable '{0}' must be initialized.",
+ // TODO(brianwilkerson) Split this error code so that we can suggest
+ // initializing fields in constructors (FINAL_FIELD_NOT_INITIALIZED
+ // and FINAL_VARIABLE_NOT_INITIALIZED).
+ correction: "Try initializing the variable.",
+ hasPublishedDocs: true);
+
+ /**
+ * Parameters:
+ * 0: the name of the uninitialized final variable
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when a class defines one or more
+ // final instance fields without initializers and has at least one constructor
+ // that doesn't initialize those fields. All final instance fields must be
+ // initialized when the instance is created, either by the field's initializer
+ // or by the constructor.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic:
+ //
+ // ```dart
+ // class C {
+ // final String value;
+ //
+ // [!C!]();
+ // }
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If the value should be passed in to the constructor directly, then use a
+ // field formal parameter to initialize the field `value`:
+ //
+ // ```dart
+ // class C {
+ // final String value;
+ //
+ // C(this.value);
+ // }
+ // ```
+ //
+ // If the value should be computed indirectly from a value provided by the
+ // caller, then add a parameter and include an initializer:
+ //
+ // ```dart
+ // class C {
+ // final String value;
+ //
+ // C(Object o) : value = o.toString();
+ // }
+ // ```
+ //
+ // If the value of the field doesn't depend on values that can be passed to
+ // the constructor, then add an initializer for the field as part of the field
+ // declaration:
+ //
+ // ```dart
+ // class C {
+ // final String value = '';
+ //
+ // C();
+ // }
+ // ```
+ //
+ // If the value of the field doesn't depend on values that can be passed to
+ // the constructor but different constructors need to initialize it to
+ // different values, then add an initializer for the field in the initializer
+ // list:
+ //
+ // ```dart
+ // class C {
+ // final String value;
+ //
+ // C() : value = '';
+ //
+ // C.named() : value = 'c';
+ // }
+ // ```
+ //
+ // However, if the value is the same for all instances, then consider using a
+ // static field instead of an instance field:
+ //
+ // ```dart
+ // class C {
+ // static const String value = '';
+ //
+ // C();
+ // }
+ // ```
+ static const CompileTimeErrorCode FINAL_NOT_INITIALIZED_CONSTRUCTOR_1 =
+ CompileTimeErrorCodeWithUniqueName(
+ 'FINAL_NOT_INITIALIZED_CONSTRUCTOR',
+ 'CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1',
+ "All final variables must be initialized, but '{0}' isn't.",
+ correction: "Try adding an initializer for the field.",
+ hasPublishedDocs: true);
+
+ /**
+ * Parameters:
+ * 0: the name of the uninitialized final variable
+ * 1: the name of the uninitialized final variable
+ */
+ static const CompileTimeErrorCode FINAL_NOT_INITIALIZED_CONSTRUCTOR_2 =
+ CompileTimeErrorCodeWithUniqueName(
+ 'FINAL_NOT_INITIALIZED_CONSTRUCTOR',
+ 'CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2',
+ "All final variables must be initialized, but '{0}' and '{1}' "
+ "aren't.",
+ correction: "Try adding initializers for the fields.",
+ hasPublishedDocs: true);
+
+ /**
+ * Parameters:
+ * 0: the name of the uninitialized final variable
+ * 1: the name of the uninitialized final variable
+ * 2: the number of additional not initialized variables that aren't listed
+ */
+ static const CompileTimeErrorCode FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS =
+ CompileTimeErrorCodeWithUniqueName(
+ 'FINAL_NOT_INITIALIZED_CONSTRUCTOR',
+ 'CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3',
+ "All final variables must be initialized, but '{0}', '{1}', and {2} "
+ "others aren't.",
+ correction: "Try adding initializers for the fields.",
+ hasPublishedDocs: true);
+
static const CompileTimeErrorCode FOR_IN_WITH_CONST_VARIABLE =
CompileTimeErrorCode('FOR_IN_WITH_CONST_VARIABLE',
"A for-in loop-variable can't be 'const'.",
@@ -2727,6 +3514,45 @@
correction: "Try removing type parameters from the generic function "
"type, or using 'dynamic' as the type argument here.");
+ /**
+ * 10.3 Setters: It is a compile-time error if a class has a setter named
+ * `v=` with argument type `T` and a getter named `v` with return type `S`,
+ * and `S` may not be assigned to `T`.
+ *
+ * Parameters:
+ * 0: the name of the getter
+ * 1: the type of the getter
+ * 2: the type of the setter
+ * 3: the name of the setter
+ */
+ static const CompileTimeErrorCode GETTER_NOT_ASSIGNABLE_SETTER_TYPES =
+ CompileTimeErrorCode(
+ 'GETTER_NOT_ASSIGNABLE_SETTER_TYPES',
+ "The return type of getter '{0}' is '{1}' which isn't assignable "
+ "to the type '{2}' of its setter '{3}'.",
+ correction: "Try changing the types so that they are compatible.");
+
+ /**
+ * nnbd/feature-specification.md
+ *
+ * It is an error if a class has a setter and a getter with the same basename
+ * where the return type of the getter is not a subtype of the argument type
+ * of the setter. Note that this error specifically requires subtyping and
+ * not assignability and hence makes no exception for `dynamic`.
+ *
+ * Parameters:
+ * 0: the name of the getter
+ * 1: the type of the getter
+ * 2: the type of the setter
+ * 3: the name of the setter
+ */
+ static const CompileTimeErrorCode GETTER_NOT_SUBTYPE_SETTER_TYPES =
+ CompileTimeErrorCode(
+ 'GETTER_NOT_SUBTYPE_SETTER_TYPES',
+ "The return type of getter '{0}' is '{1}' which isn't a subtype "
+ "of the type '{2}' of its setter '{3}'.",
+ correction: "Try changing the types so that they are compatible.");
+
static const CompileTimeErrorCode IF_ELEMENT_CONDITION_FROM_DEFERRED_LIBRARY =
CompileTimeErrorCode(
'IF_ELEMENT_CONDITION_FROM_DEFERRED_LIBRARY',
@@ -3344,6 +4170,37 @@
hasPublishedDocs: true);
/**
+ * No parameters.
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when it finds a constructor
+ // invocation and the constructor is declared in an abstract class. Even
+ // though you can't create an instance of an abstract class, abstract classes
+ // can declare constructors that can be invoked by subclasses.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because `C` is an abstract
+ // class:
+ //
+ // ```dart
+ // abstract class C {}
+ //
+ // var c = new [!C!]();
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If there's a concrete subclass of the abstract class that can be used, then
+ // create an instance of the concrete subclass.
+ static const CompileTimeErrorCode INSTANTIATE_ABSTRACT_CLASS =
+ CompileTimeErrorCode('INSTANTIATE_ABSTRACT_CLASS',
+ "Abstract classes can't be instantiated.",
+ correction: "Try creating an instance of a concrete subtype.",
+ hasPublishedDocs: true);
+
+ /**
* Enum proposal: It is also a compile-time error to explicitly instantiate an
* enum via 'new' or 'const' or to access its private fields.
*/
@@ -3351,14 +4208,6 @@
'INSTANTIATE_ENUM', "Enums can't be instantiated.",
correction: "Try using one of the defined constants.");
- static const CompileTimeErrorCode INTEGER_LITERAL_OUT_OF_RANGE =
- CompileTimeErrorCode('INTEGER_LITERAL_OUT_OF_RANGE',
- "The integer literal {0} can't be represented in 64 bits.",
- correction:
- "Try using the BigInt class if you need an integer larger than "
- "9,223,372,036,854,775,807 or less than "
- "-9,223,372,036,854,775,808.");
-
/**
* An integer literal with static type `double` and numeric value `i`
* evaluates to an instance of the `double` class representing the value `i`.
@@ -3375,6 +4224,14 @@
"Try using the BigInt class, or switch to the closest valid "
"double: {1}");
+ static const CompileTimeErrorCode INTEGER_LITERAL_OUT_OF_RANGE =
+ CompileTimeErrorCode('INTEGER_LITERAL_OUT_OF_RANGE',
+ "The integer literal {0} can't be represented in 64 bits.",
+ correction:
+ "Try using the BigInt class if you need an integer larger than "
+ "9,223,372,036,854,775,807 or less than "
+ "-9,223,372,036,854,775,808.");
+
/**
* 15 Metadata: Metadata consists of a series of annotations, each of which
* begin with the character @, followed by a constant expression that must be
@@ -3485,15 +4342,6 @@
/**
* Parameters:
- * 0: the type of the instantiated object
- * 1: the expected type
- */
- static const CompileTimeErrorCode INVALID_CAST_NEW_EXPR = CompileTimeErrorCode(
- 'INVALID_CAST_NEW_EXPR',
- "The constructor returns type '{0}' that isn't of expected type '{1}'.");
-
- /**
- * Parameters:
* 0: the type of the torn-off method
* 1: the expected function type
*/
@@ -3504,6 +4352,15 @@
"is expected.");
/**
+ * Parameters:
+ * 0: the type of the instantiated object
+ * 1: the expected type
+ */
+ static const CompileTimeErrorCode INVALID_CAST_NEW_EXPR = CompileTimeErrorCode(
+ 'INVALID_CAST_NEW_EXPR',
+ "The constructor returns type '{0}' that isn't of expected type '{1}'.");
+
+ /**
* TODO(brianwilkerson) Remove this when we have decided on how to report
* errors in compile-time constants. Until then, this acts as a placeholder
* for more informative errors.
@@ -3773,6 +4630,10 @@
"Invalid reference to 'this' expression.",
hasPublishedDocs: true);
+ static const CompileTimeErrorCode INVALID_SUPER_INVOCATION =
+ CompileTimeErrorCode('INVALID_SUPER_INVOCATION',
+ "The super call must be last in an initializer list: '{0}'.");
+
/**
* 12.6 Lists: It is a compile time error if the type argument of a constant
* list literal includes a type parameter.
@@ -3812,20 +4673,6 @@
"Try replacing the type parameter with a different type.");
/**
- * The 'covariant' keyword was found in an inappropriate location.
- */
- static const CompileTimeErrorCode INVALID_USE_OF_COVARIANT =
- CompileTimeErrorCode(
- 'INVALID_USE_OF_COVARIANT',
- "The 'covariant' keyword can only be used for parameters in instance "
- "methods or before non-final instance fields.",
- correction: "Try removing the 'covariant' keyword.");
-
- @Deprecated('Use ParserErrorCode.INVALID_USE_OF_COVARIANT_IN_EXTENSION')
- static const ParserErrorCode INVALID_USE_OF_COVARIANT_IN_EXTENSION =
- ParserErrorCode.INVALID_USE_OF_COVARIANT_IN_EXTENSION;
-
- /**
* Parameters:
* 0: the URI that is invalid
*/
@@ -3851,6 +4698,53 @@
hasPublishedDocs: true);
/**
+ * The 'covariant' keyword was found in an inappropriate location.
+ */
+ static const CompileTimeErrorCode INVALID_USE_OF_COVARIANT =
+ CompileTimeErrorCode(
+ 'INVALID_USE_OF_COVARIANT',
+ "The 'covariant' keyword can only be used for parameters in instance "
+ "methods or before non-final instance fields.",
+ correction: "Try removing the 'covariant' keyword.");
+
+ /**
+ * No parameters.
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when an expression whose value will
+ // always be `null` is dererenced.
+ //
+ // #### Example
+ //
+ // The following code produces this diagnostic because `x` will always be
+ // `null`:
+ //
+ // ```dart
+ // %experiments=non-nullable
+ // int f(Null x) {
+ // return [!x!].length;
+ // }
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If the value is allowed to be something other than `null`, then change the
+ // type of the expression:
+ //
+ // ```dart
+ // %experiments=non-nullable
+ // int f(String? x) {
+ // return x!.length;
+ // }
+ // ```
+ static const CompileTimeErrorCode INVALID_USE_OF_NULL_VALUE =
+ CompileTimeErrorCode('INVALID_USE_OF_NULL_VALUE',
+ "An expression whose value is always 'null' can't be dereferenced.",
+ correction: "Try changing the type of the expression.",
+ hasPublishedDocs: true);
+
+ /**
* Parameters:
* 0: the name of the extension
*/
@@ -3956,6 +4850,51 @@
"the value.");
/**
+ * Parameters:
+ * 0: the actual type of the list element
+ * 1: the expected type of the list element
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when the type of an element in a list
+ // literal isn't assignable to the element type of the list.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because `2.5` is a double, and
+ // the list can hold only integers:
+ //
+ // ```dart
+ // List<int> x = [1, [!2.5!], 3];
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If you intended to add a different object to the list, then replace the
+ // element with an expression that computes the intended object:
+ //
+ // ```dart
+ // List<int> x = [1, 2, 3];
+ // ```
+ //
+ // If the object shouldn't be in the list, then remove the element:
+ //
+ // ```dart
+ // List<int> x = [1, 3];
+ // ```
+ //
+ // If the object being computed is correct, then widen the element type of the
+ // list to allow all of the different types of objects it needs to contain:
+ //
+ // ```dart
+ // List<num> x = [1, 2.5, 3];
+ // ```
+ static const CompileTimeErrorCode LIST_ELEMENT_TYPE_NOT_ASSIGNABLE =
+ CompileTimeErrorCode('LIST_ELEMENT_TYPE_NOT_ASSIGNABLE',
+ "The element type '{0}' can't be assigned to the list type '{1}'.",
+ hasPublishedDocs: true);
+
+ /**
* No parameters.
*/
// #### Description
@@ -3999,13 +4938,85 @@
hasPublishedDocs: true);
/**
- * 7 Classes: It is a compile time error if a class <i>C</i> declares a member
- * with the same name as <i>C</i>.
+ * Parameters:
+ * 0: the type of the expression being used as a key
+ * 1: the type of keys declared for the map
*/
- @Deprecated('Superseded by ParserErrorCode.MEMBER_WITH_CLASS_NAME')
- static const CompileTimeErrorCode MEMBER_WITH_CLASS_NAME =
- CompileTimeErrorCode('MEMBER_WITH_CLASS_NAME',
- "Class members can't have the same name as the enclosing class.");
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when a key of a key-value pair in a
+ // map literal has a type that isn't assignable to the key type of the map.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because `2` is an `int`, but
+ // the keys of the map are required to be `String`s:
+ //
+ // ```dart
+ // var m = <String, String>{[!2!] : 'a'};
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If the type of the map is correct, then change the key to have the correct
+ // type:
+ //
+ // ```dart
+ // var m = <String, String>{'2' : 'a'};
+ // ```
+ //
+ // If the type of the key is correct, then change the key type of the map:
+ //
+ // ```dart
+ // var m = <int, String>{2 : 'a'};
+ // ```
+ static const CompileTimeErrorCode MAP_KEY_TYPE_NOT_ASSIGNABLE =
+ CompileTimeErrorCode(
+ 'MAP_KEY_TYPE_NOT_ASSIGNABLE',
+ "The element type '{0}' can't be assigned to the map key type "
+ "'{1}'.",
+ hasPublishedDocs: true);
+
+ /**
+ * Parameters:
+ * 0: the type of the expression being used as a value
+ * 1: the type of values declared for the map
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when a value of a key-value pair in a
+ // map literal has a type that isn't assignable to the the value type of the
+ // map.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because `2` is an `int`, but/
+ // the values of the map are required to be `String`s:
+ //
+ // ```dart
+ // var m = <String, String>{'a' : [!2!]};
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If the type of the map is correct, then change the value to have the
+ // correct type:
+ //
+ // ```dart
+ // var m = <String, String>{'a' : '2'};
+ // ```
+ //
+ // If the type of the value is correct, then change the value type of the map:
+ //
+ // ```dart
+ // var m = <String, int>{'a' : 2};
+ // ```
+ static const CompileTimeErrorCode MAP_VALUE_TYPE_NOT_ASSIGNABLE =
+ CompileTimeErrorCode(
+ 'MAP_VALUE_TYPE_NOT_ASSIGNABLE',
+ "The element type '{0}' can't be assigned to the map value type "
+ "'{1}'.",
+ hasPublishedDocs: true);
/**
* 12.1 Constants: A constant expression is ... a constant list literal.
@@ -4169,6 +5180,20 @@
"concrete member in the class has type '{2}'.");
/**
+ * It's a compile-time error to apply a mixin containing super-invocations to
+ * a class that doesn't have a concrete implementation of the super-invoked
+ * members compatible with the super-constraint interface.
+ *
+ * Parameters:
+ * 0: the display name of the member without a concrete implementation
+ */
+ static const CompileTimeErrorCode
+ MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER = CompileTimeErrorCode(
+ 'MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER',
+ "The class doesn't have a concrete implementation of the "
+ "super-invoked member '{0}'.");
+
+ /**
* It's a compile-time error to apply a mixin to a class that doesn't
* implement all the `on` type requirements of the mixin declaration.
*
@@ -4185,20 +5210,6 @@
correction: "Try extending the class '{0}'.");
/**
- * It's a compile-time error to apply a mixin containing super-invocations to
- * a class that doesn't have a concrete implementation of the super-invoked
- * members compatible with the super-constraint interface.
- *
- * Parameters:
- * 0: the display name of the member without a concrete implementation
- */
- static const CompileTimeErrorCode
- MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER = CompileTimeErrorCode(
- 'MIXIN_APPLICATION_NO_CONCRETE_SUPER_INVOKED_MEMBER',
- "The class doesn't have a concrete implementation of the "
- "super-invoked member '{0}'.");
-
- /**
* 9 Mixins: It is a compile-time error if a declared or derived mixin
* explicitly declares a constructor.
*
@@ -4408,6 +5419,91 @@
correction: "Try removing all but one of the 'super' initializers.");
/**
+ * 12.11.1 New: It is a static warning if <i>T</i> is not a class accessible
+ * in the current scope, optionally followed by type arguments.
+ *
+ * Parameters:
+ * 0: the name of the non-type element
+ */
+ static const CompileTimeErrorCode NEW_WITH_NON_TYPE =
+ CompileTimeErrorCodeWithUniqueName('CREATION_WITH_NON_TYPE',
+ 'NEW_WITH_NON_TYPE', "The name '{0}' isn't a class.",
+ correction: "Try correcting the name to match an existing class.",
+ isUnresolvedIdentifier: true);
+
+ /**
+ * 12.11.1 New: If <i>T</i> is a class or parameterized type accessible in the
+ * current scope then:
+ * 1. If <i>e</i> is of the form <i>new T.id(a<sub>1</sub>, …,
+ * a<sub>n</sub>, x<sub>n+1</sub>: a<sub>n+1</sub>, …,
+ * x<sub>n+k</sub>: a<sub>n+k</sub>)</i> it is a static warning if
+ * <i>T.id</i> is not the name of a constructor declared by the type
+ * <i>T</i>.
+ * If <i>e</i> of the form <i>new T(a<sub>1</sub>, …, a<sub>n</sub>,
+ * x<sub>n+1</sub>: a<sub>n+1</sub>, …, x<sub>n+k</sub>:
+ * a<sub>n+kM/sub>)</i> it is a static warning if the type <i>T</i> does not
+ * declare a constructor with the same name as the declaration of <i>T</i>.
+ */
+ static const CompileTimeErrorCode NEW_WITH_UNDEFINED_CONSTRUCTOR =
+ CompileTimeErrorCode('NEW_WITH_UNDEFINED_CONSTRUCTOR',
+ "The class '{0}' doesn't have a constructor named '{1}'.",
+ correction: "Try invoking a different constructor, or "
+ "define a constructor named '{1}'.");
+
+ /**
+ * Parameters:
+ * 0: the name of the class being instantiated
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when an unnamed constructor is
+ // invoked on a class that defines named constructors but the class doesn’t
+ // have an unnamed constructor.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because `A` doesn't define an
+ // unnamed constructor:
+ //
+ // ```dart
+ // class A {
+ // A.a();
+ // }
+ //
+ // A f() => [!A!]();
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If one of the named constructors does what you need, then use it:
+ //
+ // ```dart
+ // class A {
+ // A.a();
+ // }
+ //
+ // A f() => A.a();
+ // ```
+ //
+ // If none of the named constructors does what you need, and you're able to
+ // add an unnamed constructor, then add the constructor:
+ //
+ // ```dart
+ // class A {
+ // A();
+ // A.a();
+ // }
+ //
+ // A f() => A();
+ // ```
+ static const CompileTimeErrorCode NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT =
+ CompileTimeErrorCode('NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT',
+ "The class '{0}' doesn't have a default constructor.",
+ correction:
+ "Try using one of the named constructors defined in '{0}'.",
+ hasPublishedDocs: true);
+
+ /**
* No parameters.
*/
// #### Description
@@ -4499,6 +5595,146 @@
"constructor in '{0}'.");
/**
+ * Parameters:
+ * 0: the name of the first member
+ * 1: the name of the second member
+ * 2: the name of the third member
+ * 3: the name of the fourth member
+ * 4: the number of additional missing members that aren't listed
+ */
+ static const CompileTimeErrorCode
+ NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS =
+ CompileTimeErrorCodeWithUniqueName(
+ 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
+ ' CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS',
+ "Missing concrete implementations of '{0}', '{1}', '{2}', '{3}', and "
+ "{4} more.",
+ correction: "Try implementing the missing methods, or make the class "
+ "abstract.",
+ hasPublishedDocs: true);
+
+ /**
+ * Parameters:
+ * 0: the name of the first member
+ * 1: the name of the second member
+ * 2: the name of the third member
+ * 3: the name of the fourth member
+ */
+ static const CompileTimeErrorCode
+ NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR =
+ CompileTimeErrorCodeWithUniqueName(
+ 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
+ ' CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR',
+ "Missing concrete implementations of '{0}', '{1}', '{2}', and '{3}'.",
+ correction: "Try implementing the missing methods, or make the class "
+ "abstract.",
+ hasPublishedDocs: true);
+
+ /**
+ * Parameters:
+ * 0: the name of the member
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when a concrete class inherits one or
+ // more abstract members, and doesn't provide or inherit an implementation for
+ // at least one of those abstract members.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because the class `B` doesn't
+ // have a concrete implementation of `m`:
+ //
+ // ```dart
+ // abstract class A {
+ // void m();
+ // }
+ //
+ // class [!B!] extends A {}
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If the subclass can provide a concrete implementation for some or all of
+ // the abstract inherited members, then add the concrete implementations:
+ //
+ // ```dart
+ // abstract class A {
+ // void m();
+ // }
+ //
+ // class B extends A {
+ // void m() {}
+ // }
+ // ```
+ //
+ // If there is a mixin that provides an implementation of the inherited
+ // methods, then apply the mixin to the subclass:
+ //
+ // ```dart
+ // abstract class A {
+ // void m();
+ // }
+ //
+ // class B extends A with M {}
+ //
+ // mixin M {
+ // void m() {}
+ // }
+ // ```
+ //
+ // If the subclass can't provide a concrete implementation for all of the
+ // abstract inherited members, then mark the subclass as being abstract:
+ //
+ // ```dart
+ // abstract class A {
+ // void m();
+ // }
+ //
+ // abstract class B extends A {}
+ // ```
+ static const CompileTimeErrorCode
+ NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE =
+ CompileTimeErrorCodeWithUniqueName(
+ 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
+ ' CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE',
+ "Missing concrete implementation of '{0}'.",
+ correction: "Try implementing the missing method, or make the class "
+ "abstract.",
+ hasPublishedDocs: true);
+
+ /**
+ * Parameters:
+ * 0: the name of the first member
+ * 1: the name of the second member
+ * 2: the name of the third member
+ */
+ static const CompileTimeErrorCode
+ NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE =
+ CompileTimeErrorCodeWithUniqueName(
+ 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
+ 'CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE',
+ "Missing concrete implementations of '{0}', '{1}', and '{2}'.",
+ correction: "Try implementing the missing methods, or make the class "
+ "abstract.",
+ hasPublishedDocs: true);
+
+ /**
+ * Parameters:
+ * 0: the name of the first member
+ * 1: the name of the second member
+ */
+ static const CompileTimeErrorCode
+ NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO =
+ CompileTimeErrorCodeWithUniqueName(
+ 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
+ 'CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO',
+ "Missing concrete implementations of '{0}' and '{1}'.",
+ correction: "Try implementing the missing methods, or make the class "
+ "abstract.",
+ hasPublishedDocs: true);
+
+ /**
* 13.2 Expression Statements: It is a compile-time error if a non-constant
* map literal that has no explicit type arguments appears in a place where a
* statement is expected.
@@ -4514,6 +5750,52 @@
*/
// #### Description
//
+ // The analyzer produces this diagnostic when an annotation is the invocation
+ // of an existing constructor even though the invoked constructor isn't a
+ // const constructor.
+ //
+ // #### Example
+ //
+ // The following code produces this diagnostic because the constructor for `C`
+ // isn't a const constructor:
+ //
+ // ```dart
+ // [!@C()!]
+ // void f() {
+ // }
+ //
+ // class C {
+ // C();
+ // }
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If it's valid for the class to have a const constructor, then create a
+ // const constructor that can be used for the annotation:
+ //
+ // ```dart
+ // @C()
+ // void f() {
+ // }
+ //
+ // class C {
+ // const C();
+ // }
+ // ```
+ //
+ // If it isn't valid for the class to have a const constructor, then either
+ // remove the annotation or use a different class for the annotation.
+ static const CompileTimeErrorCode NON_CONSTANT_ANNOTATION_CONSTRUCTOR =
+ CompileTimeErrorCode('NON_CONSTANT_ANNOTATION_CONSTRUCTOR',
+ "Annotation creation can only call a const constructor.",
+ hasPublishedDocs: true);
+
+ /**
+ * No parameters.
+ */
+ // #### Description
+ //
// The analyzer produces this diagnostic when the expression in a `case`
// clause isn't a constant expression.
//
@@ -4697,6 +5979,56 @@
*/
// #### Description
//
+ // The analyzer produces this diagnostic when an `if` element or a spread
+ // element in a constant map isn't a constant element.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because it's attempting to
+ // spread a non-constant map:
+ //
+ // ```dart
+ // var notConst = <int, int>{};
+ // var map = const <int, int>{...[!notConst!]};
+ // ```
+ //
+ // Similarly, the following code produces this diagnostic because the
+ // condition in the `if` element isn't a constant expression:
+ //
+ // ```dart
+ // bool notConst = true;
+ // var map = const <int, int>{if ([!notConst!]) 1 : 2};
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If the map needs to be a constant map, then make the elements constants.
+ // In the spread example, you might do that by making the collection being
+ // spread a constant:
+ //
+ // ```dart
+ // const notConst = <int, int>{};
+ // var map = const <int, int>{...notConst};
+ // ```
+ //
+ // If the map doesn't need to be a constant map, then remove the `const`
+ // keyword:
+ //
+ // ```dart
+ // bool notConst = true;
+ // var map = <int, int>{if (notConst) 1 : 2};
+ // ```
+ static const CompileTimeErrorCode NON_CONSTANT_MAP_ELEMENT =
+ CompileTimeErrorCode('NON_CONSTANT_MAP_ELEMENT',
+ "The elements in a const map literal must be constant.",
+ correction: "Try removing the keyword 'const' from the map literal.",
+ hasPublishedDocs: true);
+
+ /**
+ * No parameters.
+ */
+ // #### Description
+ //
// The analyzer produces this diagnostic when a key in a constant map literal
// isn't a constant value.
//
@@ -4785,56 +6117,6 @@
hasPublishedDocs: true);
/**
- * No parameters.
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when an `if` element or a spread
- // element in a constant map isn't a constant element.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because it's attempting to
- // spread a non-constant map:
- //
- // ```dart
- // var notConst = <int, int>{};
- // var map = const <int, int>{...[!notConst!]};
- // ```
- //
- // Similarly, the following code produces this diagnostic because the
- // condition in the `if` element isn't a constant expression:
- //
- // ```dart
- // bool notConst = true;
- // var map = const <int, int>{if ([!notConst!]) 1 : 2};
- // ```
- //
- // #### Common fixes
- //
- // If the map needs to be a constant map, then make the elements constants.
- // In the spread example, you might do that by making the collection being
- // spread a constant:
- //
- // ```dart
- // const notConst = <int, int>{};
- // var map = const <int, int>{...notConst};
- // ```
- //
- // If the map doesn't need to be a constant map, then remove the `const`
- // keyword:
- //
- // ```dart
- // bool notConst = true;
- // var map = <int, int>{if (notConst) 1 : 2};
- // ```
- static const CompileTimeErrorCode NON_CONSTANT_MAP_ELEMENT =
- CompileTimeErrorCode('NON_CONSTANT_MAP_ELEMENT',
- "The elements in a const map literal must be constant.",
- correction: "Try removing the keyword 'const' from the map literal.",
- hasPublishedDocs: true);
-
- /**
* 12.7 Maps: It is a compile time error if either a key or a value of an
* entry in a constant map literal is not a compile-time constant.
*
@@ -4853,52 +6135,6 @@
*/
// #### Description
//
- // The analyzer produces this diagnostic when an annotation is the invocation
- // of an existing constructor even though the invoked constructor isn't a
- // const constructor.
- //
- // #### Example
- //
- // The following code produces this diagnostic because the constructor for `C`
- // isn't a const constructor:
- //
- // ```dart
- // [!@C()!]
- // void f() {
- // }
- //
- // class C {
- // C();
- // }
- // ```
- //
- // #### Common fixes
- //
- // If it's valid for the class to have a const constructor, then create a
- // const constructor that can be used for the annotation:
- //
- // ```dart
- // @C()
- // void f() {
- // }
- //
- // class C {
- // const C();
- // }
- // ```
- //
- // If it isn't valid for the class to have a const constructor, then either
- // remove the annotation or use a different class for the annotation.
- static const CompileTimeErrorCode NON_CONSTANT_ANNOTATION_CONSTRUCTOR =
- CompileTimeErrorCode('NON_CONSTANT_ANNOTATION_CONSTRUCTOR',
- "Annotation creation can only call a const constructor.",
- hasPublishedDocs: true);
-
- /**
- * No parameters.
- */
- // #### Description
- //
// The analyzer produces this diagnostic when a constant set literal contains
// an element that isn't a compile-time constant.
//
@@ -4936,17 +6172,6 @@
hasPublishedDocs: true);
/**
- * This error code is no longer being generated. It should be removed when the
- * reference to it in the linter has been removed and rolled into the SDK.
- */
- @deprecated
- static const CompileTimeErrorCode NON_CONSTANT_VALUE_IN_INITIALIZER =
- CompileTimeErrorCode(
- 'NON_CONSTANT_VALUE_IN_INITIALIZER',
- "Initializer expressions in constant constructors must be "
- "constants.");
-
- /**
* 7.6.1 Generative Constructors: Let <i>C</i> be the class in which the
* superinitializer appears and let <i>S</i> be the superclass of <i>C</i>.
* Let <i>k</i> be a generative constructor. It is a compile-time error if
@@ -4966,6 +6191,96 @@
/**
* Parameters:
+ * 0: the name of the non-type element
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when the identifier following the
+ // `on` in a `catch` clause is defined to be something other than a type.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because `f` is a function, not
+ // a type:
+ //
+ // ```dart
+ // void f() {
+ // try {
+ // // ...
+ // } on [!f!] {
+ // // ...
+ // }
+ // }
+ // ```
+ //
+ // #### Common fixes
+ //
+ // Change the name to the type of object that should be caught:
+ //
+ // ```dart
+ // void f() {
+ // try {
+ // // ...
+ // } on FormatException {
+ // // ...
+ // }
+ // }
+ // ```
+ static const CompileTimeErrorCode NON_TYPE_IN_CATCH_CLAUSE =
+ CompileTimeErrorCode(
+ 'NON_TYPE_IN_CATCH_CLAUSE',
+ "The name '{0}' isn't a type and can't be used in an on-catch "
+ "clause.",
+ correction: "Try correcting the name to match an existing class.",
+ hasPublishedDocs: true);
+
+ /**
+ * 7.1.1 Operators: It is a static warning if the return type of the
+ * user-declared operator []= is explicitly declared and not void.
+ */
+ static const CompileTimeErrorCode NON_VOID_RETURN_FOR_OPERATOR =
+ CompileTimeErrorCode('NON_VOID_RETURN_FOR_OPERATOR',
+ "The return type of the operator []= must be 'void'.",
+ correction: "Try changing the return type to 'void'.");
+
+ /**
+ * 7.3 Setters: It is a static warning if a setter declares a return type
+ * other than void.
+ */
+ static const CompileTimeErrorCode NON_VOID_RETURN_FOR_SETTER =
+ CompileTimeErrorCode('NON_VOID_RETURN_FOR_SETTER',
+ "The return type of the setter must be 'void' or absent.",
+ correction: "Try removing the return type, or "
+ "define a method rather than a setter.");
+
+ /**
+ * Parameters:
+ * 0: the name that is not a type
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when a name is used as a type but
+ // declared to be something other than a type.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because `f` is a function:
+ //
+ // ```dart
+ // f() {}
+ // g([!f!] v) {}
+ // ```
+ //
+ // #### Common fixes
+ //
+ // Replace the name with the name of a type.
+ static const CompileTimeErrorCode NOT_A_TYPE = CompileTimeErrorCode(
+ 'NOT_A_TYPE', "{0} isn't a type.",
+ correction: "Try correcting the name to match an existing type.",
+ hasPublishedDocs: true);
+
+ /**
+ * Parameters:
* 0: the name of the variable that is invalid
*/
// #### Description
@@ -5135,10 +6450,6 @@
correction: "Try adding the missing arguments.",
hasPublishedDocs: true);
- @Deprecated('Use CompileTimeErrorCode.NOT_ENOUGH_POSITIONAL_ARGUMENTS')
- static const CompileTimeErrorCode NOT_ENOUGH_REQUIRED_ARGUMENTS =
- NOT_ENOUGH_POSITIONAL_ARGUMENTS;
-
/**
* Parameters:
* 0: the name of the field that is not initialized
@@ -5587,6 +6898,49 @@
/**
* Parameters:
+ * 0: the name of expected library name
+ * 1: the non-matching actual library name from the "part of" declaration
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when a library attempts to include a
+ // file as a part of itself when the other file is a part of a different
+ // library.
+ //
+ // #### Example
+ //
+ // Given a file named `part.dart` containing
+ //
+ // ```dart
+ // %uri="package:a/part.dart"
+ // part of 'library.dart';
+ // ```
+ //
+ // The following code, in any file other than `library.dart`, produces this
+ // diagnostic because it attempts to include `part.dart` as a part of itself
+ // when `part.dart` is a part of a different library:
+ //
+ // ```dart
+ // part [!'package:a/part.dart'!];
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If the library should be using a different file as a part, then change the
+ // URI in the part directive to be the URI of the other file.
+ //
+ // If the part file should be a part of this library, then update the URI (or
+ // library name) in the part-of directive to be the URI (or name) of the
+ // correct library.
+ static const CompileTimeErrorCode PART_OF_DIFFERENT_LIBRARY =
+ CompileTimeErrorCode('PART_OF_DIFFERENT_LIBRARY',
+ "Expected this library to be part of '{0}', not '{1}'.",
+ correction: "Try including a different part, or changing the name of "
+ "the library in the part's part-of directive.",
+ hasPublishedDocs: true);
+
+ /**
+ * Parameters:
* 0: the uri pointing to a non-library declaration
*/
// #### Description
@@ -5895,6 +7249,148 @@
correction: "Try redirecting to a constructor of a different class.");
/**
+ * Parameters:
+ * 0: the name of the redirected constructor
+ * 1: the name of the redirecting constructor
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when a factory constructor attempts
+ // to redirect to another constructor, but the two have incompatible
+ // parameters. The parameters are compatible if all of the parameters of the
+ // redirecting constructor can be passed to the other constructor and if the
+ // other constructor doesn't require any parameters that aren't declared by
+ // the redirecting constructor.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because the constructor for `A`
+ // doesn't declare a parameter that the constructor for `B` requires:
+ //
+ // ```dart
+ // abstract class A {
+ // factory A() = [!B!];
+ // }
+ //
+ // class B implements A {
+ // B(int x);
+ // B.zero();
+ // }
+ // ```
+ //
+ // The following code produces this diagnostic because the constructor for `A`
+ // declares a named parameter (`y`) that the constructor for `B` doesn't
+ // allow:
+ //
+ // ```dart
+ // abstract class A {
+ // factory A(int x, {int y}) = [!B!];
+ // }
+ //
+ // class B implements A {
+ // B(int x);
+ // }
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If there's a different constructor that is compatible with the redirecting
+ // constructor, then redirect to that constructor:
+ //
+ // ```dart
+ // abstract class A {
+ // factory A() = B.zero;
+ // }
+ //
+ // class B implements A {
+ // B(int x);
+ // B.zero();
+ // }
+ // ```
+ //
+ // Otherwise, update the redirecting constructor to be compatible:
+ //
+ // ```dart
+ // abstract class A {
+ // factory A(int x) = B;
+ // }
+ //
+ // class B implements A {
+ // B(int x);
+ // }
+ // ```
+ static const CompileTimeErrorCode REDIRECT_TO_INVALID_FUNCTION_TYPE =
+ CompileTimeErrorCode(
+ 'REDIRECT_TO_INVALID_FUNCTION_TYPE',
+ "The redirected constructor '{0}' has incompatible parameters with "
+ "'{1}'.",
+ correction: "Try redirecting to a different constructor.",
+ hasPublishedDocs: true);
+
+ /**
+ * Parameters:
+ * 0: the name of the redirected constructor's return type
+ * 1: the name of the redirecting constructor's return type
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when a factory constructor redirects
+ // to a constructor whose return type isn't a subtype of the type that the
+ // factory constructor is declared to produce.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because `A` isn't a subclass
+ // of `C`, which means that the value returned by the constructor `A()`
+ // couldn't be returned from the constructor `C()`:
+ //
+ // ```dart
+ // class A {}
+ //
+ // class B implements C {}
+ //
+ // class C {
+ // factory C() = [!A!];
+ // }
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If the factory constructor is redirecting to a constructor in the wrong
+ // class, then update the factory constructor to redirect to the correct
+ // constructor:
+ //
+ // ```dart
+ // class A {}
+ //
+ // class B implements C {}
+ //
+ // class C {
+ // factory C() = B;
+ // }
+ // ```
+ //
+ // If the class defining the constructor being redirected to is the class that
+ // should be returned, then make it a subtype of the factory's return type:
+ //
+ // ```dart
+ // class A implements C {}
+ //
+ // class B implements C {}
+ //
+ // class C {
+ // factory C() = A;
+ // }
+ // ```
+ static const CompileTimeErrorCode REDIRECT_TO_INVALID_RETURN_TYPE =
+ CompileTimeErrorCode(
+ 'REDIRECT_TO_INVALID_RETURN_TYPE',
+ "The return type '{0}' of the redirected constructor isn't "
+ "a subtype of '{1}'.",
+ correction: "Try redirecting to a different constructor.",
+ hasPublishedDocs: true);
+
+ /**
* 7.6.2 Factories: It is a compile-time error if <i>k</i> is prefixed with
* the const modifier but <i>k'</i> is not a constant constructor.
*/
@@ -6097,6 +7593,38 @@
correction: "Try removing the value, replacing 'return' with 'yield' or "
"changing the method body modifier.");
+ /**
+ * No parameters.
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when it finds a `return` statement
+ // without an expression in a function that declares a return type.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because the function `f` is
+ // expected to return an `int`, but no value is being returned:
+ //
+ // ```dart
+ // int f() {
+ // [!return!];
+ // }
+ // ```
+ //
+ // #### Common fixes
+ //
+ // Add an expression that computes the value to be returned:
+ //
+ // ```dart
+ // int f() {
+ // return 0;
+ // }
+ // ```
+ static const CompileTimeErrorCode RETURN_WITHOUT_VALUE = CompileTimeErrorCode(
+ 'RETURN_WITHOUT_VALUE', "The return value is missing after 'return'.",
+ hasPublishedDocs: true);
+
static const CompileTimeErrorCode SET_ELEMENT_FROM_DEFERRED_LIBRARY =
CompileTimeErrorCode(
'SET_ELEMENT_FROM_DEFERRED_LIBRARY',
@@ -6105,6 +7633,15 @@
correction: "Try making the deferred import non-deferred.");
/**
+ * Parameters:
+ * 0: the actual type of the set element
+ * 1: the expected type of the set element
+ */
+ static const CompileTimeErrorCode SET_ELEMENT_TYPE_NOT_ASSIGNABLE =
+ CompileTimeErrorCode('SET_ELEMENT_TYPE_NOT_ASSIGNABLE',
+ "The element type '{0}' can't be assigned to the set type '{1}'.");
+
+ /**
* 14.1 Imports: It is a compile-time error if a prefix used in a deferred
* import is used in another import clause.
*/
@@ -6123,6 +7660,63 @@
correction: "Try making the deferred import non-deferred.");
/**
+ * Parameters:
+ * 0: the name of the instance member
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when a class name is used to access
+ // an instance field. Instance fields don't exist on a class; they exist only
+ // on an instance of the class.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because `x` is an instance
+ // field:
+ //
+ // ```dart
+ // class C {
+ // static int a;
+ //
+ // int b;
+ // }
+ //
+ // int f() => C.[!b!];
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If you intend to access a static field, then change the name of the field
+ // to an existing static field:
+ //
+ // ```dart
+ // class C {
+ // static int a;
+ //
+ // int b;
+ // }
+ //
+ // int f() => C.a;
+ // ```
+ //
+ // If you intend to access the instance field, then use an instance of the
+ // class to access the field:
+ //
+ // ```dart
+ // class C {
+ // static int a;
+ //
+ // int b;
+ // }
+ //
+ // int f(C c) => c.b;
+ // ```
+ static const CompileTimeErrorCode STATIC_ACCESS_TO_INSTANCE_MEMBER =
+ CompileTimeErrorCode('STATIC_ACCESS_TO_INSTANCE_MEMBER',
+ "Instance member '{0}' can't be accessed using static access.",
+ hasPublishedDocs: true);
+
+ /**
* No parameters.
*/
// #### Description
@@ -6215,6 +7809,63 @@
/**
* Parameters:
+ * 0: The static type of the switch expression
+ * 1: The static type of the case expressions
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when the type of the expression in a
+ // `switch` statement isn't assignable to the type of the expressions in the
+ // `case` clauses.
+ //
+ // #### Example
+ //
+ // The following code produces this diagnostic because the type of `s`
+ // (`String`) isn't assignable to the type of `0` (`int`):
+ //
+ // ```dart
+ // void f(String s) {
+ // switch ([!s!]) {
+ // case 0:
+ // break;
+ // }
+ // }
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If the type of the `case` expressions is correct, then change the
+ // expression in the `switch` statement to have the correct type:
+ //
+ // ```dart
+ // void f(String s) {
+ // switch (int.parse(s)) {
+ // case 0:
+ // break;
+ // }
+ // }
+ // ```
+ //
+ // If the type of the `switch` expression is correct, then change the `case`
+ // expressions to have the correct type:
+ //
+ // ```dart
+ // void f(String s) {
+ // switch (s) {
+ // case '0':
+ // break;
+ // }
+ // }
+ // ```
+ static const CompileTimeErrorCode SWITCH_EXPRESSION_NOT_ASSIGNABLE =
+ CompileTimeErrorCode(
+ 'SWITCH_EXPRESSION_NOT_ASSIGNABLE',
+ "Type '{0}' of the switch expression isn't assignable to "
+ "the type '{1}' of case expressions.",
+ hasPublishedDocs: true);
+
+ /**
+ * Parameters:
* 0: the type that can't be thrown
*/
// #### Description
@@ -6252,6 +7903,45 @@
/**
* Parameters:
+ * 0: the element whose type could not be inferred.
+ * 1: The [TopLevelInferenceError]'s arguments that led to the cycle.
+ */
+ static const CompileTimeErrorCode TOP_LEVEL_CYCLE = CompileTimeErrorCode(
+ 'TOP_LEVEL_CYCLE',
+ "The type of '{0}' can't be inferred because it depends on itself "
+ "through the cycle: {1}.",
+ correction:
+ "Try adding an explicit type to one or more of the variables in the "
+ "cycle in order to break the cycle.");
+
+ /**
+ * 15.3.1 Typedef: Any self reference, either directly, or recursively via
+ * another typedef, is a compile time error.
+ */
+ static const CompileTimeErrorCode TYPE_ALIAS_CANNOT_REFERENCE_ITSELF =
+ CompileTimeErrorCode(
+ 'TYPE_ALIAS_CANNOT_REFERENCE_ITSELF',
+ "Typedefs can't reference themselves directly or recursively via "
+ "another typedef.");
+
+ /**
+ * 15.1 Static Types: It is a static warning to use a deferred type in a type
+ * annotation.
+ *
+ * Parameters:
+ * 0: the name of the type that is deferred and being used in a type
+ * annotation
+ */
+ static const CompileTimeErrorCode TYPE_ANNOTATION_DEFERRED_CLASS =
+ CompileTimeErrorCode(
+ 'TYPE_ANNOTATION_DEFERRED_CLASS',
+ "The deferred type '{0}' can't be used in a declaration, cast or "
+ "type test.",
+ correction: "Try using a different type, or "
+ "changing the import to not be deferred.");
+
+ /**
+ * Parameters:
* 0: the name of the type used in the instance creation that should be
* limited by the bound as specified in the class declaration
* 1: the name of the bounding type
@@ -6288,18 +7978,143 @@
hasPublishedDocs: true);
/**
- * 15.3.1 Typedef: Any self reference, either directly, or recursively via
- * another typedef, is a compile time error.
+ * 10 Generics: However, a type parameter is considered to be a malformed type
+ * when referenced by a static member.
+ *
+ * 15.1 Static Types: Any use of a malformed type gives rise to a static
+ * warning. A malformed type is then interpreted as dynamic by the static type
+ * checker and the runtime.
*/
- static const CompileTimeErrorCode TYPE_ALIAS_CANNOT_REFERENCE_ITSELF =
- CompileTimeErrorCode(
- 'TYPE_ALIAS_CANNOT_REFERENCE_ITSELF',
- "Typedefs can't reference themselves directly or recursively via "
- "another typedef.");
+ static const CompileTimeErrorCode TYPE_PARAMETER_REFERENCED_BY_STATIC =
+ CompileTimeErrorCode('TYPE_PARAMETER_REFERENCED_BY_STATIC',
+ "Static members can't reference type parameters of the class.",
+ correction: "Try removing the reference to the type parameter, or "
+ "making the member an instance member.");
- @Deprecated('Use ParserErrorCode.TYPE_PARAMETER_ON_CONSTRUCTOR')
- static const ParserErrorCode TYPE_PARAMETER_ON_CONSTRUCTOR =
- ParserErrorCode.TYPE_PARAMETER_ON_CONSTRUCTOR;
+ /**
+ * 12.31 Type Test: It is a static warning if <i>T</i> does not denote a type
+ * available in the current lexical scope.
+ */
+ static const CompileTimeErrorCode TYPE_TEST_WITH_NON_TYPE =
+ CompileTimeErrorCode(
+ 'TYPE_TEST_WITH_NON_TYPE',
+ "The name '{0}' isn't a type and can't be used in an 'is' "
+ "expression.",
+ correction: "Try correcting the name to match an existing type.");
+
+ /**
+ * No parameters.
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when the name following the `is` in a
+ // type test expression isn't defined.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because the name `Srting` isn't
+ // defined:
+ //
+ // ```dart
+ // void f(Object o) {
+ // if (o is [!Srting!]) {
+ // // ...
+ // }
+ // }
+ // ```
+ //
+ // #### Common fixes
+ //
+ // Replace the name with the name of a type:
+ //
+ // ```dart
+ // void f(Object o) {
+ // if (o is String) {
+ // // ...
+ // }
+ // }
+ // ```
+ static const CompileTimeErrorCode TYPE_TEST_WITH_UNDEFINED_NAME =
+ CompileTimeErrorCode(
+ 'TYPE_TEST_WITH_UNDEFINED_NAME',
+ "The name '{0}' isn't defined, so it can't be used in an 'is' "
+ "expression.",
+ correction:
+ "Try changing the name to the name of an existing type, or "
+ "creating a type with the name '{0}'.",
+ hasPublishedDocs: true);
+
+ /**
+ * No parameters.
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when an expression whose type is
+ // <a href=”#potentially-non-nullable”>potentially non-nullable</a> is
+ // dereferenced without first verifying that the value isn't `null`.
+ //
+ // #### Example
+ //
+ // The following code produces this diagnostic because `s` can be `null` at
+ // the point where it's referenced:
+ //
+ // ```dart
+ // %experiments=non-nullable
+ // void f(String? s) {
+ // if ([!s!].length > 3) {
+ // // ...
+ // }
+ // }
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If the value really can be `null`, then add a test to ensure that members
+ // are only accessed when the value isn't `null`:
+ //
+ // ```dart
+ // %experiments=non-nullable
+ // void f(String? s) {
+ // if (s != null && s.length > 3) {
+ // // ...
+ // }
+ // }
+ // ```
+ //
+ // If the expression is a variable and the value should never be `null`, then
+ // change the type of the variable to be non-nullable:
+ //
+ // ```dart
+ // %experiments=non-nullable
+ // void f(String s) {
+ // if (s.length > 3) {
+ // // ...
+ // }
+ // }
+ // ```
+ //
+ // If you believe that the value of the expression should never be `null`, but
+ // you can't change the type of the variable, and you're willing to risk
+ // having an exception thrown at runtime if you're wrong, then you can assert
+ // that the value isn't null:
+ //
+ // ```dart
+ // %experiments=non-nullable
+ // void f(String? s) {
+ // if (s!.length > 3) {
+ // // ...
+ // }
+ // }
+ // ```
+ static const CompileTimeErrorCode UNCHECKED_USE_OF_NULLABLE_VALUE =
+ CompileTimeErrorCode(
+ 'UNCHECKED_USE_OF_NULLABLE_VALUE',
+ "An expression whose value can be 'null' must be null-checked before "
+ "it can be dereferenced.",
+ correction:
+ "Try checking that the value isn't 'null' before dereferencing "
+ "it.",
+ hasPublishedDocs: true);
/**
* No parameters.
@@ -6387,6 +8202,15 @@
isUnresolvedIdentifier: true);
/**
+ * Same as [CompileTimeErrorCode.UNDEFINED_CLASS], but to catch using
+ * "boolean" instead of "bool".
+ */
+ static const CompileTimeErrorCode UNDEFINED_CLASS_BOOLEAN =
+ CompileTimeErrorCode(
+ 'UNDEFINED_CLASS_BOOLEAN', "Undefined class 'boolean'.",
+ correction: "Try using the type 'bool'.");
+
+ /**
* Parameters:
* 0: the name of the superclass that does not define the invoked constructor
* 1: the name of the constructor being invoked
@@ -6786,6 +8610,79 @@
/**
* Parameters:
+ * 0: the name of the identifier
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when it encounters an identifier that
+ // either isn't defined or isn't visible in the scope in which it's being
+ // referenced.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because the name `rihgt` isn't
+ // defined:
+ //
+ // ```dart
+ // int min(int left, int right) => left <= [!rihgt!] ? left : right;
+ // ```
+ //
+ // #### Common fixes
+ //
+ // If the identifier isn't defined, then either define it or replace it with
+ // an identifier that is defined. The example above can be corrected by
+ // fixing the spelling of the variable:
+ //
+ // ```dart
+ // int min(int left, int right) => left <= right ? left : right;
+ // ```
+ //
+ // If the identifier is defined but isn't visible, then you probably need to
+ // add an import or re-arrange your code to make the identifier visible.
+ static const CompileTimeErrorCode UNDEFINED_IDENTIFIER =
+ CompileTimeErrorCode('UNDEFINED_IDENTIFIER', "Undefined name '{0}'.",
+ correction: "Try correcting the name to one that is defined, or "
+ "defining the name.",
+ hasPublishedDocs: true,
+ isUnresolvedIdentifier: true);
+
+ /**
+ * No parameters.
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when the name `await` is used in a
+ // method or function body without being declared, and the body isn't marked
+ // with the `async` keyword. The name `await` only introduces an await
+ // expression in an asynchronous function.
+ //
+ // #### Example
+ //
+ // The following code produces this diagnostic because the name `await` is
+ // used in the body of `f` even though the body of `f` isn't marked with the
+ // `async` keyword:
+ //
+ // ```dart
+ // void f(p) { [!await!] p; }
+ // ```
+ //
+ // #### Common fixes
+ //
+ // Add the keyword `async` to the function body:
+ //
+ // ```dart
+ // void f(p) async { await p; }
+ // ```
+ static const CompileTimeErrorCode UNDEFINED_IDENTIFIER_AWAIT =
+ CompileTimeErrorCode('UNDEFINED_IDENTIFIER_AWAIT',
+ "Undefined name 'await' in function body not marked with 'async'.",
+ correction: "Try correcting the name to one that is defined, "
+ "defining the name, or "
+ "adding 'async' to the enclosing function body.",
+ hasPublishedDocs: true);
+
+ /**
+ * Parameters:
* 0: the name of the requested named parameter
*/
// #### Description
@@ -7014,6 +8911,68 @@
'URI_WITH_INTERPOLATION', "URIs can't use string interpolation.");
/**
+ * No parameters.
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when it finds an expression whose
+ // type is `void`, and the expression is used in a place where a value is
+ // expected, such as before a member access or on the right-hand side of an
+ // assignment.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because `f` doesn't produce an
+ // object on which `toString` can be invoked:
+ //
+ // ```dart
+ // void f() {}
+ //
+ // void g() {
+ // [!f()!].toString();
+ // }
+ // ```
+ //
+ // #### Common fixes
+ //
+ // Either rewrite the code so that the expression has a value or rewrite the
+ // code so that it doesn't depend on the value.
+ static const CompileTimeErrorCode USE_OF_VOID_RESULT = CompileTimeErrorCode(
+ 'USE_OF_VOID_RESULT',
+ "This expression has a type of 'void' so its value can't be used.",
+ correction:
+ "Try checking to see if you're using the correct API; there might "
+ "be a function or call that returns void you didn't expect. Also "
+ "check type parameters and variables which might also be void.",
+ hasPublishedDocs: true);
+
+ /**
+ * Let `C` be a generic class that declares a formal type parameter `X`, and
+ * assume that `T` is a direct superinterface of `C`.
+ *
+ * It is a compile-time error if `X` is explicitly defined as a covariant or
+ * 'in' type parameter and `X` occurs in a non-covariant position in `T`.
+ * It is a compile-time error if `X` is explicitly defined as a contravariant
+ * or 'out' type parameter and `X` occurs in a non-contravariant position in
+ * `T`.
+ *
+ * Parameters:
+ * 0: the name of the type parameter
+ * 1: the variance modifier defined for {0}
+ * 2: the variance position of the type parameter {0} in the
+ * superinterface {3}
+ * 3: the name of the superinterface
+ */
+ static const CompileTimeErrorCode
+ WRONG_EXPLICIT_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE =
+ CompileTimeErrorCode(
+ 'WRONG_EXPLICIT_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE',
+ "'{0}' is an '{1}' type parameter and can't be used in an '{2}' position in '{3}'.",
+ correction: "Try using 'in' type parameters in 'in' positions and 'out' "
+ "type parameters in 'out' positions in the superinterface.",
+ );
+
+ /**
* Parameters:
* 0: the name of the declared operator
* 1: the number of parameters expected
@@ -7151,32 +9110,6 @@
);
/**
- * Let `C` be a generic class that declares a formal type parameter `X`, and
- * assume that `T` is a direct superinterface of `C`.
- *
- * It is a compile-time error if `X` is explicitly defined as a covariant or
- * 'in' type parameter and `X` occurs in a non-covariant position in `T`.
- * It is a compile-time error if `X` is explicitly defined as a contravariant
- * or 'out' type parameter and `X` occurs in a non-contravariant position in
- * `T`.
- *
- * Parameters:
- * 0: the name of the type parameter
- * 1: the variance modifier defined for {0}
- * 2: the variance position of the type parameter {0} in the
- * superinterface {3}
- * 3: the name of the superinterface
- */
- static const CompileTimeErrorCode
- WRONG_EXPLICIT_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE =
- CompileTimeErrorCode(
- 'WRONG_EXPLICIT_TYPE_PARAMETER_VARIANCE_IN_SUPERINTERFACE',
- "'{0}' is an '{1}' type parameter and can't be used in an '{2}' position in '{3}'.",
- correction: "Try using 'in' type parameters in 'in' positions and 'out' "
- "type parameters in 'out' positions in the superinterface.",
- );
-
- /**
* ?? Yield: It is a compile-time error if a yield statement appears in a
* function that is not a generator function.
*/
@@ -7284,6 +9217,61 @@
correction: "Try adjusting the number of type arguments.");
/**
+ * 17.6.2 For-in. It the iterable expression does not implement Iterable with
+ * a type argument that can be assigned to the for-in variable's type, this
+ * warning is reported.
+ *
+ * Parameters:
+ * 0: The type of the iterable expression.
+ * 1: The sequence type -- Iterable for `for` or Stream for `await for`.
+ * 2: The loop variable type.
+ */
+ static const StaticTypeWarningCode FOR_IN_OF_INVALID_ELEMENT_TYPE =
+ StaticTypeWarningCode(
+ 'FOR_IN_OF_INVALID_ELEMENT_TYPE',
+ "The type '{0}' used in the 'for' loop must implement {1} with a "
+ "type argument that can be assigned to '{2}'.");
+
+ /**
+ * Parameters:
+ * 0: The type of the iterable expression.
+ * 1: The sequence type -- Iterable for `for` or Stream for `await for`.
+ */
+ // #### Description
+ //
+ // The analyzer produces this diagnostic when the expression following `in` in
+ // a for-in loop has a type that isn't a subclass of `Iterable`.
+ //
+ // #### Examples
+ //
+ // The following code produces this diagnostic because `m` is a `Map`, and
+ // `Map` isn't a subclass of `Iterable`:
+ //
+ // ```dart
+ // void f(Map<String, String> m) {
+ // for (String s in [!m!]) {
+ // print(s);
+ // }
+ // }
+ // ```
+ //
+ // #### Common fixes
+ //
+ // Replace the expression with one that produces an iterable value:
+ //
+ // ```dart
+ // void f(Map<String, String> m) {
+ // for (String s in m.values) {
+ // print(s);
+ // }
+ // }
+ // ```
+ static const StaticTypeWarningCode FOR_IN_OF_INVALID_TYPE =
+ StaticTypeWarningCode('FOR_IN_OF_INVALID_TYPE',
+ "The type '{0}' used in the 'for' loop must implement {1}.",
+ hasPublishedDocs: true);
+
+ /**
* No parameters.
*/
// #### Description
@@ -7686,21 +9674,6 @@
* Parameters:
* 0: the return type as declared in the return statement
* 1: the expected return type as defined by the method
- * 2: the name of the method
- */
- @Deprecated('Use either RETURN_OF_INVALID_TYPE_FROM_FUNCTION or '
- 'RETURN_OF_INVALID_TYPE_FROM_METHOD')
- static const StaticTypeWarningCode RETURN_OF_INVALID_TYPE =
- StaticTypeWarningCode(
- 'RETURN_OF_INVALID_TYPE',
- "The return type '{0}' isn't a '{1}', as defined by the method "
- "'{2}'.",
- hasPublishedDocs: true);
-
- /**
- * Parameters:
- * 0: the return type as declared in the return statement
- * 1: the expected return type as defined by the method
*/
// #### Description
//
@@ -8337,61 +10310,6 @@
"to '{1}'.");
/**
- * Parameters:
- * 0: The type of the iterable expression.
- * 1: The sequence type -- Iterable for `for` or Stream for `await for`.
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when the expression following `in` in
- // a for-in loop has a type that isn't a subclass of `Iterable`.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because `m` is a `Map`, and
- // `Map` isn't a subclass of `Iterable`:
- //
- // ```dart
- // void f(Map<String, String> m) {
- // for (String s in [!m!]) {
- // print(s);
- // }
- // }
- // ```
- //
- // #### Common fixes
- //
- // Replace the expression with one that produces an iterable value:
- //
- // ```dart
- // void f(Map<String, String> m) {
- // for (String s in m.values) {
- // print(s);
- // }
- // }
- // ```
- static const StaticTypeWarningCode FOR_IN_OF_INVALID_TYPE =
- StaticTypeWarningCode('FOR_IN_OF_INVALID_TYPE',
- "The type '{0}' used in the 'for' loop must implement {1}.",
- hasPublishedDocs: true);
-
- /**
- * 17.6.2 For-in. It the iterable expression does not implement Iterable with
- * a type argument that can be assigned to the for-in variable's type, this
- * warning is reported.
- *
- * Parameters:
- * 0: The type of the iterable expression.
- * 1: The sequence type -- Iterable for `for` or Stream for `await for`.
- * 2: The loop variable type.
- */
- static const StaticTypeWarningCode FOR_IN_OF_INVALID_ELEMENT_TYPE =
- StaticTypeWarningCode(
- 'FOR_IN_OF_INVALID_ELEMENT_TYPE',
- "The type '{0}' used in the 'for' loop must implement {1} with a "
- "type argument that can be assigned to '{2}'.");
-
- /**
* Initialize a newly created error code to have the given [name]. The message
* associated with the error will be created from the given [message]
* template. The correction associated with the error will be created from the
@@ -8432,480 +10350,6 @@
*/
class StaticWarningCode extends AnalyzerErrorCode {
/**
- * Parameters:
- * 0: the name of the ambiguous type
- * 1: the name of the first library that the type is found
- * 2: the name of the second library that the type is found
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when a name is referenced that is
- // declared in two or more imported libraries.
- //
- // #### Examples
- //
- // Given a library (`a.dart`) that defines a class (`C` in this example):
- //
- // ```dart
- // %uri="lib/a.dart"
- // class A {}
- // class C {}
- // ```
- //
- // And a library (`b.dart`) that defines a different class with the same name:
- //
- // ```dart
- // %uri="lib/b.dart"
- // class B {}
- // class C {}
- // ```
- //
- // The following code produces this diagnostic:
- //
- // ```dart
- // import 'a.dart';
- // import 'b.dart';
- //
- // void f([!C!] c1, [!C!] c2) {}
- // ```
- //
- // #### Common fixes
- //
- // If any of the libraries aren't needed, then remove the import directives
- // for them:
- //
- // ```dart
- // import 'a.dart';
- //
- // void f(C c1, C c2) {}
- // ```
- //
- // If the name is still defined by more than one library, then add a `hide`
- // clause to the import directives for all except one library:
- //
- // ```dart
- // import 'a.dart' hide C;
- // import 'b.dart';
- //
- // void f(C c1, C c2) {}
- // ```
- //
- // If you must be able to reference more than one of these types, then add a
- // prefix to each of the import directives, and qualify the references with
- // the appropriate prefix:
- //
- // ```dart
- // import 'a.dart' as a;
- // import 'b.dart' as b;
- //
- // void f(a.C c1, b.C c2) {}
- // ```
- static const StaticWarningCode AMBIGUOUS_IMPORT = StaticWarningCode(
- 'AMBIGUOUS_IMPORT', "The name '{0}' is defined in the libraries {1}.",
- correction: "Try using 'as prefix' for one of the import directives, or "
- "hiding the name from all but one of the imports.",
- hasPublishedDocs: true);
-
- /**
- * Parameters:
- * 0: the name of the actual argument type
- * 1: the name of the expected type
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when the static type of an argument
- // can't be assigned to the static type of the corresponding parameter.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because a `num` can't be
- // assigned to a `String`:
- //
- // ```dart
- // String f(String x) => x;
- // String g(num y) => f([!y!]);
- // ```
- //
- // #### Common fixes
- //
- // If possible, rewrite the code so that the static type is assignable. In the
- // example above you might be able to change the type of the parameter `y`:
- //
- // ```dart
- // String f(String x) => x;
- // String g(String y) => f(y);
- // ```
- //
- // If that fix isn't possible, then add code to handle the case where the
- // argument value isn't the required type. One approach is to coerce other
- // types to the required type:
- //
- // ```dart
- // String f(String x) => x;
- // String g(num y) => f(y.toString());
- // ```
- //
- // Another approach is to add explicit type tests and fallback code:
- //
- // ```dart
- // String f(String x) => x;
- // String g(num y) => f(y is String ? y : '');
- // ```
- //
- // If you believe that the runtime type of the argument will always be the
- // same as the static type of the parameter, and you're willing to risk having
- // an exception thrown at runtime if you're wrong, then add an explicit cast:
- //
- // ```dart
- // String f(String x) => x;
- // String g(num y) => f(y as String);
- // ```
- static const StaticWarningCode ARGUMENT_TYPE_NOT_ASSIGNABLE =
- StaticWarningCode(
- 'ARGUMENT_TYPE_NOT_ASSIGNABLE',
- "The argument type '{0}' can't be assigned to the parameter type "
- "'{1}'.",
- hasPublishedDocs: true);
-
- /**
- * 5 Variables: Attempting to assign to a final variable elsewhere will cause
- * a NoSuchMethodError to be thrown, because no setter is defined for it. The
- * assignment will also give rise to a static warning for the same reason.
- *
- * A constant variable is always implicitly final.
- */
- static const StaticWarningCode ASSIGNMENT_TO_CONST = StaticWarningCode(
- 'ASSIGNMENT_TO_CONST', "Constant variables can't be assigned a value.",
- correction: "Try removing the assignment, or "
- "remove the modifier 'const' from the variable.");
-
- /**
- * Parameters:
- * 0: the name of the final variable
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when it finds an invocation of a
- // setter, but there's no setter because the field with the same name was
- // declared to be `final` or `const`.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because `v` is final:
- //
- // ```dart
- // class C {
- // final v = 0;
- // }
- //
- // f(C c) {
- // c.[!v!] = 1;
- // }
- // ```
- //
- // #### Common fixes
- //
- // If you need to be able to set the value of the field, then remove the
- // modifier `final` from the field:
- //
- // ```dart
- // class C {
- // int v = 0;
- // }
- //
- // f(C c) {
- // c.v = 1;
- // }
- // ```
- static const StaticWarningCode ASSIGNMENT_TO_FINAL = StaticWarningCode(
- 'ASSIGNMENT_TO_FINAL',
- "'{0}' can't be used as a setter because it's final.",
- correction: "Try finding a different setter, or making '{0}' non-final.",
- hasPublishedDocs: true);
-
- /**
- * No parameters.
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when a local variable that was
- // declared to be final is assigned after it was initialized.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because `x` is final, so it
- // can't have a value assigned to it after it was initialized:
- //
- // ```dart
- // void f() {
- // final x = 0;
- // [!x!] = 3;
- // print(x);
- // }
- // ```
- //
- // #### Common fixes
- //
- // Remove the keyword `final`, and replace it with `var` if there's no type
- // annotation:
- //
- // ```dart
- // void f() {
- // var x = 0;
- // x = 3;
- // print(x);
- // }
- // ```
- static const StaticWarningCode ASSIGNMENT_TO_FINAL_LOCAL = StaticWarningCode(
- 'ASSIGNMENT_TO_FINAL_LOCAL',
- "The final variable '{0}' can only be set once.",
- correction: "Try making '{0}' non-final.",
- hasPublishedDocs: true);
-
- /**
- * No parameters.
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when a reference to a setter is
- // found; there is no setter defined for the type; but there is a getter
- // defined with the same name.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because there is no setter
- // named `x` in `C`, but there is a getter named `x`:
- //
- // ```dart
- // class C {
- // int get x => 0;
- // set y(int p) {}
- // }
- //
- // void f(C c) {
- // c.[!x!] = 1;
- // }
- // ```
- //
- // #### Common fixes
- //
- // If you want to invoke an existing setter, then correct the name:
- //
- // ```dart
- // class C {
- // int get x => 0;
- // set y(int p) {}
- // }
- //
- // void f(C c) {
- // c.y = 1;
- // }
- // ```
- //
- // If you want to invoke the setter but it just doesn't exist yet, then
- // declare it:
- //
- // ```dart
- // class C {
- // int get x => 0;
- // set x(int p) {}
- // set y(int p) {}
- // }
- //
- // void f(C c) {
- // c.x = 1;
- // }
- // ```
- static const StaticWarningCode ASSIGNMENT_TO_FINAL_NO_SETTER =
- StaticWarningCode('ASSIGNMENT_TO_FINAL_NO_SETTER',
- "There isn’t a setter named '{0}' in class '{1}'.",
- correction:
- "Try correcting the name to reference an existing setter, or "
- "declare the setter.",
- hasPublishedDocs: true);
-
- /**
- * 12.18 Assignment: It is as static warning if an assignment of the form
- * <i>v = e</i> occurs inside a top level or static function (be it function,
- * method, getter, or setter) or variable initializer and there is neither a
- * local variable declaration with name <i>v</i> nor setter declaration with
- * name <i>v=</i> in the lexical scope enclosing the assignment.
- */
- static const StaticWarningCode ASSIGNMENT_TO_FUNCTION = StaticWarningCode(
- 'ASSIGNMENT_TO_FUNCTION', "Functions can't be assigned a value.");
-
- /**
- * No parameters.
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when the target of an assignment is a
- // method.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because `f` can't be assigned a
- // value because it's a method:
- //
- // ```dart
- // class C {
- // void f() {}
- //
- // void g() {
- // [!f!] = null;
- // }
- // }
- // ```
- //
- // #### Common fixes
- //
- // Rewrite the code so that there isn't an assignment to a method.
- static const StaticWarningCode ASSIGNMENT_TO_METHOD = StaticWarningCode(
- 'ASSIGNMENT_TO_METHOD', "Methods can't be assigned a value.",
- hasPublishedDocs: true);
-
- /**
- * 12.18 Assignment: It is as static warning if an assignment of the form
- * <i>v = e</i> occurs inside a top level or static function (be it function,
- * method, getter, or setter) or variable initializer and there is neither a
- * local variable declaration with name <i>v</i> nor setter declaration with
- * name <i>v=</i> in the lexical scope enclosing the assignment.
- */
- static const StaticWarningCode ASSIGNMENT_TO_TYPE = StaticWarningCode(
- 'ASSIGNMENT_TO_TYPE', "Types can't be assigned a value.");
-
- /**
- * No parameters.
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when the last statement in a `case`
- // block isn't one of the required terminators: `break`, `continue`,
- // `rethrow`, `return`, or `throw`.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because the `case` block ends
- // with an assignment:
- //
- // ```dart
- // void f(int x) {
- // switch (x) {
- // [!case!] 0:
- // x += 2;
- // default:
- // x += 1;
- // }
- // }
- // ```
- //
- // #### Common fixes
- //
- // Add one of the required terminators:
- //
- // ```dart
- // void f(int x) {
- // switch (x) {
- // case 0:
- // x += 2;
- // break;
- // default:
- // x += 1;
- // }
- // }
- // ```
- static const StaticWarningCode CASE_BLOCK_NOT_TERMINATED = StaticWarningCode(
- 'CASE_BLOCK_NOT_TERMINATED',
- "The last statement of the 'case' should be 'break', 'continue', "
- "'rethrow', 'return', or 'throw'.",
- correction: "Try adding one of the required statements.",
- hasPublishedDocs: true);
-
- /**
- * No parameters.
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when the name following the `as` in a
- // cast expression is defined to be something other than a type.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because `x` is a variable, not
- // a type:
- //
- // ```dart
- // num x = 0;
- // int y = x as [!x!];
- // ```
- //
- // #### Common fixes
- //
- // Replace the name with the name of a type:
- //
- // ```dart
- // num x = 0;
- // int y = x as int;
- // ```
- static const StaticWarningCode CAST_TO_NON_TYPE = StaticWarningCode(
- 'CAST_TO_NON_TYPE',
- "The name '{0}' isn't a type, so it can't be used in an 'as' expression.",
- correction: "Try changing the name to the name of an existing type, or "
- "creating a type with the name '{0}'.",
- hasPublishedDocs: true);
-
- /**
- * Parameters:
- * 0: the name of the abstract method
- * 1: the name of the enclosing class
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when a member of a concrete class is
- // found that doesn't have a concrete implementation. Concrete classes aren't
- // allowed to contain abstract members.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because `m` is an abstract
- // method but `C` isn't an abstract class:
- //
- // ```dart
- // class C {
- // [!void m();!]
- // }
- // ```
- //
- // #### Common fixes
- //
- // If it's valid to create instances of the class, provide an implementation
- // for the member:
- //
- // ```dart
- // class C {
- // void m() {}
- // }
- // ```
- //
- // If it isn't valid to create instances of the class, mark the class as being
- // abstract:
- //
- // ```dart
- // abstract class C {
- // void m();
- // }
- // ```
- static const StaticWarningCode CONCRETE_CLASS_WITH_ABSTRACT_MEMBER =
- StaticWarningCode('CONCRETE_CLASS_WITH_ABSTRACT_MEMBER',
- "'{0}' must have a method body because '{1}' isn't abstract.",
- correction: "Try making '{1}' abstract, or adding a body to '{0}'.",
- hasPublishedDocs: true);
-
- @Deprecated('Use StaticWarningCode.INSTANTIATE_ABSTRACT_CLASS')
- static const StaticWarningCode CONST_WITH_ABSTRACT_CLASS =
- INSTANTIATE_ABSTRACT_CLASS;
-
- /**
* No parameters.
*/
// #### Description
@@ -8990,401 +10434,6 @@
'DEAD_NULL_AWARE_EXPRESSION',
"The left operand can't be null, so the right operand is never executed.",
correction: "Try removing the operator and the right operand.",
- errorSeverity: ErrorSeverity.WARNING,
- hasPublishedDocs: true);
-
- @Deprecated('Use CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS')
- static const CompileTimeErrorCode EXTRA_POSITIONAL_ARGUMENTS =
- CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS;
-
- @Deprecated(
- 'Use CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED')
- static const CompileTimeErrorCode EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED =
- CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED;
-
- /**
- * No parameters.
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when a final field is initialized in
- // both the declaration of the field and in an initializer in a constructor.
- // Final fields can only be assigned once, so it can't be initialized in both
- // places.
- //
- // #### Example
- //
- // The following code produces this diagnostic because `f` is :
- //
- // ```dart
- // class C {
- // final int f = 0;
- // C() : [!f!] = 1;
- // }
- // ```
- //
- // #### Common fixes
- //
- // If the initialization doesn't depend on any values passed to the
- // constructor, and if all of the constructors need to initialize the field to
- // the same value, then remove the initializer from the constructor:
- //
- // ```dart
- // class C {
- // final int f = 0;
- // C();
- // }
- // ```
- //
- // If the initialization depends on a value passed to the constructor, or if
- // different constructors need to initialize the field differently, then
- // remove the initializer in the field's declaration:
- //
- // ```dart
- // class C {
- // final int f;
- // C() : f = 1;
- // }
- // ```
- static const StaticWarningCode
- FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION = StaticWarningCode(
- 'FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION',
- "Fields can't be initialized in the constructor if they are final "
- "and were already initialized at their declaration.",
- correction: "Try removing one of the initializations.",
- hasPublishedDocs: true);
-
- /**
- * 5. Variables: It is a static warning if a final instance variable that has
- * been initialized at its point of declaration is also initialized in a
- * constructor.
- *
- * Parameters:
- * 0: the name of the field in question
- */
- static const StaticWarningCode
- FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR = StaticWarningCode(
- 'FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR',
- "'{0}' is final and was given a value when it was declared, "
- "so it can't be set to a new value.",
- correction: "Try removing one of the initializations.");
-
- /**
- * Parameters:
- * 0: the name of the type of the initializer expression
- * 1: the name of the type of the field
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when the initializer list of a
- // constructor initializes a field to a value that isn't assignable to the
- // field.
- //
- // #### Example
- //
- // The following code produces this diagnostic because `0` has the type `int`,
- // and an `int` can't be assigned to a field of type `String`:
- //
- // ```dart
- // class C {
- // String s;
- //
- // C() : s = [!0!];
- // }
- // ```
- //
- // #### Common fixes
- //
- // If the type of the field is correct, then change the value assigned to it
- // so that the value has a valid type:
- //
- // ```dart
- // class C {
- // String s;
- //
- // C() : s = '0';
- // }
- // ```
- //
- // If the type of the value is correct, then change the type of the field to
- // allow the assignment:
- //
- // ```dart
- // class C {
- // int s;
- //
- // C() : s = 0;
- // }
- // ```
- static const StaticWarningCode FIELD_INITIALIZER_NOT_ASSIGNABLE =
- StaticWarningCode(
- 'FIELD_INITIALIZER_NOT_ASSIGNABLE',
- "The initializer type '{0}' can't be assigned to the field type "
- "'{1}'.",
- hasPublishedDocs: true);
-
- /**
- * 7.6.1 Generative Constructors: An initializing formal has the form
- * <i>this.id</i>. It is a static warning if the static type of <i>id</i> is
- * not assignable to <i>T<sub>id</sub></i>.
- *
- * Parameters:
- * 0: the name of the type of the field formal parameter
- * 1: the name of the type of the field
- */
- static const StaticWarningCode FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE =
- StaticWarningCode('FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE',
- "The parameter type '{0}' is incompatible with the field type '{1}'.",
- correction: "Try changing or removing the parameter's type, or "
- "changing the field's type.");
-
- /**
- * Parameters:
- * 0: the name of the uninitialized final variable
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when a final field or variable isn't
- // initialized.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because `x` doesn't have an
- // initializer:
- //
- // ```dart
- // final [!x!];
- // ```
- //
- // #### Common fixes
- //
- // For variables and static fields, you can add an initializer:
- //
- // ```dart
- // final x = 0;
- // ```
- //
- // For instance fields, you can add an initializer as shown in the previous
- // example, or you can initialize the field in every constructor. You can
- // initialize the field by using a field formal parameter:
- //
- // ```dart
- // class C {
- // final int x;
- // C(this.x);
- // }
- // ```
- //
- // You can also initialize the field by using an initializer in the
- // constructor:
- //
- // ```dart
- // class C {
- // final int x;
- // C(int y) : x = y * 2;
- // }
- // ```
- static const StaticWarningCode FINAL_NOT_INITIALIZED = StaticWarningCode(
- 'FINAL_NOT_INITIALIZED', "The final variable '{0}' must be initialized.",
- // TODO(brianwilkerson) Split this error code so that we can suggest
- // initializing fields in constructors (FINAL_FIELD_NOT_INITIALIZED
- // and FINAL_VARIABLE_NOT_INITIALIZED).
- correction: "Try initializing the variable.",
- hasPublishedDocs: true);
-
- /**
- * Parameters:
- * 0: the name of the uninitialized final variable
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when a class defines one or more
- // final instance fields without initializers and has at least one constructor
- // that doesn't initialize those fields. All final instance fields must be
- // initialized when the instance is created, either by the field's initializer
- // or by the constructor.
- //
- // #### Examples
- //
- // The following code produces this diagnostic:
- //
- // ```dart
- // class C {
- // final String value;
- //
- // [!C!]();
- // }
- // ```
- //
- // #### Common fixes
- //
- // If the value should be passed in to the constructor directly, then use a
- // field formal parameter to initialize the field `value`:
- //
- // ```dart
- // class C {
- // final String value;
- //
- // C(this.value);
- // }
- // ```
- //
- // If the value should be computed indirectly from a value provided by the
- // caller, then add a parameter and include an initializer:
- //
- // ```dart
- // class C {
- // final String value;
- //
- // C(Object o) : value = o.toString();
- // }
- // ```
- //
- // If the value of the field doesn't depend on values that can be passed to
- // the constructor, then add an initializer for the field as part of the field
- // declaration:
- //
- // ```dart
- // class C {
- // final String value = '';
- //
- // C();
- // }
- // ```
- //
- // If the value of the field doesn't depend on values that can be passed to
- // the constructor but different constructors need to initialize it to
- // different values, then add an initializer for the field in the initializer
- // list:
- //
- // ```dart
- // class C {
- // final String value;
- //
- // C() : value = '';
- //
- // C.named() : value = 'c';
- // }
- // ```
- //
- // However, if the value is the same for all instances, then consider using a
- // static field instead of an instance field:
- //
- // ```dart
- // class C {
- // static const String value = '';
- //
- // C();
- // }
- // ```
- static const StaticWarningCode FINAL_NOT_INITIALIZED_CONSTRUCTOR_1 =
- StaticWarningCodeWithUniqueName(
- 'FINAL_NOT_INITIALIZED_CONSTRUCTOR',
- 'StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1',
- "All final variables must be initialized, but '{0}' isn't.",
- correction: "Try adding an initializer for the field.",
- hasPublishedDocs: true);
-
- /**
- * Parameters:
- * 0: the name of the uninitialized final variable
- * 1: the name of the uninitialized final variable
- */
- static const StaticWarningCode FINAL_NOT_INITIALIZED_CONSTRUCTOR_2 =
- StaticWarningCodeWithUniqueName(
- 'FINAL_NOT_INITIALIZED_CONSTRUCTOR',
- 'StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2',
- "All final variables must be initialized, but '{0}' and '{1}' "
- "aren't.",
- correction: "Try adding initializers for the fields.",
- hasPublishedDocs: true);
-
- /**
- * Parameters:
- * 0: the name of the uninitialized final variable
- * 1: the name of the uninitialized final variable
- * 2: the number of additional not initialized variables that aren't listed
- */
- static const StaticWarningCode FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS =
- StaticWarningCodeWithUniqueName(
- 'FINAL_NOT_INITIALIZED_CONSTRUCTOR',
- 'StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3',
- "All final variables must be initialized, but '{0}', '{1}', and {2} "
- "others aren't.",
- correction: "Try adding initializers for the fields.",
- hasPublishedDocs: true);
-
- /**
- * 10.3 Setters: It is a compile-time error if a class has a setter named
- * `v=` with argument type `T` and a getter named `v` with return type `S`,
- * and `S` may not be assigned to `T`.
- *
- * Parameters:
- * 0: the name of the getter
- * 1: the type of the getter
- * 2: the type of the setter
- * 3: the name of the setter
- */
- static const StaticWarningCode GETTER_NOT_ASSIGNABLE_SETTER_TYPES =
- StaticWarningCode(
- 'GETTER_NOT_ASSIGNABLE_SETTER_TYPES',
- "The return type of getter '{0}' is '{1}' which isn't assignable "
- "to the type '{2}' of its setter '{3}'.",
- correction: "Try changing the types so that they are compatible.");
-
- /**
- * nnbd/feature-specification.md
- *
- * It is an error if a class has a setter and a getter with the same basename
- * where the return type of the getter is not a subtype of the argument type
- * of the setter. Note that this error specifically requires subtyping and
- * not assignability and hence makes no exception for `dynamic`.
- *
- * Parameters:
- * 0: the name of the getter
- * 1: the type of the getter
- * 2: the type of the setter
- * 3: the name of the setter
- */
- static const StaticWarningCode GETTER_NOT_SUBTYPE_SETTER_TYPES =
- StaticWarningCode(
- 'GETTER_NOT_SUBTYPE_SETTER_TYPES',
- "The return type of getter '{0}' is '{1}' which isn't a subtype "
- "of the type '{2}' of its setter '{3}'.",
- correction: "Try changing the types so that they are compatible.");
-
- @Deprecated('Use CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY')
- static const CompileTimeErrorCode IMPORT_OF_NON_LIBRARY =
- CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY;
-
- /**
- * No parameters.
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when it finds a constructor
- // invocation and the constructor is declared in an abstract class. Even
- // though you can't create an instance of an abstract class, abstract classes
- // can declare constructors that can be invoked by subclasses.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because `C` is an abstract
- // class:
- //
- // ```dart
- // abstract class C {}
- //
- // var c = new [!C!]();
- // ```
- //
- // #### Common fixes
- //
- // If there's a concrete subclass of the abstract class that can be used, then
- // create an instance of the concrete subclass.
- static const StaticWarningCode INSTANTIATE_ABSTRACT_CLASS = StaticWarningCode(
- 'INSTANTIATE_ABSTRACT_CLASS', "Abstract classes can't be instantiated.",
- correction: "Try creating an instance of a concrete subtype.",
hasPublishedDocs: true);
/**
@@ -9437,7 +10486,6 @@
"The target expression can't be null, so the null-aware operator "
"'{0}' can't be used.",
correction: "Try replace the operator '{0}' with '{1}'.",
- errorSeverity: ErrorSeverity.WARNING,
hasPublishedDocs: true);
/**
@@ -9453,7 +10501,6 @@
"The target expression can't be null because of short-circuiting, so "
"the null-aware operator '{0}' can't be used.",
correction: "Try replace the operator '{0}' with '{1}'.",
- errorSeverity: ErrorSeverity.WARNING,
hasPublishedDocs: true);
/**
@@ -9468,8 +10515,7 @@
'INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED',
"Parameters can't override default values, this method overrides "
"'{0}.{1}' where '{2}' has a different value.",
- correction: "Try using the same default value in both methods.",
- errorSeverity: ErrorSeverity.WARNING);
+ correction: "Try using the same default value in both methods.");
/**
* 7.1 Instance Methods: It is a static warning if an instance method
@@ -9484,171 +10530,7 @@
"Parameters can't override default values, this method overrides "
"'{0}.{1}' where this positional parameter has a different "
"value.",
- correction: "Try using the same default value in both methods.",
- errorSeverity: ErrorSeverity.WARNING);
-
- /**
- * No parameters.
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when an expression whose value will
- // always be `null` is dererenced.
- //
- // #### Example
- //
- // The following code produces this diagnostic because `x` will always be
- // `null`:
- //
- // ```dart
- // %experiments=non-nullable
- // int f(Null x) {
- // return [!x!].length;
- // }
- // ```
- //
- // #### Common fixes
- //
- // If the value is allowed to be something other than `null`, then change the
- // type of the expression:
- //
- // ```dart
- // %experiments=non-nullable
- // int f(String? x) {
- // return x!.length;
- // }
- // ```
- static const StaticWarningCode INVALID_USE_OF_NULL_VALUE = StaticWarningCode(
- 'INVALID_USE_OF_NULL_VALUE',
- "An expression whose value is always 'null' can't be dereferenced.",
- correction: "Try changing the type of the expression.",
- hasPublishedDocs: true);
-
- /**
- * Parameters:
- * 0: the actual type of the list element
- * 1: the expected type of the list element
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when the type of an element in a list
- // literal isn't assignable to the element type of the list.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because `2.5` is a double, and
- // the list can hold only integers:
- //
- // ```dart
- // List<int> x = [1, [!2.5!], 3];
- // ```
- //
- // #### Common fixes
- //
- // If you intended to add a different object to the list, then replace the
- // element with an expression that computes the intended object:
- //
- // ```dart
- // List<int> x = [1, 2, 3];
- // ```
- //
- // If the object shouldn't be in the list, then remove the element:
- //
- // ```dart
- // List<int> x = [1, 3];
- // ```
- //
- // If the object being computed is correct, then widen the element type of the
- // list to allow all of the different types of objects it needs to contain:
- //
- // ```dart
- // List<num> x = [1, 2.5, 3];
- // ```
- static const StaticWarningCode LIST_ELEMENT_TYPE_NOT_ASSIGNABLE =
- StaticWarningCode('LIST_ELEMENT_TYPE_NOT_ASSIGNABLE',
- "The element type '{0}' can't be assigned to the list type '{1}'.",
- hasPublishedDocs: true);
-
- /**
- * Parameters:
- * 0: the type of the expression being used as a key
- * 1: the type of keys declared for the map
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when a key of a key-value pair in a
- // map literal has a type that isn't assignable to the key type of the map.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because `2` is an `int`, but
- // the keys of the map are required to be `String`s:
- //
- // ```dart
- // var m = <String, String>{[!2!] : 'a'};
- // ```
- //
- // #### Common fixes
- //
- // If the type of the map is correct, then change the key to have the correct
- // type:
- //
- // ```dart
- // var m = <String, String>{'2' : 'a'};
- // ```
- //
- // If the type of the key is correct, then change the key type of the map:
- //
- // ```dart
- // var m = <int, String>{2 : 'a'};
- // ```
- static const StaticWarningCode MAP_KEY_TYPE_NOT_ASSIGNABLE =
- StaticWarningCode(
- 'MAP_KEY_TYPE_NOT_ASSIGNABLE',
- "The element type '{0}' can't be assigned to the map key type "
- "'{1}'.",
- hasPublishedDocs: true);
-
- /**
- * Parameters:
- * 0: the type of the expression being used as a value
- * 1: the type of values declared for the map
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when a value of a key-value pair in a
- // map literal has a type that isn't assignable to the the value type of the
- // map.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because `2` is an `int`, but/
- // the values of the map are required to be `String`s:
- //
- // ```dart
- // var m = <String, String>{'a' : [!2!]};
- // ```
- //
- // #### Common fixes
- //
- // If the type of the map is correct, then change the value to have the
- // correct type:
- //
- // ```dart
- // var m = <String, String>{'a' : '2'};
- // ```
- //
- // If the type of the value is correct, then change the value type of the map:
- //
- // ```dart
- // var m = <String, int>{'a' : 2};
- // ```
- static const StaticWarningCode MAP_VALUE_TYPE_NOT_ASSIGNABLE =
- StaticWarningCode(
- 'MAP_VALUE_TYPE_NOT_ASSIGNABLE',
- "The element type '{0}' can't be assigned to the map value type "
- "'{1}'.",
- hasPublishedDocs: true);
+ correction: "Try using the same default value in both methods.");
/**
* Parameters:
@@ -9718,927 +10600,6 @@
'MISSING_ENUM_CONSTANT_IN_SWITCH', "Missing case clause for '{0}'.",
correction: "Try adding a case clause for the missing constant, or "
"adding a default clause.",
- errorSeverity: ErrorSeverity.WARNING,
- hasPublishedDocs: true);
-
- @Deprecated('No longer an error in the spec and no longer generated')
- static const StaticWarningCode MIXED_RETURN_TYPES = StaticWarningCode(
- 'MIXED_RETURN_TYPES',
- "Functions can't include return statements both with and without values.",
- correction: "Try making all the return statements consistent "
- "(either include a value or not).");
-
- @Deprecated('Use StaticWarningCode.INSTANTIATE_ABSTRACT_CLASS')
- static const StaticWarningCode NEW_WITH_ABSTRACT_CLASS =
- INSTANTIATE_ABSTRACT_CLASS;
-
- /**
- * 12.11.1 New: It is a static warning if <i>T</i> is not a class accessible
- * in the current scope, optionally followed by type arguments.
- *
- * Parameters:
- * 0: the name of the non-type element
- */
- static const StaticWarningCode NEW_WITH_NON_TYPE =
- StaticWarningCodeWithUniqueName('CREATION_WITH_NON_TYPE',
- 'NEW_WITH_NON_TYPE', "The name '{0}' isn't a class.",
- correction: "Try correcting the name to match an existing class.",
- isUnresolvedIdentifier: true);
-
- /**
- * 12.11.1 New: If <i>T</i> is a class or parameterized type accessible in the
- * current scope then:
- * 1. If <i>e</i> is of the form <i>new T.id(a<sub>1</sub>, …,
- * a<sub>n</sub>, x<sub>n+1</sub>: a<sub>n+1</sub>, …,
- * x<sub>n+k</sub>: a<sub>n+k</sub>)</i> it is a static warning if
- * <i>T.id</i> is not the name of a constructor declared by the type
- * <i>T</i>.
- * If <i>e</i> of the form <i>new T(a<sub>1</sub>, …, a<sub>n</sub>,
- * x<sub>n+1</sub>: a<sub>n+1</sub>, …, x<sub>n+k</sub>:
- * a<sub>n+kM/sub>)</i> it is a static warning if the type <i>T</i> does not
- * declare a constructor with the same name as the declaration of <i>T</i>.
- */
- static const StaticWarningCode NEW_WITH_UNDEFINED_CONSTRUCTOR =
- StaticWarningCode('NEW_WITH_UNDEFINED_CONSTRUCTOR',
- "The class '{0}' doesn't have a constructor named '{1}'.",
- correction: "Try invoking a different constructor, or "
- "define a constructor named '{1}'.");
-
- /**
- * Parameters:
- * 0: the name of the class being instantiated
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when an unnamed constructor is
- // invoked on a class that defines named constructors but the class doesn’t
- // have an unnamed constructor.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because `A` doesn't define an
- // unnamed constructor:
- //
- // ```dart
- // class A {
- // A.a();
- // }
- //
- // A f() => [!A!]();
- // ```
- //
- // #### Common fixes
- //
- // If one of the named constructors does what you need, then use it:
- //
- // ```dart
- // class A {
- // A.a();
- // }
- //
- // A f() => A.a();
- // ```
- //
- // If none of the named constructors does what you need, and you're able to
- // add an unnamed constructor, then add the constructor:
- //
- // ```dart
- // class A {
- // A();
- // A.a();
- // }
- //
- // A f() => A();
- // ```
- static const StaticWarningCode NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT =
- StaticWarningCode('NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT',
- "The class '{0}' doesn't have a default constructor.",
- correction:
- "Try using one of the named constructors defined in '{0}'.",
- hasPublishedDocs: true);
-
- /**
- * Parameters:
- * 0: the name of the first member
- * 1: the name of the second member
- * 2: the name of the third member
- * 3: the name of the fourth member
- * 4: the number of additional missing members that aren't listed
- */
- static const StaticWarningCode
- NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS =
- StaticWarningCodeWithUniqueName(
- 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
- 'StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS',
- "Missing concrete implementations of '{0}', '{1}', '{2}', '{3}', and "
- "{4} more.",
- correction: "Try implementing the missing methods, or make the class "
- "abstract.",
- hasPublishedDocs: true);
-
- /**
- * Parameters:
- * 0: the name of the first member
- * 1: the name of the second member
- * 2: the name of the third member
- * 3: the name of the fourth member
- */
- static const StaticWarningCode
- NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR =
- StaticWarningCodeWithUniqueName(
- 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
- 'StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR',
- "Missing concrete implementations of '{0}', '{1}', '{2}', and '{3}'.",
- correction: "Try implementing the missing methods, or make the class "
- "abstract.",
- hasPublishedDocs: true);
-
- /**
- * Parameters:
- * 0: the name of the member
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when a concrete class inherits one or
- // more abstract members, and doesn't provide or inherit an implementation for
- // at least one of those abstract members.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because the class `B` doesn't
- // have a concrete implementation of `m`:
- //
- // ```dart
- // abstract class A {
- // void m();
- // }
- //
- // class [!B!] extends A {}
- // ```
- //
- // #### Common fixes
- //
- // If the subclass can provide a concrete implementation for some or all of
- // the abstract inherited members, then add the concrete implementations:
- //
- // ```dart
- // abstract class A {
- // void m();
- // }
- //
- // class B extends A {
- // void m() {}
- // }
- // ```
- //
- // If there is a mixin that provides an implementation of the inherited
- // methods, then apply the mixin to the subclass:
- //
- // ```dart
- // abstract class A {
- // void m();
- // }
- //
- // class B extends A with M {}
- //
- // mixin M {
- // void m() {}
- // }
- // ```
- //
- // If the subclass can't provide a concrete implementation for all of the
- // abstract inherited members, then mark the subclass as being abstract:
- //
- // ```dart
- // abstract class A {
- // void m();
- // }
- //
- // abstract class B extends A {}
- // ```
- static const StaticWarningCode
- NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE =
- StaticWarningCodeWithUniqueName(
- 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
- 'StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE',
- "Missing concrete implementation of '{0}'.",
- correction: "Try implementing the missing method, or make the class "
- "abstract.",
- hasPublishedDocs: true);
-
- /**
- * Parameters:
- * 0: the name of the first member
- * 1: the name of the second member
- * 2: the name of the third member
- */
- static const StaticWarningCode
- NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE =
- StaticWarningCodeWithUniqueName(
- 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
- 'StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE',
- "Missing concrete implementations of '{0}', '{1}', and '{2}'.",
- correction: "Try implementing the missing methods, or make the class "
- "abstract.",
- hasPublishedDocs: true);
-
- /**
- * Parameters:
- * 0: the name of the first member
- * 1: the name of the second member
- */
- static const StaticWarningCode
- NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO =
- StaticWarningCodeWithUniqueName(
- 'NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER',
- 'StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO',
- "Missing concrete implementations of '{0}' and '{1}'.",
- correction: "Try implementing the missing methods, or make the class "
- "abstract.",
- hasPublishedDocs: true);
-
- /**
- * Parameters:
- * 0: the name of the non-type element
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when the identifier following the
- // `on` in a `catch` clause is defined to be something other than a type.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because `f` is a function, not
- // a type:
- //
- // ```dart
- // void f() {
- // try {
- // // ...
- // } on [!f!] {
- // // ...
- // }
- // }
- // ```
- //
- // #### Common fixes
- //
- // Change the name to the type of object that should be caught:
- //
- // ```dart
- // void f() {
- // try {
- // // ...
- // } on FormatException {
- // // ...
- // }
- // }
- // ```
- static const StaticWarningCode NON_TYPE_IN_CATCH_CLAUSE = StaticWarningCode(
- 'NON_TYPE_IN_CATCH_CLAUSE',
- "The name '{0}' isn't a type and can't be used in an on-catch "
- "clause.",
- correction: "Try correcting the name to match an existing class.",
- hasPublishedDocs: true);
-
- /**
- * 7.1.1 Operators: It is a static warning if the return type of the
- * user-declared operator []= is explicitly declared and not void.
- */
- static const StaticWarningCode NON_VOID_RETURN_FOR_OPERATOR =
- StaticWarningCode('NON_VOID_RETURN_FOR_OPERATOR',
- "The return type of the operator []= must be 'void'.",
- correction: "Try changing the return type to 'void'.");
-
- /**
- * 7.3 Setters: It is a static warning if a setter declares a return type
- * other than void.
- */
- static const StaticWarningCode NON_VOID_RETURN_FOR_SETTER = StaticWarningCode(
- 'NON_VOID_RETURN_FOR_SETTER',
- "The return type of the setter must be 'void' or absent.",
- correction: "Try removing the return type, or "
- "define a method rather than a setter.");
-
- /**
- * Parameters:
- * 0: the name that is not a type
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when a name is used as a type but
- // declared to be something other than a type.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because `f` is a function:
- //
- // ```dart
- // f() {}
- // g([!f!] v) {}
- // ```
- //
- // #### Common fixes
- //
- // Replace the name with the name of a type.
- static const StaticWarningCode NOT_A_TYPE = StaticWarningCode(
- 'NOT_A_TYPE', "{0} isn't a type.",
- correction: "Try correcting the name to match an existing type.",
- hasPublishedDocs: true);
-
- @Deprecated('Use CompileTimeErrorCode.NOT_ENOUGH_POSITIONAL_ARGUMENTS')
- static const CompileTimeErrorCode NOT_ENOUGH_REQUIRED_ARGUMENTS =
- CompileTimeErrorCode.NOT_ENOUGH_POSITIONAL_ARGUMENTS;
-
- /**
- * Parameters:
- * 0: the name of expected library name
- * 1: the non-matching actual library name from the "part of" declaration
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when a library attempts to include a
- // file as a part of itself when the other file is a part of a different
- // library.
- //
- // #### Example
- //
- // Given a file named `part.dart` containing
- //
- // ```dart
- // %uri="package:a/part.dart"
- // part of 'library.dart';
- // ```
- //
- // The following code, in any file other than `library.dart`, produces this
- // diagnostic because it attempts to include `part.dart` as a part of itself
- // when `part.dart` is a part of a different library:
- //
- // ```dart
- // part [!'package:a/part.dart'!];
- // ```
- //
- // #### Common fixes
- //
- // If the library should be using a different file as a part, then change the
- // URI in the part directive to be the URI of the other file.
- //
- // If the part file should be a part of this library, then update the URI (or
- // library name) in the part-of directive to be the URI (or name) of the
- // correct library.
- static const StaticWarningCode PART_OF_DIFFERENT_LIBRARY = StaticWarningCode(
- 'PART_OF_DIFFERENT_LIBRARY',
- "Expected this library to be part of '{0}', not '{1}'.",
- correction: "Try including a different part, or changing the name of "
- "the library in the part's part-of directive.",
- hasPublishedDocs: true);
-
- /**
- * Parameters:
- * 0: the name of the redirected constructor
- * 1: the name of the redirecting constructor
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when a factory constructor attempts
- // to redirect to another constructor, but the two have incompatible
- // parameters. The parameters are compatible if all of the parameters of the
- // redirecting constructor can be passed to the other constructor and if the
- // other constructor doesn't require any parameters that aren't declared by
- // the redirecting constructor.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because the constructor for `A`
- // doesn't declare a parameter that the constructor for `B` requires:
- //
- // ```dart
- // abstract class A {
- // factory A() = [!B!];
- // }
- //
- // class B implements A {
- // B(int x);
- // B.zero();
- // }
- // ```
- //
- // The following code produces this diagnostic because the constructor for `A`
- // declares a named parameter (`y`) that the constructor for `B` doesn't
- // allow:
- //
- // ```dart
- // abstract class A {
- // factory A(int x, {int y}) = [!B!];
- // }
- //
- // class B implements A {
- // B(int x);
- // }
- // ```
- //
- // #### Common fixes
- //
- // If there's a different constructor that is compatible with the redirecting
- // constructor, then redirect to that constructor:
- //
- // ```dart
- // abstract class A {
- // factory A() = B.zero;
- // }
- //
- // class B implements A {
- // B(int x);
- // B.zero();
- // }
- // ```
- //
- // Otherwise, update the redirecting constructor to be compatible:
- //
- // ```dart
- // abstract class A {
- // factory A(int x) = B;
- // }
- //
- // class B implements A {
- // B(int x);
- // }
- // ```
- static const StaticWarningCode REDIRECT_TO_INVALID_FUNCTION_TYPE =
- StaticWarningCode(
- 'REDIRECT_TO_INVALID_FUNCTION_TYPE',
- "The redirected constructor '{0}' has incompatible parameters with "
- "'{1}'.",
- correction: "Try redirecting to a different constructor.",
- hasPublishedDocs: true);
-
- /**
- * Parameters:
- * 0: the name of the redirected constructor's return type
- * 1: the name of the redirecting constructor's return type
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when a factory constructor redirects
- // to a constructor whose return type isn't a subtype of the type that the
- // factory constructor is declared to produce.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because `A` isn't a subclass
- // of `C`, which means that the value returned by the constructor `A()`
- // couldn't be returned from the constructor `C()`:
- //
- // ```dart
- // class A {}
- //
- // class B implements C {}
- //
- // class C {
- // factory C() = [!A!];
- // }
- // ```
- //
- // #### Common fixes
- //
- // If the factory constructor is redirecting to a constructor in the wrong
- // class, then update the factory constructor to redirect to the correct
- // constructor:
- //
- // ```dart
- // class A {}
- //
- // class B implements C {}
- //
- // class C {
- // factory C() = B;
- // }
- // ```
- //
- // If the class defining the constructor being redirected to is the class that
- // should be returned, then make it a subtype of the factory's return type:
- //
- // ```dart
- // class A implements C {}
- //
- // class B implements C {}
- //
- // class C {
- // factory C() = A;
- // }
- // ```
- static const StaticWarningCode REDIRECT_TO_INVALID_RETURN_TYPE =
- StaticWarningCode(
- 'REDIRECT_TO_INVALID_RETURN_TYPE',
- "The return type '{0}' of the redirected constructor isn't "
- "a subtype of '{1}'.",
- correction: "Try redirecting to a different constructor.",
- hasPublishedDocs: true);
-
- @Deprecated('Use CompileTimeErrorCode.REDIRECT_TO_MISSING_CONSTRUCTOR')
- static const CompileTimeErrorCode REDIRECT_TO_MISSING_CONSTRUCTOR =
- CompileTimeErrorCode.REDIRECT_TO_MISSING_CONSTRUCTOR;
-
- @Deprecated('Use CompileTimeErrorCode.REDIRECT_TO_NON_CLASS')
- static const CompileTimeErrorCode REDIRECT_TO_NON_CLASS =
- CompileTimeErrorCode.REDIRECT_TO_NON_CLASS;
-
- /**
- * No parameters.
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when it finds a `return` statement
- // without an expression in a function that declares a return type.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because the function `f` is
- // expected to return an `int`, but no value is being returned:
- //
- // ```dart
- // int f() {
- // [!return!];
- // }
- // ```
- //
- // #### Common fixes
- //
- // Add an expression that computes the value to be returned:
- //
- // ```dart
- // int f() {
- // return 0;
- // }
- // ```
- static const StaticWarningCode RETURN_WITHOUT_VALUE = StaticWarningCode(
- 'RETURN_WITHOUT_VALUE', "The return value is missing after 'return'.",
- hasPublishedDocs: true);
-
- /**
- * Parameters:
- * 0: the actual type of the set element
- * 1: the expected type of the set element
- */
- static const StaticWarningCode SET_ELEMENT_TYPE_NOT_ASSIGNABLE =
- StaticWarningCode('SET_ELEMENT_TYPE_NOT_ASSIGNABLE',
- "The element type '{0}' can't be assigned to the set type '{1}'.");
-
- /**
- * Parameters:
- * 0: the name of the instance member
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when a class name is used to access
- // an instance field. Instance fields don't exist on a class; they exist only
- // on an instance of the class.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because `x` is an instance
- // field:
- //
- // ```dart
- // class C {
- // static int a;
- //
- // int b;
- // }
- //
- // int f() => C.[!b!];
- // ```
- //
- // #### Common fixes
- //
- // If you intend to access a static field, then change the name of the field
- // to an existing static field:
- //
- // ```dart
- // class C {
- // static int a;
- //
- // int b;
- // }
- //
- // int f() => C.a;
- // ```
- //
- // If you intend to access the instance field, then use an instance of the
- // class to access the field:
- //
- // ```dart
- // class C {
- // static int a;
- //
- // int b;
- // }
- //
- // int f(C c) => c.b;
- // ```
- static const StaticWarningCode STATIC_ACCESS_TO_INSTANCE_MEMBER =
- StaticWarningCode('STATIC_ACCESS_TO_INSTANCE_MEMBER',
- "Instance member '{0}' can't be accessed using static access.",
- hasPublishedDocs: true);
-
- /**
- * Parameters:
- * 0: The static type of the switch expression
- * 1: The static type of the case expressions
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when the type of the expression in a
- // `switch` statement isn't assignable to the type of the expressions in the
- // `case` clauses.
- //
- // #### Example
- //
- // The following code produces this diagnostic because the type of `s`
- // (`String`) isn't assignable to the type of `0` (`int`):
- //
- // ```dart
- // void f(String s) {
- // switch ([!s!]) {
- // case 0:
- // break;
- // }
- // }
- // ```
- //
- // #### Common fixes
- //
- // If the type of the `case` expressions is correct, then change the
- // expression in the `switch` statement to have the correct type:
- //
- // ```dart
- // void f(String s) {
- // switch (int.parse(s)) {
- // case 0:
- // break;
- // }
- // }
- // ```
- //
- // If the type of the `switch` expression is correct, then change the `case`
- // expressions to have the correct type:
- //
- // ```dart
- // void f(String s) {
- // switch (s) {
- // case '0':
- // break;
- // }
- // }
- // ```
- static const StaticWarningCode SWITCH_EXPRESSION_NOT_ASSIGNABLE =
- StaticWarningCode(
- 'SWITCH_EXPRESSION_NOT_ASSIGNABLE',
- "Type '{0}' of the switch expression isn't assignable to "
- "the type '{1}' of case expressions.",
- hasPublishedDocs: true);
-
- /**
- * 15.1 Static Types: It is a static warning to use a deferred type in a type
- * annotation.
- *
- * Parameters:
- * 0: the name of the type that is deferred and being used in a type
- * annotation
- */
- static const StaticWarningCode TYPE_ANNOTATION_DEFERRED_CLASS =
- StaticWarningCode(
- 'TYPE_ANNOTATION_DEFERRED_CLASS',
- "The deferred type '{0}' can't be used in a declaration, cast or "
- "type test.",
- correction: "Try using a different type, or "
- "changing the import to not be deferred.");
-
- /**
- * 12.31 Type Test: It is a static warning if <i>T</i> does not denote a type
- * available in the current lexical scope.
- */
- static const StaticWarningCode TYPE_TEST_WITH_NON_TYPE = StaticWarningCode(
- 'TYPE_TEST_WITH_NON_TYPE',
- "The name '{0}' isn't a type and can't be used in an 'is' "
- "expression.",
- correction: "Try correcting the name to match an existing type.");
-
- /**
- * No parameters.
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when the name following the `is` in a
- // type test expression isn't defined.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because the name `Srting` isn't
- // defined:
- //
- // ```dart
- // void f(Object o) {
- // if (o is [!Srting!]) {
- // // ...
- // }
- // }
- // ```
- //
- // #### Common fixes
- //
- // Replace the name with the name of a type:
- //
- // ```dart
- // void f(Object o) {
- // if (o is String) {
- // // ...
- // }
- // }
- // ```
- static const StaticWarningCode TYPE_TEST_WITH_UNDEFINED_NAME =
- StaticWarningCode(
- 'TYPE_TEST_WITH_UNDEFINED_NAME',
- "The name '{0}' isn't defined, so it can't be used in an 'is' "
- "expression.",
- correction:
- "Try changing the name to the name of an existing type, or "
- "creating a type with the name '{0}'.",
- hasPublishedDocs: true);
-
- /**
- * 10 Generics: However, a type parameter is considered to be a malformed type
- * when referenced by a static member.
- *
- * 15.1 Static Types: Any use of a malformed type gives rise to a static
- * warning. A malformed type is then interpreted as dynamic by the static type
- * checker and the runtime.
- */
- static const StaticWarningCode TYPE_PARAMETER_REFERENCED_BY_STATIC =
- StaticWarningCode('TYPE_PARAMETER_REFERENCED_BY_STATIC',
- "Static members can't reference type parameters of the class.",
- correction: "Try removing the reference to the type parameter, or "
- "making the member an instance member.");
-
- @Deprecated('Use CompileTimeErrorCode.UNDEFINED_CLASS')
- static const CompileTimeErrorCode UNDEFINED_CLASS =
- CompileTimeErrorCode.UNDEFINED_CLASS;
-
- /**
- * Same as [CompileTimeErrorCode.UNDEFINED_CLASS], but to catch using
- * "boolean" instead of "bool".
- */
- static const StaticWarningCode UNDEFINED_CLASS_BOOLEAN = StaticWarningCode(
- 'UNDEFINED_CLASS_BOOLEAN', "Undefined class 'boolean'.",
- correction: "Try using the type 'bool'.");
-
- /**
- * Parameters:
- * 0: the name of the identifier
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when it encounters an identifier that
- // either isn't defined or isn't visible in the scope in which it's being
- // referenced.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because the name `rihgt` isn't
- // defined:
- //
- // ```dart
- // int min(int left, int right) => left <= [!rihgt!] ? left : right;
- // ```
- //
- // #### Common fixes
- //
- // If the identifier isn't defined, then either define it or replace it with
- // an identifier that is defined. The example above can be corrected by
- // fixing the spelling of the variable:
- //
- // ```dart
- // int min(int left, int right) => left <= right ? left : right;
- // ```
- //
- // If the identifier is defined but isn't visible, then you probably need to
- // add an import or re-arrange your code to make the identifier visible.
- static const StaticWarningCode UNDEFINED_IDENTIFIER =
- StaticWarningCode('UNDEFINED_IDENTIFIER', "Undefined name '{0}'.",
- correction: "Try correcting the name to one that is defined, or "
- "defining the name.",
- hasPublishedDocs: true,
- isUnresolvedIdentifier: true);
-
- /**
- * No parameters.
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when the name `await` is used in a
- // method or function body without being declared, and the body isn't marked
- // with the `async` keyword. The name `await` only introduces an await
- // expression in an asynchronous function.
- //
- // #### Example
- //
- // The following code produces this diagnostic because the name `await` is
- // used in the body of `f` even though the body of `f` isn't marked with the
- // `async` keyword:
- //
- // ```dart
- // void f(p) { [!await!] p; }
- // ```
- //
- // #### Common fixes
- //
- // Add the keyword `async` to the function body:
- //
- // ```dart
- // void f(p) async { await p; }
- // ```
- static const StaticWarningCode UNDEFINED_IDENTIFIER_AWAIT = StaticWarningCode(
- 'UNDEFINED_IDENTIFIER_AWAIT',
- "Undefined name 'await' in function body not marked with 'async'.",
- correction: "Try correcting the name to one that is defined, "
- "defining the name, or "
- "adding 'async' to the enclosing function body.",
- hasPublishedDocs: true);
-
- @Deprecated('Use CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER')
- static const CompileTimeErrorCode UNDEFINED_NAMED_PARAMETER =
- CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER;
-
- /**
- * No parameters.
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when an expression whose type is
- // <a href=”#potentially-non-nullable”>potentially non-nullable</a> is
- // dereferenced without first verifying that the value isn't `null`.
- //
- // #### Example
- //
- // The following code produces this diagnostic because `s` can be `null` at
- // the point where it's referenced:
- //
- // ```dart
- // %experiments=non-nullable
- // void f(String? s) {
- // if ([!s!].length > 3) {
- // // ...
- // }
- // }
- // ```
- //
- // #### Common fixes
- //
- // If the value really can be `null`, then add a test to ensure that members
- // are only accessed when the value isn't `null`:
- //
- // ```dart
- // %experiments=non-nullable
- // void f(String? s) {
- // if (s != null && s.length > 3) {
- // // ...
- // }
- // }
- // ```
- //
- // If the expression is a variable and the value should never be `null`, then
- // change the type of the variable to be non-nullable:
- //
- // ```dart
- // %experiments=non-nullable
- // void f(String s) {
- // if (s.length > 3) {
- // // ...
- // }
- // }
- // ```
- //
- // If you believe that the value of the expression should never be `null`, but
- // you can't change the type of the variable, and you're willing to risk
- // having an exception thrown at runtime if you're wrong, then you can assert
- // that the value isn't null:
- //
- // ```dart
- // %experiments=non-nullable
- // void f(String? s) {
- // if (s!.length > 3) {
- // // ...
- // }
- // }
- // ```
- static const StaticWarningCode UNCHECKED_USE_OF_NULLABLE_VALUE =
- StaticWarningCode(
- 'UNCHECKED_USE_OF_NULLABLE_VALUE',
- "An expression whose value can be 'null' must be null-checked before "
- "it can be dereferenced.",
- correction:
- "Try checking that the value isn't 'null' before dereferencing "
- "it.",
hasPublishedDocs: true);
/**
@@ -10676,49 +10637,9 @@
"The '!' will have no effect because the target expression can't be"
" null.",
correction: "Try removing the '!' operator.",
- errorSeverity: ErrorSeverity.WARNING,
hasPublishedDocs: true);
/**
- * No parameters.
- */
- // #### Description
- //
- // The analyzer produces this diagnostic when it finds an expression whose
- // type is `void`, and the expression is used in a place where a value is
- // expected, such as before a member access or on the right-hand side of an
- // assignment.
- //
- // #### Examples
- //
- // The following code produces this diagnostic because `f` doesn't produce an
- // object on which `toString` can be invoked:
- //
- // ```dart
- // void f() {}
- //
- // void g() {
- // [!f()!].toString();
- // }
- // ```
- //
- // #### Common fixes
- //
- // Either rewrite the code so that the expression has a value or rewrite the
- // code so that it doesn't depend on the value.
- static const StaticWarningCode USE_OF_VOID_RESULT = StaticWarningCode(
- 'USE_OF_VOID_RESULT',
- "This expression has a type of 'void' so its value can't be used.",
- correction:
- "Try checking to see if you're using the correct API; there might "
- "be a function or call that returns void you didn't expect. Also "
- "check type parameters and variables which might also be void.",
- hasPublishedDocs: true);
-
- @override
- final ErrorSeverity errorSeverity;
-
- /**
* Initialize a newly created error code to have the given [name]. The message
* associated with the error will be created from the given [message]
* template. The correction associated with the error will be created from the
@@ -10726,7 +10647,6 @@
*/
const StaticWarningCode(String name, String message,
{String correction,
- this.errorSeverity = ErrorSeverity.ERROR,
bool hasPublishedDocs,
bool isUnresolvedIdentifier = false})
: super.temporary(name, message,
@@ -10735,6 +10655,9 @@
isUnresolvedIdentifier: isUnresolvedIdentifier);
@override
+ ErrorSeverity get errorSeverity => ErrorSeverity.WARNING;
+
+ @override
ErrorType get type => ErrorType.STATIC_WARNING;
}
@@ -10745,12 +10668,10 @@
const StaticWarningCodeWithUniqueName(
String name, this.uniqueName, String message,
{String correction,
- ErrorSeverity errorSeverity = ErrorSeverity.ERROR,
bool hasPublishedDocs,
bool isUnresolvedIdentifier = false})
: super(name, message,
correction: correction,
- errorSeverity: errorSeverity,
hasPublishedDocs: hasPublishedDocs,
isUnresolvedIdentifier: isUnresolvedIdentifier);
}
@@ -10777,50 +10698,22 @@
"Try adding an explicit type like 'dynamic', or "
"enable implicit-dynamic in your analysis options file.";
- static const StrongModeCode INVALID_PARAMETER_DECLARATION = StrongModeCode(
- ErrorType.COMPILE_TIME_ERROR,
- 'INVALID_PARAMETER_DECLARATION',
- "Type check failed: '{0}' isn't of type '{1}'.");
-
- static const StrongModeCode COULD_NOT_INFER = StrongModeCode(
- ErrorType.COMPILE_TIME_ERROR,
- 'COULD_NOT_INFER',
- "Couldn't infer type parameter '{0}'.{1}");
-
- static const StrongModeCode INVALID_SUPER_INVOCATION = StrongModeCode(
- ErrorType.COMPILE_TIME_ERROR,
- 'INVALID_SUPER_INVOCATION',
- "The super call must be last in an initializer "
- "list (see https://goo.gl/EY6hDP): '{0}'.");
-
- static const StrongModeCode IMPLICIT_DYNAMIC_PARAMETER = StrongModeCode(
- ErrorType.COMPILE_TIME_ERROR,
- 'IMPLICIT_DYNAMIC_PARAMETER',
- "Missing parameter type for '{0}'.",
- correction: _implicitDynamicCorrection);
-
- static const StrongModeCode IMPLICIT_DYNAMIC_RETURN = StrongModeCode(
- ErrorType.COMPILE_TIME_ERROR,
- 'IMPLICIT_DYNAMIC_RETURN',
- "Missing return type for '{0}'.",
- correction: _implicitDynamicCorrection);
-
- static const StrongModeCode IMPLICIT_DYNAMIC_VARIABLE = StrongModeCode(
- ErrorType.COMPILE_TIME_ERROR,
- 'IMPLICIT_DYNAMIC_VARIABLE',
- "Missing variable type for '{0}'.",
- correction: _implicitDynamicCorrection);
-
static const StrongModeCode IMPLICIT_DYNAMIC_FIELD = StrongModeCode(
ErrorType.COMPILE_TIME_ERROR,
'IMPLICIT_DYNAMIC_FIELD',
"Missing field type for '{0}'.",
correction: _implicitDynamicCorrection);
- static const StrongModeCode IMPLICIT_DYNAMIC_TYPE = StrongModeCode(
+ static const StrongModeCode IMPLICIT_DYNAMIC_FUNCTION = StrongModeCode(
ErrorType.COMPILE_TIME_ERROR,
- 'IMPLICIT_DYNAMIC_TYPE',
- "Missing type arguments for generic type '{0}'.",
+ 'IMPLICIT_DYNAMIC_FUNCTION',
+ "Missing type arguments for generic function '{0}<{1}>'.",
+ correction: _implicitDynamicCorrection);
+
+ static const StrongModeCode IMPLICIT_DYNAMIC_INVOKE = StrongModeCode(
+ ErrorType.COMPILE_TIME_ERROR,
+ 'IMPLICIT_DYNAMIC_INVOKE',
+ "Missing type arguments for calling generic function type '{0}'.",
correction: _implicitDynamicCorrection);
static const StrongModeCode IMPLICIT_DYNAMIC_LIST_LITERAL = StrongModeCode(
@@ -10835,22 +10728,34 @@
"Missing type arguments for map literal.",
correction: _implicitDynamicCorrection);
- static const StrongModeCode IMPLICIT_DYNAMIC_FUNCTION = StrongModeCode(
- ErrorType.COMPILE_TIME_ERROR,
- 'IMPLICIT_DYNAMIC_FUNCTION',
- "Missing type arguments for generic function '{0}<{1}>'.",
- correction: _implicitDynamicCorrection);
-
static const StrongModeCode IMPLICIT_DYNAMIC_METHOD = StrongModeCode(
ErrorType.COMPILE_TIME_ERROR,
'IMPLICIT_DYNAMIC_METHOD',
"Missing type arguments for generic method '{0}<{1}>'.",
correction: _implicitDynamicCorrection);
- static const StrongModeCode IMPLICIT_DYNAMIC_INVOKE = StrongModeCode(
+ static const StrongModeCode IMPLICIT_DYNAMIC_PARAMETER = StrongModeCode(
ErrorType.COMPILE_TIME_ERROR,
- 'IMPLICIT_DYNAMIC_INVOKE',
- "Missing type arguments for calling generic function type '{0}'.",
+ 'IMPLICIT_DYNAMIC_PARAMETER',
+ "Missing parameter type for '{0}'.",
+ correction: _implicitDynamicCorrection);
+
+ static const StrongModeCode IMPLICIT_DYNAMIC_RETURN = StrongModeCode(
+ ErrorType.COMPILE_TIME_ERROR,
+ 'IMPLICIT_DYNAMIC_RETURN',
+ "Missing return type for '{0}'.",
+ correction: _implicitDynamicCorrection);
+
+ static const StrongModeCode IMPLICIT_DYNAMIC_TYPE = StrongModeCode(
+ ErrorType.COMPILE_TIME_ERROR,
+ 'IMPLICIT_DYNAMIC_TYPE',
+ "Missing type arguments for generic type '{0}'.",
+ correction: _implicitDynamicCorrection);
+
+ static const StrongModeCode IMPLICIT_DYNAMIC_VARIABLE = StrongModeCode(
+ ErrorType.COMPILE_TIME_ERROR,
+ 'IMPLICIT_DYNAMIC_VARIABLE',
+ "Missing variable type for '{0}'.",
correction: _implicitDynamicCorrection);
/*
@@ -10860,14 +10765,6 @@
*/
/* TODO(leafp) Delete most of these.
*/
- static const StrongModeCode TOP_LEVEL_CYCLE = StrongModeCode(
- ErrorType.COMPILE_TIME_ERROR,
- 'TOP_LEVEL_CYCLE',
- "The type of '{0}' can't be inferred because it depends on itself "
- "through the cycle: {1}.",
- correction:
- "Try adding an explicit type to one or more of the variables in the "
- "cycle in order to break the cycle.");
static const StrongModeCode TOP_LEVEL_FUNCTION_LITERAL_BLOCK = StrongModeCode(
ErrorType.HINT,
diff --git a/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart b/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
index d2ee46a..d500cff 100644
--- a/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
+++ b/pkg/analyzer/lib/src/error/constructor_fields_verifier.dart
@@ -117,19 +117,19 @@
if (names.length == 1) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1,
+ CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1,
node.returnType,
names,
);
} else if (names.length == 2) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2,
+ CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2,
node.returnType,
names,
);
} else {
_errorReporter.reportErrorForNode(
- StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS,
+ CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS,
node.returnType,
[names[0], names[1], names.length - 2],
);
@@ -172,7 +172,7 @@
} else if (state == _InitState.initInDeclaration) {
if (element.isFinal || element.isConst) {
_errorReporter.reportErrorForNode(
- StaticWarningCode
+ CompileTimeErrorCode
.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION,
fieldName,
);
@@ -209,7 +209,7 @@
} else if (state == _InitState.initInDeclaration) {
if (fieldElement.isFinal || fieldElement.isConst) {
_errorReporter.reportErrorForNode(
- StaticWarningCode
+ CompileTimeErrorCode
.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR,
parameter.identifier,
[fieldElement.displayName],
diff --git a/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart b/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
index 3866ef9..97a02ce 100644
--- a/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
+++ b/pkg/analyzer/lib/src/error/getter_setter_types_verifier.dart
@@ -27,8 +27,8 @@
ErrorCode get _errorCode {
return _isNonNullableByDefault
- ? StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES
- : StaticWarningCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES;
+ ? CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES
+ : CompileTimeErrorCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES;
}
bool get _isNonNullableByDefault => _typeSystem.isNonNullableByDefault;
diff --git a/pkg/analyzer/lib/src/error/inheritance_override.dart b/pkg/analyzer/lib/src/error/inheritance_override.dart
index 8786791..4adca2d 100644
--- a/pkg/analyzer/lib/src/error/inheritance_override.dart
+++ b/pkg/analyzer/lib/src/error/inheritance_override.dart
@@ -589,7 +589,7 @@
}
if (name2 == name) {
reporter.reportErrorForNode(
- StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER,
+ CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER,
member,
[name, classElement.name]);
return true;
@@ -668,31 +668,32 @@
if (descriptions.length == 1) {
reporter.reportErrorForNode(
- StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
classNameNode,
[descriptions[0]],
);
} else if (descriptions.length == 2) {
reporter.reportErrorForNode(
- StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO,
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO,
classNameNode,
[descriptions[0], descriptions[1]],
);
} else if (descriptions.length == 3) {
reporter.reportErrorForNode(
- StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE,
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE,
classNameNode,
[descriptions[0], descriptions[1], descriptions[2]],
);
} else if (descriptions.length == 4) {
reporter.reportErrorForNode(
- StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR,
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR,
classNameNode,
[descriptions[0], descriptions[1], descriptions[2], descriptions[3]],
);
} else {
reporter.reportErrorForNode(
- StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS,
+ CompileTimeErrorCode
+ .NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS,
classNameNode,
[
descriptions[0],
diff --git a/pkg/analyzer/lib/src/error/literal_element_verifier.dart b/pkg/analyzer/lib/src/error/literal_element_verifier.dart
index 2d455a8..995b3e6 100644
--- a/pkg/analyzer/lib/src/error/literal_element_verifier.dart
+++ b/pkg/analyzer/lib/src/error/literal_element_verifier.dart
@@ -7,6 +7,7 @@
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/dart/element/type_provider.dart';
import 'package:analyzer/error/listener.dart';
+import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/dart/element/type_system.dart';
import 'package:analyzer/src/error/codes.dart';
@@ -49,8 +50,8 @@
void _checkAssignableToElementType(DartType type, AstNode errorNode) {
if (!typeSystem.isAssignableTo2(type, elementType)) {
var errorCode = forList
- ? StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
- : StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE;
+ ? CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+ : CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE;
errorReporter.reportErrorForNode(
errorCode,
errorNode,
@@ -109,7 +110,7 @@
var keyType = entry.key.staticType;
if (!typeSystem.isAssignableTo2(keyType, mapKeyType)) {
errorReporter.reportErrorForNode(
- StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE,
+ CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE,
entry.key,
[keyType, mapKeyType],
);
@@ -118,7 +119,7 @@
var valueType = entry.value.staticType;
if (!typeSystem.isAssignableTo2(valueType, mapValueType)) {
errorReporter.reportErrorForNode(
- StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE,
+ CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE,
entry.value,
[valueType, mapValueType],
);
@@ -131,18 +132,33 @@
var expressionType = expression.staticType;
if (expressionType.isDynamic) return;
- if (expressionType.isDartCoreNull) {
- if (!isNullAware) {
+ if (typeSystem.isNonNullableByDefault) {
+ if (typeSystem.isSubtypeOf2(expressionType, NeverTypeImpl.instance)) {
+ return;
+ }
+ if (typeSystem.isSubtypeOf2(expressionType, typeSystem.nullNone)) {
+ if (isNullAware) {
+ return;
+ }
errorReporter.reportErrorForNode(
CompileTimeErrorCode.NOT_NULL_AWARE_NULL_SPREAD,
expression,
);
+ return;
}
- return;
+ } else {
+ if (expressionType.isDartCoreNull) {
+ if (isNullAware) {
+ return;
+ }
+ errorReporter.reportErrorForNode(
+ CompileTimeErrorCode.NOT_NULL_AWARE_NULL_SPREAD,
+ expression,
+ );
+ return;
+ }
}
- expressionType = typeSystem.resolveToBound(expressionType);
-
var iterableType = expressionType.asInstanceOf(
typeProvider.iterableElement,
);
@@ -157,8 +173,8 @@
var iterableElementType = iterableType.typeArguments[0];
if (!typeSystem.isAssignableTo2(iterableElementType, elementType)) {
var errorCode = forList
- ? StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
- : StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE;
+ ? CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+ : CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE;
errorReporter.reportErrorForNode(
errorCode,
expression,
@@ -173,18 +189,33 @@
var expressionType = expression.staticType;
if (expressionType.isDynamic) return;
- if (expressionType.isDartCoreNull) {
- if (!isNullAware) {
+ if (typeSystem.isNonNullableByDefault) {
+ if (typeSystem.isSubtypeOf2(expressionType, NeverTypeImpl.instance)) {
+ return;
+ }
+ if (typeSystem.isSubtypeOf2(expressionType, typeSystem.nullNone)) {
+ if (isNullAware) {
+ return;
+ }
errorReporter.reportErrorForNode(
CompileTimeErrorCode.NOT_NULL_AWARE_NULL_SPREAD,
expression,
);
+ return;
}
- return;
+ } else {
+ if (expressionType.isDartCoreNull) {
+ if (isNullAware) {
+ return;
+ }
+ errorReporter.reportErrorForNode(
+ CompileTimeErrorCode.NOT_NULL_AWARE_NULL_SPREAD,
+ expression,
+ );
+ return;
+ }
}
- expressionType = typeSystem.resolveToBound(expressionType);
-
var mapType = expressionType.asInstanceOf(
typeProvider.mapElement,
);
@@ -199,7 +230,7 @@
var keyType = mapType.typeArguments[0];
if (!typeSystem.isAssignableTo2(keyType, mapKeyType)) {
errorReporter.reportErrorForNode(
- StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE,
+ CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE,
expression,
[keyType, mapKeyType],
);
@@ -208,7 +239,7 @@
var valueType = mapType.typeArguments[1];
if (!typeSystem.isAssignableTo2(valueType, mapValueType)) {
errorReporter.reportErrorForNode(
- StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE,
+ CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE,
expression,
[valueType, mapValueType],
);
diff --git a/pkg/analyzer/lib/src/error/nullable_dereference_verifier.dart b/pkg/analyzer/lib/src/error/nullable_dereference_verifier.dart
index cf0a8ae6..26dae7d 100644
--- a/pkg/analyzer/lib/src/error/nullable_dereference_verifier.dart
+++ b/pkg/analyzer/lib/src/error/nullable_dereference_verifier.dart
@@ -32,8 +32,8 @@
void report(AstNode errorNode, DartType receiverType) {
var errorCode = receiverType == _typeSystem.typeProvider.nullType
- ? StaticWarningCode.INVALID_USE_OF_NULL_VALUE
- : StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE;
+ ? CompileTimeErrorCode.INVALID_USE_OF_NULL_VALUE
+ : CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE;
_errorReporter.reportErrorForNode(errorCode, errorNode);
}
diff --git a/pkg/analyzer/lib/src/error/return_type_verifier.dart b/pkg/analyzer/lib/src/error/return_type_verifier.dart
index ab59f54..5e0ee73 100644
--- a/pkg/analyzer/lib/src/error/return_type_verifier.dart
+++ b/pkg/analyzer/lib/src/error/return_type_verifier.dart
@@ -366,7 +366,7 @@
}
_errorReporter.reportErrorForToken(
- StaticWarningCode.RETURN_WITHOUT_VALUE,
+ CompileTimeErrorCode.RETURN_WITHOUT_VALUE,
statement.returnKeyword,
);
}
diff --git a/pkg/analyzer/lib/src/fasta/error_converter.dart b/pkg/analyzer/lib/src/fasta/error_converter.dart
index 7dc779c4..16646b8 100644
--- a/pkg/analyzer/lib/src/fasta/error_converter.dart
+++ b/pkg/analyzer/lib/src/fasta/error_converter.dart
@@ -47,7 +47,7 @@
return;
case "CONCRETE_CLASS_WITH_ABSTRACT_MEMBER":
errorReporter?.reportErrorForOffset(
- StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER,
+ CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER,
offset,
length);
return;
@@ -104,12 +104,12 @@
case "FINAL_NOT_INITIALIZED":
String name = arguments['name'];
errorReporter?.reportErrorForOffset(
- StaticWarningCode.FINAL_NOT_INITIALIZED, offset, length, [name]);
+ CompileTimeErrorCode.FINAL_NOT_INITIALIZED, offset, length, [name]);
return;
case "FINAL_NOT_INITIALIZED_CONSTRUCTOR_1":
String name = arguments['name'];
errorReporter?.reportErrorForOffset(
- StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1,
+ CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1,
offset,
length,
[name]);
@@ -197,7 +197,7 @@
return;
case "INVALID_SUPER_INVOCATION":
errorReporter?.reportErrorForOffset(
- StrongModeCode.INVALID_SUPER_INVOCATION, offset, length);
+ CompileTimeErrorCode.INVALID_SUPER_INVOCATION, offset, length);
return;
case "MISSING_DIGIT":
errorReporter?.reportErrorForOffset(
diff --git a/pkg/analyzer/lib/src/generated/element_resolver.dart b/pkg/analyzer/lib/src/generated/element_resolver.dart
index 1b0cb36..7b6a003 100644
--- a/pkg/analyzer/lib/src/generated/element_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/element_resolver.dart
@@ -167,7 +167,7 @@
if (element == null) {
// TODO(brianwilkerson) Report this error?
// resolver.reportError(
- // StaticWarningCode.UNDEFINED_IDENTIFIER,
+ // CompileTimeErrorCode.UNDEFINED_IDENTIFIER,
// simpleIdentifier,
// simpleIdentifier.getName());
} else {
@@ -193,7 +193,7 @@
SimpleIdentifier name = identifier.identifier;
Element element = _resolveSimpleIdentifier(prefix);
if (element == null) {
-// resolver.reportError(StaticWarningCode.UNDEFINED_IDENTIFIER, prefix, prefix.getName());
+// resolver.reportError(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, prefix, prefix.getName());
} else {
prefix.staticElement = element;
if (element is PrefixElement) {
@@ -293,7 +293,7 @@
// if (((InstanceCreationExpression) parent).isConst()) {
// // CompileTimeErrorCode.CONST_WITH_NON_TYPE
// } else {
-// // StaticWarningCode.NEW_WITH_NON_TYPE
+// // CompileTimeErrorCode.NEW_WITH_NON_TYPE
// }
// } else {
// // This is part of a redirecting factory constructor; not sure which error code to use
@@ -721,12 +721,12 @@
[element.name]);
} else if (node.name == "await" && _resolver.enclosingFunction != null) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.UNDEFINED_IDENTIFIER_AWAIT,
+ CompileTimeErrorCode.UNDEFINED_IDENTIFIER_AWAIT,
node,
);
} else if (!_resolver.nameScope.shouldIgnoreUndefined(node)) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.UNDEFINED_IDENTIFIER,
+ CompileTimeErrorCode.UNDEFINED_IDENTIFIER,
node,
[node.name],
);
@@ -844,7 +844,7 @@
if (element.isStatic) return;
_errorReporter.reportErrorForNode(
- StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER,
+ CompileTimeErrorCode.STATIC_ACCESS_TO_INSTANCE_MEMBER,
identifier,
[identifier.name],
);
@@ -893,7 +893,7 @@
);
} else if (staticType.isVoid) {
_errorReporter.reportErrorForOffset(
- StaticWarningCode.USE_OF_VOID_RESULT,
+ CompileTimeErrorCode.USE_OF_VOID_RESULT,
offset,
length,
);
@@ -1455,7 +1455,7 @@
if (staticType.isVoid) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.USE_OF_VOID_RESULT,
+ CompileTimeErrorCode.USE_OF_VOID_RESULT,
propertyName,
);
return;
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 40b26f2..5821ce0 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -359,13 +359,10 @@
@override
void visitBlock(Block node) {
- _hiddenElements = HiddenElements(_hiddenElements, node);
- try {
+ _withHiddenElements(node.statements, () {
_duplicateDefinitionVerifier.checkStatements(node.statements);
super.visitBlock(node);
- } finally {
- _hiddenElements = _hiddenElements.outerElements;
- }
+ });
}
@override
@@ -1111,14 +1108,18 @@
@override
void visitSwitchCase(SwitchCase node) {
- _duplicateDefinitionVerifier.checkStatements(node.statements);
- super.visitSwitchCase(node);
+ _withHiddenElements(node.statements, () {
+ _duplicateDefinitionVerifier.checkStatements(node.statements);
+ super.visitSwitchCase(node);
+ });
}
@override
void visitSwitchDefault(SwitchDefault node) {
- _duplicateDefinitionVerifier.checkStatements(node.statements);
- super.visitSwitchDefault(node);
+ _withHiddenElements(node.statements, () {
+ _duplicateDefinitionVerifier.checkStatements(node.statements);
+ super.visitSwitchDefault(node);
+ });
}
@override
@@ -1368,14 +1369,14 @@
if (!_typeSystem.isAssignableTo2(
redirectedReturnType, constructorReturnType)) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.REDIRECT_TO_INVALID_RETURN_TYPE,
+ CompileTimeErrorCode.REDIRECT_TO_INVALID_RETURN_TYPE,
redirectedConstructor,
[redirectedReturnType, constructorReturnType]);
return;
} else if (!_typeSystem.isSubtypeOf2(redirectedType, constructorType)) {
// Check parameters.
_errorReporter.reportErrorForNode(
- StaticWarningCode.REDIRECT_TO_INVALID_FUNCTION_TYPE,
+ CompileTimeErrorCode.REDIRECT_TO_INVALID_FUNCTION_TYPE,
redirectedConstructor,
[redirectedType, constructorType]);
}
@@ -1427,7 +1428,7 @@
libraryNames[i] = _getLibraryName(conflictingMembers[i]);
}
libraryNames.sort();
- _errorReporter.reportErrorForNode(StaticWarningCode.AMBIGUOUS_IMPORT,
+ _errorReporter.reportErrorForNode(CompileTimeErrorCode.AMBIGUOUS_IMPORT,
node, [name, StringUtilities.printListOfQuotedNames(libraryNames)]);
}
}
@@ -1483,7 +1484,7 @@
staticParameterType = _typeSystem.makeNullable(staticParameterType);
}
_checkForArgumentTypeNotAssignableWithExpectedTypes(argument,
- staticParameterType, StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE);
+ staticParameterType, CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE);
}
/// Verify that the given [expression] can be assigned to its corresponding
@@ -1570,38 +1571,38 @@
if (element is VariableElement) {
if (element.isConst) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.ASSIGNMENT_TO_CONST, expression);
+ CompileTimeErrorCode.ASSIGNMENT_TO_CONST, expression);
} else if (element.isFinal && !element.isLate) {
if (element is FieldElementImpl) {
if (element.setter == null && element.isSynthetic) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.ASSIGNMENT_TO_FINAL_NO_SETTER,
+ CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_NO_SETTER,
highlightedNode,
[element.name, element.enclosingElement.displayName]);
} else {
_errorReporter.reportErrorForNode(
- StaticWarningCode.ASSIGNMENT_TO_FINAL,
+ CompileTimeErrorCode.ASSIGNMENT_TO_FINAL,
highlightedNode,
[element.name]);
}
return;
}
_errorReporter.reportErrorForNode(
- StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL,
+ CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL,
highlightedNode,
[element.name]);
}
} else if (element is FunctionElement) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.ASSIGNMENT_TO_FUNCTION, expression);
+ CompileTimeErrorCode.ASSIGNMENT_TO_FUNCTION, expression);
} else if (element is MethodElement) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.ASSIGNMENT_TO_METHOD, expression);
+ CompileTimeErrorCode.ASSIGNMENT_TO_METHOD, expression);
} else if (element is ClassElement ||
element is FunctionTypeAliasElement ||
element is TypeParameterElement) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.ASSIGNMENT_TO_TYPE, expression);
+ CompileTimeErrorCode.ASSIGNMENT_TO_TYPE, expression);
}
}
@@ -1699,7 +1700,7 @@
}
_errorReporter.reportErrorForToken(
- StaticWarningCode.CASE_BLOCK_NOT_TERMINATED, switchCase.keyword);
+ CompileTimeErrorCode.CASE_BLOCK_NOT_TERMINATED, switchCase.keyword);
}
/// Verify that the switch cases in the given switch [statement] are
@@ -2014,10 +2015,10 @@
(expression as InstanceCreationExpressionImpl).isImplicit;
if (!isImplicit) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.INSTANTIATE_ABSTRACT_CLASS, typeName);
+ CompileTimeErrorCode.INSTANTIATE_ABSTRACT_CLASS, typeName);
} else {
_errorReporter.reportErrorForNode(
- StaticWarningCode.INSTANTIATE_ABSTRACT_CLASS, typeName);
+ CompileTimeErrorCode.INSTANTIATE_ABSTRACT_CLASS, typeName);
}
}
}
@@ -2452,7 +2453,7 @@
[staticType, fieldType]);
}
_errorReporter.reportErrorForNode(
- StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE,
+ CompileTimeErrorCode.FIELD_INITIALIZER_NOT_ASSIGNABLE,
expression,
[staticType, fieldType]);
// TODO(brianwilkerson) Define a hint corresponding to these errors and
@@ -2539,7 +2540,7 @@
[variable.name.name]);
} else if (!_isNonNullableByDefault || !variable.isLate) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.FINAL_NOT_INITIALIZED,
+ CompileTimeErrorCode.FINAL_NOT_INITIALIZED,
variable.name,
[variable.name.name]);
}
@@ -2819,7 +2820,7 @@
ParameterElement staticParameterElement = argument.staticParameterElement;
DartType staticParameterType = staticParameterElement?.type;
_checkForArgumentTypeNotAssignable(argument, staticParameterType, _intType,
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE);
+ CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE);
}
/// Verify that the given [annotation] isn't defined in a deferred library.
@@ -3352,12 +3353,12 @@
SimpleIdentifier name = constructorName.name;
if (name != null) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR,
+ CompileTimeErrorCode.NEW_WITH_UNDEFINED_CONSTRUCTOR,
name,
[className, name]);
} else {
_errorReporter.reportErrorForNode(
- StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT,
+ CompileTimeErrorCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT,
constructorName,
[className]);
}
@@ -3452,7 +3453,7 @@
DartType type = annotation.type;
if (type != null && !type.isVoid) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.NON_VOID_RETURN_FOR_OPERATOR, annotation);
+ CompileTimeErrorCode.NON_VOID_RETURN_FOR_OPERATOR, annotation);
}
}
}
@@ -3466,7 +3467,7 @@
DartType type = typeName.type;
if (type != null && !type.isVoid) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.NON_VOID_RETURN_FOR_SETTER, typeName);
+ CompileTimeErrorCode.NON_VOID_RETURN_FOR_SETTER, typeName);
}
}
}
@@ -3959,7 +3960,7 @@
return;
}
_errorReporter.reportErrorForNode(
- StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER,
+ CompileTimeErrorCode.STATIC_ACCESS_TO_INSTANCE_MEMBER,
name,
[name.name]);
}
@@ -3999,7 +4000,7 @@
// check types
if (!_typeSystem.isAssignableTo2(expressionType, caseType)) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.SWITCH_EXPRESSION_NOT_ASSIGNABLE,
+ CompileTimeErrorCode.SWITCH_EXPRESSION_NOT_ASSIGNABLE,
expression,
[expressionType, caseType]);
}
@@ -4042,7 +4043,9 @@
void _checkForTypeAnnotationDeferredClass(TypeAnnotation type) {
if (type is TypeName && type.isDeferred) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS, type, [type.name]);
+ CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS,
+ type,
+ [type.name]);
}
}
@@ -4091,7 +4094,8 @@
// However all other type parameters are legal (e.g. the static method's
// type parameters, or a local function's type parameters).
_errorReporter.reportErrorForNode(
- StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, identifier);
+ CompileTimeErrorCode.TYPE_PARAMETER_REFERENCED_BY_STATIC,
+ identifier);
}
}
}
@@ -4325,10 +4329,10 @@
if (expression is MethodInvocation) {
SimpleIdentifier methodName = expression.methodName;
_errorReporter.reportErrorForNode(
- StaticWarningCode.USE_OF_VOID_RESULT, methodName, []);
+ CompileTimeErrorCode.USE_OF_VOID_RESULT, methodName, []);
} else {
_errorReporter.reportErrorForNode(
- StaticWarningCode.USE_OF_VOID_RESULT, expression, []);
+ CompileTimeErrorCode.USE_OF_VOID_RESULT, expression, []);
}
return true;
@@ -4363,11 +4367,9 @@
CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_STATIC_FIELD,
parameter,
[parameter.identifier.name]);
- } else if (declaredType != null &&
- fieldType != null &&
- !_typeSystem.isAssignableTo2(declaredType, fieldType)) {
+ } else if (!_typeSystem.isSubtypeOf(declaredType, fieldType)) {
_errorReporter.reportErrorForNode(
- StaticWarningCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE,
+ CompileTimeErrorCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE,
parameter,
[declaredType, fieldType]);
}
@@ -5124,6 +5126,15 @@
}
}
+ void _withHiddenElements(List<Statement> statements, void Function() f) {
+ _hiddenElements = HiddenElements(_hiddenElements, statements);
+ try {
+ f();
+ } finally {
+ _hiddenElements = _hiddenElements.outerElements;
+ }
+ }
+
/// Return [FieldElement]s that are declared in the [ClassDeclaration] with
/// the given [constructor], but are not initialized.
static List<FieldElement> computeNotInitializedFields(
@@ -5212,9 +5223,9 @@
/// Initialize a newly created set of hidden elements to include all of the
/// elements defined in the set of [outerElements] and all of the elements
- /// declared in the given [block].
- HiddenElements(this.outerElements, Block block) {
- _initializeElements(block);
+ /// declared in the given [statements].
+ HiddenElements(this.outerElements, List<Statement> statements) {
+ _initializeElements(statements);
}
/// Return `true` if this set of elements contains the given [element].
@@ -5234,9 +5245,9 @@
}
/// Initialize the list of elements that are not yet declared to be all of the
- /// elements declared somewhere in the given [block].
- void _initializeElements(Block block) {
- _elements.addAll(BlockScope.elementsInBlock(block));
+ /// elements declared somewhere in the given [statements].
+ void _initializeElements(List<Statement> statements) {
+ _elements.addAll(BlockScope.elementsInStatements(statements));
}
}
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 9070ccd..b57f4fe 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -2154,16 +2154,9 @@
@override
void visitBlock(Block node) {
- Scope outerScope = nameScope;
- try {
- var enclosedScope = LocalScope(nameScope);
- BlockScope.elementsInBlock(node).forEach(enclosedScope.add);
- nameScope = enclosedScope;
- _setNodeNameScope(node, nameScope);
+ _withDeclaredLocals(node, node.statements, () {
super.visitBlock(node);
- } finally {
- nameScope = outerScope;
- }
+ });
}
@override
@@ -2296,11 +2289,7 @@
@override
void visitDeclaredIdentifier(DeclaredIdentifier node) {
- VariableElement element = node.declaredElement;
- // TODO(scheglov) Do we need this?
- if (element != null) {
- _define(element);
- }
+ _define(node.declaredElement);
super.visitDeclaredIdentifier(node);
}
@@ -2467,15 +2456,9 @@
@override
void visitFunctionDeclaration(FunctionDeclaration node) {
- ExecutableElement element = node.declaredElement;
- // TODO(scheglov) Do we need this?
- if (element != null &&
- element.enclosingElement is! CompilationUnitElement) {
- _define(element);
- }
-
Scope outerScope = nameScope;
try {
+ var element = node.declaredElement;
nameScope = TypeParameterScope(
nameScope,
element.typeParameters,
@@ -2678,26 +2661,17 @@
@override
void visitSwitchCase(SwitchCase node) {
node.expression.accept(this);
- Scope outerNameScope = nameScope;
- try {
- nameScope = LocalScope(nameScope);
- _setNodeNameScope(node, nameScope);
+
+ _withDeclaredLocals(node, node.statements, () {
node.statements.accept(this);
- } finally {
- nameScope = outerNameScope;
- }
+ });
}
@override
void visitSwitchDefault(SwitchDefault node) {
- Scope outerNameScope = nameScope;
- try {
- nameScope = LocalScope(nameScope);
- _setNodeNameScope(node, nameScope);
+ _withDeclaredLocals(node, node.statements, () {
node.statements.accept(this);
- } finally {
- nameScope = outerNameScope;
- }
+ });
}
@override
@@ -2728,13 +2702,9 @@
@override
void visitVariableDeclaration(VariableDeclaration node) {
super.visitVariableDeclaration(node);
- if (node.parent.parent is! TopLevelVariableDeclaration &&
- node.parent.parent is! FieldDeclaration) {
- // TODO(scheglov) Do we need this?
- VariableElement element = node.declaredElement;
- if (element != null) {
- _define(element);
- }
+
+ if (node.parent.parent is ForParts) {
+ _define(node.declaredElement);
}
}
@@ -2769,6 +2739,25 @@
(nameScope as LocalScope).add(element);
}
+ void _withDeclaredLocals(
+ AstNode node,
+ List<Statement> statements,
+ void Function() f,
+ ) {
+ var outerScope = nameScope;
+ try {
+ var enclosedScope = LocalScope(nameScope);
+ BlockScope.elementsInStatements(statements).forEach(enclosedScope.add);
+
+ nameScope = enclosedScope;
+ _setNodeNameScope(node, nameScope);
+
+ f();
+ } finally {
+ nameScope = outerScope;
+ }
+ }
+
/// Return the [Scope] to use while resolving inside the [node].
///
/// Not every node has the scope set, for example we set the scopes for
diff --git a/pkg/analyzer/lib/src/summary2/reference_resolver.dart b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
index 0ebc307..013ec70 100644
--- a/pkg/analyzer/lib/src/summary2/reference_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
@@ -13,7 +13,6 @@
import 'package:analyzer/src/dart/element/scope.dart';
import 'package:analyzer/src/dart/element/type.dart';
import 'package:analyzer/src/dart/element/type_system.dart';
-import 'package:analyzer/src/dart/resolver/scope.dart';
import 'package:analyzer/src/summary/idl.dart';
import 'package:analyzer/src/summary2/function_type_builder.dart';
import 'package:analyzer/src/summary2/lazy_ast.dart';
@@ -492,19 +491,33 @@
@override
void visitTypeName(TypeName node) {
- var typeName = node.name;
- if (typeName is SimpleIdentifier && typeName.name == 'void') {
- node.type = VoidTypeImpl.instance;
- return;
- }
+ var typeIdentifier = node.name;
- var element = scope.lookupIdentifier(typeName);
- if (typeName is SimpleIdentifier) {
- typeName.staticElement = element;
- } else if (typeName is PrefixedIdentifier) {
- typeName.identifier.staticElement = element;
- SimpleIdentifier prefix = typeName.prefix;
- prefix.staticElement = scope.lookupIdentifier(prefix);
+ Element element;
+ if (typeIdentifier is PrefixedIdentifier) {
+ var prefix = typeIdentifier.prefix;
+ var prefixName = prefix.name;
+ var prefixElement = scope.lookup2(prefixName).getter;
+ prefix.staticElement = prefixElement;
+
+ if (prefixElement is PrefixElement) {
+ var nameNode = typeIdentifier.identifier;
+ var name = nameNode.name;
+
+ element = prefixElement.scope.lookup2(name).getter;
+ nameNode.staticElement = element;
+ }
+ } else {
+ var nameNode = typeIdentifier as SimpleIdentifier;
+ var name = nameNode.name;
+
+ if (name == 'void') {
+ node.type = VoidTypeImpl.instance;
+ return;
+ }
+
+ element = scope.lookup2(name).getter;
+ nameNode.staticElement = element;
}
node.typeArguments?.accept(this);
diff --git a/pkg/analyzer/lib/src/task/strong/checker.dart b/pkg/analyzer/lib/src/task/strong/checker.dart
index 00cc152..33db715 100644
--- a/pkg/analyzer/lib/src/task/strong/checker.dart
+++ b/pkg/analyzer/lib/src/task/strong/checker.dart
@@ -307,7 +307,12 @@
for (int i = 0, last = init.length - 1; i < last; i++) {
final node = init[i];
if (node is SuperConstructorInvocation) {
- _recordMessage(node, StrongModeCode.INVALID_SUPER_INVOCATION, [node]);
+ // TODO(srawlins): Don't report this when
+ // [CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR] or
+ // [CompileTimeErrorCode.MULTIPLE_SUPER_INITIALIZERS] is reported for
+ // this constructor.
+ _recordMessage(
+ node, CompileTimeErrorCode.INVALID_SUPER_INVOCATION, [node]);
}
}
}
@@ -348,23 +353,6 @@
}
@override
- void visitFieldFormalParameter(FieldFormalParameter node) {
- var element = node.declaredElement;
- var typeName = node.type;
- if (typeName != null) {
- var type = _elementType(element);
- var fieldElement =
- node.identifier.staticElement as FieldFormalParameterElement;
- var fieldType = _elementType(fieldElement.field);
- if (!rules.isSubtypeOf2(type, fieldType)) {
- _recordMessage(node, StrongModeCode.INVALID_PARAMETER_DECLARATION,
- [node, fieldType]);
- }
- }
- node.visitChildren(this);
- }
-
- @override
void visitForEachPartsWithDeclaration(ForEachPartsWithDeclaration node) {
_visitForEachParts(node, node.loopVariable?.identifier);
node.visitChildren(this);
@@ -1071,8 +1059,12 @@
TopLevelInferenceError error = variable.typeInferenceError;
if (error != null) {
if (error.kind == TopLevelInferenceErrorKind.dependencyCycle) {
- _codeChecker._recordMessage(
- n, StrongModeCode.TOP_LEVEL_CYCLE, [_name, error.arguments]);
+ // Errors on const should have been reported with
+ // [CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT].
+ if (!variable.isConst) {
+ _codeChecker._recordMessage(n, CompileTimeErrorCode.TOP_LEVEL_CYCLE,
+ [_name, error.arguments]);
+ }
} else {
_codeChecker._recordMessage(
n, StrongModeCode.TOP_LEVEL_IDENTIFIER_NO_TYPE, [_name, e.name]);
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index be7867b..d8d71f9 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -1,5 +1,5 @@
name: analyzer
-version: 0.39.15-dev
+version: 0.39.15
description: This package provides a library that performs static analysis of Dart code.
homepage: https://github.com/dart-lang/sdk/tree/master/pkg/analyzer
diff --git a/pkg/analyzer/test/error/error_reporter_test.dart b/pkg/analyzer/test/error/error_reporter_test.dart
index 7f1ea6f..9eaa852 100644
--- a/pkg/analyzer/test/error/error_reporter_test.dart
+++ b/pkg/analyzer/test/error/error_reporter_test.dart
@@ -41,7 +41,7 @@
isNonNullableByDefault: false,
);
reporter.reportErrorForElement(
- StaticWarningCode.CAST_TO_NON_TYPE,
+ CompileTimeErrorCode.CAST_TO_NON_TYPE,
element,
['A'],
);
@@ -63,7 +63,7 @@
isNonNullableByDefault: false,
);
reporter.reportErrorForElement(
- StaticWarningCode.CAST_TO_NON_TYPE,
+ CompileTimeErrorCode.CAST_TO_NON_TYPE,
element,
['A'],
);
@@ -102,7 +102,7 @@
);
reporter.reportErrorForNode(
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
+ CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
findNode.simple('x'),
[firstType, secondType],
);
@@ -140,7 +140,7 @@
isNonNullableByDefault: false,
);
reporter.reportErrorForNode(
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
+ CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
findNode.simple('x'),
[firstType, secondType],
);
@@ -173,7 +173,7 @@
isNonNullableByDefault: false,
);
reporter.reportErrorForNode(
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
+ CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
findNode.simple('x'),
[fa.variables.type.type, fb.variables.type.type],
);
@@ -208,7 +208,7 @@
isNonNullableByDefault: false,
);
reporter.reportErrorForNode(
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
+ CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
findNode.simple('x'),
[ba.variables.type.type, bb.variables.type.type],
);
diff --git a/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_test.dart b/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_test.dart
index 3912bc6..0d43ce3 100644
--- a/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_test.dart
+++ b/pkg/analyzer/test/generated/checked_mode_compile_time_error_code_test.dart
@@ -164,7 +164,7 @@
foo(x) => 1;
var v = const A(foo);
''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 116, 3),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 116, 3),
error(
CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
116,
@@ -196,7 +196,7 @@
CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
62,
5),
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 62, 5),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 62, 5),
]);
}
@@ -237,7 +237,7 @@
CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
62,
5),
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 62, 5),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 62, 5),
]);
}
@@ -354,7 +354,7 @@
int foo(String x) => 1;
var v = const A(foo);
''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 127, 3),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 127, 3),
error(
CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
127,
@@ -369,7 +369,7 @@
const A() : x = '';
}
''', [
- error(StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE, 43, 2),
+ error(CompileTimeErrorCode.FIELD_INITIALIZER_NOT_ASSIGNABLE, 43, 2),
error(
CheckedModeCompileTimeErrorCode
.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE,
@@ -470,7 +470,7 @@
await assertErrorsInCode('''
var v = const <String> [42];
''', [
- error(StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 24, 2),
+ error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 24, 2),
]);
}
@@ -542,7 +542,7 @@
CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
46,
5),
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 46, 5),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 46, 5),
]);
}
@@ -553,7 +553,7 @@
}
var v = const A<int>('foo');
''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 52, 5),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 52, 5),
error(
CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
52,
diff --git a/pkg/analyzer/test/generated/compile_time_error_code.dart b/pkg/analyzer/test/generated/compile_time_error_code.dart
index 761b1fb..8afcd5b 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code.dart
@@ -53,8 +53,8 @@
}
''', [
error(ParserErrorCode.EXPECTED_TOKEN, 8, 7),
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 8, 7),
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 16, 1),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 8, 7),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 16, 1),
]);
}
@@ -163,7 +163,7 @@
}
''', [
error(CompileTimeErrorCode.CONST_WITH_NON_CONSTANT_ARGUMENT, 94, 3),
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 94, 3),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 94, 3),
]);
}
@@ -178,143 +178,15 @@
]);
}
- test_constWithNonType() async {
- await assertErrorsInCode(r'''
-int A;
-f() {
- return const A();
-}
-''', [
- error(CompileTimeErrorCode.CONST_WITH_NON_TYPE, 28, 1),
- ]);
- }
-
- test_constWithNonType_fromLibrary() async {
- newFile('/test/lib/lib1.dart');
- await assertErrorsInCode('''
-import 'lib1.dart' as lib;
-void f() {
- const lib.A();
-}
-''', [
- error(CompileTimeErrorCode.CONST_WITH_NON_TYPE, 50, 1),
- ]);
- }
-
- test_constWithTypeParameters_direct() async {
- await assertErrorsInCode(r'''
-class A<T> {
- static const V = const A<T>();
- const A();
-}
-''', [
- error(StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, 40, 1),
- error(CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS, 40, 1),
- ]);
- }
-
- test_constWithTypeParameters_indirect() async {
- await assertErrorsInCode(r'''
-class A<T> {
- static const V = const A<List<T>>();
- const A();
-}
-''', [
- error(CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS, 45, 1),
- error(StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, 45, 1),
- ]);
- }
-
- test_constWithUndefinedConstructor() async {
- await assertErrorsInCode(r'''
-class A {
- const A();
-}
-f() {
- return const A.noSuchConstructor();
-}
-''', [
- error(CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR, 48, 17),
- ]);
- }
-
- test_constWithUndefinedConstructorDefault() async {
- await assertErrorsInCode(r'''
-class A {
- const A.name();
-}
-f() {
- return const A();
-}
-''', [
- error(
- CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT, 51, 1),
- ]);
- }
-
- test_extraPositionalArguments_const() async {
- await assertErrorsInCode(r'''
-class A {
- const A();
-}
-main() {
- const A(0);
-}
-''', [
- error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS, 43, 3),
- ]);
- }
-
- test_extraPositionalArguments_const_super() async {
- await assertErrorsInCode(r'''
-class A {
- const A();
-}
-class B extends A {
- const B() : super(0);
-}
-''', [
- error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS, 64, 3),
- ]);
- }
-
- test_extraPositionalArgumentsCouldBeNamed_const() async {
- await assertErrorsInCode(r'''
-class A {
- const A({int x});
-}
-main() {
- const A(0);
-}
-''', [
- error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED, 50,
- 3),
- ]);
- }
-
- test_extraPositionalArgumentsCouldBeNamed_const_super() async {
- await assertErrorsInCode(r'''
-class A {
- const A({int x});
-}
-class B extends A {
- const B() : super(0);
-}
-''', [
- error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED, 71,
- 3),
- ]);
- }
-
test_fromEnvironment_bool_badArgs() async {
await assertErrorsInCode(r'''
var b1 = const bool.fromEnvironment(1);
var b2 = const bool.fromEnvironment('x', defaultValue: 1);
''', [
error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 9, 29),
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 36, 1),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 36, 1),
error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 49, 48),
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 81, 15),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 81, 15),
]);
}
@@ -326,7 +198,7 @@
var b = const bool.fromEnvironment('x', defaultValue: 1);
''', [
error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 8, 48),
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 40, 15),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 40, 15),
]);
}
@@ -335,7 +207,7 @@
T f<T>(T t) => null;
main() { f(<S>(S s) => s); }
''', [
- error(StrongModeCode.COULD_NOT_INFER, 30, 1),
+ error(CompileTimeErrorCode.COULD_NOT_INFER, 30, 1),
]);
}
@@ -344,7 +216,7 @@
T Function<T>(T) f;
main() { f(<S>(S s) => s); }
''', [
- error(StrongModeCode.COULD_NOT_INFER, 29, 1),
+ error(CompileTimeErrorCode.COULD_NOT_INFER, 29, 1),
]);
}
@@ -355,46 +227,7 @@
}
main() { new C().f(<S>(S s) => s); }
''', [
- error(StrongModeCode.COULD_NOT_INFER, 52, 1),
- ]);
- }
-
- test_genericFunctionTypeAsBound_class() async {
- await assertErrorsInCode(r'''
-class C<T extends S Function<S>(S)> {
-}
-''', [
- error(CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND, 18, 16),
- ]);
- }
-
- test_genericFunctionTypeAsBound_genericFunction() async {
- await assertErrorsInCode(r'''
-T Function<T extends S Function<S>(S)>(T) fun;
-''', [
- error(CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND, 21, 16),
- ]);
- }
-
- test_genericFunctionTypeAsBound_genericFunctionTypedef() async {
- await assertErrorsInCode(r'''
-typedef foo = T Function<T extends S Function<S>(S)>(T t);
-''', [
- error(CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND, 35, 16),
- ]);
- }
-
- test_genericFunctionTypeAsBound_parameterOfFunction() async {
- await assertNoErrorsInCode(r'''
-class C<T extends void Function(S Function<S>(S))> {}
-''');
- }
-
- test_genericFunctionTypeAsBound_typedef() async {
- await assertErrorsInCode(r'''
-typedef T foo<T extends S Function<S>(S)>(T t);
-''', [
- error(CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND, 24, 16),
+ error(CompileTimeErrorCode.COULD_NOT_INFER, 52, 1),
]);
}
@@ -405,34 +238,6 @@
await assertNoErrorsInCode(code);
}
- test_importInternalLibrary() async {
- // Note, in these error cases we may generate an UNUSED_IMPORT hint, while
- // we could prevent the hint from being generated by testing the import
- // directive for the error, this is such a minor corner case that we don't
- // think we should add the additional computation time to figure out such
- // cases.
- await assertErrorsInCode('''
-import 'dart:_interceptors';
-''', [
- error(CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY, 7, 20),
- error(HintCode.UNUSED_IMPORT, 7, 20),
- ]);
- }
-
- test_importOfNonLibrary() async {
- newFile("/test/lib/part.dart", content: r'''
-part of lib;
-class A{}
-''');
- await assertErrorsInCode(r'''
-library lib;
-import 'part.dart';
-A a;
-''', [
- error(CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY, 20, 11),
- ]);
- }
-
test_length_of_erroneous_constant() async {
// Attempting to compute the length of constant that couldn't be evaluated
// (due to an error) should not crash the analyzer (see dartbug.com/23383)
@@ -503,7 +308,7 @@
const MyClass([p = foo]);
}
''', [
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 37, 3),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 37, 3),
error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 37, 3),
]);
}
@@ -518,7 +323,7 @@
''', [
error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 9, 17),
error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 37, 15),
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 50, 1),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 50, 1),
error(CompileTimeErrorCode.NOT_ENOUGH_POSITIONAL_ARGUMENTS, 75, 2),
error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS, 100, 10),
error(CompileTimeErrorCode.UNDEFINED_NAMED_PARAMETER, 139, 3),
@@ -532,7 +337,7 @@
''', [
error(HintCode.UNUSED_ELEMENT, 23, 1),
error(CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL_INT, 27, 6),
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 31, 2),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 31, 2),
]);
}
@@ -543,7 +348,7 @@
''', [
error(HintCode.UNUSED_ELEMENT, 23, 1),
error(CompileTimeErrorCode.CONST_EVAL_TYPE_BOOL_INT, 27, 6),
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 31, 2),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 31, 2),
]);
}
@@ -554,7 +359,7 @@
''', [
error(HintCode.UNUSED_ELEMENT, 23, 1),
error(CompileTimeErrorCode.CONST_EVAL_TYPE_NUM, 27, 6),
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 31, 2),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 31, 2),
]);
}
}
diff --git a/pkg/analyzer/test/generated/compile_time_error_code_test.dart b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
index 86d4e60..b77cbfd 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_test.dart
@@ -31,7 +31,7 @@
await assertErrorsInCode('''
var v = const <String>[42];
''', [
- error(StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 23, 2),
+ error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 23, 2),
]);
}
@@ -39,7 +39,7 @@
await assertErrorsInCode('''
var v = const <String, String>{'a' : 2};
''', [
- error(StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 37, 1),
+ error(CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 37, 1),
]);
}
@@ -122,7 +122,7 @@
await assertErrorsInCode('''
var v = const <String>{42};
''', [
- error(StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 23, 2),
+ error(CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 23, 2),
]);
}
}
diff --git a/pkg/analyzer/test/generated/non_error_resolver_test.dart b/pkg/analyzer/test/generated/non_error_resolver_test.dart
index 2b9fc1f..4527bd6 100644
--- a/pkg/analyzer/test/generated/non_error_resolver_test.dart
+++ b/pkg/analyzer/test/generated/non_error_resolver_test.dart
@@ -1324,27 +1324,6 @@
''');
}
- test_for_in_scope() async {
- await assertNoErrorsInCode('''
-main() {
- List<List<int>> x = [[1]];
- for (int x in x.first) {
- print(x.isEven);
- }
-}
-''');
- }
-
- test_forEach_genericFunctionType() async {
- await assertNoErrorsInCode(r'''
-main() {
- for (Null Function<T>(T, Null) e in <dynamic>[]) {
- e;
- }
-}
-''');
- }
-
test_functionDeclaration_scope_returnType() async {
await assertNoErrorsInCode('''
int f(int) { return 0; }
diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
index 9b6101f..16902a4 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -350,7 +350,6 @@
]);
}
-// @failingTest
test_for() async {
await assertErrorsInCode(r'''
int f(List<int> list) {
diff --git a/pkg/analyzer/test/generated/strong_mode_test.dart b/pkg/analyzer/test/generated/strong_mode_test.dart
index fd8a5af..6504efa 100644
--- a/pkg/analyzer/test/generated/strong_mode_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_test.dart
@@ -335,9 +335,9 @@
test_constrainedByBounds5() async {
// Test that upwards inference with two type variables does not
- // propogate from the constrained variable to the unconstrained
+ // propagate from the constrained variable to the unconstrained
// variable if they are ordered right to left, when the variable
- // appears co and contra variantly, and that an error is issued
+ // appears co- and contra-variantly, and that an error is issued
// for the non-matching bound.
String code = r'''
typedef To Func1<From, To>(From x);
@@ -346,7 +346,7 @@
''';
Source source = addSource(code);
TestAnalysisResult analysisResult = await computeAnalysisResult(source);
- assertErrors(source, [StrongModeCode.COULD_NOT_INFER]);
+ assertErrors(source, [CompileTimeErrorCode.COULD_NOT_INFER]);
verify([source]);
CompilationUnit unit = analysisResult.unit;
List<Statement> statements =
@@ -981,7 +981,7 @@
MethodInvocation invoke = await _testFutureOr(r'''
Future<T> mk<T extends Future<Object>>(FutureOr<T> x) => null;
dynamic test() => mk(new Future<int>.value(42));
- ''', errors: [StrongModeCode.COULD_NOT_INFER]);
+ ''', errors: [CompileTimeErrorCode.COULD_NOT_INFER]);
_isFutureOfInt(invoke.staticType);
}
@@ -1093,8 +1093,8 @@
''');
await computeAnalysisResult(source);
_expectInferenceError(source, [
- StrongModeCode.COULD_NOT_INFER,
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ CompileTimeErrorCode.COULD_NOT_INFER,
+ CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
], r'''
Couldn't infer type parameter 'T'.
@@ -1119,9 +1119,9 @@
''');
await computeAnalysisResult(source);
_expectInferenceError(source, [
- StrongModeCode.COULD_NOT_INFER,
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ CompileTimeErrorCode.COULD_NOT_INFER,
+ CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE,
+ CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
], r'''
Couldn't infer type parameter 'T'.
@@ -1170,7 +1170,7 @@
''');
await computeAnalysisResult(source);
_expectInferenceError(source, [
- StrongModeCode.COULD_NOT_INFER,
+ CompileTimeErrorCode.COULD_NOT_INFER,
], r'''
Couldn't infer type parameter 'T'.
@@ -1198,8 +1198,8 @@
''');
await computeAnalysisResult(source);
_expectInferenceError(source, [
- StrongModeCode.COULD_NOT_INFER,
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ CompileTimeErrorCode.COULD_NOT_INFER,
+ CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
], r'''
Couldn't infer type parameter 'T'.
@@ -1223,7 +1223,7 @@
}
''');
await computeAnalysisResult(source);
- _expectInferenceError(source, [StrongModeCode.COULD_NOT_INFER], r'''
+ _expectInferenceError(source, [CompileTimeErrorCode.COULD_NOT_INFER], r'''
Couldn't infer type parameter 'T'.
Tried to infer 'num' for 'T' which doesn't work:
@@ -1364,8 +1364,8 @@
''');
var analysisResult = await computeAnalysisResult(source);
assertErrors(source, [
- StrongModeCode.COULD_NOT_INFER,
- StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ CompileTimeErrorCode.COULD_NOT_INFER,
+ CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE
]);
verify([source]);
var unit = analysisResult.unit;
@@ -2375,7 +2375,7 @@
assertErrors(source, errorCodes);
var errors = analysisResults[source]
.errors
- .where((e) => e.errorCode == StrongModeCode.COULD_NOT_INFER)
+ .where((e) => e.errorCode == CompileTimeErrorCode.COULD_NOT_INFER)
.map((e) => e.message)
.toList();
expect(errors.length, 1);
@@ -3262,10 +3262,10 @@
}
''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 61, 3),
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 106, 1),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 106, 1),
]);
// Note: this correctly reports the error
- // StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE when run with the driver;
+ // CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE when run with the driver;
// when run without the driver, it reports no errors. So we don't bother
// checking whether the correct errors were reported.
expectInitializerType('foo', 'Future<String>');
@@ -3341,7 +3341,7 @@
''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 73, 1),
error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 81, 1),
- error(StrongModeCode.COULD_NOT_INFER, 81, 1),
+ error(CompileTimeErrorCode.COULD_NOT_INFER, 81, 1),
]);
_assertLocalVarType('c', 'C<List<dynamic>, List<List<dynamic>>>');
}
@@ -3456,7 +3456,7 @@
''', [
error(HintCode.MISSING_RETURN, 3, 1),
error(HintCode.UNUSED_LOCAL_VARIABLE, 69, 1),
- error(StrongModeCode.COULD_NOT_INFER, 73, 1),
+ error(CompileTimeErrorCode.COULD_NOT_INFER, 73, 1),
]);
_assertLocalVarType('c', 'List<dynamic>');
}
@@ -3678,8 +3678,8 @@
}
dynamic set g(int x) => null;
''', [
- error(StaticWarningCode.NON_VOID_RETURN_FOR_SETTER, 12, 7),
- error(StaticWarningCode.NON_VOID_RETURN_FOR_SETTER, 47, 7),
+ error(CompileTimeErrorCode.NON_VOID_RETURN_FOR_SETTER, 12, 7),
+ error(CompileTimeErrorCode.NON_VOID_RETURN_FOR_SETTER, 47, 7),
]);
}
@@ -3723,8 +3723,8 @@
}
Object set g(x) => null;
''', [
- error(StaticWarningCode.NON_VOID_RETURN_FOR_SETTER, 12, 6),
- error(StaticWarningCode.NON_VOID_RETURN_FOR_SETTER, 46, 6),
+ error(CompileTimeErrorCode.NON_VOID_RETURN_FOR_SETTER, 12, 6),
+ error(CompileTimeErrorCode.NON_VOID_RETURN_FOR_SETTER, 46, 6),
]);
}
diff --git a/pkg/analyzer/test/source/error_processor_test.dart b/pkg/analyzer/test/source/error_processor_test.dart
index e9f2284..f3e548d 100644
--- a/pkg/analyzer/test/source/error_processor_test.dart
+++ b/pkg/analyzer/test/source/error_processor_test.dart
@@ -34,8 +34,8 @@
['x']
]);
- AnalysisError use_of_void_result =
- AnalysisError(TestSource(), 0, 1, StaticWarningCode.USE_OF_VOID_RESULT, [
+ AnalysisError use_of_void_result = AnalysisError(
+ TestSource(), 0, 1, CompileTimeErrorCode.USE_OF_VOID_RESULT, [
['x']
]);
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index 4e30908..031f9e3 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -513,7 +513,7 @@
ResolvedUnitResult libResult = await driver.getResult(lib);
List<AnalysisError> errors = libResult.errors;
expect(errors, hasLength(1));
- expect(errors[0].errorCode, StaticWarningCode.PART_OF_DIFFERENT_LIBRARY);
+ expect(errors[0].errorCode, CompileTimeErrorCode.PART_OF_DIFFERENT_LIBRARY);
}
test_analyze_resolveDirectives_error_partOfDifferentLibrary_byUri() async {
@@ -532,7 +532,7 @@
ResolvedUnitResult libResult = await driver.getResult(lib);
List<AnalysisError> errors = libResult.errors;
expect(errors, hasLength(1));
- expect(errors[0].errorCode, StaticWarningCode.PART_OF_DIFFERENT_LIBRARY);
+ expect(errors[0].errorCode, CompileTimeErrorCode.PART_OF_DIFFERENT_LIBRARY);
}
test_analyze_resolveDirectives_error_partOfNonPart() async {
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index 7885e20..718e234 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -21,7 +21,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(SearchTest);
- defineReflectiveTests(SearchWithNnbdTest);
+ defineReflectiveTests(SearchWithNullSafetyTest);
});
}
@@ -1817,7 +1817,7 @@
}
@reflectiveTest
-class SearchWithNnbdTest extends SearchTest {
+class SearchWithNullSafetyTest extends SearchTest {
@override
AnalysisOptionsImpl createAnalysisOptions() => AnalysisOptionsImpl()
..contextFeatures = FeatureSet.forTesting(
diff --git a/pkg/analyzer/test/src/dart/element/element_test.dart b/pkg/analyzer/test/src/dart/element/element_test.dart
index 4be0fa5..8e625ec 100644
--- a/pkg/analyzer/test/src/dart/element/element_test.dart
+++ b/pkg/analyzer/test/src/dart/element/element_test.dart
@@ -1282,6 +1282,23 @@
@reflectiveTest
class InterfaceTypeImplTest extends AbstractTypeTest {
+ void test_allSupertypes() {
+ void check(InterfaceType type, List<String> expected) {
+ var actual = type.allSupertypes.map((e) {
+ return e.getDisplayString(
+ withNullability: true,
+ );
+ }).toList()
+ ..sort();
+ expect(actual, expected);
+ }
+
+ check(objectNone, []);
+ check(numNone, ['Comparable<num>', 'Object']);
+ check(intNone, ['Comparable<num>', 'Object', 'num']);
+ check(listNone(intQuestion), ['Iterable<int?>', 'Object']);
+ }
+
test_asInstanceOf_explicitGeneric() {
// class A<E> {}
// class B implements A<C> {}
diff --git a/pkg/analyzer/test/src/dart/element/future_or_base_test.dart b/pkg/analyzer/test/src/dart/element/future_or_base_test.dart
new file mode 100644
index 0000000..c70b702
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/element/future_or_base_test.dart
@@ -0,0 +1,66 @@
+// 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.
+
+import 'package:analyzer/dart/element/type.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../../generated/type_system_test.dart';
+
+main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(FutureOrBaseTest);
+ });
+}
+
+@reflectiveTest
+class FutureOrBaseTest extends AbstractTypeSystemNullSafetyTest {
+ test_dynamic() {
+ _check(dynamicNone, 'dynamic');
+ }
+
+ test_futureOr() {
+ void check(DartType S, String expected) {
+ _check(futureOrNone(S), expected);
+ }
+
+ check(intNone, 'int');
+ check(intQuestion, 'int?');
+ check(intStar, 'int*');
+
+ check(dynamicNone, 'dynamic');
+ check(voidNone, 'void');
+
+ check(neverNone, 'Never');
+ check(neverQuestion, 'Never?');
+ check(neverStar, 'Never*');
+
+ check(objectNone, 'Object');
+ check(objectQuestion, 'Object?');
+ check(objectStar, 'Object*');
+ }
+
+ test_other() {
+ _check(intNone, 'int');
+ _check(intQuestion, 'int?');
+ _check(intStar, 'int*');
+
+ _check(objectNone, 'Object');
+ _check(objectQuestion, 'Object?');
+ _check(objectStar, 'Object*');
+ }
+
+ /// futureValueType(`void`) = `void`.
+ test_void() {
+ _check(voidNone, 'void');
+ }
+
+ void _check(DartType T, String expected) {
+ var result = typeSystem.futureOrBase(T);
+ expect(
+ result.getDisplayString(withNullability: true),
+ expected,
+ );
+ }
+}
diff --git a/pkg/analyzer/test/src/dart/element/generic_inferrer_test.dart b/pkg/analyzer/test/src/dart/element/generic_inferrer_test.dart
index 8427087..bc84dbd 100644
--- a/pkg/analyzer/test/src/dart/element/generic_inferrer_test.dart
+++ b/pkg/analyzer/test/src/dart/element/generic_inferrer_test.dart
@@ -616,7 +616,7 @@
if (expectError) {
expect(listener.errors.map((e) => e.errorCode).toList(),
- [StrongModeCode.COULD_NOT_INFER],
+ [CompileTimeErrorCode.COULD_NOT_INFER],
reason: 'expected exactly 1 could not infer error.');
} else {
expect(listener.errors, isEmpty, reason: 'did not expect any errors.');
diff --git a/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart b/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
index 2abef15..4b3d2b9 100644
--- a/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
+++ b/pkg/analyzer/test/src/dart/element/inheritance_manager3_test.dart
@@ -15,7 +15,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(InheritanceManager3Test);
- defineReflectiveTests(InheritanceManager3WithNnbdTest);
+ defineReflectiveTests(InheritanceManager3WithNullSafetyTest);
});
}
@@ -1042,7 +1042,7 @@
}
@reflectiveTest
-class InheritanceManager3WithNnbdTest extends _InheritanceManager3Base
+class InheritanceManager3WithNullSafetyTest extends _InheritanceManager3Base
with WithNullSafetyMixin {
test_getInheritedMap_topMerge_method() async {
newFile('/test/lib/a.dart', content: r'''
diff --git a/pkg/analyzer/test/src/dart/element/test_all.dart b/pkg/analyzer/test/src/dart/element/test_all.dart
index e08cff7..0d31f54 100644
--- a/pkg/analyzer/test/src/dart/element/test_all.dart
+++ b/pkg/analyzer/test/src/dart/element/test_all.dart
@@ -9,6 +9,7 @@
import 'factor_type_test.dart' as factor_type;
import 'flatten_type_test.dart' as flatten_type;
import 'function_type_test.dart' as function_type;
+import 'future_or_base_test.dart' as future_or_base;
import 'future_value_type_test.dart' as future_value_type;
import 'generic_inferrer_test.dart' as generic_inferrer;
import 'inheritance_manager3_test.dart' as inheritance_manager3;
@@ -33,6 +34,7 @@
factor_type.main();
flatten_type.main();
function_type.main();
+ future_or_base.main();
future_value_type.main();
generic_inferrer.main();
inheritance_manager3.main();
diff --git a/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart b/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
index e431824..0053393 100644
--- a/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
+++ b/pkg/analyzer/test/src/dart/micro/simple_file_resolver_test.dart
@@ -235,7 +235,7 @@
expect(result.path, convertPath('/workspace/dart/test/lib/test.dart'));
expect(result.uri.toString(), 'package:dart.test/test.dart');
assertErrorsInList(result.errors, [
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 8, 1),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 8, 1),
]);
expect(result.lineInfo.lineStarts, [0, 11, 24]);
}
diff --git a/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart
index 8fd3389..e9cb047 100644
--- a/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(BinaryExpressionResolutionTest);
- defineReflectiveTests(BinaryExpressionResolutionWithNnbdTest);
+ defineReflectiveTests(BinaryExpressionResolutionWithNullSafetyTest);
});
}
@@ -230,7 +230,7 @@
}
@reflectiveTest
-class BinaryExpressionResolutionWithNnbdTest extends DriverResolutionTest
+class BinaryExpressionResolutionWithNullSafetyTest extends DriverResolutionTest
with WithNullSafetyMixin {
test_ifNull_left_nullableContext() async {
await assertNoErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/class_test.dart b/pkg/analyzer/test/src/dart/resolution/class_test.dart
index b988020..891e684 100644
--- a/pkg/analyzer/test/src/dart/resolution/class_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/class_test.dart
@@ -530,7 +530,7 @@
error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 6, 1),
error(CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, 33, 1),
error(
- StaticWarningCode
+ CompileTimeErrorCode
.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS,
60,
1),
diff --git a/pkg/analyzer/test/src/dart/resolution/constant_test.dart b/pkg/analyzer/test/src/dart/resolution/constant_test.dart
index 4a9651e..1c07958 100644
--- a/pkg/analyzer/test/src/dart/resolution/constant_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/constant_test.dart
@@ -17,7 +17,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ConstantResolutionTest);
- defineReflectiveTests(ConstantResolutionWithNnbdTest);
+ defineReflectiveTests(ConstantResolutionWithNullSafetyTest);
});
}
@@ -236,7 +236,7 @@
}
@reflectiveTest
-class ConstantResolutionWithNnbdTest extends DriverResolutionTest
+class ConstantResolutionWithNullSafetyTest extends DriverResolutionTest
with WithNullSafetyMixin {
test_context_eliminateTypeVariables() async {
await assertNoErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart b/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart
index 96eb57a..191d6c2 100644
--- a/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/extension_method_test.dart
@@ -15,13 +15,13 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ExtensionMethodsDeclarationTest);
- defineReflectiveTests(ExtensionMethodsDeclarationWithNnbdTest);
+ defineReflectiveTests(ExtensionMethodsDeclarationWithNullSafetyTest);
defineReflectiveTests(ExtensionMethodsExtendedTypeTest);
- defineReflectiveTests(ExtensionMethodsExtendedTypeWithNnbdTest);
+ defineReflectiveTests(ExtensionMethodsExtendedTypeWithNullSafetyTest);
defineReflectiveTests(ExtensionMethodsExternalReferenceTest);
- defineReflectiveTests(ExtensionMethodsExternalReferenceWithNnbdTest);
+ defineReflectiveTests(ExtensionMethodsExternalReferenceWithNullSafetyTest);
defineReflectiveTests(ExtensionMethodsInternalReferenceTest);
- defineReflectiveTests(ExtensionMethodsInternalReferenceWithNnbdTest);
+ defineReflectiveTests(ExtensionMethodsInternalReferenceWithNullSafetyTest);
});
}
@@ -315,7 +315,7 @@
/// Tests that show that extension declarations and the members inside them are
/// resolved correctly.
@reflectiveTest
-class ExtensionMethodsDeclarationWithNnbdTest extends DriverResolutionTest
+class ExtensionMethodsDeclarationWithNullSafetyTest extends DriverResolutionTest
with WithNullSafetyMixin {
test_this_type_interface() async {
await assertNoErrorsInCode('''
@@ -475,7 +475,7 @@
}
@reflectiveTest
-class ExtensionMethodsExtendedTypeWithNnbdTest
+class ExtensionMethodsExtendedTypeWithNullSafetyTest
extends ExtensionMethodsExtendedTypeTest with WithNullSafetyMixin {}
/// Tests that extension members can be correctly resolved when referenced
@@ -948,8 +948,8 @@
extension on Object {}
var a = b + c;
''', [
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 31, 1),
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 35, 1),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 31, 1),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 35, 1),
]);
}
@@ -1420,7 +1420,7 @@
}
@reflectiveTest
-class ExtensionMethodsExternalReferenceWithNnbdTest
+class ExtensionMethodsExternalReferenceWithNullSafetyTest
extends ExtensionMethodsExternalReferenceTest with WithNullSafetyMixin {
test_instance_getter_fromInstance_Never() async {
await assertNoErrorsInCode('''
@@ -2218,5 +2218,5 @@
}
@reflectiveTest
-class ExtensionMethodsInternalReferenceWithNnbdTest
+class ExtensionMethodsInternalReferenceWithNullSafetyTest
extends ExtensionMethodsInternalReferenceTest with WithNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/dart/resolution/for_element_test.dart b/pkg/analyzer/test/src/dart/resolution/for_element_test.dart
index 11f1fd0e..bccb3ad 100644
--- a/pkg/analyzer/test/src/dart/resolution/for_element_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/for_element_test.dart
@@ -10,7 +10,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ForEachElementTest);
- defineReflectiveTests(ForEachElementWithNnbdTest);
+ defineReflectiveTests(ForEachElementWithNullSafetyTest);
defineReflectiveTests(ForLoopElementTest);
});
}
@@ -50,7 +50,7 @@
}
@reflectiveTest
-class ForEachElementWithNnbdTest extends ForEachElementTest
+class ForEachElementWithNullSafetyTest extends ForEachElementTest
with WithNullSafetyMixin {
test_optIn_fromOptOut() async {
newFile('/test/lib/a.dart', content: r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/for_statement_test.dart b/pkg/analyzer/test/src/dart/resolution/for_statement_test.dart
index 8e874b8..74e9323 100644
--- a/pkg/analyzer/test/src/dart/resolution/for_statement_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/for_statement_test.dart
@@ -2,8 +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:analyzer/src/error/codes.dart';
-import 'package:test/test.dart';
+import 'package:analyzer/src/dart/error/syntactic_errors.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import 'driver_resolution.dart';
@@ -15,28 +14,67 @@
});
}
+/// TODO(scheglov) Move other for-in tests here.
@reflectiveTest
class ForEachStatementResolutionTest extends DriverResolutionTest {
- test_importPrefix_asIterable() async {
- // TODO(scheglov) Remove this test (already tested as import prefix).
- // TODO(scheglov) Move other for-in tests here.
+ test_iterable_missing() async {
await assertErrorsInCode(r'''
-import 'dart:async' as p;
-
-main() {
- for (var x in p) {}
+void f() {
+ for (var v in) {
+ v;
+ }
}
''', [
- error(HintCode.UNUSED_LOCAL_VARIABLE, 47, 1),
- error(CompileTimeErrorCode.PREFIX_IDENTIFIER_NOT_FOLLOWED_BY_DOT, 52, 1),
+ error(ParserErrorCode.MISSING_IDENTIFIER, 26, 1),
]);
- var xRef = findNode.simple('x in');
- expect(xRef.staticElement, isNotNull);
+ assertType(findElement.localVar('v').type, 'dynamic');
+ assertType(findNode.simple('v;'), 'dynamic');
+ }
- var pRef = findNode.simple('p) {}');
- assertElement(pRef, findElement.prefix('p'));
- assertTypeDynamic(pRef);
+ /// Test that the parameter `x` is in the scope of the iterable.
+ /// But the declared identifier `x` is in the scope of the body.
+ test_scope() async {
+ await assertNoErrorsInCode('''
+void f(List<List<int>> x) {
+ for (int x in x.first) {
+ x.isEven;
+ }
+}
+''');
+
+ assertElement(
+ findNode.simple('x) {'),
+ findElement.parameter('x'),
+ );
+
+ assertElement(
+ findNode.simple('x.isEven'),
+ findElement.localVar('x'),
+ );
+ }
+
+ test_type_genericFunctionType() async {
+ await assertNoErrorsInCode(r'''
+void f() {
+ for (Null Function<T>(T, Null) e in <dynamic>[]) {
+ e;
+ }
+}
+''');
+ }
+
+ test_type_inferred() async {
+ await assertNoErrorsInCode(r'''
+void f(List<int> a) {
+ for (var v in a) {
+ v;
+ }
+}
+''');
+
+ assertType(findElement.localVar('v').type, 'int');
+ assertType(findNode.simple('v;'), 'int');
}
}
diff --git a/pkg/analyzer/test/src/dart/resolution/function_expression_invocation_test.dart b/pkg/analyzer/test/src/dart/resolution/function_expression_invocation_test.dart
index 1bb0387..114f145 100644
--- a/pkg/analyzer/test/src/dart/resolution/function_expression_invocation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/function_expression_invocation_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(FunctionExpressionInvocationTest);
- defineReflectiveTests(FunctionExpressionInvocationWithNnbdTest);
+ defineReflectiveTests(FunctionExpressionInvocationWithNullSafetyTest);
});
}
@@ -51,8 +51,8 @@
}
@reflectiveTest
-class FunctionExpressionInvocationWithNnbdTest extends DriverResolutionTest
- with WithNullSafetyMixin {
+class FunctionExpressionInvocationWithNullSafetyTest
+ extends DriverResolutionTest with WithNullSafetyMixin {
test_call_infer_fromArguments() async {
await assertNoErrorsInCode(r'''
class A {
@@ -165,7 +165,7 @@
x<int>(1 + 2);
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 19, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 19, 1),
]);
assertFunctionExpressionInvocation(
diff --git a/pkg/analyzer/test/src/dart/resolution/if_element_test.dart b/pkg/analyzer/test/src/dart/resolution/if_element_test.dart
index 2b32f17..027eb34 100644
--- a/pkg/analyzer/test/src/dart/resolution/if_element_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/if_element_test.dart
@@ -10,7 +10,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(IfElementTest);
- defineReflectiveTests(IfElementWithNnbdTest);
+ defineReflectiveTests(IfElementWithNullSafetyTest);
});
}
@@ -34,4 +34,5 @@
}
@reflectiveTest
-class IfElementWithNnbdTest extends IfElementTest with WithNullSafetyMixin {}
+class IfElementWithNullSafetyTest extends IfElementTest
+ with WithNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/dart/resolution/index_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/index_expression_test.dart
index a4df0ce..7f0da6c 100644
--- a/pkg/analyzer/test/src/dart/resolution/index_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/index_expression_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(IndexExpressionTest);
- defineReflectiveTests(IndexExpressionWithNnbdTest);
+ defineReflectiveTests(IndexExpressionWithNullSafetyTest);
});
}
@@ -237,7 +237,7 @@
}
@reflectiveTest
-class IndexExpressionWithNnbdTest extends IndexExpressionTest
+class IndexExpressionWithNullSafetyTest extends IndexExpressionTest
with WithNullSafetyMixin {
test_read_cascade_nullShorting() async {
await assertNoErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/metadata_test.dart b/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
index eb2d918..578f9b3 100644
--- a/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/metadata_test.dart
@@ -17,7 +17,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(MetadataResolutionTest);
- defineReflectiveTests(MetadataResolutionWithNnbdTest);
+ defineReflectiveTests(MetadataResolutionWithNullSafetyTest);
});
}
@@ -182,7 +182,7 @@
}
@reflectiveTest
-class MetadataResolutionWithNnbdTest extends DriverResolutionTest
+class MetadataResolutionWithNullSafetyTest extends DriverResolutionTest
with WithNullSafetyMixin {
ImportFindElement get import_a {
return findElement.importFind('package:test/a.dart');
diff --git a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
index c9a42b04..35c029e 100644
--- a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
@@ -14,7 +14,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(MethodInvocationResolutionTest);
- defineReflectiveTests(MethodInvocationResolutionWithNnbdTest);
+ defineReflectiveTests(MethodInvocationResolutionWithNullSafetyTest);
});
}
@@ -36,7 +36,7 @@
foo(0);
}
''', [
- error(StaticWarningCode.AMBIGUOUS_IMPORT, 46, 3),
+ error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 46, 3),
]);
var invocation = findNode.methodInvocation('foo(0)');
@@ -60,7 +60,7 @@
p.foo(0);
}
''', [
- error(StaticWarningCode.AMBIGUOUS_IMPORT, 58, 3),
+ error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 58, 3),
]);
var invocation = findNode.methodInvocation('foo(0)');
@@ -425,7 +425,7 @@
bar.foo(0);
}
''', [
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 11, 3),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 11, 3),
]);
_assertUnresolvedMethodInvocation('foo(0);');
}
@@ -699,7 +699,7 @@
c.foo();
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 44, 5),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 44, 5),
]);
var invocation = findNode.functionExpressionInvocation('foo();');
@@ -720,7 +720,7 @@
foo();
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 23, 3),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 23, 3),
]);
var invocation = findNode.functionExpressionInvocation('foo();');
@@ -741,7 +741,7 @@
foo()();
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 26, 3),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 26, 3),
]);
assertMethodInvocation(
findNode.methodInvocation('foo()()'),
@@ -758,7 +758,7 @@
foo();
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 22, 3),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 22, 3),
]);
var invocation = findNode.functionExpressionInvocation('foo();');
@@ -778,7 +778,7 @@
foo.toString();
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 23, 3),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 23, 3),
]);
// TODO(scheglov) Resolve fully, or don't resolve at all.
assertMethodInvocation(
@@ -795,7 +795,7 @@
foo..toString();
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 23, 3),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 23, 3),
]);
// TODO(scheglov) Resolve fully, or don't resolve at all.
assertMethodInvocation(
@@ -812,7 +812,7 @@
foo?.toString();
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 23, 3),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 23, 3),
]);
// TODO(scheglov) Resolve fully, or don't resolve at all.
assertMethodInvocation(
@@ -1719,7 +1719,7 @@
}
@reflectiveTest
-class MethodInvocationResolutionWithNnbdTest extends DriverResolutionTest
+class MethodInvocationResolutionWithNullSafetyTest extends DriverResolutionTest
with WithNullSafetyMixin {
test_hasReceiver_deferredImportPrefix_loadLibrary_optIn_fromOptOut() async {
newFile('/test/lib/a.dart', content: r'''
@@ -1769,7 +1769,7 @@
foo.call();
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 29, 3),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 29, 3),
]);
assertMethodInvocation2(
@@ -1820,7 +1820,7 @@
a.foo();
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 44, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 44, 1),
]);
assertMethodInvocation2(
@@ -1846,7 +1846,7 @@
a.foo();
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 82, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 82, 1),
]);
assertMethodInvocation2(
@@ -1913,7 +1913,7 @@
a.foo();
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 27, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 27, 1),
error(StaticTypeWarningCode.UNDEFINED_METHOD, 29, 3),
]);
@@ -1938,7 +1938,7 @@
a.foo();
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 65, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 65, 1),
error(StaticTypeWarningCode.UNDEFINED_METHOD, 67, 3),
]);
diff --git a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
index e1ad947..3732016 100644
--- a/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/mixin_test.dart
@@ -300,7 +300,7 @@
final int f;
}
''', [
- error(StaticWarningCode.FINAL_NOT_INITIALIZED, 22, 1),
+ error(CompileTimeErrorCode.FINAL_NOT_INITIALIZED, 22, 1),
]);
}
diff --git a/pkg/analyzer/test/src/dart/resolution/namespace_test.dart b/pkg/analyzer/test/src/dart/resolution/namespace_test.dart
index e3dff26..96694a8 100644
--- a/pkg/analyzer/test/src/dart/resolution/namespace_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/namespace_test.dart
@@ -10,7 +10,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ImportResolutionTest);
- defineReflectiveTests(ImportResolutionWithNnbdTest);
+ defineReflectiveTests(ImportResolutionWithNullSafetyTest);
});
}
@@ -29,5 +29,5 @@
}
@reflectiveTest
-class ImportResolutionWithNnbdTest extends ImportResolutionTest
+class ImportResolutionWithNullSafetyTest extends ImportResolutionTest
with WithNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
index aac113d..0dd01f6 100644
--- a/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
@@ -12,7 +12,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(PostfixExpressionResolutionTest);
- defineReflectiveTests(PostfixExpressionResolutionWithNnbdTest);
+ defineReflectiveTests(PostfixExpressionResolutionWithNullSafetyTest);
});
}
@@ -81,7 +81,7 @@
}
@reflectiveTest
-class PostfixExpressionResolutionWithNnbdTest
+class PostfixExpressionResolutionWithNullSafetyTest
extends PostfixExpressionResolutionTest with WithNullSafetyMixin {
test_inc_localVariable_depromote() async {
await assertNoErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart
index a22daf3..14dd4c2 100644
--- a/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart
@@ -12,7 +12,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(PrefixExpressionResolutionTest);
- defineReflectiveTests(PrefixExpressionResolutionWithNnbdTest);
+ defineReflectiveTests(PrefixExpressionResolutionWithNullSafetyTest);
});
}
@@ -172,7 +172,7 @@
}
@reflectiveTest
-class PrefixExpressionResolutionWithNnbdTest
+class PrefixExpressionResolutionWithNullSafetyTest
extends PrefixExpressionResolutionTest with WithNullSafetyMixin {
test_plusPlus_depromote() async {
await assertNoErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart b/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
index 8d0dcac..4288df4 100644
--- a/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(PrefixedIdentifierResolutionTest);
- defineReflectiveTests(PrefixedIdentifierResolutionWithNnbdTest);
+ defineReflectiveTests(PrefixedIdentifierResolutionWithNullSafetyTest);
});
}
@@ -59,7 +59,7 @@
}
@reflectiveTest
-class PrefixedIdentifierResolutionWithNnbdTest
+class PrefixedIdentifierResolutionWithNullSafetyTest
extends PrefixedIdentifierResolutionTest with WithNullSafetyMixin {
test_deferredImportPrefix_loadLibrary_optIn_fromOptOut() async {
newFile('/test/lib/a.dart', content: r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/property_access_test.dart b/pkg/analyzer/test/src/dart/resolution/property_access_test.dart
index 7930914..1c626bd 100644
--- a/pkg/analyzer/test/src/dart/resolution/property_access_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/property_access_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(PropertyAccessResolutionTest);
- defineReflectiveTests(PropertyAccessResolutionWithNnbdTest);
+ defineReflectiveTests(PropertyAccessResolutionWithNullSafetyTest);
});
}
@@ -35,8 +35,8 @@
}
@reflectiveTest
-class PropertyAccessResolutionWithNnbdTest extends PropertyAccessResolutionTest
- with WithNullSafetyMixin {
+class PropertyAccessResolutionWithNullSafetyTest
+ extends PropertyAccessResolutionTest with WithNullSafetyMixin {
test_implicitCall_tearOff_nullable() async {
await assertErrorsInCode('''
class A {
diff --git a/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart b/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart
index 3723684..c62baeb 100644
--- a/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/simple_identifier_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(SimpleIdentifierResolutionTest);
- defineReflectiveTests(SimpleIdentifierResolutionWithNnbdTest);
+ defineReflectiveTests(SimpleIdentifierResolutionWithNullSafetyTest);
});
}
@@ -41,7 +41,7 @@
dynamic;
}
''', [
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 42, 7),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 42, 7),
]);
assertSimpleIdentifier(
@@ -113,7 +113,7 @@
}
@reflectiveTest
-class SimpleIdentifierResolutionWithNnbdTest
+class SimpleIdentifierResolutionWithNullSafetyTest
extends SimpleIdentifierResolutionTest with WithNullSafetyMixin {
test_functionReference() async {
await assertErrorsInCode('''
@@ -127,7 +127,7 @@
@A([min])
main() {}
''', [
- error(StrongModeCode.COULD_NOT_INFER, 66, 5),
+ error(CompileTimeErrorCode.COULD_NOT_INFER, 66, 5),
]);
var identifier = findNode.simple('min]');
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/collection_elements_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/collection_elements_test.dart
index d099eeb..09430fa 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/collection_elements_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/collection_elements_test.dart
@@ -9,14 +9,14 @@
main() {
defineReflectiveSuite(() {
- defineReflectiveTests(ForElementWithNnbdTest);
- defineReflectiveTests(IfElementWithNnbdTest);
- defineReflectiveTests(SpreadElementWithNnbdTest);
+ defineReflectiveTests(ForElementWithNullSafetyTest);
+ defineReflectiveTests(IfElementWithNullSafetyTest);
+ defineReflectiveTests(SpreadElementWithNullSafetyTest);
});
}
@reflectiveTest
-class ForElementWithNnbdTest extends DriverResolutionTest
+class ForElementWithNullSafetyTest extends DriverResolutionTest
with WithNullSafetyMixin {
test_list_awaitForIn_dynamic_downward() async {
await resolveTestCode('''
@@ -194,7 +194,7 @@
}
@reflectiveTest
-class IfElementWithNnbdTest extends DriverResolutionTest
+class IfElementWithNullSafetyTest extends DriverResolutionTest
with WithNullSafetyMixin {
test_list_downward() async {
await resolveTestCode('''
@@ -231,7 +231,7 @@
}
@reflectiveTest
-class SpreadElementWithNnbdTest extends DriverResolutionTest
+class SpreadElementWithNullSafetyTest extends DriverResolutionTest
with WithNullSafetyMixin {
test_list_downward() async {
await resolveTestCode('''
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/conditional_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/conditional_expression_test.dart
index 5064cc4..e0b45c8 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/conditional_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/conditional_expression_test.dart
@@ -10,7 +10,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ConditionalExpressionTest);
- defineReflectiveTests(ConditionalExpressionWithNnbdTest);
+ defineReflectiveTests(ConditionalExpressionWithNullSafetyTest);
});
}
@@ -28,7 +28,7 @@
}
@reflectiveTest
-class ConditionalExpressionWithNnbdTest extends ConditionalExpressionTest
+class ConditionalExpressionWithNullSafetyTest extends ConditionalExpressionTest
with WithNullSafetyMixin {
@failingTest
test_downward() async {
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/equality_expressions_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/equality_expressions_test.dart
index 000757f..9ce664c 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/equality_expressions_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/equality_expressions_test.dart
@@ -10,9 +10,9 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(EqualTest);
- defineReflectiveTests(EqualWithNnbdTest);
+ defineReflectiveTests(EqualWithNullSafetyTest);
defineReflectiveTests(NotEqualTest);
- defineReflectiveTests(NotEqualWithNnbdTest);
+ defineReflectiveTests(NotEqualWithNullSafetyTest);
});
}
@@ -30,7 +30,7 @@
}
@reflectiveTest
-class EqualWithNnbdTest extends EqualTest with WithNullSafetyMixin {}
+class EqualWithNullSafetyTest extends EqualTest with WithNullSafetyMixin {}
@reflectiveTest
class NotEqualTest extends DriverResolutionTest {
@@ -46,4 +46,5 @@
}
@reflectiveTest
-class NotEqualWithNnbdTest extends NotEqualTest with WithNullSafetyMixin {}
+class NotEqualWithNullSafetyTest extends NotEqualTest with WithNullSafetyMixin {
+}
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart
index e27cd4e..c3444e6 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/extension_methods_test.dart
@@ -306,7 +306,7 @@
E(s).foo();
}
''', [
- error(StrongModeCode.COULD_NOT_INFER, 69, 1),
+ error(CompileTimeErrorCode.COULD_NOT_INFER, 69, 1),
]);
var override = findNode.extensionOverride('E(s)');
assertElementTypeStrings(override.typeArgumentTypes, ['String']);
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart
index ab68f20..031d921 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/function_expression_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(FunctionExpressionTest);
- defineReflectiveTests(FunctionExpressionWithNnbdTest);
+ defineReflectiveTests(FunctionExpressionWithNullSafetyTest);
});
}
@@ -460,7 +460,7 @@
}
@reflectiveTest
-class FunctionExpressionWithNnbdTest extends FunctionExpressionTest
+class FunctionExpressionWithNullSafetyTest extends FunctionExpressionTest
with WithNullSafetyMixin {
test_contextFunctionType_nonNullify() async {
newFile('/test/lib/a.dart', content: r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/list_literal_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/list_literal_test.dart
index 05da0da..32c358a 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/list_literal_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/list_literal_test.dart
@@ -2,6 +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:analyzer/src/error/codes.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../driver_resolution.dart';
@@ -10,62 +11,84 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ListLiteralTest);
- defineReflectiveTests(ListLiteralWithNnbdTest);
+ defineReflectiveTests(ListLiteralWithNullSafetyTest);
});
}
@reflectiveTest
class ListLiteralTest extends DriverResolutionTest {
test_context_noTypeArgs_expression_conflict() async {
- await resolveTestCode('''
+ await assertErrorsInCode('''
List<int> a = ['a'];
-''');
+''', [
+ error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 15, 3),
+ ]);
assertType(findNode.listLiteral('['), 'List<int>');
}
test_context_noTypeArgs_expression_noConflict() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
List<int> a = [1];
''');
assertType(findNode.listLiteral('['), 'List<int>');
}
test_context_noTypeArgs_noElements() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
List<String> a = [];
''');
assertType(findNode.listLiteral('['), 'List<String>');
}
test_context_noTypeArgs_noElements_typeParameter() async {
- await resolveTestCode('''
+ var expectedErrors = expectedErrorsByNullability(
+ nullable: [
+ error(StaticTypeWarningCode.INVALID_ASSIGNMENT, 39, 2),
+ ],
+ legacy: [
+ error(CompileTimeErrorCode.INVALID_CAST_LITERAL_LIST, 39, 2),
+ ],
+ );
+ await assertErrorsInCode('''
class A<E extends List<int>> {
E a = [];
}
-''');
+''', expectedErrors);
assertType(findNode.listLiteral('['), 'List<dynamic>');
}
test_context_noTypeArgs_noElements_typeParameter_dynamic() async {
- await resolveTestCode('''
+ var expectedErrors = expectedErrorsByNullability(
+ nullable: [
+ error(StaticTypeWarningCode.INVALID_ASSIGNMENT, 43, 2),
+ ],
+ legacy: [
+ error(CompileTimeErrorCode.INVALID_CAST_LITERAL_LIST, 43, 2),
+ ],
+ );
+ await assertErrorsInCode('''
class A<E extends List<dynamic>> {
E a = [];
}
-''');
+''', expectedErrors);
assertType(findNode.listLiteral('['), 'List<dynamic>');
}
test_context_typeArgs_expression_conflictingContext() async {
- await resolveTestCode('''
+ await assertErrorsInCode('''
List<String> a = <int>[0];
-''');
+''', [
+ error(StaticTypeWarningCode.INVALID_ASSIGNMENT, 17, 8),
+ ]);
assertType(findNode.listLiteral('['), 'List<int>');
}
test_context_typeArgs_expression_conflictingExpression() async {
- await resolveTestCode('''
+ await assertErrorsInCode('''
List<String> a = <String>[0];
-''');
+''', [
+ error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 26, 1),
+ ]);
assertType(findNode.listLiteral('['), 'List<String>');
}
@@ -73,102 +96,108 @@
test_context_typeArgs_expression_conflictingTypeArgs() async {
// Context type and element types both suggest `String`, so this should
// override the explicit type argument.
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
List<String> a = <int>['a'];
''');
assertType(findNode.listLiteral('['), 'List<String>');
}
test_context_typeArgs_expression_noConflict() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
List<String> a = <String>['a'];
''');
assertType(findNode.listLiteral('['), 'List<String>');
}
test_context_typeArgs_noElements_conflict() async {
- await resolveTestCode('''
+ await assertErrorsInCode('''
List<String> a = <int>[];
-''');
+''', [
+ error(StaticTypeWarningCode.INVALID_ASSIGNMENT, 17, 7),
+ ]);
assertType(findNode.listLiteral('['), 'List<int>');
}
test_context_typeArgs_noElements_noConflict() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
List<String> a = <String>[];
''');
assertType(findNode.listLiteral('['), 'List<String>');
}
test_noContext_noTypeArgs_expressions_lubOfInt() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = [1, 2, 3];
''');
assertType(findNode.listLiteral('['), 'List<int>');
}
test_noContext_noTypeArgs_expressions_lubOfNum() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = [1, 2.3, 4];
''');
assertType(findNode.listLiteral('['), 'List<num>');
}
test_noContext_noTypeArgs_expressions_lubOfObject() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = [1, '2', 3];
''');
assertType(findNode.listLiteral('['), 'List<Object>');
}
test_noContext_noTypeArgs_expressions_unresolved() async {
- await resolveTestCode('''
+ await assertErrorsInCode('''
var a = [x];
-''');
+''', [
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 9, 1),
+ ]);
assertType(findNode.listLiteral('['), 'List<dynamic>');
}
test_noContext_noTypeArgs_expressions_unresolved_multiple() async {
- await resolveTestCode('''
+ await assertErrorsInCode('''
var a = [0, x, 2];
-''');
+''', [
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 12, 1),
+ ]);
assertType(findNode.listLiteral('['), 'List<dynamic>');
}
test_noContext_noTypeArgs_forEachWithDeclaration() async {
- await resolveTestCode('''
-List<int> c;
+ await assertNoErrorsInCode('''
+List<int> c = [];
var a = [for (int e in c) e * 2];
''');
assertType(findNode.listLiteral('[for'), 'List<int>');
}
test_noContext_noTypeArgs_forEachWithIdentifier() async {
- await resolveTestCode('''
-List<int> c;
-int b;
+ await assertNoErrorsInCode('''
+List<int> c = [];
+int b = 0;
var a = [for (b in c) b * 2];
''');
assertType(findNode.listLiteral('[for'), 'List<int>');
}
test_noContext_noTypeArgs_forWithDeclaration() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = [for (var i = 0; i < 2; i++) i * 2];
''');
assertType(findNode.listLiteral('[for'), 'List<int>');
}
test_noContext_noTypeArgs_forWithExpression() async {
- await resolveTestCode('''
-int i;
+ await assertNoErrorsInCode('''
+int i = 0;
var a = [for (i = 0; i < 2; i++) i * 2];
''');
assertType(findNode.listLiteral('[for'), 'List<int>');
}
test_noContext_noTypeArgs_if() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
bool c = true;
var a = [if (c) 1];
''');
@@ -176,7 +205,7 @@
}
test_noContext_noTypeArgs_ifElse_lubOfInt() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
bool c = true;
var a = [if (c) 1 else 2];
''');
@@ -184,7 +213,7 @@
}
test_noContext_noTypeArgs_ifElse_lubOfNum() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
bool c = true;
var a = [if (c) 1 else 2.3];
''');
@@ -192,7 +221,7 @@
}
test_noContext_noTypeArgs_ifElse_lubOfObject() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
bool c = true;
var a = [if (c) 1 else '2'];
''');
@@ -200,52 +229,53 @@
}
test_noContext_noTypeArgs_noElements() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = [];
''');
assertType(findNode.listLiteral('['), 'List<dynamic>');
}
test_noContext_noTypeArgs_spread() async {
- await resolveTestCode('''
-List<int> c;
+ await assertNoErrorsInCode('''
+List<int> c = [];
var a = [...c];
''');
assertType(findNode.listLiteral('[...'), 'List<int>');
}
test_noContext_noTypeArgs_spread_lubOfInt() async {
- await resolveTestCode('''
-List<int> c;
-List<int> b;
+ await assertNoErrorsInCode('''
+List<int> c = [];
+List<int> b = [];
var a = [...b, ...c];
''');
assertType(findNode.listLiteral('[...'), 'List<int>');
}
test_noContext_noTypeArgs_spread_lubOfNum() async {
- await resolveTestCode('''
-List<int> c;
-List<double> b;
+ await assertNoErrorsInCode('''
+List<int> c = [];
+List<double> b = [];
var a = [...b, ...c];
''');
assertType(findNode.listLiteral('[...'), 'List<num>');
}
test_noContext_noTypeArgs_spread_lubOfObject() async {
- await resolveTestCode('''
-List<int> c;
-List<String> b;
+ await assertNoErrorsInCode('''
+List<int> c = [];
+List<String> b = [];
var a = [...b, ...c];
''');
assertType(findNode.listLiteral('[...'), 'List<Object>');
}
test_noContext_noTypeArgs_spread_mixin() async {
- await resolveTestCode(r'''
+ await assertNoErrorsInCode(r'''
mixin L on List<int> {}
-main() {
- L l1;
+
+main(L l1) {
+ // ignore:unused_local_variable
var l2 = [...l1];
}
''');
@@ -253,49 +283,107 @@
}
test_noContext_noTypeArgs_spread_nestedInIf_oneAmbiguous() async {
- await resolveTestCode('''
-List<int> c;
+ await assertNoErrorsInCode('''
+List<int> c = [];
dynamic d;
var a = [if (0 < 1) ...c else ...d];
''');
- assertType(findNode.listLiteral('['), 'List<dynamic>');
+ assertType(findNode.listLiteral('[if'), 'List<dynamic>');
}
- test_noContext_noTypeArgs_spread_nullAware_nullAndNotNull() async {
- await resolveTestCode('''
-f() async {
- var futureNull = Future.value(null);
- var a = [1, ...?await futureNull, 2];
+ test_noContext_noTypeArgs_spread_nullAware_null() async {
+ await assertNoErrorsInCode('''
+void f(Null a) {
+ // ignore:unused_local_variable
+ var v = [...?a];
}
''');
assertType(
findNode.listLiteral('['),
typeStringByNullability(
- nullable: 'List<int?>',
- legacy: 'List<int>',
+ nullable: 'List<Never>',
+ legacy: 'List<Null>',
),
);
}
- test_noContext_noTypeArgs_spread_nullAware_onlyNull() async {
- await resolveTestCode('''
-f() async {
- var futureNull = Future.value(null);
- var a = [...?await futureNull];
+ test_noContext_noTypeArgs_spread_nullAware_null2() async {
+ await assertNoErrorsInCode('''
+void f(Null a) {
+ // ignore:unused_local_variable
+ var v = [1, ...?a, 2];
}
''');
- assertType(findNode.listLiteral('['), 'List<Null>');
+ assertType(findNode.listLiteral('['), 'List<int>');
+ }
+
+ test_noContext_noTypeArgs_spread_nullAware_typeParameter_implementsNull() async {
+ var expectedErrors = expectedErrorsByNullability(
+ nullable: [],
+ legacy: [
+ error(CompileTimeErrorCode.NOT_ITERABLE_SPREAD, 85, 1),
+ ],
+ );
+ await assertErrorsInCode('''
+void f<T extends Null>(T a) async {
+ // ignore:unused_local_variable
+ var v = [...?a];
+}
+''', expectedErrors);
+ assertType(
+ findNode.listLiteral('['),
+ typeStringByNullability(
+ nullable: 'List<Never>',
+ legacy: 'List<dynamic>',
+ ),
+ );
+ }
+
+ test_noContext_noTypeArgs_spread_typeParameter_implementsIterable() async {
+ await assertNoErrorsInCode('''
+void f<T extends List<int>>(T a) {
+ // ignore:unused_local_variable
+ var v = [...a];
+}
+''');
+ assertType(findNode.listLiteral('[...'), 'List<int>');
+ }
+
+ test_noContext_noTypeArgs_spread_typeParameter_notImplementsIterable() async {
+ await assertErrorsInCode('''
+void f<T extends num>(T a) {
+ // ignore:unused_local_variable
+ var v = [...a];
+}
+''', [
+ error(CompileTimeErrorCode.NOT_ITERABLE_SPREAD, 77, 1),
+ ]);
+ assertType(findNode.listLiteral('[...'), 'List<dynamic>');
+ }
+
+ test_noContext_noTypeArgs_spread_typeParameter_notImplementsIterable2() async {
+ await assertErrorsInCode('''
+void f<T extends num>(T a) {
+ // ignore:unused_local_variable
+ var v = [...a, 0];
+}
+''', [
+ error(CompileTimeErrorCode.NOT_ITERABLE_SPREAD, 77, 1),
+ ]);
+ assertType(findNode.listLiteral('[...'), 'List<dynamic>');
}
test_noContext_typeArgs_expression_conflict() async {
- await resolveTestCode('''
+ await assertErrorsInCode('''
var a = <String>[1];
-''');
+''', [
+ error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 17, 1),
+ ]);
assertType(findNode.listLiteral('['), 'List<String>');
}
test_noContext_typeArgs_expression_noConflict() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = <int>[1];
''');
assertType(findNode.listLiteral('['), 'List<int>');
@@ -303,14 +391,14 @@
@failingTest
test_noContext_typeArgs_expressions_conflict() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = <int, String>[1, 2];
''');
assertType(findNode.listLiteral('['), 'List<int>');
}
test_noContext_typeArgs_noElements() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = <num>[];
''');
assertType(findNode.listLiteral('['), 'List<num>');
@@ -318,7 +406,8 @@
}
@reflectiveTest
-class ListLiteralWithNnbdTest extends ListLiteralTest with WithNullSafetyMixin {
+class ListLiteralWithNullSafetyTest extends ListLiteralTest
+ with WithNullSafetyMixin {
test_context_spread_nullAware() async {
await assertNoErrorsInCode('''
T f<T>(T t) => t;
@@ -357,4 +446,48 @@
assertType(findNode.listLiteral('[1,'), 'List<int?>');
assertType(findNode.listLiteral('[[0'), 'List<List<int?>>');
}
+
+ test_noContext_noTypeArgs_spread_never() async {
+ await assertNoErrorsInCode('''
+void f(Never a) async {
+ // ignore:unused_local_variable
+ var v = [...a];
+}
+''');
+ assertType(findNode.listLiteral('['), 'List<Never>');
+ }
+
+ test_noContext_noTypeArgs_spread_nullAware_never() async {
+ await assertErrorsInCode('''
+void f(Never a) async {
+ // ignore:unused_local_variable
+ var v = [...?a];
+}
+''', [
+ error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 69, 4),
+ ]);
+ assertType(findNode.listLiteral('['), 'List<Never>');
+ }
+
+ test_noContext_noTypeArgs_spread_nullAware_typeParameter_implementsNever() async {
+ await assertErrorsInCode('''
+void f<T extends Never>(T a) async {
+ // ignore:unused_local_variable
+ var v = [...?a];
+}
+''', [
+ error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 82, 4),
+ ]);
+ assertType(findNode.listLiteral('['), 'List<Never>');
+ }
+
+ test_noContext_noTypeArgs_spread_typeParameter_implementsNever() async {
+ await assertNoErrorsInCode('''
+void f<T extends Never>(T a) async {
+ // ignore:unused_local_variable
+ var v = [...a];
+}
+''');
+ assertType(findNode.listLiteral('['), 'List<Never>');
+ }
}
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/logical_boolean_expressions_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/logical_boolean_expressions_test.dart
index e291cd3..712ae83 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/logical_boolean_expressions_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/logical_boolean_expressions_test.dart
@@ -10,9 +10,9 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(LogicalAndTest);
- defineReflectiveTests(LogicalAndWithNnbdTest);
+ defineReflectiveTests(LogicalAndWithNullSafetyTest);
defineReflectiveTests(LogicalOrTest);
- defineReflectiveTests(LogicalOrWithNnbdTest);
+ defineReflectiveTests(LogicalOrWithNullSafetyTest);
});
}
@@ -30,7 +30,8 @@
}
@reflectiveTest
-class LogicalAndWithNnbdTest extends LogicalAndTest with WithNullSafetyMixin {
+class LogicalAndWithNullSafetyTest extends LogicalAndTest
+ with WithNullSafetyMixin {
@failingTest
test_downward() async {
await resolveTestCode('''
@@ -60,7 +61,8 @@
}
@reflectiveTest
-class LogicalOrWithNnbdTest extends LogicalOrTest with WithNullSafetyMixin {
+class LogicalOrWithNullSafetyTest extends LogicalOrTest
+ with WithNullSafetyMixin {
@failingTest
test_downward() async {
await resolveTestCode('''
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/map_literal_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/map_literal_test.dart
index d76fc15..c387ddf 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/map_literal_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/map_literal_test.dart
@@ -12,7 +12,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(MapLiteralTest);
- defineReflectiveTests(MapLiteralWithNnbdTest);
+ defineReflectiveTests(MapLiteralWithNullSafetyTest);
});
}
@@ -21,88 +21,125 @@
AstNode setOrMapLiteral(String search) => findNode.setOrMapLiteral(search);
test_context_noTypeArgs_entry_conflictingKey() async {
- await resolveTestCode('''
+ await assertErrorsInCode('''
Map<int, int> a = {'a' : 1};
-''');
+''', [
+ error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 19, 3),
+ ]);
assertType(setOrMapLiteral('{'), 'Map<int, int>');
}
test_context_noTypeArgs_entry_conflictingValue() async {
- await resolveTestCode('''
+ await assertErrorsInCode('''
Map<int, int> a = {1 : 'a'};
-''');
+''', [
+ error(CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 23, 3),
+ ]);
assertType(setOrMapLiteral('{'), 'Map<int, int>');
}
test_context_noTypeArgs_entry_noConflict() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
Map<int, int> a = {1 : 2};
''');
assertType(setOrMapLiteral('{'), 'Map<int, int>');
}
- test_context_noTypeArgs_noEntries() async {
+ test_context_noTypeArgs_noElements_futureOr() async {
await resolveTestCode('''
+import 'dart:async';
+
+FutureOr<Map<int, String>> f() {
+ return {};
+}
+''');
+ assertType(setOrMapLiteral('{};'), 'Map<int, String>');
+ }
+
+ test_context_noTypeArgs_noEntries() async {
+ await assertNoErrorsInCode('''
Map<String, String> a = {};
''');
assertType(setOrMapLiteral('{'), 'Map<String, String>');
}
test_context_noTypeArgs_noEntries_typeParameters() async {
- await resolveTestCode('''
+ var expectedErrors = expectedErrorsByNullability(
+ nullable: [
+ error(StaticTypeWarningCode.INVALID_ASSIGNMENT, 46, 2),
+ ],
+ legacy: [
+ error(CompileTimeErrorCode.INVALID_CAST_LITERAL_MAP, 46, 2),
+ ],
+ );
+ await assertErrorsInCode('''
class A<E extends Map<int, String>> {
E a = {};
}
-''');
+''', expectedErrors);
assertType(setOrMapLiteral('{}'), 'Map<dynamic, dynamic>');
}
test_context_noTypeArgs_noEntries_typeParameters_dynamic() async {
- await resolveTestCode('''
+ var expectedErrors = expectedErrorsByNullability(
+ nullable: [
+ error(StaticTypeWarningCode.INVALID_ASSIGNMENT, 51, 2),
+ ],
+ legacy: [
+ error(CompileTimeErrorCode.INVALID_CAST_LITERAL_MAP, 51, 2),
+ ],
+ );
+ await assertErrorsInCode('''
class A<E extends Map<dynamic, dynamic>> {
E a = {};
}
-''');
+''', expectedErrors);
assertType(setOrMapLiteral('{}'), 'Map<dynamic, dynamic>');
}
test_context_typeArgs_entry_conflictingKey() async {
- await resolveTestCode('''
+ await assertErrorsInCode('''
Map<String, String> a = <String, String>{0 : 'a'};
-''');
+''', [
+ error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 41, 1),
+ ]);
assertType(setOrMapLiteral('{'), 'Map<String, String>');
}
test_context_typeArgs_entry_conflictingValue() async {
- await resolveTestCode('''
+ await assertErrorsInCode('''
Map<String, String> a = <String, String>{'a' : 1};
-''');
+''', [
+ error(CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 47, 1),
+ ]);
assertType(setOrMapLiteral('{'), 'Map<String, String>');
}
test_context_typeArgs_entry_noConflict() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
Map<String, String> a = <String, String>{'a' : 'b'};
''');
assertType(setOrMapLiteral('{'), 'Map<String, String>');
}
test_context_typeArgs_noEntries_conflict() async {
- await resolveTestCode('''
+ await assertErrorsInCode('''
Map<String, String> a = <int, int>{};
-''');
+''', [
+ error(StaticTypeWarningCode.INVALID_ASSIGNMENT, 24, 12),
+ ]);
assertType(setOrMapLiteral('{'), 'Map<int, int>');
}
test_context_typeArgs_noEntries_noConflict() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
Map<String, String> a = <String, String>{};
''');
assertType(setOrMapLiteral('{'), 'Map<String, String>');
}
test_default_constructor_param_typed() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
class C {
const C({x = const <String, int>{}});
}
@@ -110,7 +147,7 @@
}
test_default_constructor_param_untyped() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
class C {
const C({x = const {}});
}
@@ -118,60 +155,60 @@
}
test_noContext_noTypeArgs_expressions_lubOfIntAndString() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = {1 : 'a', 2 : 'b', 3 : 'c'};
''');
assertType(setOrMapLiteral('{'), 'Map<int, String>');
}
test_noContext_noTypeArgs_expressions_lubOfNumAndNum() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = {1 : 2, 3.0 : 4, 5 : 6.0};
''');
assertType(setOrMapLiteral('{'), 'Map<num, num>');
}
test_noContext_noTypeArgs_expressions_lubOfObjectAndObject() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = {1 : '1', '2' : 2, 3 : '3'};
''');
assertType(setOrMapLiteral('{'), 'Map<Object, Object>');
}
test_noContext_noTypeArgs_forEachWithDeclaration() async {
- await resolveTestCode('''
-List<int> c;
+ await assertNoErrorsInCode('''
+List<int> c = [];
var a = {for (int e in c) e : e * 2};
''');
assertType(setOrMapLiteral('{for'), 'Map<int, int>');
}
test_noContext_noTypeArgs_forEachWithIdentifier() async {
- await resolveTestCode('''
-List<int> c;
-int b;
+ await assertNoErrorsInCode('''
+List<int> c = [];
+int b = 0;
var a = {for (b in c) b * 2 : b};
''');
assertType(setOrMapLiteral('{for'), 'Map<int, int>');
}
test_noContext_noTypeArgs_forWithDeclaration() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = {for (var i = 0; i < 2; i++) i : i * 2};
''');
assertType(setOrMapLiteral('{for'), 'Map<int, int>');
}
test_noContext_noTypeArgs_forWithExpression() async {
- await resolveTestCode('''
-int i;
+ await assertNoErrorsInCode('''
+int i = 0;
var a = {for (i = 0; i < 2; i++) i * 2 : i};
''');
assertType(setOrMapLiteral('{for'), 'Map<int, int>');
}
test_noContext_noTypeArgs_if() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
bool c = true;
var a = {if (c) 1 : 2};
''');
@@ -179,7 +216,7 @@
}
test_noContext_noTypeArgs_ifElse_lubOfIntAndInt() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
bool c = true;
var a = {if (c) 1 : 3 else 2 : 4};
''');
@@ -187,7 +224,7 @@
}
test_noContext_noTypeArgs_ifElse_lubOfNumAndNum() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
bool c = true;
var a = {if (c) 1.0 : 3 else 2 : 4.0};
''');
@@ -195,7 +232,7 @@
}
test_noContext_noTypeArgs_ifElse_lubOfObjectAndObject() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
bool c = true;
var a = {if (c) 1 : '1' else '2': 2 };
''');
@@ -203,22 +240,22 @@
}
test_noContext_noTypeArgs_noEntries() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = {};
''');
assertType(setOrMapLiteral('{'), 'Map<dynamic, dynamic>');
}
test_noContext_noTypeArgs_spread() async {
- await resolveTestCode('''
-Map<int, int> c;
+ await assertNoErrorsInCode('''
+Map<int, int> c = {};
var a = {...c};
''');
assertType(setOrMapLiteral('{...'), 'Map<int, int>');
}
test_noContext_noTypeArgs_spread_dynamic() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var c = {};
var a = {...c};
''');
@@ -226,37 +263,38 @@
}
test_noContext_noTypeArgs_spread_lubOfIntAndInt() async {
- await resolveTestCode('''
-Map<int, int> c;
-Map<int, int> b;
+ await assertNoErrorsInCode('''
+Map<int, int> c = {};
+Map<int, int> b = {};
var a = {...b, ...c};
''');
assertType(setOrMapLiteral('{...'), 'Map<int, int>');
}
test_noContext_noTypeArgs_spread_lubOfNumAndNum() async {
- await resolveTestCode('''
-Map<int, double> c;
-Map<double, int> b;
+ await assertNoErrorsInCode('''
+Map<int, double> c = {};
+Map<double, int> b = {};
var a = {...b, ...c};
''');
assertType(setOrMapLiteral('{...'), 'Map<num, num>');
}
test_noContext_noTypeArgs_spread_lubOfObjectObject() async {
- await resolveTestCode('''
-Map<int, int> c;
-Map<String, String> b;
+ await assertNoErrorsInCode('''
+Map<int, int> c = {};
+Map<String, String> b = {};
var a = {...b, ...c};
''');
assertType(setOrMapLiteral('{...'), 'Map<Object, Object>');
}
test_noContext_noTypeArgs_spread_mixin() async {
- await resolveTestCode(r'''
+ await assertNoErrorsInCode(r'''
mixin M on Map<String, int> {}
-main() {
- M m1;
+
+main(M m1) {
+ // ignore:unused_local_variable
var m2 = {...m1};
}
''');
@@ -264,99 +302,126 @@
}
test_noContext_noTypeArgs_spread_nestedInIf_oneAmbiguous() async {
- await resolveTestCode('''
-Map<String, int> c;
+ await assertNoErrorsInCode('''
+Map<String, int> c = {};
dynamic d;
var a = {if (0 < 1) ...c else ...d};
''');
- assertType(setOrMapLiteral('{'), 'Map<dynamic, dynamic>');
+ assertType(setOrMapLiteral('{if'), 'Map<dynamic, dynamic>');
}
test_noContext_noTypeArgs_spread_nullAware_nullAndNotNull_map() async {
await assertNoErrorsInCode('''
-f() async {
- var futureNull = Future.value(null);
- var a = {1 : 'a', ...?await futureNull, 2 : 'b'};
- a;
+void f(Null a) {
+ // ignore:unused_local_variable
+ var v = {1 : 'a', ...?a, 2 : 'b'};
}
''');
- assertType(
- setOrMapLiteral('{1'),
- typeStringByNullability(
- nullable: 'Map<int?, String?>',
- legacy: 'Map<int, String>',
- ),
- );
+ assertType(setOrMapLiteral('{1'), 'Map<int, String>');
}
test_noContext_noTypeArgs_spread_nullAware_nullAndNotNull_set() async {
await assertNoErrorsInCode('''
-f() async {
- var futureNull = Future.value(null);
- var a = {1, ...?await futureNull, 2};
- a;
+void f(Null a) {
+ // ignore:unused_local_variable
+ var v = {1, ...?a, 2};
}
''');
- assertType(
- setOrMapLiteral('{1'),
- typeStringByNullability(
- nullable: 'Set<int?>',
- legacy: 'Set<int>',
- ),
- );
+ assertType(setOrMapLiteral('{1'), 'Set<int>');
}
test_noContext_noTypeArgs_spread_nullAware_onlyNull() async {
await assertErrorsInCode('''
-f() async {
- var futureNull = Future.value(null);
- var a = {...?await futureNull};
- a;
+void f(Null a) {
+ // ignore:unused_local_variable
+ var v = {...?a};
}
''', [
- error(CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER, 61, 22),
+ error(CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER, 61, 7),
+ ]);
+ assertType(setOrMapLiteral('{...'), 'dynamic');
+ }
+
+ test_noContext_noTypeArgs_spread_typeParameter_implementsMap() async {
+ await assertNoErrorsInCode('''
+void f<T extends Map<int, String>>(T a) {
+ // ignore:unused_local_variable
+ var v = {...a};
+}
+''');
+ assertType(setOrMapLiteral('{...'), 'Map<int, String>');
+ }
+
+ /// TODO(scheglov) Should report [CompileTimeErrorCode.NOT_ITERABLE_SPREAD].
+ test_noContext_noTypeArgs_spread_typeParameter_notImplementsMap() async {
+ await assertErrorsInCode('''
+void f<T extends num>(T a) {
+ // ignore:unused_local_variable
+ var v = {...a};
+}
+''', [
+ error(CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER, 73, 6),
+ ]);
+ assertType(setOrMapLiteral('{...'), 'dynamic');
+ }
+
+ /// TODO(scheglov) Should report [CompileTimeErrorCode.NOT_ITERABLE_SPREAD].
+ test_noContext_noTypeArgs_spread_typeParameter_notImplementsMap2() async {
+ await assertErrorsInCode('''
+void f<T extends num>(T a) {
+ // ignore:unused_local_variable
+ var v = {...a, 0: 1};
+}
+''', [
+ error(CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER, 73, 12),
]);
assertType(setOrMapLiteral('{...'), 'dynamic');
}
test_noContext_typeArgs_entry_conflictingKey() async {
- await resolveTestCode('''
+ await assertErrorsInCode('''
var a = <String, int>{1 : 2};
-''');
+''', [
+ error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 22, 1),
+ ]);
assertType(setOrMapLiteral('{'), 'Map<String, int>');
}
test_noContext_typeArgs_entry_conflictingValue() async {
- await resolveTestCode('''
+ await assertErrorsInCode('''
var a = <String, int>{'a' : 'b'};
-''');
+''', [
+ error(CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 28, 3),
+ ]);
assertType(setOrMapLiteral('{'), 'Map<String, int>');
}
test_noContext_typeArgs_entry_noConflict() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = <int, int>{1 : 2};
''');
assertType(setOrMapLiteral('{'), 'Map<int, int>');
}
test_noContext_typeArgs_expression_conflictingElement() async {
- await resolveTestCode('''
+ await assertErrorsInCode('''
var a = <int, String>{1};
-''');
+''', [
+ error(CompileTimeErrorCode.EXPRESSION_IN_MAP, 22, 1),
+ ]);
assertType(setOrMapLiteral('{'), 'Map<int, String>');
}
@failingTest
test_noContext_typeArgs_expressions_conflictingTypeArgs() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = <int>{1 : 2, 3 : 4};
''');
assertType(setOrMapLiteral('{'), 'Map<int, int>');
}
test_noContext_typeArgs_noEntries() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = <num, String>{};
''');
assertType(setOrMapLiteral('{'), 'Map<num, String>');
@@ -364,9 +429,10 @@
}
@reflectiveTest
-class MapLiteralWithNnbdTest extends MapLiteralTest with WithNullSafetyMixin {
+class MapLiteralWithNullSafetyTest extends MapLiteralTest
+ with WithNullSafetyMixin {
test_context_noTypeArgs_noEntries_typeParameterNullable() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
class C<T extends Object?> {
Map<String, T> a = {}; // 1
Map<String, T>? b = {}; // 2
@@ -397,4 +463,78 @@
type: 'Map<int, double>?',
);
}
+
+ test_noContext_noTypeArgs_spread_never() async {
+ await assertErrorsInCode('''
+void f(Never a, bool b) async {
+ // ignore:unused_local_variable
+ var v = {...a, if (b) throw 0: throw 0};
+}
+''', [
+ error(HintCode.DEAD_CODE, 87, 21),
+ ]);
+ assertType(setOrMapLiteral('{...'), 'Map<Never, Never>');
+ }
+
+ test_noContext_noTypeArgs_spread_nullAware_never() async {
+ await assertErrorsInCode('''
+void f(Never a, bool b) async {
+ // ignore:unused_local_variable
+ var v = {...?a, if (b) throw 0: throw 0};
+}
+''', [
+ error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 77, 4),
+ error(HintCode.DEAD_CODE, 88, 21),
+ ]);
+ assertType(setOrMapLiteral('{...'), 'Map<Never, Never>');
+ }
+
+ test_noContext_noTypeArgs_spread_nullAware_null() async {
+ await assertErrorsInCode('''
+void f(Null a, bool b) async {
+ // ignore:unused_local_variable
+ var v = {...?a, if (b) throw 0: throw 0};
+}
+''', [
+ error(HintCode.DEAD_CODE, 99, 9),
+ ]);
+ assertType(setOrMapLiteral('{...'), 'Map<Never, Never>');
+ }
+
+ test_noContext_noTypeArgs_spread_nullAware_typeParameter_never() async {
+ await assertErrorsInCode('''
+void f<T extends Never>(T a, bool b) async {
+ // ignore:unused_local_variable
+ var v = {...?a, if (b) throw 0: throw 0};
+}
+''', [
+ error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 90, 4),
+ error(HintCode.DEAD_CODE, 101, 21),
+ ]);
+ assertType(setOrMapLiteral('{...'), 'Map<Never, Never>');
+ }
+
+ test_noContext_noTypeArgs_spread_nullAware_typeParameter_null() async {
+ await assertErrorsInCode('''
+void f<T extends Null>(T a, bool b) async {
+ // ignore:unused_local_variable
+ var v = {...?a, if (b) throw 0: throw 0};
+}
+''', [
+ error(HintCode.DEAD_CODE, 112, 9),
+ ]);
+ assertType(setOrMapLiteral('{...'), 'Map<Never, Never>');
+ }
+
+ test_noContext_noTypeArgs_spread_typeParameter_never() async {
+ await assertErrorsInCode('''
+void f<T extends Never>(T a, bool b) async {
+ // ignore:unused_local_variable
+ var v = {...a, if (b) throw 0: throw 0};
+}
+''', [
+ error(HintCode.DEAD_CODE, 100, 21),
+ ]);
+ assertType(setOrMapLiteral('{...'), 'Map<Never, Never>');
+ }
}
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/set_literal_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/set_literal_test.dart
index 3a6ef21..9a25ca0 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/set_literal_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/set_literal_test.dart
@@ -3,6 +3,7 @@
// BSD-style license that can be found in the LICENSE file.
import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/src/error/codes.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../driver_resolution.dart';
@@ -11,7 +12,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(SetLiteralTest);
- defineReflectiveTests(SetLiteralWithNnbdTest);
+ defineReflectiveTests(SetLiteralWithNullSafetyTest);
});
}
@@ -20,135 +21,168 @@
AstNode setLiteral(String search) => findNode.setOrMapLiteral(search);
test_context_noTypeArgs_expression_conflict() async {
- await resolveTestCode('''
+ await assertErrorsInCode('''
Set<int> a = {'a'};
-''');
+''', [
+ error(CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 14, 3),
+ ]);
assertType(setLiteral('{'), 'Set<int>');
}
test_context_noTypeArgs_expression_noConflict() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
Set<int> a = {1};
''');
assertType(setLiteral('{'), 'Set<int>');
}
test_context_noTypeArgs_noElements() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
Set<String> a = {};
''');
assertType(setLiteral('{'), 'Set<String>');
}
- test_context_noTypeArgs_noElements_typeParameter() async {
+ test_context_noTypeArgs_noElements_futureOr() async {
await resolveTestCode('''
+import 'dart:async';
+
+FutureOr<Set<int>> f() {
+ return {};
+}
+''');
+ assertType(setLiteral('{};'), 'Set<int>');
+ }
+
+ test_context_noTypeArgs_noElements_typeParameter() async {
+ var expectedErrors = expectedErrorsByNullability(
+ nullable: [
+ error(StaticTypeWarningCode.INVALID_ASSIGNMENT, 38, 2),
+ ],
+ legacy: [
+ error(CompileTimeErrorCode.INVALID_CAST_LITERAL_SET, 38, 2),
+ ],
+ );
+ await assertErrorsInCode('''
class A<E extends Set<int>> {
E a = {};
}
-''');
+''', expectedErrors);
assertType(setLiteral('{}'), 'Set<dynamic>');
}
test_context_noTypeArgs_noElements_typeParameter_dynamic() async {
- await resolveTestCode('''
+ var expectedErrors = expectedErrorsByNullability(
+ nullable: [
+ error(StaticTypeWarningCode.INVALID_ASSIGNMENT, 42, 2),
+ ],
+ legacy: [
+ error(CompileTimeErrorCode.INVALID_CAST_LITERAL_SET, 42, 2),
+ ],
+ );
+ await assertErrorsInCode('''
class A<E extends Set<dynamic>> {
E a = {};
}
-''');
+''', expectedErrors);
assertType(setLiteral('{}'), 'Set<dynamic>');
}
test_context_typeArgs_expression_conflictingExpression() async {
- await resolveTestCode('''
+ await assertErrorsInCode('''
Set<String> a = <String>{0};
-''');
+''', [
+ error(CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 25, 1),
+ ]);
assertType(setLiteral('{'), 'Set<String>');
}
@failingTest
test_context_typeArgs_expression_conflictingTypeArgs() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
Set<String> a = <int>{'a'};
''');
assertType(setLiteral('{'), 'Set<String>');
}
test_context_typeArgs_expression_noConflict() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
Set<String> a = <String>{'a'};
''');
assertType(setLiteral('{'), 'Set<String>');
}
test_context_typeArgs_noElements_conflict() async {
- await resolveTestCode('''
+ await assertErrorsInCode('''
Set<String> a = <int>{};
-''');
+''', [
+ error(StaticTypeWarningCode.INVALID_ASSIGNMENT, 16, 7),
+ ]);
assertType(setLiteral('{'), 'Set<int>');
}
test_context_typeArgs_noElements_noConflict() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
Set<String> a = <String>{};
''');
assertType(setLiteral('{'), 'Set<String>');
}
test_noContext_noTypeArgs_expressions_lubOfInt() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = {1, 2, 3};
''');
assertType(setLiteral('{'), 'Set<int>');
}
test_noContext_noTypeArgs_expressions_lubOfNum() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = {1, 2.3, 4};
''');
assertType(setLiteral('{'), 'Set<num>');
}
test_noContext_noTypeArgs_expressions_lubOfObject() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = {1, '2', 3};
''');
assertType(setLiteral('{'), 'Set<Object>');
}
test_noContext_noTypeArgs_forEachWithDeclaration() async {
- await resolveTestCode('''
-List<int> c;
+ await assertNoErrorsInCode('''
+List<int> c = [];
var a = {for (int e in c) e * 2};
''');
assertType(setLiteral('{for'), 'Set<int>');
}
test_noContext_noTypeArgs_forEachWithIdentifier() async {
- await resolveTestCode('''
-List<int> c;
-int b;
+ await assertNoErrorsInCode('''
+List<int> c = [];
+int b = 0;
var a = {for (b in c) b * 2};
''');
assertType(setLiteral('{for'), 'Set<int>');
}
test_noContext_noTypeArgs_forWithDeclaration() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = {for (var i = 0; i < 2; i++) i * 2};
''');
assertType(setLiteral('{for'), 'Set<int>');
}
test_noContext_noTypeArgs_forWithExpression() async {
- await resolveTestCode('''
-int i;
+ await assertNoErrorsInCode('''
+int i = 0;
var a = {for (i = 0; i < 2; i++) i * 2};
''');
assertType(setLiteral('{for'), 'Set<int>');
}
test_noContext_noTypeArgs_if() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
bool c = true;
var a = {if (c) 1};
''');
@@ -156,7 +190,7 @@
}
test_noContext_noTypeArgs_ifElse_lubOfInt() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
bool c = true;
var a = {if (c) 1 else 2};
''');
@@ -164,7 +198,7 @@
}
test_noContext_noTypeArgs_ifElse_lubOfNum() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
bool c = true;
var a = {if (c) 1 else 2.3};
''');
@@ -172,7 +206,7 @@
}
test_noContext_noTypeArgs_ifElse_lubOfObject() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
bool c = true;
var a = {if (c) 1 else '2'};
''');
@@ -180,45 +214,46 @@
}
test_noContext_noTypeArgs_spread() async {
- await resolveTestCode('''
-List<int> c;
+ await assertNoErrorsInCode('''
+List<int> c = [];
var a = {...c};
''');
assertType(setLiteral('{...'), 'Set<int>');
}
test_noContext_noTypeArgs_spread_lubOfInt() async {
- await resolveTestCode('''
-List<int> c;
-List<int> b;
+ await assertNoErrorsInCode('''
+List<int> c = [];
+List<int> b = [];
var a = {...b, ...c};
''');
assertType(setLiteral('{...'), 'Set<int>');
}
test_noContext_noTypeArgs_spread_lubOfNum() async {
- await resolveTestCode('''
-List<int> c;
-List<double> b;
+ await assertNoErrorsInCode('''
+List<int> c = [];
+List<double> b = [];
var a = {...b, ...c};
''');
assertType(setLiteral('{...'), 'Set<num>');
}
test_noContext_noTypeArgs_spread_lubOfObject() async {
- await resolveTestCode('''
-List<int> c;
-List<String> b;
+ await assertNoErrorsInCode('''
+List<int> c = [];
+List<String> b = [];
var a = {...b, ...c};
''');
assertType(setLiteral('{...'), 'Set<Object>');
}
test_noContext_noTypeArgs_spread_mixin() async {
- await resolveTestCode(r'''
+ await assertNoErrorsInCode(r'''
mixin S on Set<int> {}
-main() {
- S s1;
+
+void f(S s1) {
+ // ignore:unused_local_variable
var s2 = {...s1};
}
''');
@@ -226,34 +261,69 @@
}
test_noContext_noTypeArgs_spread_nestedInIf_oneAmbiguous() async {
- await resolveTestCode('''
-List<int> c;
+ await assertNoErrorsInCode('''
+List<int> c = [];
dynamic d;
var a = {if (0 < 1) ...c else ...d};
''');
- assertType(setLiteral('{'), 'Set<dynamic>');
+ assertType(setLiteral('{if'), 'Set<dynamic>');
}
- @failingTest
test_noContext_noTypeArgs_spread_nullAware_nullAndNotNull() async {
- await resolveTestCode('''
-f() {
- var futureNull = Future.value(null);
- var a = {1, ...?await futureNull, 2};
+ await assertNoErrorsInCode('''
+void f(Null a) {
+ // ignore:unused_local_variable
+ var v = {1, ...?a, 2};
}
''');
assertType(setLiteral('{1'), 'Set<int>');
}
- test_noContext_typeArgs_expression_conflict() async {
- await resolveTestCode('''
-var a = <String>{1};
+ test_noContext_noTypeArgs_spread_typeParameter_implementsIterable() async {
+ await assertNoErrorsInCode('''
+void f<T extends List<int>>(T a) {
+ // ignore:unused_local_variable
+ var v = {...a};
+}
''');
+ assertType(setLiteral('{...'), 'Set<int>');
+ }
+
+ test_noContext_noTypeArgs_spread_typeParameter_notImplementsIterable() async {
+ await assertErrorsInCode('''
+void f<T extends num>(T a) {
+ // ignore:unused_local_variable
+ var v = {...a};
+}
+''', [
+ error(CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER, 73, 6),
+ ]);
+ assertType(setLiteral('{...'), 'dynamic');
+ }
+
+ test_noContext_noTypeArgs_spread_typeParameter_notImplementsIterable2() async {
+ await assertErrorsInCode('''
+void f<T extends num>(T a) {
+ // ignore:unused_local_variable
+ var v = {...a, 0};
+}
+''', [
+ error(CompileTimeErrorCode.AMBIGUOUS_SET_OR_MAP_LITERAL_EITHER, 73, 9),
+ ]);
+ assertType(setLiteral('{...'), 'dynamic');
+ }
+
+ test_noContext_typeArgs_expression_conflict() async {
+ await assertErrorsInCode('''
+var a = <String>{1};
+''', [
+ error(CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 17, 1),
+ ]);
assertType(setLiteral('{'), 'Set<String>');
}
test_noContext_typeArgs_expression_noConflict() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = <int>{1};
''');
assertType(setLiteral('{'), 'Set<int>');
@@ -261,14 +331,14 @@
@failingTest
test_noContext_typeArgs_expressions_conflict() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = <int, String>{1, 2};
''');
assertType(setLiteral('{'), 'Set<int>');
}
test_noContext_typeArgs_noElements() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
var a = <num>{};
''');
assertType(setLiteral('{'), 'Set<num>');
@@ -276,18 +346,19 @@
}
@reflectiveTest
-class SetLiteralWithNnbdTest extends SetLiteralTest with WithNullSafetyMixin {
+class SetLiteralWithNullSafetyTest extends SetLiteralTest
+ with WithNullSafetyMixin {
AstNode setOrMapLiteral(String search) => findNode.setOrMapLiteral(search);
test_context_noTypeArgs_noEntries() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
Set<String> a = {};
''');
assertType(setOrMapLiteral('{'), 'Set<String>');
}
test_context_noTypeArgs_noEntries_typeParameterNullable() async {
- await resolveTestCode('''
+ await assertNoErrorsInCode('''
class C<T extends Object?> {
Set<T> a = {}; // 1
Set<T>? b = {}; // 2
@@ -300,4 +371,74 @@
assertType(setOrMapLiteral('{}; // 3'), 'Set<T?>');
assertType(setOrMapLiteral('{}; // 4'), 'Set<T?>');
}
+
+ test_noContext_noTypeArgs_spread_never() async {
+ await assertErrorsInCode('''
+void f(Never a, bool b) async {
+ // ignore:unused_local_variable
+ var v = {...a, if (b) throw 0};
+}
+''', [
+ error(HintCode.DEAD_CODE, 87, 12),
+ ]);
+ assertType(setLiteral('{...'), 'Set<Never>');
+ }
+
+ test_noContext_noTypeArgs_spread_nullAware_never() async {
+ await assertErrorsInCode('''
+void f(Never a, bool b) async {
+ // ignore:unused_local_variable
+ var v = {...?a, if (b) throw 0};
+}
+''', [
+ error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 77, 4),
+ error(HintCode.DEAD_CODE, 88, 12),
+ ]);
+ assertType(setLiteral('{...'), 'Set<Never>');
+ }
+
+ test_noContext_noTypeArgs_spread_nullAware_null() async {
+ await assertNoErrorsInCode('''
+void f(Null a, bool b) async {
+ // ignore:unused_local_variable
+ var v = {...?a, if (b) throw 0};
+}
+''');
+ assertType(setLiteral('{...'), 'Set<Never>');
+ }
+
+ test_noContext_noTypeArgs_spread_nullAware_typeParameter_never() async {
+ await assertErrorsInCode('''
+void f<T extends Never>(T a, bool b) async {
+ // ignore:unused_local_variable
+ var v = {...?a, if (b) throw 0};
+}
+''', [
+ error(StaticWarningCode.INVALID_NULL_AWARE_OPERATOR, 90, 4),
+ error(HintCode.DEAD_CODE, 101, 12),
+ ]);
+ assertType(setLiteral('{...'), 'Set<Never>');
+ }
+
+ test_noContext_noTypeArgs_spread_nullAware_typeParameter_null() async {
+ await assertNoErrorsInCode('''
+void f<T extends Null>(T a, bool b) async {
+ // ignore:unused_local_variable
+ var v = {...?a, if (b) throw 0};
+}
+''');
+ assertType(setLiteral('{...'), 'Set<Never>');
+ }
+
+ test_noContext_noTypeArgs_spread_typeParameter_never() async {
+ await assertErrorsInCode('''
+void f<T extends Never>(T a, bool b) async {
+ // ignore:unused_local_variable
+ var v = {...a, if (b) throw 0};
+}
+''', [
+ error(HintCode.DEAD_CODE, 100, 12),
+ ]);
+ assertType(setLiteral('{...'), 'Set<Never>');
+ }
}
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/statements_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/statements_test.dart
index 8c83c92..aa8934f 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/statements_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/statements_test.dart
@@ -9,16 +9,17 @@
main() {
defineReflectiveSuite(() {
- defineReflectiveTests(AssertWithNnbdTest);
- defineReflectiveTests(DoWithNnbdTest);
- defineReflectiveTests(ForWithNnbdTest);
- defineReflectiveTests(IfWithNnbdTest);
- defineReflectiveTests(WhileWithNnbdTest);
+ defineReflectiveTests(AssertWithNullSafetyTest);
+ defineReflectiveTests(DoWithNullSafetyTest);
+ defineReflectiveTests(ForWithNullSafetyTest);
+ defineReflectiveTests(IfWithNullSafetyTest);
+ defineReflectiveTests(WhileWithNullSafetyTest);
});
}
@reflectiveTest
-class AssertWithNnbdTest extends DriverResolutionTest with WithNullSafetyMixin {
+class AssertWithNullSafetyTest extends DriverResolutionTest
+ with WithNullSafetyMixin {
test_downward() async {
await resolveTestCode('''
void f() {
@@ -31,7 +32,8 @@
}
@reflectiveTest
-class DoWithNnbdTest extends DriverResolutionTest with WithNullSafetyMixin {
+class DoWithNullSafetyTest extends DriverResolutionTest
+ with WithNullSafetyMixin {
test_downward() async {
await resolveTestCode('''
void f() {
@@ -44,7 +46,8 @@
}
@reflectiveTest
-class ForWithNnbdTest extends DriverResolutionTest with WithNullSafetyMixin {
+class ForWithNullSafetyTest extends DriverResolutionTest
+ with WithNullSafetyMixin {
test_awaitForIn_dynamic_downward() async {
await resolveTestCode('''
void f() async {
@@ -100,7 +103,8 @@
}
@reflectiveTest
-class IfWithNnbdTest extends DriverResolutionTest with WithNullSafetyMixin {
+class IfWithNullSafetyTest extends DriverResolutionTest
+ with WithNullSafetyMixin {
test_downward() async {
await resolveTestCode('''
void f() {
@@ -113,7 +117,8 @@
}
@reflectiveTest
-class WhileWithNnbdTest extends DriverResolutionTest with WithNullSafetyMixin {
+class WhileWithNullSafetyTest extends DriverResolutionTest
+ with WithNullSafetyMixin {
test_downward() async {
await resolveTestCode('''
void f() {
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/throw_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/throw_test.dart
index e0e5e47..ad8c22fa 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/throw_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/throw_test.dart
@@ -9,12 +9,13 @@
main() {
defineReflectiveSuite(() {
- defineReflectiveTests(ThrowWithNnbdTest);
+ defineReflectiveTests(ThrowWithNullSafetyTest);
});
}
@reflectiveTest
-class ThrowWithNnbdTest extends DriverResolutionTest with WithNullSafetyMixin {
+class ThrowWithNullSafetyTest extends DriverResolutionTest
+ with WithNullSafetyMixin {
test_downward() async {
await resolveTestCode('''
void f() {
diff --git a/pkg/analyzer/test/src/dart/resolution/type_inference/type_test_expressions_test.dart b/pkg/analyzer/test/src/dart/resolution/type_inference/type_test_expressions_test.dart
index 35a0efc..649f577 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_inference/type_test_expressions_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_inference/type_test_expressions_test.dart
@@ -10,9 +10,9 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(IsNotTest);
- defineReflectiveTests(IsNotWithNnbdTest);
+ defineReflectiveTests(IsNotWithNullSafetyTest);
defineReflectiveTests(IsTest);
- defineReflectiveTests(IsWithNnbdTest);
+ defineReflectiveTests(IsWithNullSafetyTest);
});
}
@@ -30,7 +30,7 @@
}
@reflectiveTest
-class IsNotWithNnbdTest extends IsNotTest with WithNullSafetyMixin {}
+class IsNotWithNullSafetyTest extends IsNotTest with WithNullSafetyMixin {}
@reflectiveTest
class IsTest extends DriverResolutionTest {
@@ -46,4 +46,4 @@
}
@reflectiveTest
-class IsWithNnbdTest extends IsTest with WithNullSafetyMixin {}
+class IsWithNullSafetyTest extends IsTest with WithNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/dart/resolution/type_name_test.dart b/pkg/analyzer/test/src/dart/resolution/type_name_test.dart
index e907e3c..ccce771 100644
--- a/pkg/analyzer/test/src/dart/resolution/type_name_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/type_name_test.dart
@@ -12,7 +12,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(TypeNameResolutionTest);
- defineReflectiveTests(TypeNameResolutionWithNnbdTest);
+ defineReflectiveTests(TypeNameResolutionWithNullSafetyTest);
});
}
@@ -198,7 +198,7 @@
new math.A();
}
''', [
- error(StaticWarningCode.NEW_WITH_NON_TYPE, 49, 1),
+ error(CompileTimeErrorCode.NEW_WITH_NON_TYPE, 49, 1),
]);
assertTypeName(
@@ -231,7 +231,7 @@
new A();
}
''', [
- error(StaticWarningCode.NEW_WITH_NON_TYPE, 15, 1),
+ error(CompileTimeErrorCode.NEW_WITH_NON_TYPE, 15, 1),
]);
assertTypeName(
@@ -255,7 +255,7 @@
}
@reflectiveTest
-class TypeNameResolutionWithNnbdTest extends TypeNameResolutionTest
+class TypeNameResolutionWithNullSafetyTest extends TypeNameResolutionTest
with WithNullSafetyMixin {
ImportFindElement get import_a {
return findElement.importFind('package:test/a.dart');
diff --git a/pkg/analyzer/test/src/diagnostics/abstract_class_member_test.dart b/pkg/analyzer/test/src/diagnostics/abstract_class_member_test.dart
index 482f4f7..dd78820 100644
--- a/pkg/analyzer/test/src/diagnostics/abstract_class_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/abstract_class_member_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(AbstractClassMemberTest);
- defineReflectiveTests(AbstractClassMemberTest_NNBD);
+ defineReflectiveTests(AbstractClassMemberWithNullSafetyTest);
});
}
@@ -55,5 +55,5 @@
}
@reflectiveTest
-class AbstractClassMemberTest_NNBD extends AbstractClassMemberTest
+class AbstractClassMemberWithNullSafetyTest extends AbstractClassMemberTest
with WithNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/ambiguous_import_test.dart b/pkg/analyzer/test/src/diagnostics/ambiguous_import_test.dart
index 9a7fff4..888dabe 100644
--- a/pkg/analyzer/test/src/diagnostics/ambiguous_import_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/ambiguous_import_test.dart
@@ -31,7 +31,7 @@
import 'lib1.dart';
import 'lib2.dart';
f(p) {p as N;}''', [
- error(StaticWarningCode.AMBIGUOUS_IMPORT, 51, 1),
+ error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 51, 1),
]);
}
@@ -42,7 +42,7 @@
Future v;
''', [
- error(StaticWarningCode.AMBIGUOUS_IMPORT, 44, 6),
+ error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 44, 6),
]);
}
@@ -57,7 +57,7 @@
import 'lib1.dart';
import 'lib2.dart';
class A extends N {}''', [
- error(StaticWarningCode.AMBIGUOUS_IMPORT, 56, 1),
+ error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 56, 1),
error(CompileTimeErrorCode.EXTENDS_NON_CLASS, 56, 1),
]);
}
@@ -74,7 +74,7 @@
import 'lib2.dart';
class A implements N {}''', [
error(CompileTimeErrorCode.IMPLEMENTS_NON_CLASS, 59, 1),
- error(StaticWarningCode.AMBIGUOUS_IMPORT, 59, 1),
+ error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 59, 1),
]);
}
@@ -105,7 +105,7 @@
GatheringErrorListener()
..addAll(partResult.errors)
..assertErrors([
- error(StaticWarningCode.AMBIGUOUS_IMPORT, 29, 1),
+ error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 29, 1),
error(CompileTimeErrorCode.EXTENDS_NON_CLASS, 29, 1),
]);
}
@@ -122,7 +122,7 @@
import 'lib1.dart';
import 'lib2.dart';
f() {new N();}''', [
- error(StaticWarningCode.AMBIGUOUS_IMPORT, 60, 1),
+ error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 60, 1),
]);
}
@@ -137,7 +137,7 @@
import 'lib1.dart';
import 'lib2.dart';
f(p) {p is N;}''', [
- error(StaticWarningCode.AMBIGUOUS_IMPORT, 51, 1),
+ error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 51, 1),
]);
}
@@ -152,7 +152,7 @@
import 'lib1.dart';
import 'lib2.dart';
g() { N.FOO; }''', [
- error(StaticWarningCode.AMBIGUOUS_IMPORT, 46, 1),
+ error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 46, 1),
]);
}
@@ -175,14 +175,14 @@
N m() { return null; }
}
class B<T extends N> {}''', [
- error(StaticWarningCode.AMBIGUOUS_IMPORT, 48, 1),
- error(StaticWarningCode.AMBIGUOUS_IMPORT, 53, 1),
- error(StaticWarningCode.AMBIGUOUS_IMPORT, 59, 1),
- error(StaticWarningCode.AMBIGUOUS_IMPORT, 63, 1),
- error(StaticWarningCode.AMBIGUOUS_IMPORT, 72, 1),
+ error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 48, 1),
+ error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 53, 1),
+ error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 59, 1),
+ error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 63, 1),
+ error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 72, 1),
error(HintCode.UNUSED_LOCAL_VARIABLE, 74, 1),
- error(StaticWarningCode.AMBIGUOUS_IMPORT, 106, 1),
- error(StaticWarningCode.AMBIGUOUS_IMPORT, 149, 1),
+ error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 106, 1),
+ error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 149, 1),
]);
}
@@ -198,7 +198,7 @@
import 'lib2.dart';
class A<T> {}
A<N> f() { return null; }''', [
- error(StaticWarningCode.AMBIGUOUS_IMPORT, 56, 1),
+ error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 56, 1),
]);
}
@@ -214,7 +214,7 @@
import 'lib2.dart';
class A<T> {}
f() {new A<N>();}''', [
- error(StaticWarningCode.AMBIGUOUS_IMPORT, 65, 1),
+ error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 65, 1),
]);
}
@@ -230,7 +230,7 @@
import 'lib2.dart';
f() { g(v); }
g(p) {}''', [
- error(StaticWarningCode.AMBIGUOUS_IMPORT, 48, 1),
+ error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 48, 1),
]);
}
@@ -245,7 +245,7 @@
import 'lib1.dart';
import 'lib2.dart';
f() { v = 0; }''', [
- error(StaticWarningCode.AMBIGUOUS_IMPORT, 46, 1),
+ error(CompileTimeErrorCode.AMBIGUOUS_IMPORT, 46, 1),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/ambiguous_set_or_map_literal_test.dart b/pkg/analyzer/test/src/diagnostics/ambiguous_set_or_map_literal_test.dart
index 9c0e858..faf2c9e 100644
--- a/pkg/analyzer/test/src/diagnostics/ambiguous_set_or_map_literal_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/ambiguous_set_or_map_literal_test.dart
@@ -11,9 +11,9 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(AmbiguousSetOrMapLiteralBothTest);
- defineReflectiveTests(AmbiguousSetOrMapLiteralBothWithNnbdTest);
+ defineReflectiveTests(AmbiguousSetOrMapLiteralBothWithNullSafetyTest);
defineReflectiveTests(AmbiguousSetOrMapLiteralEitherTest);
- defineReflectiveTests(AmbiguousSetOrMapLiteralEitherWithNnbdTest);
+ defineReflectiveTests(AmbiguousSetOrMapLiteralEitherWithNullSafetyTest);
});
}
@@ -63,7 +63,7 @@
}
@reflectiveTest
-class AmbiguousSetOrMapLiteralBothWithNnbdTest
+class AmbiguousSetOrMapLiteralBothWithNullSafetyTest
extends AmbiguousSetOrMapLiteralBothTest with WithNullSafetyMixin {
test_map_keyNonNullable_valueNullable() async {
await assertNoErrorsInCode('''
@@ -131,5 +131,5 @@
}
@reflectiveTest
-class AmbiguousSetOrMapLiteralEitherWithNnbdTest
+class AmbiguousSetOrMapLiteralEitherWithNullSafetyTest
extends AmbiguousSetOrMapLiteralEitherTest with WithNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart
index f8c9440..373f343 100644
--- a/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/argument_type_not_assignable_test.dart
@@ -12,7 +12,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ArgumentTypeNotAssignableTest);
- defineReflectiveTests(ArgumentTypeNotAssignableTest_NNBD);
+ defineReflectiveTests(ArgumentTypeNotAssignableWithNullSafetyTest);
});
}
@@ -29,7 +29,7 @@
f() {
g((_A a) {});
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 42, 9),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 42, 9),
]);
// The name _A is private to the library it's defined in, so this is a type
// mismatch. Furthermore, the error message should mention both _A and the
@@ -46,7 +46,7 @@
@A.fromInt('0')
main() {
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 49, 3),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 49, 3),
]);
}
@@ -58,7 +58,7 @@
@A('0')
main() {
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 33, 3),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 33, 3),
]);
}
@@ -70,7 +70,7 @@
f(A a) {
a + '0';
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 50, 3),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 50, 3),
]);
}
@@ -83,7 +83,7 @@
void main() {
f().call(3);
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 110, 1),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 110, 1),
]);
}
@@ -101,7 +101,7 @@
A a = new A();
a.. ma().mb(0);
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 186, 1),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 186, 1),
]);
}
@@ -117,7 +117,7 @@
CheckedModeCompileTimeErrorCode.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH,
52,
2),
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 52, 2),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 52, 2),
]);
}
@@ -129,7 +129,7 @@
class B extends A {
const B() : super(42);
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 73, 2),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 73, 2),
]);
}
@@ -160,7 +160,7 @@
main() {
(int x) {} ('');
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 23, 2),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 23, 2),
]);
}
@@ -174,7 +174,7 @@
n(void f(int i)) {}
}
''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 31, 7),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 31, 7),
]);
}
@@ -186,7 +186,7 @@
f(A a) {
a['0'];
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 60, 3),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 60, 3),
]);
}
@@ -199,7 +199,7 @@
f(A a) {
a['0'] += 0;
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 103, 3),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 103, 3),
]);
}
@@ -211,7 +211,7 @@
f(A a) {
a['0'] = 0;
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 65, 3),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 65, 3),
]);
}
@@ -224,7 +224,7 @@
f(A a) {
a['0'] += 0;
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 103, 3),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 103, 3),
]);
}
@@ -236,7 +236,7 @@
}
n(int i) {}
''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 24, 1),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 24, 1),
]);
}
@@ -248,7 +248,7 @@
f(A a) {
a('0');
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 42, 3),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 42, 3),
]);
}
@@ -261,7 +261,7 @@
A a = new A();
a('0');
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 59, 3),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 59, 3),
]);
}
@@ -270,7 +270,7 @@
a(b(int p)) {
b('0');
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 18, 3),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 18, 3),
]);
}
@@ -281,7 +281,7 @@
f(v);
}
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 41, 1),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 41, 1),
]);
}
@@ -317,7 +317,7 @@
f(A<String> a) {
a.m(1);
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 50, 1),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 50, 1),
]);
}
@@ -327,7 +327,7 @@
main() {
f(p: 42);
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 35, 5),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 35, 5),
]);
}
@@ -337,7 +337,7 @@
main() {
f(42);
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 35, 2),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 35, 2),
]);
}
@@ -347,7 +347,7 @@
main() {
f(42);
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 28, 2),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 28, 2),
]);
}
@@ -357,7 +357,7 @@
f(A<int> a) {
a('1');
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 37, 3),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 37, 3),
]);
}
@@ -369,7 +369,7 @@
A a = getA();
a('1');
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 69, 3),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 69, 3),
]);
}
@@ -379,7 +379,7 @@
f(A a) {
a('1');
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 31, 3),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 31, 3),
]);
}
@@ -391,7 +391,7 @@
main() {
new A<String>(42);
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 52, 2),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 52, 2),
]);
}
@@ -403,7 +403,7 @@
main() {
new A(42);
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 53, 2),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 53, 2),
]);
}
@@ -415,7 +415,7 @@
main() {
new A(42);
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 46, 2),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 46, 2),
]);
}
@@ -430,14 +430,14 @@
print(h('s'));
}
''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 99, 1),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 99, 1),
]);
}
}
@reflectiveTest
-class ArgumentTypeNotAssignableTest_NNBD extends ArgumentTypeNotAssignableTest
- with WithNullSafetyMixin {
+class ArgumentTypeNotAssignableWithNullSafetyTest
+ extends ArgumentTypeNotAssignableTest with WithNullSafetyMixin {
test_binary_eqEq_covariantParameterType() async {
await assertErrorsInCode(r'''
class A {
@@ -451,8 +451,8 @@
aq == null;
}
''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 86, 1),
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 97, 1),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 86, 1),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 97, 1),
]);
}
@@ -464,7 +464,7 @@
}
n(int x) {}
''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 23, 1),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 23, 1),
]);
}
@@ -477,7 +477,7 @@
}
n(int x) {}
''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 24, 1),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 24, 1),
]);
}
@@ -508,7 +508,7 @@
main() {
acceptFunOptBool(C.funBool);
}''', [
- error(StaticWarningCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 125, 9),
+ error(CompileTimeErrorCode.ARGUMENT_TYPE_NOT_ASSIGNABLE, 125, 9),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_to_const_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_to_const_test.dart
index 7187511..99c27ce34 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_to_const_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_to_const_test.dart
@@ -24,7 +24,7 @@
f() {
A.v = 1;
}''', [
- error(StaticWarningCode.ASSIGNMENT_TO_CONST, 42, 3),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_CONST, 42, 3),
]);
}
@@ -36,7 +36,7 @@
f() {
A.v += 1;
}''', [
- error(StaticWarningCode.ASSIGNMENT_TO_CONST, 42, 3),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_CONST, 42, 3),
]);
}
@@ -47,7 +47,7 @@
x = 1;
}''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 14, 1),
- error(StaticWarningCode.ASSIGNMENT_TO_CONST, 23, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_CONST, 23, 1),
]);
}
@@ -59,7 +59,7 @@
print(x);
}
}''', [
- error(StaticWarningCode.ASSIGNMENT_TO_CONST, 28, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_CONST, 28, 1),
]);
}
@@ -70,7 +70,7 @@
x += 1;
}''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 14, 1),
- error(StaticWarningCode.ASSIGNMENT_TO_CONST, 23, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_CONST, 23, 1),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_to_final_local_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_to_final_local_test.dart
index 9186e08..fb8178d 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_to_final_local_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_to_final_local_test.dart
@@ -12,7 +12,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(AssignmentToFinalLocalTest);
- defineReflectiveTests(AssignmentToFinalLocalWithNnbdTest);
+ defineReflectiveTests(AssignmentToFinalLocalWithNullSafetyTest);
});
}
@@ -25,7 +25,7 @@
x = 1;
}''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 14, 1),
- error(StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL, 23, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL, 23, 1),
]);
}
@@ -37,7 +37,7 @@
print(x);
}
}''', [
- error(StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL, 28, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL, 28, 1),
]);
}
@@ -48,7 +48,7 @@
x += 1;
}''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 14, 1),
- error(StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL, 23, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL, 23, 1),
]);
}
@@ -57,7 +57,7 @@
f(final x) {
x = 1;
}''', [
- error(StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL, 15, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL, 15, 1),
]);
}
@@ -68,7 +68,7 @@
x--;
}''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 14, 1),
- error(StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL, 23, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL, 23, 1),
]);
}
@@ -79,7 +79,7 @@
x++;
}''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 14, 1),
- error(StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL, 23, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL, 23, 1),
]);
}
@@ -90,7 +90,7 @@
--x;
}''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 14, 1),
- error(StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL, 25, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL, 25, 1),
]);
}
@@ -101,7 +101,7 @@
++x;
}''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 14, 1),
- error(StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL, 25, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL, 25, 1),
]);
}
@@ -112,7 +112,7 @@
x--;
}''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 14, 1),
- error(StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL, 23, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL, 23, 1),
]);
}
@@ -123,7 +123,7 @@
x++;
}''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 14, 1),
- error(StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL, 23, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL, 23, 1),
]);
}
@@ -131,13 +131,13 @@
await assertErrorsInCode('''
final x = 0;
f() { x = 1; }''', [
- error(StaticWarningCode.ASSIGNMENT_TO_FINAL_LOCAL, 19, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_LOCAL, 19, 1),
]);
}
}
@reflectiveTest
-class AssignmentToFinalLocalWithNnbdTest extends DriverResolutionTest
+class AssignmentToFinalLocalWithNullSafetyTest extends DriverResolutionTest
with WithNullSafetyMixin {
test_localVariable_late() async {
await assertNoErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_to_final_no_setter_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_to_final_no_setter_test.dart
index 89f5f56..4067b17 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_to_final_no_setter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_to_final_no_setter_test.dart
@@ -24,7 +24,7 @@
0.foo = 1;
}
''', [
- error(StaticWarningCode.ASSIGNMENT_TO_FINAL_NO_SETTER, 53, 3),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_NO_SETTER, 53, 3),
]);
}
@@ -37,7 +37,7 @@
A a = new A();
a.x = 0;
}''', [
- error(StaticWarningCode.ASSIGNMENT_TO_FINAL_NO_SETTER, 60, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_NO_SETTER, 60, 1),
]);
}
@@ -52,7 +52,7 @@
main() {
B.a.x = 0;
}''', [
- error(StaticWarningCode.ASSIGNMENT_TO_FINAL_NO_SETTER, 71, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL_NO_SETTER, 71, 1),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_to_final_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_to_final_test.dart
index b566feb..194e750 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_to_final_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_to_final_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(AssignmentToFinalTest);
- defineReflectiveTests(AssignmentToFinalWithNnbdTest);
+ defineReflectiveTests(AssignmentToFinalWithNullSafetyTest);
});
}
@@ -26,7 +26,7 @@
A a = new A();
a.v = 1;
}''', [
- error(StaticWarningCode.ASSIGNMENT_TO_FINAL, 54, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 54, 1),
]);
}
@@ -39,13 +39,13 @@
A a = new A();
a.v += 1;
}''', [
- error(StaticWarningCode.ASSIGNMENT_TO_FINAL, 54, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_FINAL, 54, 1),
]);
}
}
@reflectiveTest
-class AssignmentToFinalWithNnbdTest extends AssignmentToFinalTest
+class AssignmentToFinalWithNullSafetyTest extends AssignmentToFinalTest
with WithNullSafetyMixin {
test_field_late() async {
await assertNoErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_to_function_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_to_function_test.dart
index d24ec7e..850cc71 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_to_function_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_to_function_test.dart
@@ -21,7 +21,7 @@
main() {
f = null;
}''', [
- error(StaticWarningCode.ASSIGNMENT_TO_FUNCTION, 18, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_FUNCTION, 18, 1),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_to_method_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_to_method_test.dart
index 768c9b4..3361f23 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_to_method_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_to_method_test.dart
@@ -29,7 +29,7 @@
c.foo = 0;
}
''', [
- error(StaticWarningCode.ASSIGNMENT_TO_METHOD, 87, 5),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_METHOD, 87, 5),
error(StaticTypeWarningCode.INVALID_ASSIGNMENT, 95, 1),
]);
}
@@ -42,7 +42,7 @@
f(A a) {
a.m = () {};
}''', [
- error(StaticWarningCode.ASSIGNMENT_TO_METHOD, 32, 3),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_METHOD, 32, 3),
]);
}
@@ -60,7 +60,7 @@
}
}
''', [
- error(StaticWarningCode.ASSIGNMENT_TO_METHOD, 86, 8),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_METHOD, 86, 8),
error(StaticTypeWarningCode.INVALID_ASSIGNMENT, 97, 1),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/assignment_to_type_test.dart b/pkg/analyzer/test/src/diagnostics/assignment_to_type_test.dart
index f0b8b6a..a8bd819 100644
--- a/pkg/analyzer/test/src/diagnostics/assignment_to_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/assignment_to_type_test.dart
@@ -22,7 +22,7 @@
C = null;
}
''', [
- error(StaticWarningCode.ASSIGNMENT_TO_TYPE, 22, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_TYPE, 22, 1),
]);
}
@@ -33,7 +33,7 @@
E = null;
}
''', [
- error(StaticWarningCode.ASSIGNMENT_TO_TYPE, 24, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_TYPE, 24, 1),
]);
}
@@ -44,7 +44,7 @@
F = null;
}
''', [
- error(StaticWarningCode.ASSIGNMENT_TO_TYPE, 29, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_TYPE, 29, 1),
]);
}
@@ -56,7 +56,7 @@
}
}
''', [
- error(StaticWarningCode.ASSIGNMENT_TO_TYPE, 25, 1),
+ error(CompileTimeErrorCode.ASSIGNMENT_TO_TYPE, 25, 1),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/case_block_not_terminated_test.dart b/pkg/analyzer/test/src/diagnostics/case_block_not_terminated_test.dart
index 3c52f06..e8268d5 100644
--- a/pkg/analyzer/test/src/diagnostics/case_block_not_terminated_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/case_block_not_terminated_test.dart
@@ -36,7 +36,7 @@
return;
}
}''', [
- error(StaticWarningCode.CASE_BLOCK_NOT_TERMINATED, 35, 4),
+ error(CompileTimeErrorCode.CASE_BLOCK_NOT_TERMINATED, 35, 4),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/case_expression_type_implements_equals_test.dart b/pkg/analyzer/test/src/diagnostics/case_expression_type_implements_equals_test.dart
index a44e629..78e713c 100644
--- a/pkg/analyzer/test/src/diagnostics/case_expression_type_implements_equals_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/case_expression_type_implements_equals_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(CaseExpressionTypeImplementsEqualsTest);
- defineReflectiveTests(CaseExpressionTypeImplementsEqualsWithNnbdTest);
+ defineReflectiveTests(CaseExpressionTypeImplementsEqualsWithNullSafetyTest);
});
}
@@ -106,7 +106,7 @@
}
@reflectiveTest
-class CaseExpressionTypeImplementsEqualsWithNnbdTest
+class CaseExpressionTypeImplementsEqualsWithNullSafetyTest
extends DriverResolutionTest with WithNullSafetyMixin {
test_declares() async {
await assertNoErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/diagnostics/cast_to_non_type_test.dart b/pkg/analyzer/test/src/diagnostics/cast_to_non_type_test.dart
index 08b4de7..e7496be 100644
--- a/pkg/analyzer/test/src/diagnostics/cast_to_non_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/cast_to_non_type_test.dart
@@ -21,7 +21,7 @@
var A = 0;
f(String s) { var x = s as A; }''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 29, 1),
- error(StaticWarningCode.CAST_TO_NON_TYPE, 38, 1),
+ error(CompileTimeErrorCode.CAST_TO_NON_TYPE, 38, 1),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/concrete_class_with_abstract_member_test.dart b/pkg/analyzer/test/src/diagnostics/concrete_class_with_abstract_member_test.dart
index 473325b..d781279 100644
--- a/pkg/analyzer/test/src/diagnostics/concrete_class_with_abstract_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/concrete_class_with_abstract_member_test.dart
@@ -20,7 +20,7 @@
class A {
m();
}''', [
- error(StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER, 12, 4),
+ error(CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER, 12, 4),
]);
}
@@ -32,7 +32,7 @@
class A implements I {
m();
}''', [
- error(StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER, 62, 4),
+ error(CompileTimeErrorCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER, 62, 4),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/conflicting_generic_interfaces_test.dart b/pkg/analyzer/test/src/diagnostics/conflicting_generic_interfaces_test.dart
index 9bd6ec2..d6aa6e4 100644
--- a/pkg/analyzer/test/src/diagnostics/conflicting_generic_interfaces_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/conflicting_generic_interfaces_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ConflictingGenericInterfacesTest);
- defineReflectiveTests(ConflictingGenericInterfacesWithNnbdTest);
+ defineReflectiveTests(ConflictingGenericInterfacesWithNullSafetyTest);
});
}
@@ -72,7 +72,7 @@
}
@reflectiveTest
-class ConflictingGenericInterfacesWithNnbdTest
+class ConflictingGenericInterfacesWithNullSafetyTest
extends ConflictingGenericInterfacesTest with WithNullSafetyMixin {
test_class_extends_implements_never() async {
await assertNoErrorsInCode('''
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 9a1dbd5..bb4c910 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
@@ -126,8 +126,10 @@
}
var x = const C();
''', [
- error(StaticWarningCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION,
- 39, 1),
+ error(
+ CompileTimeErrorCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION,
+ 39,
+ 1),
error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 56, 9),
]);
}
@@ -145,8 +147,10 @@
}
var x = const C(2);
''', [
- error(StaticWarningCode.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR,
- 40, 1),
+ error(
+ CompileTimeErrorCode.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR,
+ 40,
+ 1),
error(CompileTimeErrorCode.CONST_EVAL_THROWS_EXCEPTION, 54, 10),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/const_not_initialized_test.dart b/pkg/analyzer/test/src/diagnostics/const_not_initialized_test.dart
index 2ee2f94..5c1d235 100644
--- a/pkg/analyzer/test/src/diagnostics/const_not_initialized_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/const_not_initialized_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ConstNotInitializedTest);
- defineReflectiveTests(ConstNotInitializedWithNnbdTest);
+ defineReflectiveTests(ConstNotInitializedWithNullSafetyTest);
});
}
@@ -57,5 +57,5 @@
}
@reflectiveTest
-class ConstNotInitializedWithNnbdTest extends ConstNotInitializedTest
+class ConstNotInitializedWithNullSafetyTest extends ConstNotInitializedTest
with WithNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/const_with_non_type_test.dart b/pkg/analyzer/test/src/diagnostics/const_with_non_type_test.dart
new file mode 100644
index 0000000..1bd6571
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/const_with_non_type_test.dart
@@ -0,0 +1,40 @@
+// 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.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/driver_resolution.dart';
+
+main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(ConstWithNonTypeTest);
+ });
+}
+
+@reflectiveTest
+class ConstWithNonTypeTest extends DriverResolutionTest {
+ test_fromLibrary() async {
+ newFile('/test/lib/lib1.dart');
+ await assertErrorsInCode('''
+import 'lib1.dart' as lib;
+void f() {
+ const lib.A();
+}
+''', [
+ error(CompileTimeErrorCode.CONST_WITH_NON_TYPE, 50, 1),
+ ]);
+ }
+
+ test_variable() async {
+ await assertErrorsInCode(r'''
+int A;
+f() {
+ return const A();
+}
+''', [
+ error(CompileTimeErrorCode.CONST_WITH_NON_TYPE, 28, 1),
+ ]);
+ }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/const_with_type_parameters_test.dart b/pkg/analyzer/test/src/diagnostics/const_with_type_parameters_test.dart
new file mode 100644
index 0000000..5aed8fe
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/const_with_type_parameters_test.dart
@@ -0,0 +1,41 @@
+// 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.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/driver_resolution.dart';
+
+main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(ConstWithTypeParametersTest);
+ });
+}
+
+@reflectiveTest
+class ConstWithTypeParametersTest extends DriverResolutionTest {
+ test_direct() async {
+ await assertErrorsInCode(r'''
+class A<T> {
+ static const V = const A<T>();
+ const A();
+}
+''', [
+ error(CompileTimeErrorCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, 40, 1),
+ error(CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS, 40, 1),
+ ]);
+ }
+
+ test_indirect() async {
+ await assertErrorsInCode(r'''
+class A<T> {
+ static const V = const A<List<T>>();
+ const A();
+}
+''', [
+ error(CompileTimeErrorCode.CONST_WITH_TYPE_PARAMETERS, 45, 1),
+ error(CompileTimeErrorCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, 45, 1),
+ ]);
+ }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/const_with_undefined_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/const_with_undefined_constructor_test.dart
new file mode 100644
index 0000000..f60efa0
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/const_with_undefined_constructor_test.dart
@@ -0,0 +1,44 @@
+// 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.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/driver_resolution.dart';
+
+main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(ConstWithUndefinedConstructorTest);
+ });
+}
+
+@reflectiveTest
+class ConstWithUndefinedConstructorTest extends DriverResolutionTest {
+ test_named() async {
+ await assertErrorsInCode(r'''
+class A {
+ const A();
+}
+f() {
+ return const A.noSuchConstructor();
+}
+''', [
+ error(CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR, 48, 17),
+ ]);
+ }
+
+ test_unnamed() async {
+ await assertErrorsInCode(r'''
+class A {
+ const A.name();
+}
+f() {
+ return const A();
+}
+''', [
+ error(
+ CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT, 51, 1),
+ ]);
+ }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/extends_non_class_test.dart b/pkg/analyzer/test/src/diagnostics/extends_non_class_test.dart
index 9569e82..d449861 100644
--- a/pkg/analyzer/test/src/diagnostics/extends_non_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extends_non_class_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ExtendsNonClassTest);
- defineReflectiveTests(ExtendsNonClassWithNnbdTest);
+ defineReflectiveTests(ExtendsNonClassWithNullSafetyTest);
});
}
@@ -19,7 +19,7 @@
class ExtendsNonClassTest extends DriverResolutionTest {}
@reflectiveTest
-class ExtendsNonClassWithNnbdTest extends ExtendsNonClassTest
+class ExtendsNonClassWithNullSafetyTest extends ExtendsNonClassTest
with WithNullSafetyMixin {
test_Never() async {
await assertErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/extension_override_argument_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/extension_override_argument_not_assignable_test.dart
index a872eea..e553247 100644
--- a/pkg/analyzer/test/src/diagnostics/extension_override_argument_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extension_override_argument_not_assignable_test.dart
@@ -11,7 +11,8 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ExtensionOverrideArgumentNotAssignableTest);
- defineReflectiveTests(ExtensionOverrideArgumentNotAssignableWithNNBDTest);
+ defineReflectiveTests(
+ ExtensionOverrideArgumentNotAssignableWithNullSafetyTest);
});
}
@@ -62,7 +63,7 @@
}
@reflectiveTest
-class ExtensionOverrideArgumentNotAssignableWithNNBDTest
+class ExtensionOverrideArgumentNotAssignableWithNullSafetyTest
extends DriverResolutionTest with WithNullSafetyMixin {
test_override_onNonNullable() async {
await assertErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/diagnostics/extra_positional_arguments_test.dart b/pkg/analyzer/test/src/diagnostics/extra_positional_arguments_test.dart
index 1a18b4a..991bdd9 100644
--- a/pkg/analyzer/test/src/diagnostics/extra_positional_arguments_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/extra_positional_arguments_test.dart
@@ -16,6 +16,34 @@
@reflectiveTest
class ExtraPositionalArgumentsCouldBeNamedTest extends DriverResolutionTest {
+ test_constConstructor() async {
+ await assertErrorsInCode(r'''
+class A {
+ const A({int x});
+}
+main() {
+ const A(0);
+}
+''', [
+ error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED, 50,
+ 3),
+ ]);
+ }
+
+ test_constConstructor_super() async {
+ await assertErrorsInCode(r'''
+class A {
+ const A({int x});
+}
+class B extends A {
+ const B() : super(0);
+}
+''', [
+ error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED, 71,
+ 3),
+ ]);
+ }
+
test_functionExpressionInvocation() async {
await assertErrorsInCode('''
main() {
@@ -42,6 +70,32 @@
@reflectiveTest
class ExtraPositionalArgumentsTest extends DriverResolutionTest {
+ test_constConstructor() async {
+ await assertErrorsInCode(r'''
+class A {
+ const A();
+}
+main() {
+ const A(0);
+}
+''', [
+ error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS, 43, 3),
+ ]);
+ }
+
+ test_constConstructor_super() async {
+ await assertErrorsInCode(r'''
+class A {
+ const A();
+}
+class B extends A {
+ const B() : super(0);
+}
+''', [
+ error(CompileTimeErrorCode.EXTRA_POSITIONAL_ARGUMENTS, 64, 3),
+ ]);
+ }
+
test_functionExpressionInvocation() async {
await assertErrorsInCode('''
main() {
diff --git a/pkg/analyzer/test/src/diagnostics/field_initialized_in_initializer_and_declaration_test.dart b/pkg/analyzer/test/src/diagnostics/field_initialized_in_initializer_and_declaration_test.dart
index 46395a1..45842d2 100644
--- a/pkg/analyzer/test/src/diagnostics/field_initialized_in_initializer_and_declaration_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/field_initialized_in_initializer_and_declaration_test.dart
@@ -23,8 +23,10 @@
A() : x = 1;
}
''', [
- error(StaticWarningCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION,
- 37, 1),
+ error(
+ CompileTimeErrorCode.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION,
+ 37,
+ 1),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/field_initializer_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/field_initializer_not_assignable_test.dart
index 55e94cb..f71ba45 100644
--- a/pkg/analyzer/test/src/diagnostics/field_initializer_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/field_initializer_not_assignable_test.dart
@@ -22,7 +22,7 @@
A() : x = '';
}
''', [
- error(StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE, 31, 2),
+ error(CompileTimeErrorCode.FIELD_INITIALIZER_NOT_ASSIGNABLE, 31, 2),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/field_initializing_formal_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/field_initializing_formal_not_assignable_test.dart
index 65b451e..392dca0 100644
--- a/pkg/analyzer/test/src/diagnostics/field_initializing_formal_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/field_initializing_formal_not_assignable_test.dart
@@ -15,6 +15,18 @@
@reflectiveTest
class FieldInitializingFormalNotAssignableTest extends DriverResolutionTest {
+ test_dynamic() async {
+ await assertErrorsInCode('''
+class A {
+ int x;
+ A(dynamic this.x) {}
+}
+''', [
+ error(CompileTimeErrorCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE, 23,
+ 14),
+ ]);
+ }
+
test_unrelated() async {
await assertErrorsInCode('''
class A {
@@ -22,8 +34,8 @@
A(String this.x) {}
}
''', [
- error(StrongModeCode.INVALID_PARAMETER_DECLARATION, 23, 13),
- error(StaticWarningCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE, 23, 13),
+ error(CompileTimeErrorCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE, 23,
+ 13),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/final_initialized_in_delcaration_and_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/final_initialized_in_delcaration_and_constructor_test.dart
index 0779878..58cfca6 100644
--- a/pkg/analyzer/test/src/diagnostics/final_initialized_in_delcaration_and_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/final_initialized_in_delcaration_and_constructor_test.dart
@@ -23,8 +23,10 @@
A(this.x) {}
}
''', [
- error(StaticWarningCode.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR,
- 34, 1),
+ error(
+ CompileTimeErrorCode.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR,
+ 34,
+ 1),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/final_not_initialized_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/final_not_initialized_constructor_test.dart
index 000bccc..b7ea044 100644
--- a/pkg/analyzer/test/src/diagnostics/final_not_initialized_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/final_not_initialized_constructor_test.dart
@@ -22,7 +22,7 @@
A() {}
}
''', [
- error(StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1, 27, 1),
+ error(CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1, 27, 1),
]);
}
@@ -34,7 +34,7 @@
A() {}
}
''', [
- error(StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2, 42, 1),
+ error(CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2, 42, 1),
]);
}
@@ -47,7 +47,8 @@
A() {}
}
''', [
- error(StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS, 57, 1),
+ error(
+ CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS, 57, 1),
]);
}
@@ -59,7 +60,7 @@
A._();
}
''', [
- error(StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1, 45, 1),
+ error(CompileTimeErrorCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1, 45, 1),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/final_not_initialized_test.dart b/pkg/analyzer/test/src/diagnostics/final_not_initialized_test.dart
index 02074c4..b9e9b36 100644
--- a/pkg/analyzer/test/src/diagnostics/final_not_initialized_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/final_not_initialized_test.dart
@@ -12,7 +12,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(FinalNotInitializedTest);
- defineReflectiveTests(FinalNotInitializedWithNnbdTest);
+ defineReflectiveTests(FinalNotInitializedWithNullSafetyTest);
});
}
@@ -32,7 +32,7 @@
extension E on String {
static final F;
}''', [
- error(StaticWarningCode.FINAL_NOT_INITIALIZED, 39, 1),
+ error(CompileTimeErrorCode.FINAL_NOT_INITIALIZED, 39, 1),
]);
}
@@ -41,7 +41,7 @@
class A {
final F;
}''', [
- error(StaticWarningCode.FINAL_NOT_INITIALIZED, 18, 1),
+ error(CompileTimeErrorCode.FINAL_NOT_INITIALIZED, 18, 1),
]);
}
@@ -50,7 +50,7 @@
class A {
static final F;
}''', [
- error(StaticWarningCode.FINAL_NOT_INITIALIZED, 25, 1),
+ error(CompileTimeErrorCode.FINAL_NOT_INITIALIZED, 25, 1),
]);
}
@@ -58,7 +58,7 @@
await assertErrorsInCode('''
final F;
''', [
- error(StaticWarningCode.FINAL_NOT_INITIALIZED, 6, 1),
+ error(CompileTimeErrorCode.FINAL_NOT_INITIALIZED, 6, 1),
]);
}
@@ -68,7 +68,7 @@
final int x;
}''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 18, 1),
- error(StaticWarningCode.FINAL_NOT_INITIALIZED, 18, 1),
+ error(CompileTimeErrorCode.FINAL_NOT_INITIALIZED, 18, 1),
]);
}
@@ -78,13 +78,13 @@
final int x;
}
''', [
- error(StaticWarningCode.FINAL_NOT_INITIALIZED, 22, 1),
+ error(CompileTimeErrorCode.FINAL_NOT_INITIALIZED, 22, 1),
]);
}
}
@reflectiveTest
-class FinalNotInitializedWithNnbdTest extends DriverResolutionTest
+class FinalNotInitializedWithNullSafetyTest extends DriverResolutionTest
with WithNullSafetyMixin {
test_field_noConstructor_initializer() async {
await assertNoErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_type_test.dart b/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_type_test.dart
index 4e25160..a07d16bc 100644
--- a/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/for_in_of_invalid_type_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ForInOfInvalidTypeTest);
- defineReflectiveTests(ForInOfInvalidTypeWithNnbdTest);
+ defineReflectiveTests(ForInOfInvalidTypeWithNullSafetyTest);
});
}
@@ -63,7 +63,7 @@
}
@reflectiveTest
-class ForInOfInvalidTypeWithNnbdTest extends ForInOfInvalidTypeTest
+class ForInOfInvalidTypeWithNullSafetyTest extends ForInOfInvalidTypeTest
with WithNullSafetyMixin {
test_awaitForIn_never() async {
await assertErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/generic_function_type_cannot_be_bound_test.dart b/pkg/analyzer/test/src/diagnostics/generic_function_type_cannot_be_bound_test.dart
new file mode 100644
index 0000000..a07471e
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/generic_function_type_cannot_be_bound_test.dart
@@ -0,0 +1,56 @@
+// 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.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/driver_resolution.dart';
+
+main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(GenericFunctionTypeCannotBeBoundTest);
+ });
+}
+
+@reflectiveTest
+class GenericFunctionTypeCannotBeBoundTest extends DriverResolutionTest {
+ test_class() async {
+ await assertErrorsInCode(r'''
+class C<T extends S Function<S>(S)> {
+}
+''', [
+ error(CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND, 18, 16),
+ ]);
+ }
+
+ test_genericFunction() async {
+ await assertErrorsInCode(r'''
+T Function<T extends S Function<S>(S)>(T) fun;
+''', [
+ error(CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND, 21, 16),
+ ]);
+ }
+
+ test_genericFunctionTypedef() async {
+ await assertErrorsInCode(r'''
+typedef foo = T Function<T extends S Function<S>(S)>(T t);
+''', [
+ error(CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND, 35, 16),
+ ]);
+ }
+
+ test_parameterOfFunction() async {
+ await assertNoErrorsInCode(r'''
+class C<T extends void Function(S Function<S>(S))> {}
+''');
+ }
+
+ test_typedef() async {
+ await assertErrorsInCode(r'''
+typedef T foo<T extends S Function<S>(S)>(T t);
+''', [
+ error(CompileTimeErrorCode.GENERIC_FUNCTION_TYPE_CANNOT_BE_BOUND, 24, 16),
+ ]);
+ }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/getter_not_assignable_setter_types_test.dart b/pkg/analyzer/test/src/diagnostics/getter_not_assignable_setter_types_test.dart
index 6bb253e..e2b4cb8 100644
--- a/pkg/analyzer/test/src/diagnostics/getter_not_assignable_setter_types_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/getter_not_assignable_setter_types_test.dart
@@ -45,7 +45,7 @@
abstract class X implements A, B {}
''', [
- error(StaticWarningCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 84, 1),
+ error(CompileTimeErrorCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 84, 1),
]);
}
@@ -126,7 +126,7 @@
set foo(String _) {}
}
''', [
- error(StaticWarningCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 20, 3),
+ error(CompileTimeErrorCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 20, 3),
]);
}
@@ -171,7 +171,7 @@
set foo(String _) {}
}
''', [
- error(StaticWarningCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 59, 3),
+ error(CompileTimeErrorCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 59, 3),
]);
}
@@ -185,7 +185,7 @@
int get foo => 0;
}
''', [
- error(StaticWarningCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 66, 3),
+ error(CompileTimeErrorCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 66, 3),
]);
}
@@ -196,7 +196,7 @@
static set foo(String _) {}
}
''', [
- error(StaticWarningCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 27, 3),
+ error(CompileTimeErrorCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 27, 3),
]);
}
@@ -207,7 +207,7 @@
set foo(String v) {}
}
''', [
- error(StaticWarningCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 34, 3),
+ error(CompileTimeErrorCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 34, 3),
]);
}
@@ -218,7 +218,7 @@
static set foo(String v) {}
}
''', [
- error(StaticWarningCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 41, 3),
+ error(CompileTimeErrorCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 41, 3),
]);
}
@@ -227,7 +227,7 @@
int get foo { return 0; }
set foo(String v) {}
''', [
- error(StaticWarningCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 8, 3),
+ error(CompileTimeErrorCode.GETTER_NOT_ASSIGNABLE_SETTER_TYPES, 8, 3),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/getter_not_subtype_setter_types_test.dart b/pkg/analyzer/test/src/diagnostics/getter_not_subtype_setter_types_test.dart
index db070e3..3429d34 100644
--- a/pkg/analyzer/test/src/diagnostics/getter_not_subtype_setter_types_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/getter_not_subtype_setter_types_test.dart
@@ -24,7 +24,7 @@
set foo(int v) {}
}
''', [
- error(StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 20, 3),
+ error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 20, 3),
]);
}
@@ -35,7 +35,7 @@
set foo(String v) {}
}
''', [
- error(StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 16, 3),
+ error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 16, 3),
]);
}
@@ -60,7 +60,7 @@
abstract class X implements A, B {}
''', [
- error(StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 84, 1),
+ error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 84, 1),
]);
}
@@ -141,7 +141,7 @@
set foo(String _) {}
}
''', [
- error(StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 20, 3),
+ error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 20, 3),
]);
}
@@ -186,7 +186,7 @@
set foo(String _) {}
}
''', [
- error(StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 59, 3),
+ error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 59, 3),
]);
}
@@ -200,7 +200,7 @@
int get foo => 0;
}
''', [
- error(StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 66, 3),
+ error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 66, 3),
]);
}
@@ -211,7 +211,7 @@
static set foo(int v) {}
}
''', [
- error(StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 27, 3),
+ error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 27, 3),
]);
}
@@ -222,7 +222,7 @@
set foo(String v) {}
}
''', [
- error(StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 34, 3),
+ error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 34, 3),
]);
}
@@ -233,7 +233,7 @@
static set foo(String v) {}
}
''', [
- error(StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 41, 3),
+ error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 41, 3),
]);
}
@@ -242,7 +242,7 @@
int get foo => 0;
set foo(String v) {}
''', [
- error(StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 8, 3),
+ error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 8, 3),
]);
}
@@ -251,7 +251,7 @@
get foo => 0;
set foo(int v) {}
''', [
- error(StaticWarningCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 4, 3),
+ error(CompileTimeErrorCode.GETTER_NOT_SUBTYPE_SETTER_TYPES, 4, 3),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/implements_non_class_test.dart b/pkg/analyzer/test/src/diagnostics/implements_non_class_test.dart
index 23f2aea..803aa67 100644
--- a/pkg/analyzer/test/src/diagnostics/implements_non_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/implements_non_class_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ImplementsNonClassTest);
- defineReflectiveTests(ImplementsNonClassWithNnbdTest);
+ defineReflectiveTests(ImplementsNonClassWithNullSafetyTest);
});
}
@@ -56,7 +56,7 @@
}
@reflectiveTest
-class ImplementsNonClassWithNnbdTest extends ImplementsNonClassTest
+class ImplementsNonClassWithNullSafetyTest extends ImplementsNonClassTest
with WithNullSafetyMixin {
test_Never() async {
await assertErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/implicit_this_reference_in_initializer_test.dart b/pkg/analyzer/test/src/diagnostics/implicit_this_reference_in_initializer_test.dart
index 033d8bb..1dad8ec 100644
--- a/pkg/analyzer/test/src/diagnostics/implicit_this_reference_in_initializer_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/implicit_this_reference_in_initializer_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(ImplicitThisReferenceInInitializerTest);
- defineReflectiveTests(ImplicitThisReferenceInInitializerWithNnbdTest);
+ defineReflectiveTests(ImplicitThisReferenceInInitializerWithNullSafetyTest);
});
}
@@ -248,7 +248,7 @@
}
@reflectiveTest
-class ImplicitThisReferenceInInitializerWithNnbdTest
+class ImplicitThisReferenceInInitializerWithNullSafetyTest
extends ImplicitThisReferenceInInitializerTest with WithNullSafetyMixin {
test_class_field_late_invokeInstanceMethod() async {
await assertNoErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/diagnostics/import_internal_library_test.dart b/pkg/analyzer/test/src/diagnostics/import_internal_library_test.dart
new file mode 100644
index 0000000..7397975
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/import_internal_library_test.dart
@@ -0,0 +1,31 @@
+// 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.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/driver_resolution.dart';
+
+main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(ImportInternalLibraryTest);
+ });
+}
+
+@reflectiveTest
+class ImportInternalLibraryTest extends DriverResolutionTest {
+ test_internal() async {
+ // Note, in these error cases we may generate an UNUSED_IMPORT hint, while
+ // we could prevent the hint from being generated by testing the import
+ // directive for the error, this is such a minor corner case that we don't
+ // think we should add the additional computation time to figure out such
+ // cases.
+ await assertErrorsInCode('''
+import 'dart:_interceptors';
+''', [
+ error(CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY, 7, 20),
+ error(HintCode.UNUSED_IMPORT, 7, 20),
+ ]);
+ }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/import_of_non_library_test.dart b/pkg/analyzer/test/src/diagnostics/import_of_non_library_test.dart
index c5d1d06..36ac79a 100644
--- a/pkg/analyzer/test/src/diagnostics/import_of_non_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/import_of_non_library_test.dart
@@ -15,7 +15,7 @@
@reflectiveTest
class ImportOfNonLibraryTest extends DriverResolutionTest {
- test_part() async {
+ test_deferred() async {
newFile("/test/lib/lib1.dart", content: '''
part of lib;
class A {}
@@ -28,4 +28,18 @@
error(CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY, 20, 11),
]);
}
+
+ test_part() async {
+ newFile("/test/lib/part.dart", content: r'''
+part of lib;
+class A{}
+''');
+ await assertErrorsInCode(r'''
+library lib;
+import 'part.dart';
+A a;
+''', [
+ error(CompileTimeErrorCode.IMPORT_OF_NON_LIBRARY, 20, 11),
+ ]);
+ }
}
diff --git a/pkg/analyzer/test/src/diagnostics/instantiate_abstract_class_test.dart b/pkg/analyzer/test/src/diagnostics/instantiate_abstract_class_test.dart
index 560995d..271ffff 100644
--- a/pkg/analyzer/test/src/diagnostics/instantiate_abstract_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/instantiate_abstract_class_test.dart
@@ -24,7 +24,7 @@
var a = const A<int>();
}''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 54, 1),
- error(StaticWarningCode.INSTANTIATE_ABSTRACT_CLASS, 64, 6),
+ error(CompileTimeErrorCode.INSTANTIATE_ABSTRACT_CLASS, 64, 6),
]);
assertType(findNode.instanceCreation('const A<int>'), 'A<int>');
@@ -39,7 +39,7 @@
A a = const A();
}''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 49, 1),
- error(StaticWarningCode.INSTANTIATE_ABSTRACT_CLASS, 59, 1),
+ error(CompileTimeErrorCode.INSTANTIATE_ABSTRACT_CLASS, 59, 1),
]);
}
@@ -50,7 +50,7 @@
new A<int>();
}
''', [
- error(StaticWarningCode.INSTANTIATE_ABSTRACT_CLASS, 40, 6),
+ error(CompileTimeErrorCode.INSTANTIATE_ABSTRACT_CLASS, 40, 6),
]);
assertType(findNode.instanceCreation('new A<int>'), 'A<int>');
@@ -63,7 +63,7 @@
new A();
}
''', [
- error(StaticWarningCode.INSTANTIATE_ABSTRACT_CLASS, 37, 1),
+ error(CompileTimeErrorCode.INSTANTIATE_ABSTRACT_CLASS, 37, 1),
]);
}
@@ -74,7 +74,7 @@
A<int>();
}
''', [
- error(StaticWarningCode.INSTANTIATE_ABSTRACT_CLASS, 36, 6),
+ error(CompileTimeErrorCode.INSTANTIATE_ABSTRACT_CLASS, 36, 6),
]);
assertType(findNode.instanceCreation('A<int>'), 'A<int>');
@@ -87,7 +87,7 @@
A();
}
''', [
- error(StaticWarningCode.INSTANTIATE_ABSTRACT_CLASS, 33, 1),
+ error(CompileTimeErrorCode.INSTANTIATE_ABSTRACT_CLASS, 33, 1),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_cast_new_expr_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_cast_new_expr_test.dart
index e963c1f..3ea45a5 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_cast_new_expr_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_cast_new_expr_test.dart
@@ -25,7 +25,7 @@
const B();
}
''', [
- error(StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 14, 3),
+ error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 14, 3),
error(CompileTimeErrorCode.INVALID_CAST_NEW_EXPR, 14, 3),
]);
}
@@ -54,7 +54,7 @@
const B();
}
''', [
- error(StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 14, 3),
+ error(CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 14, 3),
error(CompileTimeErrorCode.INVALID_CAST_NEW_EXPR, 14, 3),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_named_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_named_test.dart
index f9949d7..267f92e 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_named_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_named_test.dart
@@ -12,7 +12,7 @@
defineReflectiveSuite(() {
defineReflectiveTests(InvalidOverrideDifferentDefaultValuesNamedTest);
defineReflectiveTests(
- InvalidOverrideDifferentDefaultValuesNamedWithNnbdTest,
+ InvalidOverrideDifferentDefaultValuesNamedWithNullSafetyTest,
);
});
}
@@ -241,7 +241,7 @@
}
''', [
error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 26, 9),
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 26, 9),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 26, 9),
]);
}
@@ -257,9 +257,9 @@
}
''', [
error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 26, 9),
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 26, 9),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 26, 9),
error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 85, 10),
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 85, 10),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 85, 10),
]);
}
@@ -275,7 +275,7 @@
}
''', [
error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 71, 9),
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 71, 9),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 71, 9),
]);
}
@@ -298,7 +298,7 @@
}
@reflectiveTest
-class InvalidOverrideDifferentDefaultValuesNamedWithNnbdTest
+class InvalidOverrideDifferentDefaultValuesNamedWithNullSafetyTest
extends InvalidOverrideDifferentDefaultValuesNamedTest
with WithNullSafetyMixin {
test_concrete_equal_optIn_extends_optOut() async {
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_positional_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_positional_test.dart
index 3955adb..1995413 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_positional_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_override_different_default_values_positional_test.dart
@@ -12,7 +12,7 @@
defineReflectiveSuite(() {
defineReflectiveTests(InvalidOverrideDifferentDefaultValuesPositionalTest);
defineReflectiveTests(
- InvalidOverrideDifferentDefaultValuesPositionalWithNnbdTest,
+ InvalidOverrideDifferentDefaultValuesPositionalWithNullSafetyTest,
);
});
}
@@ -253,7 +253,7 @@
}
''', [
error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 26, 9),
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 26, 9),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 26, 9),
]);
}
@@ -269,9 +269,9 @@
}
''', [
error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 26, 9),
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 26, 9),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 26, 9),
error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 85, 10),
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 85, 10),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 85, 10),
]);
}
@@ -287,7 +287,7 @@
}
''', [
error(CompileTimeErrorCode.NON_CONSTANT_DEFAULT_VALUE, 71, 9),
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 71, 9),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 71, 9),
]);
}
@@ -313,7 +313,7 @@
}
@reflectiveTest
-class InvalidOverrideDifferentDefaultValuesPositionalWithNnbdTest
+class InvalidOverrideDifferentDefaultValuesPositionalWithNullSafetyTest
extends InvalidOverrideDifferentDefaultValuesPositionalTest
with WithNullSafetyMixin {
test_concrete_equal_optIn_extends_optOut() async {
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart
index f5987fd..d234456 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_override_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(InvalidOverrideTest);
- defineReflectiveTests(InvalidOverrideWithNnbdTest);
+ defineReflectiveTests(InvalidOverrideWithNullSafetyTest);
});
}
@@ -561,7 +561,7 @@
}
@reflectiveTest
-class InvalidOverrideWithNnbdTest extends DriverResolutionTest
+class InvalidOverrideWithNullSafetyTest extends DriverResolutionTest
with WithNullSafetyMixin {
test_method_parameter_functionTyped_optOut_extends_optIn() async {
newFile('/test/lib/a.dart', content: r'''
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_reference_to_this_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_reference_to_this_test.dart
index 00fc44d..1421341 100644
--- a/pkg/analyzer/test/src/diagnostics/invalid_reference_to_this_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/invalid_reference_to_this_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(InvalidReferenceToThisTest);
- defineReflectiveTests(InvalidReferenceToThisTest_NNBD);
+ defineReflectiveTests(InvalidReferenceToThisWithNullSafetyTest);
});
}
@@ -135,8 +135,8 @@
}
@reflectiveTest
-class InvalidReferenceToThisTest_NNBD extends InvalidReferenceToThisTest
- with WithNullSafetyMixin {
+class InvalidReferenceToThisWithNullSafetyTest
+ extends InvalidReferenceToThisTest with WithNullSafetyMixin {
test_instanceVariableInitializer_inDeclaration_late() async {
await assertNoErrorsInCode(r'''
class A {
diff --git a/pkg/analyzer/test/src/diagnostics/invalid_super_invocation_test.dart b/pkg/analyzer/test/src/diagnostics/invalid_super_invocation_test.dart
new file mode 100644
index 0000000..4ea6c25
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/invalid_super_invocation_test.dart
@@ -0,0 +1,38 @@
+// 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.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/driver_resolution.dart';
+
+main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(InvalidSuperInvocationTest);
+ });
+}
+
+@reflectiveTest
+class InvalidSuperInvocationTest extends DriverResolutionTest {
+ test_superBeforeAssert() async {
+ await assertErrorsInCode(r'''
+class A {
+ A(int x) : super(), assert(x != null);
+}
+''', [
+ error(CompileTimeErrorCode.INVALID_SUPER_INVOCATION, 23, 7),
+ ]);
+ }
+
+ test_superBeforeAssignment() async {
+ await assertErrorsInCode(r'''
+class A {
+ final int x;
+ A() : super(), x = 1;
+}
+''', [
+ error(CompileTimeErrorCode.INVALID_SUPER_INVOCATION, 33, 7),
+ ]);
+ }
+}
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 bdd4b72..f0d3fbe 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
@@ -42,8 +42,8 @@
''',
analysisOptions.experimentStatus.constant_update_2018
? [
- error(
- StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 82, 1),
+ error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 82,
+ 1),
]
: [
error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 64, 19),
@@ -57,13 +57,13 @@
''',
analysisOptions.experimentStatus.constant_update_2018
? [
- error(
- StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 31, 3),
+ error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 31,
+ 3),
]
: [
error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 20, 14),
- error(
- StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 31, 3),
+ error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 31,
+ 3),
]);
}
@@ -101,8 +101,8 @@
''',
analysisOptions.experimentStatus.constant_update_2018
? [
- error(
- StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 53, 1),
+ error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 53,
+ 1),
]
: [
error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 43, 11),
@@ -125,7 +125,7 @@
await assertErrorsInCode('''
var v = const <String>[42];
''', [
- error(StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 23, 2),
+ error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 23, 2),
]);
}
@@ -134,7 +134,7 @@
const dynamic x = 42;
var v = const <String>[x];
''', [
- error(StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 45, 1),
+ error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 45, 1),
]);
}
@@ -184,7 +184,7 @@
await assertErrorsInCode('''
var v = <int>[if (1 < 0) 'a'];
''', [
- error(StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 25, 3),
+ error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 25, 3),
]);
}
@@ -212,7 +212,7 @@
await assertErrorsInCode('''
var v = <String>[42];
''', [
- error(StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 17, 2),
+ error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 17, 2),
]);
}
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 3d3f4a3..95815bb 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
@@ -42,7 +42,7 @@
''',
analysisOptions.experimentStatus.constant_update_2018
? [
- error(StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 94, 1),
+ error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 94, 1),
]
: [
error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 70, 32),
@@ -69,11 +69,11 @@
''',
analysisOptions.experimentStatus.constant_update_2018
? [
- error(StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 37, 3),
+ error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 37, 3),
]
: [
error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 26, 20),
- error(StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 37, 3),
+ error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 37, 3),
]);
}
@@ -98,7 +98,7 @@
''',
analysisOptions.experimentStatus.constant_update_2018
? [
- error(StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 59, 1),
+ error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 59, 1),
]
: [
error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 49, 17),
@@ -132,7 +132,7 @@
const dynamic a = 'a';
var v = const <int, bool>{a : true};
''', [
- error(StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 49, 1),
+ error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 49, 1),
]);
}
@@ -140,7 +140,7 @@
await assertErrorsInCode('''
var v = const <int, bool>{'a' : true};
''', [
- error(StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 26, 3),
+ error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 26, 3),
]);
}
@@ -164,11 +164,11 @@
''',
analysisOptions.experimentStatus.constant_update_2018
? [
- error(StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 55, 1),
+ error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 55, 1),
]
: [
error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 51, 11),
- error(StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 55, 1),
+ error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 55, 1),
]);
}
@@ -198,7 +198,7 @@
await assertErrorsInCode('''
var v = <int, bool>{if (1 < 0) 'a': true};
''', [
- error(StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 31, 3),
+ error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 31, 3),
]);
}
@@ -234,7 +234,7 @@
await assertErrorsInCode('''
var v = <int, bool>{'a' : true};
''', [
- error(StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 20, 3),
+ error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 20, 3),
]);
}
@@ -254,7 +254,7 @@
await assertErrorsInCode('''
var v = <int, String>{...{'a': 'a'}};
''', [
- error(StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 26, 3),
+ error(CompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE, 26, 3),
]);
}
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 e540eed..37911a8 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
@@ -42,7 +42,8 @@
''',
analysisOptions.experimentStatus.constant_update_2018
? [
- error(StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 101, 1),
+ error(
+ CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 101, 1),
]
: [
error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 70, 32),
@@ -69,11 +70,13 @@
''',
analysisOptions.experimentStatus.constant_update_2018
? [
- error(StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 43, 3),
+ error(
+ CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 43, 3),
]
: [
error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 26, 20),
- error(StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 43, 3),
+ error(
+ CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 43, 3),
]);
}
@@ -98,7 +101,8 @@
''',
analysisOptions.experimentStatus.constant_update_2018
? [
- error(StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 65, 1),
+ error(
+ CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 65, 1),
]
: [
error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 49, 17),
@@ -132,7 +136,7 @@
const dynamic a = 'a';
var v = const <bool, int>{true: a};
''', [
- error(StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 55, 1),
+ error(CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 55, 1),
]);
}
@@ -140,7 +144,7 @@
await assertErrorsInCode('''
var v = const <bool, int>{true: 'a'};
''', [
- error(StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 32, 3),
+ error(CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 32, 3),
]);
}
@@ -164,11 +168,13 @@
''',
analysisOptions.experimentStatus.constant_update_2018
? [
- error(StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 59, 1),
+ error(
+ CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 59, 1),
]
: [
error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 49, 12),
- error(StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 59, 1),
+ error(
+ CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 59, 1),
]);
}
@@ -192,7 +198,7 @@
await assertErrorsInCode('''
var v = <bool, int>{if (1 < 0) true: 'a'};
''', [
- error(StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 37, 3),
+ error(CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 37, 3),
]);
}
@@ -228,7 +234,7 @@
await assertErrorsInCode('''
var v = <bool, int>{true: 'a'};
''', [
- error(StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 26, 3),
+ error(CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 26, 3),
]);
}
@@ -248,7 +254,7 @@
await assertErrorsInCode('''
var v = <bool, int>{...{true: 'a'}};
''', [
- error(StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 30, 3),
+ error(CompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE, 30, 3),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/missing_enum_constant_in_switch_test.dart b/pkg/analyzer/test/src/diagnostics/missing_enum_constant_in_switch_test.dart
index 7065eda..81af1c1 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_enum_constant_in_switch_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_enum_constant_in_switch_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(MissingEnumConstantInSwitchTest);
- defineReflectiveTests(MissingEnumConstantInSwitchWithNnbdTest);
+ defineReflectiveTests(MissingEnumConstantInSwitchWithNullSafetyTest);
});
}
@@ -82,7 +82,7 @@
}
@reflectiveTest
-class MissingEnumConstantInSwitchWithNnbdTest
+class MissingEnumConstantInSwitchWithNullSafetyTest
extends MissingEnumConstantInSwitchTest with WithNullSafetyMixin {
test_nullable() async {
await assertErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/missing_required_param_test.dart b/pkg/analyzer/test/src/diagnostics/missing_required_param_test.dart
index dfc42f9..d64dcf9 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_required_param_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_required_param_test.dart
@@ -13,7 +13,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(MissingRequiredParamTest);
- defineReflectiveTests(MissingRequiredParamWithNnbdTest);
+ defineReflectiveTests(MissingRequiredParamWithNullSafetyTest);
});
}
@@ -245,7 +245,7 @@
}
@reflectiveTest
-class MissingRequiredParamWithNnbdTest extends DriverResolutionTest
+class MissingRequiredParamWithNullSafetyTest extends DriverResolutionTest
with WithNullSafetyMixin {
test_constructor_argumentGiven() async {
await assertNoErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/diagnostics/missing_return_test.dart b/pkg/analyzer/test/src/diagnostics/missing_return_test.dart
index 3441f21..353bef4 100644
--- a/pkg/analyzer/test/src/diagnostics/missing_return_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/missing_return_test.dart
@@ -7,10 +7,12 @@
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../dart/resolution/driver_resolution.dart';
+import '../dart/resolution/with_null_safety_mixin.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(MissingReturnTest);
+ defineReflectiveTests(MissingReturnWithNullSafetyTest);
});
}
@@ -213,3 +215,23 @@
]);
}
}
+
+@reflectiveTest
+class MissingReturnWithNullSafetyTest extends DriverResolutionTest
+ with WithNullSafetyMixin {
+ test_returnNever() async {
+ newFile('/test/lib/a.dart', content: r'''
+Never foo() {
+ throw 0;
+}
+''');
+ await assertNoErrorsInCode(r'''
+// @dart = 2.8
+import 'a.dart';
+
+int f() {
+ foo();
+}
+''');
+ }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_declares_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_declares_constructor_test.dart
index 355a804..51f315e 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_declares_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_declares_constructor_test.dart
@@ -4,6 +4,7 @@
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/src/dart/error/syntactic_errors.dart';
+import 'package:analyzer/src/error/codes.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../dart/resolution/driver_resolution.dart';
@@ -24,6 +25,9 @@
}
''', [
error(ParserErrorCode.MIXIN_DECLARES_CONSTRUCTOR, 27, 1),
+ // TODO(srawlins): Don't report this from within a mixin.
+ error(
+ CompileTimeErrorCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE, 29, 6),
]);
var element = findElement.mixin('M');
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_of_non_class_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_of_non_class_test.dart
index 6f7275d..bb19212 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_of_non_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_of_non_class_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(MixinOfNonClassTest);
- defineReflectiveTests(MixinOfNonClassWithNnbdTest);
+ defineReflectiveTests(MixinOfNonClassWithNullSafetyTest);
});
}
@@ -59,7 +59,7 @@
}
@reflectiveTest
-class MixinOfNonClassWithNnbdTest extends MixinOfNonClassTest
+class MixinOfNonClassWithNullSafetyTest extends MixinOfNonClassTest
with WithNullSafetyMixin {
test_Never() async {
await assertErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_non_interface_test.dart b/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_non_interface_test.dart
index 3b00377..cb8bc73 100644
--- a/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_non_interface_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/mixin_super_class_constraint_non_interface_test.dart
@@ -11,7 +11,8 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(MixinSuperClassConstraintNonInterfaceTest);
- defineReflectiveTests(MixinSuperClassConstraintNonInterfaceWithNnbdTest);
+ defineReflectiveTests(
+ MixinSuperClassConstraintNonInterfaceWithNullSafetyTest);
});
}
@@ -19,7 +20,7 @@
class MixinSuperClassConstraintNonInterfaceTest extends DriverResolutionTest {}
@reflectiveTest
-class MixinSuperClassConstraintNonInterfaceWithNnbdTest
+class MixinSuperClassConstraintNonInterfaceWithNullSafetyTest
extends MixinSuperClassConstraintNonInterfaceTest with WithNullSafetyMixin {
test_Never() async {
await assertErrorsInCode('''
diff --git a/pkg/analyzer/test/src/diagnostics/multiple_super_initializers_test.dart b/pkg/analyzer/test/src/diagnostics/multiple_super_initializers_test.dart
index 6423c0d..72669cd 100644
--- a/pkg/analyzer/test/src/diagnostics/multiple_super_initializers_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/multiple_super_initializers_test.dart
@@ -22,7 +22,7 @@
B() : super(), super() {}
}
''', [
- error(StrongModeCode.INVALID_SUPER_INVOCATION, 39, 7),
+ error(CompileTimeErrorCode.INVALID_SUPER_INVOCATION, 39, 7),
error(CompileTimeErrorCode.MULTIPLE_SUPER_INITIALIZERS, 48, 7),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/new_with_non_type_test.dart b/pkg/analyzer/test/src/diagnostics/new_with_non_type_test.dart
index 04bd897d..52ea5df 100644
--- a/pkg/analyzer/test/src/diagnostics/new_with_non_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/new_with_non_type_test.dart
@@ -23,7 +23,7 @@
new F();
}
''', [
- error(StaticWarningCode.NEW_WITH_NON_TYPE, 49, 1),
+ error(CompileTimeErrorCode.NEW_WITH_NON_TYPE, 49, 1),
]);
}
@@ -36,7 +36,7 @@
}
lib.B b;
''', [
- error(StaticWarningCode.NEW_WITH_NON_TYPE, 47, 1),
+ error(CompileTimeErrorCode.NEW_WITH_NON_TYPE, 47, 1),
]);
}
@@ -47,7 +47,7 @@
new A();
}
''', [
- error(StaticWarningCode.NEW_WITH_NON_TYPE, 28, 1),
+ error(CompileTimeErrorCode.NEW_WITH_NON_TYPE, 28, 1),
]);
}
@@ -60,7 +60,7 @@
new C.x.y();
}
''', [
- error(StaticWarningCode.NEW_WITH_NON_TYPE, 36, 3),
+ error(CompileTimeErrorCode.NEW_WITH_NON_TYPE, 36, 3),
]);
}
@@ -70,7 +70,7 @@
new T();
}
''', [
- error(StaticWarningCode.NEW_WITH_NON_TYPE, 22, 1),
+ error(CompileTimeErrorCode.NEW_WITH_NON_TYPE, 22, 1),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/new_with_undefined_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/new_with_undefined_constructor_test.dart
index 07eb600..3f5f6ff 100644
--- a/pkg/analyzer/test/src/diagnostics/new_with_undefined_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/new_with_undefined_constructor_test.dart
@@ -24,7 +24,7 @@
new A();
}
''', [
- error(StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT, 38, 1),
+ error(CompileTimeErrorCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT, 38, 1),
]);
}
@@ -59,7 +59,7 @@
new A.name();
}
''', [
- error(StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR, 35, 4),
+ error(CompileTimeErrorCode.NEW_WITH_UNDEFINED_CONSTRUCTOR, 35, 4),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/non_abstract_class_inherits_abstract_member_test.dart b/pkg/analyzer/test/src/diagnostics/non_abstract_class_inherits_abstract_member_test.dart
index c56b4f8..62bd7b4 100644
--- a/pkg/analyzer/test/src/diagnostics/non_abstract_class_inherits_abstract_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_abstract_class_inherits_abstract_member_test.dart
@@ -98,7 +98,7 @@
}
''', [
error(
- StaticWarningCode
+ CompileTimeErrorCode
.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FIVE_PLUS,
62,
1),
@@ -116,8 +116,10 @@
class C extends A {
}
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR,
- 55, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_FOUR,
+ 55,
+ 1),
]);
}
@@ -215,8 +217,10 @@
}
class B = A with M implements I;
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
- 74, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+ 74,
+ 1),
]);
}
@@ -229,8 +233,10 @@
abstract class A {}
class B = A with M;
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
- 54, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+ 54,
+ 1),
]);
}
@@ -243,8 +249,10 @@
}
class B = A with M;
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
- 45, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+ 45,
+ 1),
]);
}
@@ -256,8 +264,10 @@
class C implements I {
}
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
- 42, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+ 42,
+ 1),
]);
}
@@ -269,8 +279,10 @@
class C extends A {
}
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
- 40, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+ 40,
+ 1),
]);
}
@@ -282,8 +294,10 @@
class C implements I {
}
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
- 28, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+ 28,
+ 1),
]);
}
@@ -296,8 +310,10 @@
noSuchMethod(v);
}
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
- 28, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+ 28,
+ 1),
]);
}
@@ -324,8 +340,10 @@
class C implements I {
}
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
- 55, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+ 55,
+ 1),
]);
}
@@ -337,8 +355,10 @@
class C extends A {
}
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
- 35, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+ 35,
+ 1),
]);
}
@@ -354,8 +374,10 @@
class C implements A, B {
}
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
- 89, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+ 89,
+ 1),
]);
}
@@ -366,8 +388,10 @@
abstract class B implements A { get g1 => 1; }
class C extends Object with B {}
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
- 90, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+ 90,
+ 1),
]);
}
@@ -378,8 +402,10 @@
abstract class B implements A { m1() => 1; }
class C extends Object with B {}
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
- 84, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+ 84,
+ 1),
]);
}
@@ -390,8 +416,10 @@
abstract class B implements A { set s1(v) {} }
class C extends Object with B {}
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
- 96, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+ 96,
+ 1),
]);
}
@@ -407,8 +435,10 @@
class B extends A implements I {
}
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
- 71, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+ 71,
+ 1),
]);
}
@@ -425,8 +455,10 @@
get field => 0;
}
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
- 77, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+ 77,
+ 1),
]);
}
@@ -438,8 +470,10 @@
class C implements I {
}
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
- 36, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+ 36,
+ 1),
]);
}
@@ -451,8 +485,10 @@
class C extends A {
}
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
- 43, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+ 43,
+ 1),
]);
}
@@ -468,8 +504,10 @@
class C extends B {
}
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
- 84, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+ 84,
+ 1),
]);
}
@@ -483,8 +521,10 @@
set v(_) {}
}
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
- 27, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+ 27,
+ 1),
]);
}
@@ -498,8 +538,10 @@
get v => 1;
}
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
- 27, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE,
+ 27,
+ 1),
]);
}
@@ -523,8 +565,11 @@
class C extends A {
}
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE,
- 48, 1),
+ error(
+ CompileTimeErrorCode
+ .NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE,
+ 48,
+ 1),
]);
}
@@ -537,8 +582,10 @@
class C extends A {
}
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO,
- 41, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO,
+ 41,
+ 1),
]);
}
@@ -551,8 +598,10 @@
class C implements I {
}
''', [
- error(StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO,
- 27, 1),
+ error(
+ CompileTimeErrorCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO,
+ 27,
+ 1),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/non_bool_condition_test.dart b/pkg/analyzer/test/src/diagnostics/non_bool_condition_test.dart
index cd56b71..02438ae 100644
--- a/pkg/analyzer/test/src/diagnostics/non_bool_condition_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_bool_condition_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(NonBoolConditionTest);
- defineReflectiveTests(NonBoolConditionTest_NNBD);
+ defineReflectiveTests(NonBoolConditionWithNullSafetyTest);
});
}
@@ -84,7 +84,7 @@
}
@reflectiveTest
-class NonBoolConditionTest_NNBD extends DriverResolutionTest
+class NonBoolConditionWithNullSafetyTest extends DriverResolutionTest
with WithNullSafetyMixin {
test_if_null() async {
await assertErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/diagnostics/non_bool_negation_expression_test.dart b/pkg/analyzer/test/src/diagnostics/non_bool_negation_expression_test.dart
index 5c76c36..7eb4c52 100644
--- a/pkg/analyzer/test/src/diagnostics/non_bool_negation_expression_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_bool_negation_expression_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(NonBoolNegationExpressionTest);
- defineReflectiveTests(NonBoolNegationExpressionTest_NNBD);
+ defineReflectiveTests(NonBoolNegationExpressionWithNullSafetyTest);
});
}
@@ -29,7 +29,7 @@
}
@reflectiveTest
-class NonBoolNegationExpressionTest_NNBD extends DriverResolutionTest
+class NonBoolNegationExpressionWithNullSafetyTest extends DriverResolutionTest
with WithNullSafetyMixin {
test_null() async {
await assertErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/diagnostics/non_bool_operand_test.dart b/pkg/analyzer/test/src/diagnostics/non_bool_operand_test.dart
index 25168ff..07c6c1d 100644
--- a/pkg/analyzer/test/src/diagnostics/non_bool_operand_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_bool_operand_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(NonBoolOperandTest);
- defineReflectiveTests(NonBoolOperandTest_NNBD);
+ defineReflectiveTests(NonBoolOperandWithNullSafetyTest);
});
}
@@ -59,7 +59,7 @@
}
@reflectiveTest
-class NonBoolOperandTest_NNBD extends DriverResolutionTest
+class NonBoolOperandWithNullSafetyTest extends DriverResolutionTest
with WithNullSafetyMixin {
test_and_null() async {
await assertErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_test.dart
index 30c5ffb..e37e3ea 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_case_expression_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(NonConstantCaseExpressionTest);
- defineReflectiveTests(NonConstantCaseExpressionWithNnbdTest);
+ defineReflectiveTests(NonConstantCaseExpressionWithNullSafetyTest);
});
}
@@ -66,5 +66,5 @@
}
@reflectiveTest
-class NonConstantCaseExpressionWithNnbdTest
+class NonConstantCaseExpressionWithNullSafetyTest
extends NonConstantCaseExpressionTest with WithNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/non_type_in_catch_clause_test.dart b/pkg/analyzer/test/src/diagnostics/non_type_in_catch_clause_test.dart
index 92f7df5..1ce275e 100644
--- a/pkg/analyzer/test/src/diagnostics/non_type_in_catch_clause_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_type_in_catch_clause_test.dart
@@ -62,7 +62,7 @@
}
}
''', [
- error(StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE, 21, 1),
+ error(CompileTimeErrorCode.NON_TYPE_IN_CATCH_CLAUSE, 21, 1),
error(HintCode.UNUSED_CATCH_CLAUSE, 30, 1),
]);
}
@@ -76,7 +76,7 @@
}
}
''', [
- error(StaticWarningCode.NON_TYPE_IN_CATCH_CLAUSE, 32, 1),
+ error(CompileTimeErrorCode.NON_TYPE_IN_CATCH_CLAUSE, 32, 1),
error(HintCode.UNUSED_CATCH_CLAUSE, 41, 1),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/non_void_return_for_operator_test.dart b/pkg/analyzer/test/src/diagnostics/non_void_return_for_operator_test.dart
index b63e7ce..b0d4dd0 100644
--- a/pkg/analyzer/test/src/diagnostics/non_void_return_for_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_void_return_for_operator_test.dart
@@ -20,7 +20,7 @@
class A {
int operator []=(a, b) { return a; }
}''', [
- error(StaticWarningCode.NON_VOID_RETURN_FOR_OPERATOR, 12, 3),
+ error(CompileTimeErrorCode.NON_VOID_RETURN_FOR_OPERATOR, 12, 3),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/non_void_return_for_setter_test.dart b/pkg/analyzer/test/src/diagnostics/non_void_return_for_setter_test.dart
index 835fb02..b35f65d 100644
--- a/pkg/analyzer/test/src/diagnostics/non_void_return_for_setter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_void_return_for_setter_test.dart
@@ -20,7 +20,7 @@
int set x(int v) {
return 42;
}''', [
- error(StaticWarningCode.NON_VOID_RETURN_FOR_SETTER, 0, 3),
+ error(CompileTimeErrorCode.NON_VOID_RETURN_FOR_SETTER, 0, 3),
]);
}
@@ -43,7 +43,7 @@
return 42;
}
}''', [
- error(StaticWarningCode.NON_VOID_RETURN_FOR_SETTER, 12, 3),
+ error(CompileTimeErrorCode.NON_VOID_RETURN_FOR_SETTER, 12, 3),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/not_a_type_test.dart b/pkg/analyzer/test/src/diagnostics/not_a_type_test.dart
index 8f961ad..c5280ab 100644
--- a/pkg/analyzer/test/src/diagnostics/not_a_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_a_type_test.dart
@@ -15,11 +15,35 @@
@reflectiveTest
class NotATypeTest extends DriverResolutionTest {
+ test_class_constructor() async {
+ await assertErrorsInCode('''
+class A {
+ A.foo();
+}
+
+A.foo bar() {}
+''', [
+ error(CompileTimeErrorCode.NOT_A_TYPE, 24, 5),
+ ]);
+ }
+
+ test_class_method() async {
+ await assertErrorsInCode('''
+class A {
+ static void foo() {}
+}
+
+A.foo bar() {}
+''', [
+ error(CompileTimeErrorCode.NOT_A_TYPE, 36, 5),
+ ]);
+ }
+
test_extension() async {
await assertErrorsInCode('''
extension E on int {}
E a;
-''', [error(StaticWarningCode.NOT_A_TYPE, 22, 1)]);
+''', [error(CompileTimeErrorCode.NOT_A_TYPE, 22, 1)]);
var typeName = findNode.typeName('E a;');
assertTypeDynamic(typeName.type);
assertTypeNull(typeName.name);
@@ -31,7 +55,7 @@
main() {
f v = null;
}''', [
- error(StaticWarningCode.NOT_A_TYPE, 18, 1),
+ error(CompileTimeErrorCode.NOT_A_TYPE, 18, 1),
error(HintCode.UNUSED_LOCAL_VARIABLE, 20, 1),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/part_of_different_library_test.dart b/pkg/analyzer/test/src/diagnostics/part_of_different_library_test.dart
index b54eff4..a40df04 100644
--- a/pkg/analyzer/test/src/diagnostics/part_of_different_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/part_of_different_library_test.dart
@@ -21,7 +21,7 @@
library lib;
part 'part.dart';
''', [
- error(StaticWarningCode.PART_OF_DIFFERENT_LIBRARY, 18, 11),
+ error(CompileTimeErrorCode.PART_OF_DIFFERENT_LIBRARY, 18, 11),
]);
}
}
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 c466333..67439cb 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
@@ -78,7 +78,7 @@
x + (1 + 2);
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 24, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 24, 1),
]);
assertBinaryExpression(
@@ -122,7 +122,7 @@
x();
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 24, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 24, 1),
]);
}
@@ -190,7 +190,7 @@
x[0];
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 24, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 24, 1),
error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 25, 3),
]);
@@ -208,7 +208,7 @@
x[0] += 1 + 2;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 24, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 24, 1),
error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 25, 3),
error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 25, 3),
]);
@@ -229,7 +229,7 @@
x[0] = 1 + 2;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 24, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 24, 1),
error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 25, 3),
]);
@@ -335,7 +335,7 @@
x++;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 24, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 24, 1),
]);
assertPostfixExpression(
@@ -368,7 +368,7 @@
++x;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 26, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 26, 1),
]);
assertPrefixExpression(
@@ -470,7 +470,7 @@
x.foo;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 24, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 24, 1),
]);
assertSimpleIdentifier(
diff --git a/pkg/analyzer/test/src/diagnostics/recursive_compile_time_constant_test.dart b/pkg/analyzer/test/src/diagnostics/recursive_compile_time_constant_test.dart
index 05d0a4c..c07784e 100644
--- a/pkg/analyzer/test/src/diagnostics/recursive_compile_time_constant_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/recursive_compile_time_constant_test.dart
@@ -21,9 +21,7 @@
const y = x + 1;
''', [
error(CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT, 6, 1),
- error(StrongModeCode.TOP_LEVEL_CYCLE, 10, 1),
error(CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT, 23, 1),
- error(StrongModeCode.TOP_LEVEL_CYCLE, 27, 1),
]);
}
@@ -72,7 +70,6 @@
const x = x;
''', [
error(CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT, 6, 1),
- error(StrongModeCode.TOP_LEVEL_CYCLE, 10, 1),
]);
}
@@ -85,7 +82,6 @@
];
''', [
error(CompileTimeErrorCode.RECURSIVE_COMPILE_TIME_CONSTANT, 6, 5),
- error(StrongModeCode.TOP_LEVEL_CYCLE, 39, 5),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/redirect_to_invalid_function_type_test.dart b/pkg/analyzer/test/src/diagnostics/redirect_to_invalid_function_type_test.dart
index bd47fd3..ee21c3b 100644
--- a/pkg/analyzer/test/src/diagnostics/redirect_to_invalid_function_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/redirect_to_invalid_function_type_test.dart
@@ -23,7 +23,7 @@
class B {
factory B() = A;
}''', [
- error(StaticWarningCode.REDIRECT_TO_INVALID_FUNCTION_TYPE, 65, 1),
+ error(CompileTimeErrorCode.REDIRECT_TO_INVALID_FUNCTION_TYPE, 65, 1),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/redirect_to_invalid_return_type_test.dart b/pkg/analyzer/test/src/diagnostics/redirect_to_invalid_return_type_test.dart
index d1b8b0f..c61ac9c 100644
--- a/pkg/analyzer/test/src/diagnostics/redirect_to_invalid_return_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/redirect_to_invalid_return_type_test.dart
@@ -23,7 +23,7 @@
class B {
factory B() = A;
}''', [
- error(StaticWarningCode.REDIRECT_TO_INVALID_RETURN_TYPE, 47, 1),
+ error(CompileTimeErrorCode.REDIRECT_TO_INVALID_RETURN_TYPE, 47, 1),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/referenced_before_declaration_test.dart b/pkg/analyzer/test/src/diagnostics/referenced_before_declaration_test.dart
index 8e571cd..a3abb89 100644
--- a/pkg/analyzer/test/src/diagnostics/referenced_before_declaration_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/referenced_before_declaration_test.dart
@@ -69,7 +69,7 @@
]);
}
- test_hideInBlock_subBlock() async {
+ test_hideInBlock_local_subBlock() async {
await assertErrorsInCode(r'''
var v = 1;
main() {
@@ -85,6 +85,82 @@
]);
}
+ test_hideInSwitchCase_function() async {
+ await assertErrorsInCode(r'''
+var v = 0;
+
+void f(int a) {
+ switch (a) {
+ case 0:
+ v;
+ void v() {}
+ }
+}
+''', [
+ error(CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION, 61, 1,
+ contextMessages: [message('/test/lib/test.dart', 75, 1)]),
+ ]);
+
+ assertElement(findNode.simple('v;'), findElement.localFunction('v'));
+ }
+
+ test_hideInSwitchCase_local() async {
+ await assertErrorsInCode(r'''
+var v = 0;
+
+void f(int a) {
+ switch (a) {
+ case 0:
+ v;
+ var v = 1;
+ }
+}
+''', [
+ error(CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION, 61, 1,
+ contextMessages: [message('/test/lib/test.dart', 74, 1)]),
+ ]);
+
+ assertElement(findNode.simple('v;'), findElement.localVar('v'));
+ }
+
+ test_hideInSwitchDefault_function() async {
+ await assertErrorsInCode(r'''
+var v = 0;
+
+void f(int a) {
+ switch (a) {
+ default:
+ v;
+ void v() {}
+ }
+}
+''', [
+ error(CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION, 62, 1,
+ contextMessages: [message('/test/lib/test.dart', 76, 1)]),
+ ]);
+
+ assertElement(findNode.simple('v;'), findElement.localFunction('v'));
+ }
+
+ test_hideInSwitchDefault_local() async {
+ await assertErrorsInCode(r'''
+var v = 0;
+
+void f(int a) {
+ switch (a) {
+ default:
+ v;
+ var v = 1;
+ }
+}
+''', [
+ error(CompileTimeErrorCode.REFERENCED_BEFORE_DECLARATION, 62, 1,
+ contextMessages: [message('/test/lib/test.dart', 75, 1)]),
+ ]);
+
+ assertElement(findNode.simple('v;'), findElement.localVar('v'));
+ }
+
test_inInitializer_closure() async {
await assertErrorsInCode(r'''
main() {
@@ -107,6 +183,30 @@
]);
}
+ test_labeledStatement_function() async {
+ await assertNoErrorsInCode(r'''
+void f() {
+ // ignore:unused_label
+ label: void v() {}
+ v;
+}
+''');
+
+ assertElement(findNode.simple('v;'), findElement.localFunction('v'));
+ }
+
+ test_labeledStatement_local() async {
+ await assertNoErrorsInCode(r'''
+void f() {
+ // ignore:unused_label
+ label: var v = 0;
+ v;
+}
+''');
+
+ assertElement(findNode.simple('v;'), findElement.localVar('v'));
+ }
+
test_type_localFunction() async {
await assertErrorsInCode(r'''
void testTypeRef() {
diff --git a/pkg/analyzer/test/src/diagnostics/return_without_value_test.dart b/pkg/analyzer/test/src/diagnostics/return_without_value_test.dart
index be13d13..93bed68 100644
--- a/pkg/analyzer/test/src/diagnostics/return_without_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/return_without_value_test.dart
@@ -23,7 +23,7 @@
return;
}
''', [
- error(StaticWarningCode.RETURN_WITHOUT_VALUE, 26, 6),
+ error(CompileTimeErrorCode.RETURN_WITHOUT_VALUE, 26, 6),
]);
}
@@ -33,7 +33,7 @@
return;
}
''', [
- error(StaticWarningCode.RETURN_WITHOUT_VALUE, 29, 6),
+ error(CompileTimeErrorCode.RETURN_WITHOUT_VALUE, 29, 6),
]);
}
@@ -45,7 +45,7 @@
}
}
''', [
- error(StaticWarningCode.RETURN_WITHOUT_VALUE, 30, 6),
+ error(CompileTimeErrorCode.RETURN_WITHOUT_VALUE, 30, 6),
]);
}
@@ -55,7 +55,7 @@
return;
}
''', [
- error(StaticWarningCode.RETURN_WITHOUT_VALUE, 12, 6),
+ error(CompileTimeErrorCode.RETURN_WITHOUT_VALUE, 12, 6),
]);
}
@@ -112,7 +112,7 @@
};
}
''', [
- error(StaticWarningCode.RETURN_WITHOUT_VALUE, 48, 6),
+ error(CompileTimeErrorCode.RETURN_WITHOUT_VALUE, 48, 6),
]);
}
@@ -132,7 +132,7 @@
}
}
''', [
- error(StaticWarningCode.RETURN_WITHOUT_VALUE, 26, 6),
+ error(CompileTimeErrorCode.RETURN_WITHOUT_VALUE, 26, 6),
]);
}
@@ -147,7 +147,7 @@
return;
}
''', [
- error(StaticWarningCode.RETURN_WITHOUT_VALUE, 50, 6),
+ error(CompileTimeErrorCode.RETURN_WITHOUT_VALUE, 50, 6),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/sdk_version_never_test.dart b/pkg/analyzer/test/src/diagnostics/sdk_version_never_test.dart
index 443e5d00..25f3ed0 100644
--- a/pkg/analyzer/test/src/diagnostics/sdk_version_never_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/sdk_version_never_test.dart
@@ -13,7 +13,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(SdkVersionNeverTest);
- defineReflectiveTests(SdkVersionNeverWithNnbdTest);
+ defineReflectiveTests(SdkVersionNeverWithNullSafetyTest);
});
}
@@ -33,7 +33,7 @@
}
@reflectiveTest
-class SdkVersionNeverWithNnbdTest extends SdkConstraintVerifierTest
+class SdkVersionNeverWithNullSafetyTest extends SdkConstraintVerifierTest
with WithNullSafetyMixin {
test_experimentEnabled() async {
await verifyVersion('2.7.0', r'''
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 5ab2d41..08957ff 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
@@ -42,7 +42,8 @@
''',
analysisOptions.experimentStatus.constant_update_2018
? [
- error(StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 82, 1),
+ error(CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 82,
+ 1),
]
: [
error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 64, 19),
@@ -56,11 +57,13 @@
''',
analysisOptions.experimentStatus.constant_update_2018
? [
- error(StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 31, 3),
+ error(CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 31,
+ 3),
]
: [
error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 20, 14),
- error(StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 31, 3),
+ error(CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 31,
+ 3),
]);
}
@@ -98,7 +101,8 @@
''',
analysisOptions.experimentStatus.constant_update_2018
? [
- error(StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 53, 1),
+ error(CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 53,
+ 1),
]
: [
error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 43, 11),
@@ -121,7 +125,7 @@
await assertErrorsInCode('''
var v = const <String>{42};
''', [
- error(StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 23, 2),
+ error(CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 23, 2),
]);
}
@@ -137,7 +141,7 @@
const dynamic x = 42;
var v = const <String>{x};
''', [
- error(StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 45, 1),
+ error(CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 45, 1),
]);
}
@@ -145,7 +149,7 @@
await assertErrorsInCode('''
var v = <String>{42};
''', [
- error(StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 17, 2),
+ error(CompileTimeErrorCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 17, 2),
]);
}
@@ -169,7 +173,7 @@
await assertErrorsInCode('''
var v = <int>[if (1 < 0) 'a'];
''', [
- error(StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 25, 3),
+ error(CompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 25, 3),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/static_access_to_instance_member_test.dart b/pkg/analyzer/test/src/diagnostics/static_access_to_instance_member_test.dart
index db3e52c..2e14499 100644
--- a/pkg/analyzer/test/src/diagnostics/static_access_to_instance_member_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/static_access_to_instance_member_test.dart
@@ -35,7 +35,7 @@
E.g;
}
''', [
- error(StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER, 51, 1),
+ error(CompileTimeErrorCode.STATIC_ACCESS_TO_INSTANCE_MEMBER, 51, 1),
]);
}
@@ -48,7 +48,7 @@
E.m();
}
''', [
- error(StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER, 47, 1),
+ error(CompileTimeErrorCode.STATIC_ACCESS_TO_INSTANCE_MEMBER, 47, 1),
]);
}
@@ -61,7 +61,7 @@
E.s = 2;
}
''', [
- error(StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER, 56, 1),
+ error(CompileTimeErrorCode.STATIC_ACCESS_TO_INSTANCE_MEMBER, 56, 1),
]);
}
@@ -73,7 +73,7 @@
main() {
A.m();
}''', [
- error(StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER, 34, 1),
+ error(CompileTimeErrorCode.STATIC_ACCESS_TO_INSTANCE_MEMBER, 34, 1),
]);
}
@@ -85,7 +85,7 @@
main() {
A.m;
}''', [
- error(StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER, 34, 1),
+ error(CompileTimeErrorCode.STATIC_ACCESS_TO_INSTANCE_MEMBER, 34, 1),
]);
}
@@ -97,7 +97,7 @@
main() {
A.f;
}''', [
- error(StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER, 34, 1),
+ error(CompileTimeErrorCode.STATIC_ACCESS_TO_INSTANCE_MEMBER, 34, 1),
]);
}
@@ -109,7 +109,7 @@
main() {
A.f;
}''', [
- error(StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER, 40, 1),
+ error(CompileTimeErrorCode.STATIC_ACCESS_TO_INSTANCE_MEMBER, 40, 1),
]);
}
@@ -121,7 +121,7 @@
main() {
A.f = 42;
}''', [
- error(StaticWarningCode.STATIC_ACCESS_TO_INSTANCE_MEMBER, 39, 1),
+ error(CompileTimeErrorCode.STATIC_ACCESS_TO_INSTANCE_MEMBER, 39, 1),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/super_in_redirecting_constructor_test.dart b/pkg/analyzer/test/src/diagnostics/super_in_redirecting_constructor_test.dart
index 1a10868..98b93d9 100644
--- a/pkg/analyzer/test/src/diagnostics/super_in_redirecting_constructor_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/super_in_redirecting_constructor_test.dart
@@ -17,26 +17,24 @@
class SuperInRedirectingConstructorTest extends DriverResolutionTest {
test_redirectionSuper() async {
await assertErrorsInCode(r'''
-class A {}
-class B {
- B() : this.name(), super();
- B.name() {}
+class A {
+ A() : this.name(), super();
+ A.name() {}
}
''', [
- error(CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR, 42, 7),
+ error(CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR, 31, 7),
]);
}
test_superRedirection() async {
await assertErrorsInCode(r'''
-class A {}
-class B {
- B() : super(), this.name();
- B.name() {}
+class A {
+ A() : super(), this.name();
+ A.name() {}
}
''', [
- error(StrongModeCode.INVALID_SUPER_INVOCATION, 29, 7),
- error(CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR, 29, 7),
+ error(CompileTimeErrorCode.INVALID_SUPER_INVOCATION, 18, 7),
+ error(CompileTimeErrorCode.SUPER_IN_REDIRECTING_CONSTRUCTOR, 18, 7),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/switch_expression_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/switch_expression_not_assignable_test.dart
index e8d5051..0e9f2b5 100644
--- a/pkg/analyzer/test/src/diagnostics/switch_expression_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/switch_expression_not_assignable_test.dart
@@ -22,7 +22,7 @@
case 'a': break;
}
}''', [
- error(StaticWarningCode.SWITCH_EXPRESSION_NOT_ASSIGNABLE, 21, 1),
+ error(CompileTimeErrorCode.SWITCH_EXPRESSION_NOT_ASSIGNABLE, 21, 1),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/test_all.dart b/pkg/analyzer/test/src/diagnostics/test_all.dart
index 170a1f0..f5f1ba7 100644
--- a/pkg/analyzer/test/src/diagnostics/test_all.dart
+++ b/pkg/analyzer/test/src/diagnostics/test_all.dart
@@ -89,6 +89,10 @@
as const_spread_expected_list_or_set;
import 'const_spread_expected_map_test.dart' as const_spread_expected_map;
import 'const_with_non_const_test.dart' as const_with_non_const;
+import 'const_with_non_type_test.dart' as const_with_non_type;
+import 'const_with_type_parameters_test.dart' as const_with_type_parameters;
+import 'const_with_undefined_constructor_test.dart'
+ as const_with_undefined_constructor;
import 'dead_code_test.dart' as dead_code;
import 'dead_null_aware_expression_test.dart' as dead_null_aware_expression;
import 'default_list_constructor_test.dart' as default_list_constructor;
@@ -185,6 +189,8 @@
as for_in_of_invalid_element_type;
import 'for_in_of_invalid_type_test.dart' as for_in_of_invalid_type;
import 'for_in_with_const_variable_test.dart' as for_in_with_const_variable;
+import 'generic_function_type_cannot_be_bound_test.dart'
+ as generic_function_type_cannot_be_bound;
import 'generic_struct_subclass_test.dart' as generic_struct_subclass;
import 'getter_not_assignable_setter_types_test.dart'
as getter_not_assignable_setter_types;
@@ -205,6 +211,7 @@
as implicit_this_reference_in_initializer;
import 'import_deferred_library_with_load_function_test.dart'
as import_deferred_library_with_load_function;
+import 'import_internal_library_test.dart' as import_internal_library;
import 'import_of_non_library_test.dart' as import_of_non_library;
import 'inconsistent_case_expression_types_test.dart'
as inconsistent_case_expression_types;
@@ -280,6 +287,7 @@
import 'invalid_required_positional_param_test.dart'
as invalid_required_positional_param;
import 'invalid_sealed_annotation_test.dart' as invalid_sealed_annotation;
+import 'invalid_super_invocation_test.dart' as invalid_super_invocation;
import 'invalid_type_argument_in_const_list_test.dart'
as invalid_type_argument_in_const_list;
import 'invalid_type_argument_in_const_map_test.dart'
@@ -524,6 +532,7 @@
as switch_expression_not_assignable;
import 'throw_of_invalid_type_test.dart' as throw_of_invalid_type;
import 'todo_test.dart' as todo_test;
+import 'top_level_cycle_test.dart' as top_level_cycle;
import 'top_level_instance_getter_test.dart' as top_level_instance_getter;
import 'top_level_instance_method_test.dart' as top_level_instance_method;
import 'type_alias_cannot_reference_itself_test.dart'
@@ -658,6 +667,9 @@
const_spread_expected_list_or_set.main();
const_spread_expected_map.main();
const_with_non_const.main();
+ const_with_non_type.main();
+ const_with_type_parameters.main();
+ const_with_undefined_constructor.main();
dead_code.main();
dead_null_aware_expression.main();
default_list_constructor.main();
@@ -722,6 +734,7 @@
for_in_of_invalid_element_type.main();
for_in_of_invalid_type.main();
for_in_with_const_variable.main();
+ generic_function_type_cannot_be_bound.main();
generic_struct_subclass.main();
getter_not_assignable_setter_types.main();
getter_not_subtype_setter_types.main();
@@ -735,6 +748,7 @@
implements_super_class.main();
implicit_this_reference_in_initializer.main();
import_deferred_library_with_load_function.main();
+ import_internal_library.main();
import_of_non_library.main();
inconsistent_case_expression_types.main();
inconsistent_inheritance_getter_and_method.main();
@@ -785,6 +799,7 @@
invalid_required_optional_positional_param.main();
invalid_required_positional_param.main();
invalid_sealed_annotation.main();
+ invalid_super_invocation.main();
invalid_type_argument_in_const_list.main();
invalid_type_argument_in_const_map.main();
invalid_type_argument_in_const_set.main();
@@ -947,6 +962,7 @@
switch_expression_not_assignable.main();
throw_of_invalid_type.main();
todo_test.main();
+ top_level_cycle.main();
top_level_instance_getter.main();
top_level_instance_method.main();
type_alias_cannot_reference_itself.main();
diff --git a/pkg/analyzer/test/src/diagnostics/top_level_cycle_test.dart b/pkg/analyzer/test/src/diagnostics/top_level_cycle_test.dart
new file mode 100644
index 0000000..e0732c8
--- /dev/null
+++ b/pkg/analyzer/test/src/diagnostics/top_level_cycle_test.dart
@@ -0,0 +1,47 @@
+// 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.
+
+import 'package:analyzer/src/error/codes.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../dart/resolution/driver_resolution.dart';
+
+main() {
+ defineReflectiveSuite(() {
+ defineReflectiveTests(TopLevelCycleTest);
+ });
+}
+
+@reflectiveTest
+class TopLevelCycleTest extends DriverResolutionTest {
+ test_cycle() async {
+ await assertErrorsInCode(r'''
+var x = y + 1;
+var y = x + 1;
+''', [
+ error(CompileTimeErrorCode.TOP_LEVEL_CYCLE, 8, 1),
+ error(CompileTimeErrorCode.TOP_LEVEL_CYCLE, 23, 1),
+ ]);
+ }
+
+ test_singleVariable() async {
+ await assertErrorsInCode(r'''
+var x = x;
+''', [
+ error(CompileTimeErrorCode.TOP_LEVEL_CYCLE, 8, 1),
+ ]);
+ }
+
+ test_singleVariable_fromList() async {
+ await assertErrorsInCode(r'''
+var elems = [
+ [
+ 1, elems, 3,
+ ],
+];
+''', [
+ error(CompileTimeErrorCode.TOP_LEVEL_CYCLE, 25, 5),
+ ]);
+ }
+}
diff --git a/pkg/analyzer/test/src/diagnostics/type_annotation_deferred_class_test.dart b/pkg/analyzer/test/src/diagnostics/type_annotation_deferred_class_test.dart
index 516f8c5..e1aebac 100644
--- a/pkg/analyzer/test/src/diagnostics/type_annotation_deferred_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_annotation_deferred_class_test.dart
@@ -25,7 +25,7 @@
f(var v) {
v as a.A;
}''', [
- error(StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS, 66, 3),
+ error(CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS, 66, 3),
]);
}
@@ -41,7 +41,7 @@
} on a.A {
}
}''', [
- error(StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS, 74, 3),
+ error(CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS, 74, 3),
]);
}
@@ -56,7 +56,7 @@
var v;
C(a.A this.v);
}''', [
- error(StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS, 71, 3),
+ error(CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS, 71, 3),
]);
}
@@ -68,7 +68,7 @@
library root;
import 'lib1.dart' deferred as a;
a.A f() { return null; }''', [
- error(StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS, 48, 3),
+ error(CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS, 48, 3),
]);
}
@@ -80,7 +80,7 @@
library root;
import 'lib1.dart' deferred as a;
f(a.A g()) {}''', [
- error(StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS, 50, 3),
+ error(CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS, 50, 3),
]);
}
@@ -95,7 +95,7 @@
bool b = v is a.A;
}''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 66, 1),
- error(StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS, 75, 3),
+ error(CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS, 75, 3),
]);
}
@@ -109,7 +109,7 @@
class C {
a.A m() { return null; }
}''', [
- error(StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS, 60, 3),
+ error(CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS, 60, 3),
]);
}
@@ -121,7 +121,7 @@
library root;
import 'lib1.dart' deferred as a;
f(a.A v) {}''', [
- error(StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS, 50, 3),
+ error(CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS, 50, 3),
]);
}
@@ -134,7 +134,7 @@
import 'lib1.dart' deferred as a;
class C<E> {}
C<a.A> c;''', [
- error(StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS, 64, 3),
+ error(CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS, 64, 3),
]);
}
@@ -147,8 +147,8 @@
import 'lib1.dart' deferred as a;
class C<E, F> {}
C<a.A, a.A> c;''', [
- error(StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS, 67, 3),
- error(StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS, 72, 3),
+ error(CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS, 67, 3),
+ error(CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS, 72, 3),
]);
}
@@ -160,7 +160,7 @@
library root;
import 'lib1.dart' deferred as a;
class C<E extends a.A> {}''', [
- error(StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS, 66, 3),
+ error(CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS, 66, 3),
]);
}
@@ -172,7 +172,7 @@
library root;
import 'lib1.dart' deferred as a;
a.A v;''', [
- error(StaticWarningCode.TYPE_ANNOTATION_DEFERRED_CLASS, 48, 3),
+ error(CompileTimeErrorCode.TYPE_ANNOTATION_DEFERRED_CLASS, 48, 3),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart b/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart
index 3d380ff..b8e6b4c 100644
--- a/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_argument_not_matching_bounds_test.dart
@@ -12,7 +12,7 @@
defineReflectiveSuite(() {
defineReflectiveTests(TypeArgumentNotMatchingBoundsTest);
defineReflectiveTests(
- TypeArgumentNotMatchingBoundsWithNnbdTest,
+ TypeArgumentNotMatchingBoundsWithNullSafetyTest,
);
});
}
@@ -348,7 +348,7 @@
factory X.name(int x, int y) = X<B>;
}
''', [
- error(StaticWarningCode.REDIRECT_TO_INVALID_RETURN_TYPE, 99, 4),
+ error(CompileTimeErrorCode.REDIRECT_TO_INVALID_RETURN_TYPE, 99, 4),
error(CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS, 101, 1),
]);
}
@@ -401,7 +401,7 @@
}
@reflectiveTest
-class TypeArgumentNotMatchingBoundsWithNnbdTest
+class TypeArgumentNotMatchingBoundsWithNullSafetyTest
extends TypeArgumentNotMatchingBoundsTest with WithNullSafetyMixin {
test_extends_optIn_fromOptOut_Null() async {
newFile('/test/lib/a.dart', content: r'''
diff --git a/pkg/analyzer/test/src/diagnostics/type_parameter_referenced_by_static_test.dart b/pkg/analyzer/test/src/diagnostics/type_parameter_referenced_by_static_test.dart
index 7678cc3..a1701e8 100644
--- a/pkg/analyzer/test/src/diagnostics/type_parameter_referenced_by_static_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_parameter_referenced_by_static_test.dart
@@ -23,7 +23,7 @@
}
}
''', [
- error(StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, 34, 1),
+ error(CompileTimeErrorCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, 34, 1),
]);
}
@@ -33,7 +33,7 @@
static T foo;
}
''', [
- error(StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, 22, 1),
+ error(CompileTimeErrorCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, 22, 1),
]);
}
@@ -43,7 +43,7 @@
static T get foo => null;
}
''', [
- error(StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, 22, 1),
+ error(CompileTimeErrorCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, 22, 1),
]);
}
@@ -56,7 +56,7 @@
}
}
''', [
- error(StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, 70, 1),
+ error(CompileTimeErrorCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, 70, 1),
]);
}
@@ -68,7 +68,7 @@
}
}
''', [
- error(StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, 49, 1),
+ error(CompileTimeErrorCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, 49, 1),
]);
}
@@ -78,7 +78,7 @@
static foo(T a) {}
}
''', [
- error(StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, 26, 1),
+ error(CompileTimeErrorCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, 26, 1),
]);
}
@@ -90,7 +90,7 @@
}
}
''', [
- error(StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, 22, 1),
+ error(CompileTimeErrorCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, 22, 1),
]);
}
@@ -100,7 +100,7 @@
static set foo(T _) {}
}
''', [
- error(StaticWarningCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, 30, 1),
+ error(CompileTimeErrorCode.TYPE_PARAMETER_REFERENCED_BY_STATIC, 30, 1),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/type_test_with_non_type_test.dart b/pkg/analyzer/test/src/diagnostics/type_test_with_non_type_test.dart
index 39f086c9..97bb854 100644
--- a/pkg/analyzer/test/src/diagnostics/type_test_with_non_type_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_test_with_non_type_test.dart
@@ -22,7 +22,7 @@
if (p is A) {
}
}''', [
- error(StaticWarningCode.TYPE_TEST_WITH_NON_TYPE, 33, 1),
+ error(CompileTimeErrorCode.TYPE_TEST_WITH_NON_TYPE, 33, 1),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/type_test_with_undefined_name_test.dart b/pkg/analyzer/test/src/diagnostics/type_test_with_undefined_name_test.dart
index b530cf4..0183ea6 100644
--- a/pkg/analyzer/test/src/diagnostics/type_test_with_undefined_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_test_with_undefined_name_test.dart
@@ -21,7 +21,7 @@
if (p is A) {
}
}''', [
- error(StaticWarningCode.TYPE_TEST_WITH_UNDEFINED_NAME, 22, 1),
+ error(CompileTimeErrorCode.TYPE_TEST_WITH_UNDEFINED_NAME, 22, 1),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_class_boolean_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_class_boolean_test.dart
index 8ee9e4b..5940836 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_class_boolean_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_class_boolean_test.dart
@@ -20,7 +20,7 @@
await assertErrorsInCode('''
f() { boolean v; }
''', [
- error(StaticWarningCode.UNDEFINED_CLASS_BOOLEAN, 6, 7),
+ error(CompileTimeErrorCode.UNDEFINED_CLASS_BOOLEAN, 6, 7),
error(HintCode.UNUSED_LOCAL_VARIABLE, 14, 1),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_class_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_class_test.dart
index 2842fc2..cc2fd47 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_class_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_class_test.dart
@@ -40,7 +40,7 @@
await assertErrorsInCode('''
f() { new C(); }
''', [
- error(StaticWarningCode.NEW_WITH_NON_TYPE, 10, 1),
+ error(CompileTimeErrorCode.NEW_WITH_NON_TYPE, 10, 1),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_identifier_await_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_identifier_await_test.dart
index 89019f9..088d627 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_identifier_await_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_identifier_await_test.dart
@@ -19,7 +19,7 @@
await assertErrorsInCode('''
void a() { await; }
''', [
- error(StaticWarningCode.UNDEFINED_IDENTIFIER_AWAIT, 11, 5),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER_AWAIT, 11, 5),
]);
}
}
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
index 24e3567..e8f620e 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
@@ -12,7 +12,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(UndefinedIdentifierTest);
- defineReflectiveTests(UndefinedIdentifierWithNnbdTest);
+ defineReflectiveTests(UndefinedIdentifierWithNullSafetyTest);
});
}
@@ -24,8 +24,8 @@
/** [m] xxx [new B.c] */
class A {
}''', [
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 5, 1),
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 17, 1),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 5, 1),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 17, 1),
]);
}
@@ -35,7 +35,7 @@
for (e in l) {
}
}''', [
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 18, 1),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 18, 1),
]);
}
@@ -54,7 +54,7 @@
}
''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 25, 1),
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 40, 1),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 40, 1),
]);
}
@@ -76,7 +76,7 @@
}
''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 17, 1),
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 31, 1),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 31, 1),
]);
}
@@ -84,7 +84,7 @@
await assertErrorsInCode('''
int a() => b;
''', [
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 11, 1),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 11, 1),
]);
}
@@ -95,7 +95,7 @@
List;
String;
}''', [
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 49, 6),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 49, 6),
]);
}
@@ -103,7 +103,7 @@
await assertErrorsInCode('''
var a = b;
''', [
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 8, 1),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 8, 1),
]);
}
@@ -111,7 +111,7 @@
await assertErrorsInCode('''
f() { C.m(); }
''', [
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 6, 1),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 6, 1),
]);
}
@@ -129,7 +129,7 @@
}
}''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 58, 1),
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 62, 4),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 62, 4),
]);
}
@@ -146,7 +146,7 @@
_foo = 42;
}
}''', [
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 54, 4),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 54, 4),
]);
}
@@ -176,5 +176,5 @@
}
@reflectiveTest
-class UndefinedIdentifierWithNnbdTest extends UndefinedIdentifierTest
+class UndefinedIdentifierWithNullSafetyTest extends UndefinedIdentifierTest
with WithNullSafetyMixin {}
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart
index 9403b54..8121ec5 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_test.dart
@@ -11,9 +11,9 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(UnnecessaryTypeCheckFalseTest);
- defineReflectiveTests(UnnecessaryTypeCheckFalseWithNnbdTest);
+ defineReflectiveTests(UnnecessaryTypeCheckFalseWithNullSafetyTest);
defineReflectiveTests(UnnecessaryTypeCheckTrueTest);
- defineReflectiveTests(UnnecessaryTypeCheckTrueWithNnbdTest);
+ defineReflectiveTests(UnnecessaryTypeCheckTrueWithNullSafetyTest);
});
}
@@ -49,7 +49,7 @@
}
@reflectiveTest
-class UnnecessaryTypeCheckFalseWithNnbdTest
+class UnnecessaryTypeCheckFalseWithNullSafetyTest
extends UnnecessaryTypeCheckFalseTest with WithNullSafetyMixin {
@override
test_type_not_object() async {
@@ -103,8 +103,8 @@
}
@reflectiveTest
-class UnnecessaryTypeCheckTrueWithNnbdTest extends UnnecessaryTypeCheckTrueTest
- with WithNullSafetyMixin {
+class UnnecessaryTypeCheckTrueWithNullSafetyTest
+ extends UnnecessaryTypeCheckTrueTest with WithNullSafetyMixin {
@override
test_type_is_object() async {
await assertNoErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/diagnostics/unused_element_test.dart b/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
index bf0abe7..b7bd46a 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
@@ -11,7 +11,7 @@
main() {
defineReflectiveSuite(() {
defineReflectiveTests(UnusedElementTest);
- defineReflectiveTests(UnusedElementWithNnbdTest);
+ defineReflectiveTests(UnusedElementWithNullSafetyTest);
});
}
@@ -1402,7 +1402,7 @@
}
@reflectiveTest
-class UnusedElementWithNnbdTest extends DriverResolutionTest
+class UnusedElementWithNullSafetyTest extends DriverResolutionTest
with WithNullSafetyMixin {
test_optionalParameter_isUsed_overrideRequiredNamed() async {
await assertNoErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/diagnostics/uri_with_interpolation_test.dart b/pkg/analyzer/test/src/diagnostics/uri_with_interpolation_test.dart
index a396f27..bf316a5 100644
--- a/pkg/analyzer/test/src/diagnostics/uri_with_interpolation_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/uri_with_interpolation_test.dart
@@ -20,7 +20,7 @@
import 'stuff_\$platform.dart';
''', [
error(CompileTimeErrorCode.URI_WITH_INTERPOLATION, 7, 22),
- error(StaticWarningCode.UNDEFINED_IDENTIFIER, 15, 8),
+ error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 15, 8),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/use_of_nullable_value_test.dart b/pkg/analyzer/test/src/diagnostics/use_of_nullable_value_test.dart
index 66842d8..096a963 100644
--- a/pkg/analyzer/test/src/diagnostics/use_of_nullable_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/use_of_nullable_value_test.dart
@@ -64,7 +64,7 @@
}
''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 27, 1),
- error(StaticWarningCode.INVALID_USE_OF_NULL_VALUE, 32, 1),
+ error(CompileTimeErrorCode.INVALID_USE_OF_NULL_VALUE, 32, 1),
]);
}
@@ -162,8 +162,8 @@
}
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 126, 4),
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 154, 4),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 126, 4),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 154, 4),
]);
}
@@ -203,8 +203,8 @@
}
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 68, 3),
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 79, 4),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 68, 3),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 79, 4),
]);
}
@@ -234,7 +234,7 @@
}
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 78, 4),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 78, 4),
]);
}
@@ -278,8 +278,8 @@
}
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 93, 3),
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 102, 4),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 93, 3),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 102, 4),
]);
}
@@ -323,8 +323,8 @@
}
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 93, 3),
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 106, 4),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 93, 3),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 106, 4),
]);
}
}
@@ -348,7 +348,7 @@
if(x && true) {}
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 22, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 22, 1),
]);
}
@@ -377,7 +377,7 @@
assert(x);
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 26, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 26, 1),
]);
}
@@ -398,7 +398,7 @@
b.a.x = 2;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 100, 3),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 100, 3),
]);
var assignment1 = findNode.assignment('b.a?.x = 1');
var assignment2 = findNode.assignment('b.a.x = 2');
@@ -441,7 +441,7 @@
b.a.y += 0;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 109, 5),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 109, 5),
]);
var assignment1 = findNode.assignment('b.a.x +=');
var assignment2 = findNode.assignment('b.a.y +=');
@@ -468,7 +468,7 @@
b.a.x += 2;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 101, 3),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 101, 3),
]);
var assignment1 = findNode.assignment('b.a?.x += 1');
var assignment2 = findNode.assignment('b.a.x += 2');
@@ -485,7 +485,7 @@
y += 0;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 31, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 31, 1),
]);
var assignment1 = findNode.assignment('x +=');
var assignment2 = findNode.assignment('y +=');
@@ -529,7 +529,7 @@
x..[0] = 1;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 24, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 24, 1),
]);
}
@@ -549,7 +549,7 @@
x..abs();
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
]);
}
@@ -569,7 +569,7 @@
x..isEven;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
]);
}
@@ -610,7 +610,7 @@
}
''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 28, 1),
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 33, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 33, 1),
]);
}
@@ -624,7 +624,7 @@
x.foo;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 58, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 58, 1),
error(StaticTypeWarningCode.UNDEFINED_GETTER, 60, 3),
]);
}
@@ -645,7 +645,7 @@
if (x) {}
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 23, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 23, 1),
]);
}
@@ -665,7 +665,7 @@
x[0];
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 19, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 19, 1),
]);
}
@@ -685,7 +685,7 @@
x();
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 23, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 23, 1),
]);
}
@@ -705,7 +705,7 @@
x();
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 25, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 25, 1),
]);
}
@@ -761,7 +761,7 @@
x.isEven;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
]);
assertSimpleIdentifier(
findNode.simple('isEven'),
@@ -786,7 +786,7 @@
(x).isEven;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 3),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 3),
]);
}
@@ -805,7 +805,7 @@
x.isEven;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 27, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 27, 1),
]);
}
@@ -815,7 +815,7 @@
x.first();
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 38, 7),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 38, 7),
]);
}
@@ -861,7 +861,7 @@
x.round();
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
]);
}
@@ -875,7 +875,7 @@
x.foo();
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 54, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 54, 1),
error(StaticTypeWarningCode.UNDEFINED_METHOD, 56, 3),
]);
}
@@ -911,7 +911,7 @@
x.call();
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 19, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 19, 1),
]);
}
@@ -934,7 +934,7 @@
}
''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 13, 1),
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
]);
}
@@ -954,7 +954,7 @@
if(!x) {}
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 23, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 23, 1),
]);
}
@@ -1011,7 +1011,7 @@
x - 3;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
]);
}
@@ -1031,7 +1031,7 @@
x + 3;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
]);
}
@@ -1054,7 +1054,7 @@
}
''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 13, 1),
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
]);
}
@@ -1072,7 +1072,7 @@
x++;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 14, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 14, 1),
]);
}
@@ -1088,7 +1088,7 @@
x++;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 77, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 77, 1),
]);
}
@@ -1111,7 +1111,7 @@
}
''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 13, 1),
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 20, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 20, 1),
]);
}
@@ -1129,7 +1129,7 @@
++x;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 16, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 16, 1),
]);
}
@@ -1152,7 +1152,7 @@
}
''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 13, 1),
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 19, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 19, 1),
]);
}
@@ -1168,7 +1168,7 @@
-x;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 73, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 73, 1),
]);
}
@@ -1188,7 +1188,7 @@
if(x || false) {}
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 22, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 22, 1),
]);
}
@@ -1206,7 +1206,7 @@
x += 1;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 14, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 14, 1),
]);
}
@@ -1222,7 +1222,7 @@
a.x; // 2
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 66, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 66, 1),
]);
var propertyAccess1 = findNode.propertyAccess('a?.x; // 1');
var propertyAccess2 = findNode.prefixed('a.x; // 2');
@@ -1253,7 +1253,7 @@
b.a.x; // 2
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 101, 3),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 101, 3),
]);
var propertyAccess1 = findNode.propertyAccess('b.a?.x; // 1');
var propertyAccess2 = findNode.propertyAccess('b.a.x; // 2');
@@ -1284,7 +1284,7 @@
b.a.x; // 2
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 101, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 101, 1),
]);
var propertyAccess1 = findNode.propertyAccess('x; // 1');
var propertyAccess2 = findNode.propertyAccess('x; // 2');
@@ -1320,7 +1320,7 @@
c.b.a.x; // 2
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 142, 5),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 142, 5),
]);
var propertyAccess1 = findNode.propertyAccess('x; // 1');
var propertyAccess2 = findNode.propertyAccess('x; // 2');
@@ -1356,7 +1356,7 @@
c.b.a.x; // 2
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 148, 3),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 148, 3),
]);
var propertyAccess1 = findNode.propertyAccess('x; // 1');
var propertyAccess2 = findNode.propertyAccess('x; // 2');
@@ -1390,7 +1390,7 @@
[...list];
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 26, 4),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 26, 4),
]);
}
@@ -1410,7 +1410,7 @@
x ? 0 : 1;
}
''', [
- error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 19, 1),
+ error(CompileTimeErrorCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 19, 1),
]);
}
diff --git a/pkg/analyzer/test/src/diagnostics/use_of_void_result_test.dart b/pkg/analyzer/test/src/diagnostics/use_of_void_result_test.dart
index 805c65a..e2fbe45 100644
--- a/pkg/analyzer/test/src/diagnostics/use_of_void_result_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/use_of_void_result_test.dart
@@ -25,7 +25,7 @@
x && true;
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 26, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 26, 1),
]);
}
@@ -36,7 +36,7 @@
true && x;
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 34, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 34, 1),
]);
}
@@ -50,7 +50,7 @@
}
}''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 38, 1),
- error(StaticWarningCode.USE_OF_VOID_RESULT, 49, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 49, 1),
]);
}
@@ -64,7 +64,7 @@
}
}''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 40, 1),
- error(StaticWarningCode.USE_OF_VOID_RESULT, 51, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 51, 1),
]);
}
@@ -113,7 +113,7 @@
E(f()).g;
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 71, 3),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 71, 3),
]);
}
@@ -139,7 +139,7 @@
}
}''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 47, 1),
- error(StaticWarningCode.USE_OF_VOID_RESULT, 51, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 51, 1),
]);
}
@@ -163,7 +163,7 @@
"$x";
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 28, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 28, 1),
]);
}
@@ -175,7 +175,7 @@
}
''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 21, 1),
- error(StaticWarningCode.USE_OF_VOID_RESULT, 27, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 27, 1),
]);
}
@@ -197,7 +197,7 @@
x || true;
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 26, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 26, 1),
]);
}
@@ -208,7 +208,7 @@
false || x;
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 35, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 35, 1),
]);
}
@@ -219,7 +219,7 @@
throw x;
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 32, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 32, 1),
]);
}
@@ -233,7 +233,7 @@
// TODO(mfairhurst) suppress UNDEFINED_OPERATOR
error(HintCode.UNUSED_LOCAL_VARIABLE, 21, 1),
error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 26, 1),
- error(StaticWarningCode.USE_OF_VOID_RESULT, 27, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 27, 1),
]);
}
@@ -244,7 +244,7 @@
list[x] = null;
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 40, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 40, 1),
]);
}
@@ -255,7 +255,7 @@
list[x];
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 40, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 40, 1),
]);
}
@@ -267,7 +267,7 @@
}
''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 34, 1),
- error(StaticWarningCode.USE_OF_VOID_RESULT, 38, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 38, 1),
]);
}
@@ -278,7 +278,7 @@
x[0];
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 27, 3),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 27, 3),
]);
}
@@ -289,7 +289,7 @@
x.foo = null;
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 28, 3),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 28, 3),
]);
}
@@ -310,7 +310,7 @@
x ? null : null;
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 26, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 26, 1),
]);
}
@@ -323,7 +323,7 @@
c ? x : null;
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 36, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 36, 1),
]);
}
@@ -336,7 +336,7 @@
c ? null : x;
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 43, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 43, 1),
]);
}
@@ -347,7 +347,7 @@
do {} while (x);
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 39, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 39, 1),
]);
}
@@ -369,7 +369,7 @@
}
''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 30, 1),
- error(StaticWarningCode.USE_OF_VOID_RESULT, 45, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 45, 1),
]);
}
@@ -381,7 +381,7 @@
}
''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 35, 1),
- error(StaticWarningCode.USE_OF_VOID_RESULT, 40, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 40, 1),
]);
}
@@ -393,7 +393,7 @@
for (x in [1, 2]) {}
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 31, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 31, 1),
]);
}
@@ -413,7 +413,7 @@
x is int;
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 26, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 26, 1),
]);
}
@@ -424,7 +424,7 @@
<dynamic>[x];
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 36, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 36, 1),
]);
}
@@ -445,7 +445,7 @@
}
''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 30, 2),
- error(StaticWarningCode.USE_OF_VOID_RESULT, 50, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 50, 1),
]);
}
@@ -468,7 +468,7 @@
}
''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 30, 2),
- error(StaticWarningCode.USE_OF_VOID_RESULT, 53, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 53, 1),
]);
}
@@ -490,7 +490,7 @@
x ?? 499;
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 26, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 26, 1),
]);
}
@@ -511,7 +511,7 @@
}
''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 21, 1),
- error(StaticWarningCode.USE_OF_VOID_RESULT, 28, 2),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 28, 2),
]);
}
@@ -522,7 +522,7 @@
switch(x) {}
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 33, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 33, 1),
]);
}
@@ -533,7 +533,7 @@
while (x) {};
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 33, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 33, 1),
]);
}
@@ -544,7 +544,7 @@
x?.foo;
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 29, 3),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 29, 3),
]);
}
@@ -555,7 +555,7 @@
x.foo;
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 28, 3),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 28, 3),
]);
}
@@ -569,7 +569,7 @@
}
''', [
error(HintCode.UNUSED_ELEMENT, 22, 8),
- error(StaticWarningCode.USE_OF_VOID_RESULT, 96, 4),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 96, 4),
]);
}
@@ -603,7 +603,7 @@
use(x);
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 54, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 54, 1),
]);
}
@@ -627,7 +627,7 @@
}
}''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 41, 1),
- error(StaticWarningCode.USE_OF_VOID_RESULT, 45, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 45, 1),
]);
}
@@ -653,9 +653,9 @@
}
}''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 43, 1),
- error(StaticWarningCode.USE_OF_VOID_RESULT, 47, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 47, 1),
error(HintCode.UNUSED_LOCAL_VARIABLE, 52, 1),
- error(StaticWarningCode.USE_OF_VOID_RESULT, 56, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 56, 1),
]);
}
@@ -668,7 +668,7 @@
}
}''', [
error(HintCode.UNUSED_LOCAL_VARIABLE, 43, 1),
- error(StaticWarningCode.USE_OF_VOID_RESULT, 47, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 47, 1),
]);
}
@@ -691,7 +691,7 @@
yield* x;
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 31, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 31, 1),
]);
}
@@ -701,7 +701,7 @@
yield* x;
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 30, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 30, 1),
]);
}
@@ -711,7 +711,7 @@
yield x;
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 30, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 30, 1),
]);
}
@@ -721,7 +721,7 @@
yield x;
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 29, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 29, 1),
]);
}
}
@@ -735,7 +735,7 @@
await x;
}
''', [
- error(StaticWarningCode.USE_OF_VOID_RESULT, 29, 1),
+ error(CompileTimeErrorCode.USE_OF_VOID_RESULT, 29, 1),
]);
}
@@ -744,7 +744,7 @@
f(void x) {
x!;
}
-''', [ExpectedError(StaticWarningCode.USE_OF_VOID_RESULT, 14, 2)]);
+''', [ExpectedError(CompileTimeErrorCode.USE_OF_VOID_RESULT, 14, 2)]);
assertType(findNode.postfix('x!'), 'void');
}
diff --git a/pkg/analyzer/test/src/fasta/recovery/partial_code/top_level_variable_test.dart b/pkg/analyzer/test/src/fasta/recovery/partial_code/top_level_variable_test.dart
index e57c5c8..2d817a4 100644
--- a/pkg/analyzer/test/src/fasta/recovery/partial_code/top_level_variable_test.dart
+++ b/pkg/analyzer/test/src/fasta/recovery/partial_code/top_level_variable_test.dart
@@ -134,7 +134,7 @@
'setter'
],
expectedErrorsInValidCode: [
- StaticWarningCode.FINAL_NOT_INITIALIZED
+ CompileTimeErrorCode.FINAL_NOT_INITIALIZED
],
),
TestDescriptor(
@@ -142,12 +142,12 @@
'final a',
[
ParserErrorCode.EXPECTED_TOKEN,
- StaticWarningCode.FINAL_NOT_INITIALIZED
+ CompileTimeErrorCode.FINAL_NOT_INITIALIZED
],
"final a;",
failing: ['functionNonVoid', 'getter', 'setter', 'mixin'],
expectedErrorsInValidCode: [
- StaticWarningCode.FINAL_NOT_INITIALIZED
+ CompileTimeErrorCode.FINAL_NOT_INITIALIZED
],
),
TestDescriptor(
@@ -155,11 +155,11 @@
'final int a',
[
ParserErrorCode.EXPECTED_TOKEN,
- StaticWarningCode.FINAL_NOT_INITIALIZED
+ CompileTimeErrorCode.FINAL_NOT_INITIALIZED
],
"final int a;",
expectedErrorsInValidCode: [
- StaticWarningCode.FINAL_NOT_INITIALIZED
+ CompileTimeErrorCode.FINAL_NOT_INITIALIZED
],
),
TestDescriptor(
diff --git a/pkg/analyzer/test/src/task/strong/checker_test.dart b/pkg/analyzer/test/src/task/strong/checker_test.dart
index 6cdf516..fe99a26 100644
--- a/pkg/analyzer/test/src/task/strong/checker_test.dart
+++ b/pkg/analyzer/test/src/task/strong/checker_test.dart
@@ -422,7 +422,7 @@
A.c2(this.x, this.y);
- A.c3(/*error:INVALID_PARAMETER_DECLARATION*/num this.x, String this.y);
+ A.c3(/*error:FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE*/num this.x, String this.y);
}
class B extends A {
diff --git a/pkg/analyzer/test/verify_diagnostics_test.dart b/pkg/analyzer/test/verify_diagnostics_test.dart
index ee476e0..745e237 100644
--- a/pkg/analyzer/test/verify_diagnostics_test.dart
+++ b/pkg/analyzer/test/verify_diagnostics_test.dart
@@ -38,6 +38,8 @@
/// ony include docs that cannot be verified because of missing support in the
/// verifier.
static const List<String> unverifiedDocs = [
+ // Needs to be able to specify two expected diagnostics.
+ 'CompileTimeErrorCode.AMBIGUOUS_IMPORT',
// Produces two diagnostics when it should only produce one.
'CompileTimeErrorCode.BUILT_IN_IDENTIFIER_AS_TYPE',
// Produces two diagnostics when it should only produce one. We could get
@@ -46,17 +48,15 @@
'CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY',
// Produces two diagnostics when it should only produce one.
'CompileTimeErrorCode.INVALID_URI',
+ // Produces two diagnostics when it should only produce one.
+ 'CompileTimeErrorCode.INVALID_USE_OF_NULL_VALUE',
// Need a way to make auxiliary files that (a) are not included in the
// generated docs or (b) can be made persistent for fixes.
'CompileTimeErrorCode.PART_OF_NON_PART',
+ // Produces the diagnostic HintCode.UNUSED_LOCAL_VARIABLE when it shouldn't.
+ 'CompileTimeErrorCode.UNDEFINED_IDENTIFIER_AWAIT',
// The code has been replaced but is not yet removed.
'HintCode.DEPRECATED_MEMBER_USE',
- // Needs to be able to specify two expected diagnostics.
- 'StaticWarningCode.AMBIGUOUS_IMPORT',
- // Produces two diagnostics when it should only produce one.
- 'StaticWarningCode.INVALID_USE_OF_NULL_VALUE',
- // Produces the diagnostic HintCode.UNUSED_LOCAL_VARIABLE when it shouldn't.
- 'StaticWarningCode.UNDEFINED_IDENTIFIER_AWAIT',
];
/// The prefix used on directive lines to specify the experiments that should
diff --git a/pkg/analyzer_plugin/lib/utilities/range_factory.dart b/pkg/analyzer_plugin/lib/utilities/range_factory.dart
index 1ef5dbc..c791818 100644
--- a/pkg/analyzer_plugin/lib/utilities/range_factory.dart
+++ b/pkg/analyzer_plugin/lib/utilities/range_factory.dart
@@ -57,14 +57,18 @@
/// trailing comma as appropriate) in the containing [list].
SourceRange nodeInList<T extends AstNode>(NodeList<T> list, T item) {
if (list.length == 1) {
+ var nextToken = item.endToken.next;
+ if (nextToken.type == TokenType.COMMA) {
+ return startEnd(item, nextToken);
+ }
return node(item);
}
final index = list.indexOf(item);
- // Remove trailing comma.
if (index == 0) {
+ // Remove the trailing comma.
return startStart(item, list[1]);
} else {
- // Remove leading comma.
+ // Remove the leading comma.
return endEnd(list[index - 1], item);
}
}
diff --git a/pkg/analyzer_plugin/test/utilities/range_factory_test.dart b/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
index 8648555..9ab8590 100644
--- a/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
+++ b/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
@@ -4,6 +4,7 @@
import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/error/error.dart';
+import 'package:analyzer/source/source_range.dart';
import 'package:analyzer/src/generated/parser.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer_plugin/utilities/range_factory.dart';
@@ -14,12 +15,22 @@
void main() {
defineReflectiveSuite(() {
- defineReflectiveTests(SourceRangesTest);
+ defineReflectiveTests(RangeFactoryTest);
});
}
@reflectiveTest
-class SourceRangesTest extends AbstractSingleUnitTest {
+class RangeFactoryTest extends AbstractSingleUnitTest {
+ /// Assuming that the test code starts with a function whose block body starts
+ /// with a method invocation, return the list of arguments in that invocation.
+ NodeList<Expression> get _argumentList {
+ var f = testUnit.declarations[0] as FunctionDeclaration;
+ var body = f.functionExpression.body as BlockFunctionBody;
+ var statement = body.block.statements[0] as ExpressionStatement;
+ var invocation = statement.expression as MethodInvocation;
+ return invocation.argumentList.arguments;
+ }
+
Future<void> test_elementName() async {
await resolveTestUnit('class ABC {}');
var element = findElement('ABC');
@@ -61,6 +72,117 @@
expect(range.node(mainName), SourceRange(0, 4));
}
+ Future<void> test_nodeInList_argumentList_first_named() async {
+ await resolveTestUnit('''
+void f() {
+ g(a: 1, b: 2);
+}
+void g({int a, int b}) {}
+''');
+ var list = _argumentList;
+ expect(range.nodeInList(list, list[0]), SourceRange(15, 6));
+ }
+
+ Future<void> test_nodeInList_argumentList_first_positional() async {
+ await resolveTestUnit('''
+void f() {
+ g(1, 2);
+}
+void g(int a, int b) {}
+''');
+ var list = _argumentList;
+ expect(range.nodeInList(list, list[0]), SourceRange(15, 3));
+ }
+
+ Future<void> test_nodeInList_argumentList_last_named() async {
+ await resolveTestUnit('''
+void f() {
+ g(a: 1, b: 2);
+}
+void g({int a, int b}) {}
+''');
+ var list = _argumentList;
+ expect(range.nodeInList(list, list[1]), SourceRange(19, 6));
+ }
+
+ Future<void> test_nodeInList_argumentList_last_positional() async {
+ await resolveTestUnit('''
+void f() {
+ g(1, 2);
+}
+void g(int a, int b) {}
+''');
+ var list = _argumentList;
+ expect(range.nodeInList(list, list[1]), SourceRange(16, 3));
+ }
+
+ Future<void> test_nodeInList_argumentList_middle_named() async {
+ await resolveTestUnit('''
+void f() {
+ g(a: 1, b: 2, c: 3);
+}
+void g({int a, int b, int c}) {}
+''');
+ var list = _argumentList;
+ expect(range.nodeInList(list, list[1]), SourceRange(19, 6));
+ }
+
+ Future<void> test_nodeInList_argumentList_middle_positional() async {
+ await resolveTestUnit('''
+void f() {
+ g(1, 2, 3);
+}
+void g(int a, int b, int c) {}
+''');
+ var list = _argumentList;
+ expect(range.nodeInList(list, list[1]), SourceRange(16, 3));
+ }
+
+ Future<void> test_nodeInList_argumentList_only_named() async {
+ await resolveTestUnit('''
+void f() {
+ g(a: 1);
+}
+void g({int a}) {}
+''');
+ var list = _argumentList;
+ expect(range.nodeInList(list, list[0]), SourceRange(15, 4));
+ }
+
+ Future<void> test_nodeInList_argumentList_only_named_trailingComma() async {
+ await resolveTestUnit('''
+void f() {
+ g(a: 1,);
+}
+void g({int a}) {}
+''');
+ var list = _argumentList;
+ expect(range.nodeInList(list, list[0]), SourceRange(15, 5));
+ }
+
+ Future<void> test_nodeInList_argumentList_only_positional() async {
+ await resolveTestUnit('''
+void f() {
+ g(1);
+}
+void g(int a) {}
+''');
+ var list = _argumentList;
+ expect(range.nodeInList(list, list[0]), SourceRange(15, 1));
+ }
+
+ Future<void>
+ test_nodeInList_argumentList_only_positional_trailingComma() async {
+ await resolveTestUnit('''
+void f() {
+ g(1,);
+}
+void g(int a) {}
+''');
+ var list = _argumentList;
+ expect(range.nodeInList(list, list[0]), SourceRange(15, 2));
+ }
+
Future<void> test_nodes() async {
await resolveTestUnit(' main() {}');
var mainFunction = testUnit.declarations[0] as FunctionDeclaration;
diff --git a/pkg/compiler/lib/src/deferred_load.dart b/pkg/compiler/lib/src/deferred_load.dart
index 6320f60..e7fa6cd 100644
--- a/pkg/compiler/lib/src/deferred_load.dart
+++ b/pkg/compiler/lib/src/deferred_load.dart
@@ -28,6 +28,7 @@
import 'universe/use.dart';
import 'universe/world_impact.dart'
show ImpactUseCase, WorldImpact, WorldImpactVisitorImpl;
+import 'util/maplet.dart';
import 'util/util.dart' show makeUnique;
import 'world.dart' show KClosedWorld;
@@ -1050,8 +1051,11 @@
b = b._previous;
}
}
- while (imports.isNotEmpty) {
- result = result._add(imports.removeLast());
+
+ // Add merged elements back in reverse order. It is tempting to pop them off
+ // with `removeLast()` but that causes measurable shrinking reallocations.
+ for (int i = imports.length - 1; i >= 0; i--) {
+ result = result._add(imports[i]);
}
return result;
}
@@ -1091,7 +1095,7 @@
}
/// Links to other import sets in the lattice by adding one import.
- final Map<_DeferredImport, ImportSet> _transitions = {};
+ final Map<_DeferredImport, ImportSet> _transitions = Maplet();
ImportSet.empty()
: _import = null,
diff --git a/pkg/compiler/lib/src/elements/types.dart b/pkg/compiler/lib/src/elements/types.dart
index 8ae41d3..00dd891 100644
--- a/pkg/compiler/lib/src/elements/types.dart
+++ b/pkg/compiler/lib/src/elements/types.dart
@@ -651,7 +651,7 @@
final List<FunctionTypeVariable> typeVariables;
- FunctionType._(
+ FunctionType._allocate(
this.returnType,
this.parameterTypes,
this.optionalParameterTypes,
@@ -659,17 +659,42 @@
this.requiredNamedParameters,
this.namedParameterTypes,
this.typeVariables) {
- assert(returnType != null, "Invalid return type in $this.");
- assert(!parameterTypes.contains(null), "Invalid parameter types in $this.");
+ assert(returnType != null, 'Invalid return type in $this.');
+ assert(!parameterTypes.contains(null), 'Invalid parameter types in $this.');
assert(!optionalParameterTypes.contains(null),
- "Invalid optional parameter types in $this.");
+ 'Invalid optional parameter types in $this.');
assert(
- !namedParameters.contains(null), "Invalid named parameters in $this.");
+ !namedParameters.contains(null), 'Invalid named parameters in $this.');
assert(!requiredNamedParameters.contains(null),
- "Invalid required named parameters in $this.");
+ 'Invalid required named parameters in $this.');
assert(!namedParameterTypes.contains(null),
- "Invalid named parameter types in $this.");
- assert(!typeVariables.contains(null), "Invalid type variables in $this.");
+ 'Invalid named parameter types in $this.');
+ assert(!typeVariables.contains(null), 'Invalid type variables in $this.');
+ }
+
+ factory FunctionType._(
+ DartType returnType,
+ List<DartType> parameterTypes,
+ List<DartType> optionalParameterTypes,
+ List<String> namedParameters,
+ Set<String> requiredNamedParameters,
+ List<DartType> namedParameterTypes,
+ List<FunctionTypeVariable> typeVariables) {
+ // Canonicalize empty collections to constants to save storage.
+ if (parameterTypes.isEmpty) parameterTypes = const [];
+ if (optionalParameterTypes.isEmpty) optionalParameterTypes = const [];
+ if (namedParameterTypes.isEmpty) namedParameterTypes = const [];
+ if (requiredNamedParameters.isEmpty) requiredNamedParameters = const {};
+ if (typeVariables.isEmpty) typeVariables = const [];
+
+ return FunctionType._allocate(
+ returnType,
+ parameterTypes,
+ optionalParameterTypes,
+ namedParameters,
+ requiredNamedParameters,
+ namedParameterTypes,
+ typeVariables);
}
factory FunctionType._readFromDataSource(
@@ -1915,6 +1940,11 @@
bool _subtypeHelper(DartType s, DartType t,
{bool allowPotentialSubtypes: false, bool assumeInstantiations: false}) {
+ assert(allowPotentialSubtypes || !assumeInstantiations);
+
+ // TODO(fishythefish): Add constraint solving for potential subtypes.
+ if (allowPotentialSubtypes) return true;
+
/// Based on
/// https://github.com/dart-lang/language/blob/master/resources/type-system/subtyping.md.
/// See also [_isSubtype] in `dart:_rti`.
@@ -1927,10 +1957,6 @@
env.isAssumed(s, t)) return true;
if (s is AnyType) return true;
- if (allowPotentialSubtypes &&
- (s is TypeVariableType || t is TypeVariableType)) return true;
- if (assumeInstantiations &&
- (s is FunctionTypeVariable || t is FunctionTypeVariable)) return true;
// Right Top:
if (isTopType(t)) return true;
@@ -2039,10 +2065,10 @@
List<FunctionTypeVariable> sTypeVariables = s.typeVariables;
List<FunctionTypeVariable> tTypeVariables = t.typeVariables;
int length = tTypeVariables.length;
- if (length == sTypeVariables.length) {
- env ??= _Assumptions();
- env.assumePairs(sTypeVariables, tTypeVariables);
- } else if (!assumeInstantiations || length > 0) return false;
+ if (length != sTypeVariables.length) return false;
+
+ env ??= _Assumptions();
+ env.assumePairs(sTypeVariables, tTypeVariables);
try {
for (int i = 0; i < length; i++) {
DartType sBound = sTypeVariables[i].bound;
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart b/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
index 8259c10..086d55aa 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types_resolution.dart
@@ -167,11 +167,15 @@
}
}
+bool _isProperty(Entity entity) =>
+ entity is MemberEntity && (entity.isField || entity.isGetter);
+
class CallablePropertyNode extends CallableNode {
final MemberEntity property;
final DartType type;
- CallablePropertyNode(this.property, this.type);
+ CallablePropertyNode(this.property, this.type)
+ : assert(_isProperty(property));
@override
Entity get entity => property;
@@ -181,8 +185,6 @@
@override
bool selectorApplies(Selector selector, BuiltWorld world) {
- if (world.annotationsData.getParameterCheckPolicy(property).isTrusted)
- return false;
if (property.memberName != selector.memberName) return false;
if (type is FunctionType &&
!selector.callStructure
@@ -305,6 +307,8 @@
Iterable<RtiNode> dependencies;
if (entity is ClassEntity) {
dependencies = _classes[entity]?.dependencies;
+ } else if (_isProperty(entity)) {
+ dependencies = _callableProperties[entity]?.dependencies;
} else {
dependencies = _methods[entity]?.dependencies;
}
@@ -1031,6 +1035,8 @@
});
} else if (entity is FunctionEntity) {
methodsNeedingTypeArguments.add(entity);
+ } else if (_isProperty(entity)) {
+ // Do nothing. We just need to visit the dependencies.
} else {
localFunctionsNeedingTypeArguments.add(entity);
}
@@ -1139,6 +1145,9 @@
localFunctionsUsingTypeVariableLiterals
.forEach(potentiallyNeedTypeArguments);
+ typeVariableTests._callableProperties.keys
+ .forEach(potentiallyNeedTypeArguments);
+
if (closedWorld.isMemberUsed(
closedWorld.commonElements.invocationTypeArgumentGetter)) {
// If `Invocation.typeArguments` is live, mark all user-defined
@@ -1317,7 +1326,7 @@
typeVariableTests
.forEachAppliedSelector((Selector selector, Set<Entity> targets) {
for (Entity target in targets) {
- if (target is MemberEntity && (target.isField || target.isGetter) ||
+ if (_isProperty(target) ||
methodsNeedingTypeArguments.contains(target) ||
localFunctionsNeedingTypeArguments.contains(target)) {
selectorsNeedingTypeArguments.add(selector);
diff --git a/pkg/compiler/lib/src/js_emitter/program_builder/collector.dart b/pkg/compiler/lib/src/js_emitter/program_builder/collector.dart
index 62a40d7..9058ec1 100644
--- a/pkg/compiler/lib/src/js_emitter/program_builder/collector.dart
+++ b/pkg/compiler/lib/src/js_emitter/program_builder/collector.dart
@@ -196,26 +196,6 @@
neededClasses.addAll(classesOnlyNeededForRti);
- // TODO(18175, floitsch): remove once issue 18175 is fixed.
- if (neededClasses.contains(_commonElements.jsIntClass)) {
- neededClasses.add(_commonElements.intClass);
- }
- if (neededClasses.contains(_commonElements.jsDoubleClass)) {
- neededClasses.add(_commonElements.doubleClass);
- }
- if (neededClasses.contains(_commonElements.jsNumberClass)) {
- neededClasses.add(_commonElements.numClass);
- }
- if (neededClasses.contains(_commonElements.jsStringClass)) {
- neededClasses.add(_commonElements.stringClass);
- }
- if (neededClasses.contains(_commonElements.jsBoolClass)) {
- neededClasses.add(_commonElements.boolClass);
- }
- if (neededClasses.contains(_commonElements.jsArrayClass)) {
- neededClasses.add(_commonElements.listClass);
- }
-
// 4. Finally, sort the classes.
List<ClassEntity> sortedClasses = _sorter.sortClasses(neededClasses);
diff --git a/pkg/compiler/lib/src/kernel/dart2js_target.dart b/pkg/compiler/lib/src/kernel/dart2js_target.dart
index 891c462..c6aa102 100644
--- a/pkg/compiler/lib/src/kernel/dart2js_target.dart
+++ b/pkg/compiler/lib/src/kernel/dart2js_target.dart
@@ -127,7 +127,7 @@
name = name.substring(4);
} else if (name.startsWith('set:')) {
kind = invocationMirrorSetterKind;
- name = name.substring(4);
+ name = name.substring(4) + '=';
} else {
kind = invocationMirrorMethodKind;
}
diff --git a/pkg/compiler/test/rti/data/async_local_typed.dart b/pkg/compiler/test/rti/data/async_local_typed.dart
index bb76c5d..3b6f939 100644
--- a/pkg/compiler/test/rti/data/async_local_typed.dart
+++ b/pkg/compiler/test/rti/data/async_local_typed.dart
@@ -13,7 +13,7 @@
// `dynamic Function(dynamic, Class<int>)`, is not a potential subtype and
// therefore doesn't need its signature.
- /*spec.needsSignature*/
+ /*needsSignature*/
local(object, Class<int> stacktrace) => null;
return local;
diff --git a/pkg/compiler/test/rti/data/closure_generic_unneeded.dart b/pkg/compiler/test/rti/data/closure_generic_unneeded.dart
index 2777f62..aa3b2cb 100644
--- a/pkg/compiler/test/rti/data/closure_generic_unneeded.dart
+++ b/pkg/compiler/test/rti/data/closure_generic_unneeded.dart
@@ -5,10 +5,11 @@
// @dart = 2.7
/*spec.class: A:direct,explicit=[A.T*],needsArgs*/
+/*prod.class: A:needsArgs*/
class A<T> {
@pragma('dart2js:noInline')
m() {
- return (T t, String s) {};
+ return /*needsSignature*/(T t, String s) {};
}
}
diff --git a/pkg/compiler/test/rti/data/closure_unneeded.dart b/pkg/compiler/test/rti/data/closure_unneeded.dart
index 2777f62..aa3b2cb 100644
--- a/pkg/compiler/test/rti/data/closure_unneeded.dart
+++ b/pkg/compiler/test/rti/data/closure_unneeded.dart
@@ -5,10 +5,11 @@
// @dart = 2.7
/*spec.class: A:direct,explicit=[A.T*],needsArgs*/
+/*prod.class: A:needsArgs*/
class A<T> {
@pragma('dart2js:noInline')
m() {
- return (T t, String s) {};
+ return /*needsSignature*/(T t, String s) {};
}
}
diff --git a/pkg/compiler/test/rti/data/generic_bounds.dart b/pkg/compiler/test/rti/data/generic_bounds.dart
index 348fd44..689e659 100644
--- a/pkg/compiler/test/rti/data/generic_bounds.dart
+++ b/pkg/compiler/test/rti/data/generic_bounds.dart
@@ -41,13 +41,13 @@
method10<T extends Class4>() => null;
main() {
- /*spec.needsArgs,selectors=[Selector(call, call, arity=0, types=1)]*/
+ /*needsArgs,needsSignature,selectors=[Selector(call, call, arity=0, types=1)]*/
method7<T extends Class1a>() => null;
- /*spec.needsArgs,selectors=[Selector(call, call, arity=0, types=1)]*/
+ /*needsArgs,needsSignature,selectors=[Selector(call, call, arity=0, types=1)]*/
method8<T extends Class2a<num>>() => null;
- method9<T>() => null;
+ /*needsArgs,needsSignature,selectors=[Selector(call, call, arity=0, types=1)]*/method9<T>() => null;
dynamic f1 = method1;
dynamic f2 = method2;
diff --git a/pkg/compiler/test/rti/data/instantiation3.dart b/pkg/compiler/test/rti/data/instantiation3.dart
index 7bdcd01..96e7c7a 100644
--- a/pkg/compiler/test/rti/data/instantiation3.dart
+++ b/pkg/compiler/test/rti/data/instantiation3.dart
@@ -15,7 +15,7 @@
F<S> c;
method() {
- return () {
+ return /*spec.needsSignature*/() {
c = f;
};
}
diff --git a/pkg/compiler/test/rti/data/instantiation4.dart b/pkg/compiler/test/rti/data/instantiation4.dart
index 2efdd47..7ec0433 100644
--- a/pkg/compiler/test/rti/data/instantiation4.dart
+++ b/pkg/compiler/test/rti/data/instantiation4.dart
@@ -15,7 +15,7 @@
F<S> c;
method() {
- return () {
+ return /*spec.needsSignature*/() {
c = f;
};
}
diff --git a/pkg/compiler/test/rti/data/local_function_map_literal.dart b/pkg/compiler/test/rti/data/local_function_map_literal.dart
index 17c5972..5069a9a 100644
--- a/pkg/compiler/test/rti/data/local_function_map_literal.dart
+++ b/pkg/compiler/test/rti/data/local_function_map_literal.dart
@@ -13,7 +13,7 @@
/*spec.member: method:implicit=[method.T],indirect,needsArgs*/
/*prod.member: method:needsArgs*/
method<T>() {
- return () => <T, int>{};
+ return /*spec.needsSignature*/() => <T, int>{};
}
@pragma('dart2js:noInline')
diff --git a/pkg/compiler/test/rti/data/local_function_signature2.dart b/pkg/compiler/test/rti/data/local_function_signature2.dart
index 4a69e2a..39ffbd7 100644
--- a/pkg/compiler/test/rti/data/local_function_signature2.dart
+++ b/pkg/compiler/test/rti/data/local_function_signature2.dart
@@ -8,17 +8,17 @@
class Class1 {
method1() {
- num local<T>(num n) => null;
+ /*needsArgs,needsSignature*/num local<T>(num n) => null;
return local;
}
method2() {
- num local<T>(int n) => null;
+ /*needsArgs,needsSignature*/num local<T>(int n) => null;
return local;
}
method3() {
- int local<T>(num n) => null;
+ /*needsArgs,needsSignature*/int local<T>(num n) => null;
return local;
}
}
@@ -43,9 +43,10 @@
}
class Class4 {
+ /*prod.member: Class4.method6:needsArgs,selectors=[Selector(call, method6, arity=0, types=1)]*/
/*spec.member: Class4.method6:direct,explicit=[method6.T*],needsArgs,selectors=[Selector(call, method6, arity=0, types=1)]*/
method6<T>() {
- num local(num n, T t) => null;
+ /*needsSignature*/num local(num n, T t) => null;
return local;
}
}
@@ -66,25 +67,26 @@
}
/*spec.member: method9:direct,explicit=[method9.T*],needsArgs*/
+/*prod.member: method9:needsArgs*/
method9<T>() {
- num local(num n, T t) => null;
+ /*needsSignature*/num local(num n, T t) => null;
return local;
}
method10() {
- /*spec.direct,explicit=[local.T*],needsArgs*/
- num local<T>(T n) => null;
+ /*spec.direct,explicit=[local.T*],needsArgs,needsSignature*/
+ /*prod.needsArgs,needsSignature*/num local<T>(T n) => null;
return local;
}
method11() {
- T local<T>(num n) => null;
+ /*needsArgs,needsSignature*/T local<T>(num n) => null;
return local;
}
method12() {
- /*spec.direct,explicit=[local.T*],needsArgs*/
- num local<T>(num n, T t) => null;
+ /*spec.direct,explicit=[local.T*],needsArgs,needsSignature*/
+ /*prod.needsArgs,needsSignature*/num local<T>(num n, T t) => null;
return local;
}
diff --git a/pkg/compiler/test/rti/data/local_function_signatures.dart b/pkg/compiler/test/rti/data/local_function_signatures.dart
index 297212f..7744aa6 100644
--- a/pkg/compiler/test/rti/data/local_function_signatures.dart
+++ b/pkg/compiler/test/rti/data/local_function_signatures.dart
@@ -14,12 +14,12 @@
}
method2() {
- num local(int n) => null;
+ /*needsSignature*/num local(int n) => null;
return local;
}
method3() {
- Object local(num n) => null;
+ /*needsSignature*/Object local(num n) => null;
return local;
}
}
@@ -44,9 +44,10 @@
}
/*spec.class: Class4:direct,explicit=[Class4.T*],needsArgs*/
+/*prod.class: Class4:needsArgs*/
class Class4<T> {
method6() {
- num local(num n, T t) => null;
+ /*needsSignature*/num local(num n, T t) => null;
return local;
}
}
diff --git a/pkg/compiler/test/rti/data/local_function_signatures_generic.dart b/pkg/compiler/test/rti/data/local_function_signatures_generic.dart
index 93b62e8..dc86b33 100644
--- a/pkg/compiler/test/rti/data/local_function_signatures_generic.dart
+++ b/pkg/compiler/test/rti/data/local_function_signatures_generic.dart
@@ -14,7 +14,7 @@
}
method2() {
- num local<T>(int n) => null;
+ /*needsArgs,needsInst=[<dynamic>,<num*>,<num*>],needsSignature*/num local<T>(int n) => null;
return local;
}
@@ -45,9 +45,10 @@
}
class Class4 {
+ /*prod.member: Class4.method6:needsArgs,selectors=[Selector(call, method6, arity=0, types=1)]*/
/*spec.member: Class4.method6:direct,explicit=[method6.T*],needsArgs,selectors=[Selector(call, method6, arity=0, types=1)]*/
method6<T>() {
- num local(num n, T t) => null;
+ /*needsSignature*/num local(num n, T t) => null;
return local;
}
}
@@ -68,8 +69,9 @@
}
/*spec.member: method9:direct,explicit=[method9.T*],needsArgs*/
+/*prod.member: method9:needsArgs*/
method9<T>() {
- num local(num n, T t) => null;
+ /*needsSignature*/num local(num n, T t) => null;
return local;
}
@@ -87,8 +89,8 @@
}
method12() {
- /*spec.direct,explicit=[local.T*],needsArgs,needsInst=[<dynamic>,<num*>,<num*>]*/
- num local<T>(num n, T t) => null;
+ /*spec.direct,explicit=[local.T*],needsArgs,needsInst=[<dynamic>,<num*>,<num*>],needsSignature*/
+ /*prod.needsArgs,needsInst=[<dynamic>,<num*>,<num*>],needsSignature*/num local<T>(num n, T t) => null;
return local;
}
diff --git a/pkg/compiler/test/rti/data/subtype_named_args.dart b/pkg/compiler/test/rti/data/subtype_named_args.dart
index b795bea..d1e2eb7 100644
--- a/pkg/compiler/test/rti/data/subtype_named_args.dart
+++ b/pkg/compiler/test/rti/data/subtype_named_args.dart
@@ -53,19 +53,19 @@
main() {
Expect.isTrue(
- /*spec.needsSignature*/
+ /*needsSignature*/
({D a, B b, C c, A d}) {} is classesFunc);
Expect.isTrue(
/*needsSignature*/
({A a, A b, A c, A d}) {} is classesFunc);
Expect.isTrue(
- /*spec.needsSignature*/
+ /*needsSignature*/
({D a, A1 b, A1 c, A1 d}) {} is classesFunc);
Expect.isTrue(
- /*spec.needsSignature*/
+ /*needsSignature*/
({D a, A2 b, A2 c, A2 d}) {} is classesFunc);
Expect.isTrue(
- /*spec.needsSignature*/
+ /*needsSignature*/
({D a, D b, D c, D d}) {} is classesFunc);
Expect.isTrue(
/*needsSignature*/
@@ -79,7 +79,7 @@
({Map<num, num> m, List<List<A1>> l, G<A, A1, A1, A1> g}) {}
is genericsFunc);
Expect.isTrue(
- /*spec.needsSignature*/
+ /*needsSignature*/
({Map<int, int> m, List<List<D>> l, G<D, D, D, D> g}) {} is genericsFunc);
Expect.isTrue(
/*needsSignature*/
@@ -89,13 +89,13 @@
({Object m, Object l, Object g}) {} is genericsFunc);
Expect.isTrue(
- /*spec.needsSignature*/
+ /*needsSignature*/
({A x, G y, mixFunc z, var v}) {} is dynamicFunc);
Expect.isTrue(
- /*spec.needsSignature*/
+ /*needsSignature*/
({int x, bool y, List<Map> z, classesFunc v}) {} is dynamicFunc);
- Expect.isTrue((
+ Expect.isTrue(/*needsSignature*/(
{okWithClassesFunc_1 f1,
okWithGenericsFunc_1 f2,
okWithDynamicFunc_1 f3}) {} is funcFunc);
diff --git a/pkg/compiler/test/rti/data/subtype_named_args1.dart b/pkg/compiler/test/rti/data/subtype_named_args1.dart
index e20cf27..8b797f3 100644
--- a/pkg/compiler/test/rti/data/subtype_named_args1.dart
+++ b/pkg/compiler/test/rti/data/subtype_named_args1.dart
@@ -40,16 +40,16 @@
Expect.isTrue(/*needsSignature*/ ({A a}) {} is t1);
Expect.isTrue(/*needsSignature*/ ({B a}) {} is t1);
Expect.isTrue(
- /*spec.needsSignature*/ ({C a}) {} is t1);
+ /*needsSignature*/ ({C a}) {} is t1);
Expect.isTrue(
- /*spec.needsSignature*/ ({D a}) {} is t1);
+ /*needsSignature*/ ({D a}) {} is t1);
Expect.isTrue(/*needsSignature*/ ({Object a}) {} is t1);
Expect.isTrue(/*needsSignature*/ ({var a}) {} is t1);
Expect.isTrue(/*needsSignature*/ ({A c}) {} is t2);
Expect.isTrue(/*needsSignature*/ ({B c}) {} is t2);
Expect.isTrue(/*needsSignature*/ ({C c}) {} is t2);
- Expect.isTrue(({D c}) {} is t2);
+ Expect.isTrue(/*needsSignature*/({D c}) {} is t2);
Expect.isTrue(/*needsSignature*/ ({Object c}) {} is t2);
Expect.isTrue(/*needsSignature*/ ({var c}) {} is t2);
@@ -58,34 +58,34 @@
Expect.isTrue(/*needsSignature*/ ({Object i}) {} is t3);
Expect.isTrue(/*needsSignature*/ ({var i}) {} is t3);
- Expect.isTrue(({A v}) {} is t4);
- Expect.isTrue(({B v}) {} is t4);
- Expect.isTrue(({C v}) {} is t4);
- Expect.isTrue(({D v}) {} is t4);
+ Expect.isTrue(/*needsSignature*/({A v}) {} is t4);
+ Expect.isTrue(/*needsSignature*/({B v}) {} is t4);
+ Expect.isTrue(/*needsSignature*/({C v}) {} is t4);
+ Expect.isTrue(/*needsSignature*/({D v}) {} is t4);
Expect.isTrue(/*needsSignature*/ ({Object v}) {} is t4);
Expect.isTrue(/*needsSignature*/ ({var v}) {} is t4);
- Expect.isTrue(({num v}) {} is t4);
- Expect.isTrue(({int v}) {} is t4);
- Expect.isTrue(({Map v}) {} is t4);
- Expect.isTrue(({Map<List<Map<List, List<int>>>, List> v}) {} is t4);
- Expect.isTrue(({List v}) {} is t4);
- Expect.isTrue(({t8 v}) {} is t4);
- Expect.isTrue(({t7 v}) {} is t4);
+ Expect.isTrue(/*needsSignature*/({num v}) {} is t4);
+ Expect.isTrue(/*needsSignature*/({int v}) {} is t4);
+ Expect.isTrue(/*needsSignature*/({Map v}) {} is t4);
+ Expect.isTrue(/*needsSignature*/({Map<List<Map<List, List<int>>>, List> v}) {} is t4);
+ Expect.isTrue(/*needsSignature*/({List v}) {} is t4);
+ Expect.isTrue(/*needsSignature*/({t8 v}) {} is t4);
+ Expect.isTrue(/*needsSignature*/({t7 v}) {} is t4);
Expect.isTrue(/*needsSignature*/ ({Map m}) {} is t5);
- Expect.isTrue(({Map<List, t8> m}) {} is t5);
+ Expect.isTrue(/*needsSignature*/({Map<List, t8> m}) {} is t5);
Expect.isTrue(/*needsSignature*/ ({Object m}) {} is t5);
Expect.isTrue(/*needsSignature*/ ({var m}) {} is t5);
- Expect.isTrue(({Map<List, List> m}) {} is t5);
- Expect.isTrue(({Map<int, t8> m}) {} is t5);
+ Expect.isTrue(/*needsSignature*/({Map<List, List> m}) {} is t5);
+ Expect.isTrue(/*needsSignature*/({Map<int, t8> m}) {} is t5);
Expect.isTrue(/*needsSignature*/ ({Map<num, num> m}) {} is t6);
- Expect.isTrue(({Map<int, int> m}) {} is t6);
+ Expect.isTrue(/*needsSignature*/({Map<int, int> m}) {} is t6);
Expect.isTrue(/*needsSignature*/ ({Map m}) {} is t6);
Expect.isTrue(/*needsSignature*/ ({Object m}) {} is t6);
Expect.isTrue(/*needsSignature*/ ({var m}) {} is t6);
- Expect.isTrue(({okWithT1_1 f}) {} is t7);
+ Expect.isTrue(/*needsSignature*/({okWithT1_1 f}) {} is t7);
Expect.isTrue(/*needsSignature*/ ({okWithT1_2 f}) {} is t7);
Expect.isTrue(/*needsSignature*/ ({okWithT1_3 f}) {} is t7);
Expect.isTrue(/*needsSignature*/ ({okWithT1_4 f}) {} is t7);
@@ -93,14 +93,14 @@
Expect.isTrue(/*needsSignature*/ ({A a}) {} is t8);
Expect.isTrue(/*needsSignature*/ ({B a}) {} is t8);
Expect.isTrue(
- /*spec.needsSignature*/ ({C a}) {} is t8);
+ /*needsSignature*/ ({C a}) {} is t8);
Expect.isTrue(
- /*spec.needsSignature*/ ({D a}) {} is t8);
+ /*needsSignature*/ ({D a}) {} is t8);
Expect.isTrue(/*needsSignature*/ ({Object a}) {} is t8);
Expect.isTrue(/*needsSignature*/ ({var a}) {} is t8);
- Expect.isTrue(({num a}) {} is t8);
- Expect.isTrue(({int a}) {} is t8);
- Expect.isTrue(({Map a}) {} is t8);
- Expect.isTrue(({Map<List<Map<List, List<int>>>, List> a}) {} is t8);
- Expect.isTrue(({List a}) {} is t8);
+ Expect.isTrue(/*needsSignature*/({num a}) {} is t8);
+ Expect.isTrue(/*needsSignature*/({int a}) {} is t8);
+ Expect.isTrue(/*needsSignature*/({Map a}) {} is t8);
+ Expect.isTrue(/*needsSignature*/({Map<List<Map<List, List<int>>>, List> a}) {} is t8);
+ Expect.isTrue(/*needsSignature*/({List a}) {} is t8);
}
diff --git a/pkg/compiler/test/rti/emission/closure_function_type.dart b/pkg/compiler/test/rti/emission/closure_function_type.dart
index b40047e..98b9a7f 100644
--- a/pkg/compiler/test/rti/emission/closure_function_type.dart
+++ b/pkg/compiler/test/rti/emission/closure_function_type.dart
@@ -11,6 +11,6 @@
test(/*checks=[$signature],instance*/ () {});
test(
- /*checks=[],instance*/
+ /*checks=[$signature],instance*/
(a) {});
}
diff --git a/pkg/compiler/test/rti/emission/closure_signature_unneeded.dart b/pkg/compiler/test/rti/emission/closure_signature_unneeded.dart
index 15549d7..ca88622 100644
--- a/pkg/compiler/test/rti/emission/closure_signature_unneeded.dart
+++ b/pkg/compiler/test/rti/emission/closure_signature_unneeded.dart
@@ -12,7 +12,7 @@
// potential subtype of the checked function types.
return
- /*checks=[],instance*/
+ /*checks=[$signature],instance*/
(T t, String s) {};
}
}
diff --git a/pkg/compiler/test/rti/emission/local_function_map_literal.dart b/pkg/compiler/test/rti/emission/local_function_map_literal.dart
index 03ec2a1..0468a3e 100644
--- a/pkg/compiler/test/rti/emission/local_function_map_literal.dart
+++ b/pkg/compiler/test/rti/emission/local_function_map_literal.dart
@@ -11,7 +11,8 @@
@pragma('dart2js:noInline')
method<T>() {
return
- /*checks=[],instance*/
+ /*spec.checks=[$signature],instance*/
+ /*prod.checks=[],instance*/
() => <T, int>{};
}
diff --git a/pkg/compiler/test/rti/emission/subtype_named_args.dart b/pkg/compiler/test/rti/emission/subtype_named_args.dart
index f21234d..5ae613b 100644
--- a/pkg/compiler/test/rti/emission/subtype_named_args.dart
+++ b/pkg/compiler/test/rti/emission/subtype_named_args.dart
@@ -55,23 +55,19 @@
main() {
Expect.isTrue(
- /*spec.checks=[$signature],instance*/
- /*prod.checks=[],instance*/
+ /*checks=[$signature],instance*/
({D a, B b, C c, A d}) {} is classesFunc);
Expect.isTrue(
/*checks=[$signature],instance*/
({A a, A b, A c, A d}) {} is classesFunc);
Expect.isTrue(
- /*spec.checks=[$signature],instance*/
- /*prod.checks=[],instance*/
+ /*checks=[$signature],instance*/
({D a, A1 b, A1 c, A1 d}) {} is classesFunc);
Expect.isTrue(
- /*spec.checks=[$signature],instance*/
- /*prod.checks=[],instance*/
+ /*checks=[$signature],instance*/
({D a, A2 b, A2 c, A2 d}) {} is classesFunc);
Expect.isTrue(
- /*spec.checks=[$signature],instance*/
- /*prod.checks=[],instance*/
+ /*checks=[$signature],instance*/
({D a, D b, D c, D d}) {} is classesFunc);
Expect.isTrue(
/*checks=[$signature],instance*/
@@ -85,8 +81,7 @@
({Map<num, num> m, List<List<A1>> l, G<A, A1, A1, A1> g}) {}
is genericsFunc);
Expect.isTrue(
- /*spec.checks=[$signature],instance*/
- /*prod.checks=[],instance*/
+ /*checks=[$signature],instance*/
({Map<int, int> m, List<List<D>> l, G<D, D, D, D> g}) {} is genericsFunc);
Expect.isTrue(
/*checks=[$signature],instance*/
@@ -96,16 +91,14 @@
({Object m, Object l, Object g}) {} is genericsFunc);
Expect.isTrue(
- /*spec.checks=[$signature],instance*/
- /*prod.checks=[],instance*/
+ /*checks=[$signature],instance*/
({A x, G y, mixFunc z, var v}) {} is dynamicFunc);
Expect.isTrue(
- /*spec.checks=[$signature],instance*/
- /*prod.checks=[],instance*/
+ /*checks=[$signature],instance*/
({int x, bool y, List<Map> z, classesFunc v}) {} is dynamicFunc);
Expect.isTrue(
- /*checks=[],instance*/
+ /*checks=[$signature],instance*/
(
{okWithClassesFunc_1 f1,
okWithGenericsFunc_1 f2,
diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
index c7dadc0..49d7a0b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -42,6 +42,7 @@
messageConstEvalFailedAssertion,
messageConstEvalNotListOrSetInSpread,
messageConstEvalNotMapInSpread,
+ messageConstEvalNonNull,
messageConstEvalNullValue,
messageConstEvalStartingPoint,
messageConstEvalUnevaluated,
@@ -2239,6 +2240,18 @@
}
@override
+ Constant visitNullCheck(NullCheck node) {
+ final Constant constant = _evaluateSubexpression(node.operand);
+ if (constant is NullConstant) {
+ return report(node, messageConstEvalNonNull);
+ }
+ if (shouldBeUnevaluated) {
+ return unevaluated(node, new NullCheck(extract(constant)));
+ }
+ return constant;
+ }
+
+ @override
Constant visitSymbolLiteral(SymbolLiteral node) {
final Reference libraryReference =
node.value.startsWith('_') ? libraryOf(node).reference : null;
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index a002f41..e8b5454 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -122,6 +122,8 @@
ConstEvalNonConstantVariableGet/example: Fail
ConstEvalNotListOrSetInSpread/example: Fail
ConstEvalNotMapInSpread/example: Fail
+ConstEvalNonNull/analyzerCode: Fail
+ConstEvalNonNull/example: Fail
ConstEvalNullValue/example: Fail
ConstEvalStartingPoint/analyzerCode: Fail # This is just used for displaying the starting point.
ConstEvalStartingPoint/example: Fail # This is just used for displaying the starting point.
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 7dc026c..3966bbe 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -132,6 +132,9 @@
ConstEvalTruncateError:
template: "Binary operator '#string ~/ #string2' results is Infinity or NaN."
+ConstEvalNonNull:
+ template: "Constant expression must be non-null."
+
ConstEvalInvalidMethodInvocation:
template: "The method '#string' can't be invoked on '#constant' in a constant expression."
analyzerCode: UNDEFINED_OPERATOR
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transform_nnbd.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transform_nnbd.yaml
index 160f076..ccf7702 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transform_nnbd.yaml
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transform_nnbd.yaml
@@ -64,8 +64,7 @@
{
"name": "flutter",
"rootUri": "../flutter",
- "packageUri": "lib/",
- "languageVersion": "2.9"
+ "packageUri": "lib/"
}
]
}
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transform_nnbd.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transform_nnbd.yaml.world.2.expect
index 2019f1f..c2ce924 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transform_nnbd.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transform_nnbd.yaml.world.2.expect
@@ -47,8 +47,14 @@
import "org-dartlang-test:///foo.dart";
- static field foo::Foo foo = invalid-expression "Constant evaluation has no support for NullCheck!";
+ static field foo::Foo foo = #C7;
}
constants {
#C1 = null
+ #C2 = "org-dartlang-test:///main.dart"
+ #C3 = 3.0
+ #C4 = 17.0
+ #C5 = <wid::_Location*>[]
+ #C6 = wid::_Location {file:#C2, line:#C3, column:#C4, name:#C1, parameterLocations:#C5}
+ #C7 = foo::Foo {_location:#C6}
}
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transformer_non_const.yaml b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transformer_non_const.yaml
index 99f0f81..4f4309f 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transformer_non_const.yaml
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/flutter_widget_transformer_non_const.yaml
@@ -59,8 +59,7 @@
{
"name": "flutter",
"rootUri": "../flutter",
- "packageUri": "lib/",
- "languageVersion": "2.9"
+ "packageUri": "lib/"
}
]
}
diff --git a/pkg/front_end/testcases/nnbd/constant_null_check.dart b/pkg/front_end/testcases/nnbd/constant_null_check.dart
new file mode 100644
index 0000000..3ebe34f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/constant_null_check.dart
@@ -0,0 +1,27 @@
+// 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.
+
+const int? a = 42;
+const int b = a!;
+
+const int? c = null;
+const int? d = c!;
+
+class Class {
+ final int y;
+ const Class(int? x) : y = x!;
+}
+
+const Class e = const Class(a);
+const Class f = const Class(c);
+
+main() {
+ expect(42, a);
+ expect(42, b);
+ expect(42, e.y);
+}
+
+expect(expected, actual) {
+ if (expected != actual) throw 'Expected $expected, actual $actual';
+}
diff --git a/pkg/front_end/testcases/nnbd/constant_null_check.dart.outline.expect b/pkg/front_end/testcases/nnbd/constant_null_check.dart.outline.expect
new file mode 100644
index 0000000..dc7afba
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/constant_null_check.dart.outline.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object /*hasConstConstructor*/ {
+ final field core::int y;
+ const constructor •(core::int? x) → self::Class
+ : self::Class::y = x!, super core::Object::•()
+ ;
+}
+static const field core::int? a = 42;
+static const field core::int b = self::a!;
+static const field core::int? c = null;
+static const field core::int? d = self::c!;
+static const field self::Class e = const self::Class::•(self::a);
+static const field self::Class f = const self::Class::•(self::c);
+static method main() → dynamic
+ ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+ ;
diff --git a/pkg/front_end/testcases/nnbd/constant_null_check.dart.strong.expect b/pkg/front_end/testcases/nnbd/constant_null_check.dart.strong.expect
new file mode 100644
index 0000000..ca8683f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/constant_null_check.dart.strong.expect
@@ -0,0 +1,54 @@
+//
+// Problems in component:
+//
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:9:17: Error: Constant evaluation error:
+// const int? d = c!;
+// ^
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:9:17: Context: Constant expression must be non-null.
+// const int? d = c!;
+// ^
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:9:12: Context: While analyzing:
+// const int? d = c!;
+// ^
+//
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:17:23: Error: Constant evaluation error:
+// const Class f = const Class(c);
+// ^
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:13:30: Context: Constant expression must be non-null.
+// const Class(int? x) : y = x!;
+// ^
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:17:13: Context: While analyzing:
+// const Class f = const Class(c);
+// ^
+//
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object /*hasConstConstructor*/ {
+ final field core::int y;
+ const constructor •(core::int? x) → self::Class
+ : self::Class::y = x!, super core::Object::•()
+ ;
+}
+static const field core::int? a = #C1;
+static const field core::int b = #C1;
+static const field core::int? c = #C2;
+static const field core::int? d = invalid-expression "Constant expression must be non-null.";
+static const field self::Class e = #C3;
+static const field self::Class f = invalid-expression "Constant expression must be non-null.";
+static method main() → dynamic {
+ self::expect(42, #C1);
+ self::expect(42, #C1);
+ self::expect(42, (#C3).{self::Class::y});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!expected.{core::Object::==}(actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+
+constants {
+ #C1 = 42
+ #C2 = null
+ #C3 = self::Class {y:#C1}
+}
diff --git a/pkg/front_end/testcases/nnbd/constant_null_check.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/constant_null_check.dart.strong.transformed.expect
new file mode 100644
index 0000000..ca8683f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/constant_null_check.dart.strong.transformed.expect
@@ -0,0 +1,54 @@
+//
+// Problems in component:
+//
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:9:17: Error: Constant evaluation error:
+// const int? d = c!;
+// ^
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:9:17: Context: Constant expression must be non-null.
+// const int? d = c!;
+// ^
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:9:12: Context: While analyzing:
+// const int? d = c!;
+// ^
+//
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:17:23: Error: Constant evaluation error:
+// const Class f = const Class(c);
+// ^
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:13:30: Context: Constant expression must be non-null.
+// const Class(int? x) : y = x!;
+// ^
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:17:13: Context: While analyzing:
+// const Class f = const Class(c);
+// ^
+//
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object /*hasConstConstructor*/ {
+ final field core::int y;
+ const constructor •(core::int? x) → self::Class
+ : self::Class::y = x!, super core::Object::•()
+ ;
+}
+static const field core::int? a = #C1;
+static const field core::int b = #C1;
+static const field core::int? c = #C2;
+static const field core::int? d = invalid-expression "Constant expression must be non-null.";
+static const field self::Class e = #C3;
+static const field self::Class f = invalid-expression "Constant expression must be non-null.";
+static method main() → dynamic {
+ self::expect(42, #C1);
+ self::expect(42, #C1);
+ self::expect(42, (#C3).{self::Class::y});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!expected.{core::Object::==}(actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+
+constants {
+ #C1 = 42
+ #C2 = null
+ #C3 = self::Class {y:#C1}
+}
diff --git a/pkg/front_end/testcases/nnbd/constant_null_check.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/constant_null_check.dart.textual_outline.expect
new file mode 100644
index 0000000..a5a28c9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/constant_null_check.dart.textual_outline.expect
@@ -0,0 +1,14 @@
+const int? a = 42;
+const int b = a!;
+const int? c = null;
+const int? d = c!;
+
+class Class {
+ final int y;
+ const Class(int? x) : y = x!;
+}
+
+const Class e = const Class(a);
+const Class f = const Class(c);
+main() {}
+expect(expected, actual) {}
diff --git a/pkg/front_end/testcases/nnbd/constant_null_check.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd/constant_null_check.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..c4a2339
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/constant_null_check.dart.textual_outline_modelled.expect
@@ -0,0 +1,13 @@
+class Class {
+ const Class(int? x) : y = x!;
+ final int y;
+}
+
+const Class e = const Class(a);
+const Class f = const Class(c);
+const int b = a!;
+const int? a = 42;
+const int? c = null;
+const int? d = c!;
+expect(expected, actual) {}
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/constant_null_check.dart.weak.expect b/pkg/front_end/testcases/nnbd/constant_null_check.dart.weak.expect
new file mode 100644
index 0000000..ca8683f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/constant_null_check.dart.weak.expect
@@ -0,0 +1,54 @@
+//
+// Problems in component:
+//
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:9:17: Error: Constant evaluation error:
+// const int? d = c!;
+// ^
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:9:17: Context: Constant expression must be non-null.
+// const int? d = c!;
+// ^
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:9:12: Context: While analyzing:
+// const int? d = c!;
+// ^
+//
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:17:23: Error: Constant evaluation error:
+// const Class f = const Class(c);
+// ^
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:13:30: Context: Constant expression must be non-null.
+// const Class(int? x) : y = x!;
+// ^
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:17:13: Context: While analyzing:
+// const Class f = const Class(c);
+// ^
+//
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object /*hasConstConstructor*/ {
+ final field core::int y;
+ const constructor •(core::int? x) → self::Class
+ : self::Class::y = x!, super core::Object::•()
+ ;
+}
+static const field core::int? a = #C1;
+static const field core::int b = #C1;
+static const field core::int? c = #C2;
+static const field core::int? d = invalid-expression "Constant expression must be non-null.";
+static const field self::Class e = #C3;
+static const field self::Class f = invalid-expression "Constant expression must be non-null.";
+static method main() → dynamic {
+ self::expect(42, #C1);
+ self::expect(42, #C1);
+ self::expect(42, (#C3).{self::Class::y});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!expected.{core::Object::==}(actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+
+constants {
+ #C1 = 42
+ #C2 = null
+ #C3 = self::Class {y:#C1}
+}
diff --git a/pkg/front_end/testcases/nnbd/constant_null_check.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/constant_null_check.dart.weak.transformed.expect
new file mode 100644
index 0000000..ca8683f
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/constant_null_check.dart.weak.transformed.expect
@@ -0,0 +1,54 @@
+//
+// Problems in component:
+//
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:9:17: Error: Constant evaluation error:
+// const int? d = c!;
+// ^
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:9:17: Context: Constant expression must be non-null.
+// const int? d = c!;
+// ^
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:9:12: Context: While analyzing:
+// const int? d = c!;
+// ^
+//
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:17:23: Error: Constant evaluation error:
+// const Class f = const Class(c);
+// ^
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:13:30: Context: Constant expression must be non-null.
+// const Class(int? x) : y = x!;
+// ^
+// pkg/front_end/testcases/nnbd/constant_null_check.dart:17:13: Context: While analyzing:
+// const Class f = const Class(c);
+// ^
+//
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object /*hasConstConstructor*/ {
+ final field core::int y;
+ const constructor •(core::int? x) → self::Class
+ : self::Class::y = x!, super core::Object::•()
+ ;
+}
+static const field core::int? a = #C1;
+static const field core::int b = #C1;
+static const field core::int? c = #C2;
+static const field core::int? d = invalid-expression "Constant expression must be non-null.";
+static const field self::Class e = #C3;
+static const field self::Class f = invalid-expression "Constant expression must be non-null.";
+static method main() → dynamic {
+ self::expect(42, #C1);
+ self::expect(42, #C1);
+ self::expect(42, (#C3).{self::Class::y});
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+ if(!expected.{core::Object::==}(actual))
+ throw "Expected ${expected}, actual ${actual}";
+}
+
+constants {
+ #C1 = 42
+ #C2 = null
+ #C3 = self::Class {y:#C1}
+}
diff --git a/pkg/front_end/tool/_fasta/command_line.dart b/pkg/front_end/tool/_fasta/command_line.dart
index 950515e..ca1e771 100644
--- a/pkg/front_end/tool/_fasta/command_line.dart
+++ b/pkg/front_end/tool/_fasta/command_line.dart
@@ -502,7 +502,6 @@
// treat this as a crash which is signalled by exiting with 255.
exit(255);
}
- return failingValue;
}
abstract class ValueSpecification {
diff --git a/pkg/kernel/binary.md b/pkg/kernel/binary.md
index 72e2057..0ecae65 100644
--- a/pkg/kernel/binary.md
+++ b/pkg/kernel/binary.md
@@ -143,7 +143,7 @@
type ComponentFile {
UInt32 magic = 0x90ABCDEF;
- UInt32 formatVersion = 43;
+ UInt32 formatVersion = 44;
Byte[10] shortSdkHash;
List<String> problemsAsJson; // Described in problems.md.
Library[] libraries;
@@ -320,7 +320,7 @@
FileOffset fileOffset; // Offset of the name of the class.
FileOffset fileEndOffset;
Byte flags (levelBit0, levelBit1, isAbstract, isEnum, isAnonymousMixin,
- isEliminatedMixin, isMixinDeclaration,
+ isEliminatedMixin, isMixinDeclaration,
hasConstConstructor); // Where level is index into ClassLevel
StringReference name;
List<Expression> annotations;
diff --git a/pkg/kernel/lib/binary/tag.dart b/pkg/kernel/lib/binary/tag.dart
index 79cea32..f23d4ca 100644
--- a/pkg/kernel/lib/binary/tag.dart
+++ b/pkg/kernel/lib/binary/tag.dart
@@ -149,7 +149,7 @@
/// Internal version of kernel binary format.
/// Bump it when making incompatible changes in kernel binaries.
/// Keep in sync with runtime/vm/kernel_binary.h, pkg/kernel/binary.md.
- static const int BinaryFormatVersion = 43;
+ static const int BinaryFormatVersion = 44;
}
abstract class ConstantTag {
diff --git a/pkg/kernel/lib/src/tool/command_line_util.dart b/pkg/kernel/lib/src/tool/command_line_util.dart
index 937093e..d6f3f61 100644
--- a/pkg/kernel/lib/src/tool/command_line_util.dart
+++ b/pkg/kernel/lib/src/tool/command_line_util.dart
@@ -40,6 +40,5 @@
print(e);
exit(1);
}
- return null;
}
}
diff --git a/pkg/language_versioning_2.7_test/pubspec.yaml b/pkg/language_versioning_2.7_test/pubspec.yaml
new file mode 100644
index 0000000..3245f03
--- /dev/null
+++ b/pkg/language_versioning_2.7_test/pubspec.yaml
@@ -0,0 +1,14 @@
+name: language_versioning_2.7_test
+version: 1.0.0
+
+description: >
+ Tests of language versioning.
+ Stored as a package in order to have its own package configuration
+ and default language version
+
+# This package is not intended for consumption on pub.dev. DO NOT publish.
+publish_to: none
+
+environment:
+ sdk: '>=2.7.0 <3.0.0'
+
diff --git a/pkg/language_versioning_2.7_test/test/lib_ex2.7_test.dart b/pkg/language_versioning_2.7_test/test/lib_ex2.7_test.dart
new file mode 100644
index 0000000..e0756e3
--- /dev/null
+++ b/pkg/language_versioning_2.7_test/test/lib_ex2.7_test.dart
@@ -0,0 +1,26 @@
+// 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.
+
+// Explicit version.
+// @dart=2.7
+
+part "src/part_of_ex2.7_v_ex2.7.dart";
+
+// Specification requires the part file to have
+// the same explicit langauge version marker
+// as the including library,
+// not just the same languge version.
+part "src/part_of_ex2.7_v_im2.7.dart";
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INCONSISTENT_LANGUAGE_VERSION_OVERRIDE
+// [cfe] The language version override has to be the same in the library and its part(s).
+
+part "src/part_of_ex2.7_v_ex2.8.dart";
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INCONSISTENT_LANGUAGE_VERSION_OVERRIDE
+// [cfe] The language version override has to be the same in the library and its part(s).
+
+main() {
+ print(x27x27);
+}
diff --git a/pkg/language_versioning_2.7_test/test/lib_ex2.8_test.dart b/pkg/language_versioning_2.7_test/test/lib_ex2.8_test.dart
new file mode 100644
index 0000000..52c191d
--- /dev/null
+++ b/pkg/language_versioning_2.7_test/test/lib_ex2.8_test.dart
@@ -0,0 +1,22 @@
+// 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.
+
+// Explicit version.
+// @dart=2.8
+
+part "src/part_of_ex2.8_v_ex2.8.dart";
+
+part "src/part_of_ex2.8_v_ex2.7.dart";
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INCONSISTENT_LANGUAGE_VERSION_OVERRIDE
+// [cfe] The language version override has to be the same in the library and its part(s).
+
+part "src/part_of_ex2.8_v_im2.7.dart";
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INCONSISTENT_LANGUAGE_VERSION_OVERRIDE
+// [cfe] The language version override has to be the same in the library and its part(s).
+
+void main() {
+ print(x28x28);
+}
diff --git a/pkg/language_versioning_2.7_test/test/lib_im2.7_test.dart b/pkg/language_versioning_2.7_test/test/lib_im2.7_test.dart
new file mode 100644
index 0000000..44d541e
--- /dev/null
+++ b/pkg/language_versioning_2.7_test/test/lib_im2.7_test.dart
@@ -0,0 +1,25 @@
+// 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.
+
+// Implicit language version 2.7 from configuration.
+
+part "src/part_of_im2.7_v_im2.7.dart";
+
+// Specification requires the part fsrc/ile to have
+// the same explicit langauge version marker
+// as the including library,
+// not just the same languge version.
+part "src/part_of_im2.7_v_ex2.7.dart";
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INCONSISTENT_LANGUAGE_VERSION_OVERRIDE
+// [cfe] The language version override has to be the same in the library and its part(s).
+
+part "src/part_of_im2.7_v_ex2.8.dart";
+// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.INCONSISTENT_LANGUAGE_VERSION_OVERRIDE
+// [cfe] The language version override has to be the same in the library and its part(s).
+
+void main() {
+ print(i27i27);
+}
diff --git a/pkg/language_versioning_2.7_test/test/src/part_of_ex2.7_v_ex2.7.dart b/pkg/language_versioning_2.7_test/test/src/part_of_ex2.7_v_ex2.7.dart
new file mode 100644
index 0000000..e47db7c
--- /dev/null
+++ b/pkg/language_versioning_2.7_test/test/src/part_of_ex2.7_v_ex2.7.dart
@@ -0,0 +1,9 @@
+// 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.
+
+// @dart=2.7
+
+part of "../lib_ex2.7_test.dart";
+
+var x27x27 = 0;
diff --git a/pkg/language_versioning_2.7_test/test/src/part_of_ex2.7_v_ex2.8.dart b/pkg/language_versioning_2.7_test/test/src/part_of_ex2.7_v_ex2.8.dart
new file mode 100644
index 0000000..070f6fb
--- /dev/null
+++ b/pkg/language_versioning_2.7_test/test/src/part_of_ex2.7_v_ex2.8.dart
@@ -0,0 +1,9 @@
+// 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.
+
+// @dart=2.8
+
+part of "../lib_ex2.7_test.dart";
+
+var v27x28 = 0;
diff --git a/pkg/language_versioning_2.7_test/test/src/part_of_ex2.7_v_im2.7.dart b/pkg/language_versioning_2.7_test/test/src/part_of_ex2.7_v_im2.7.dart
new file mode 100644
index 0000000..a18cfd9
--- /dev/null
+++ b/pkg/language_versioning_2.7_test/test/src/part_of_ex2.7_v_im2.7.dart
@@ -0,0 +1,9 @@
+// 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.
+
+// Implicit language version 2.7 from configuration.
+
+part of "../lib_ex2.7_test.dart";
+
+var x27i27 = 0;
diff --git a/pkg/language_versioning_2.7_test/test/src/part_of_ex2.8_v_ex2.7.dart b/pkg/language_versioning_2.7_test/test/src/part_of_ex2.8_v_ex2.7.dart
new file mode 100644
index 0000000..faab98c
--- /dev/null
+++ b/pkg/language_versioning_2.7_test/test/src/part_of_ex2.8_v_ex2.7.dart
@@ -0,0 +1,9 @@
+// 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.
+
+// @dart=2.7
+
+part of "../lib_ex2.8_test.dart";
+
+var x28x27 = 0;
diff --git a/pkg/language_versioning_2.7_test/test/src/part_of_ex2.8_v_ex2.8.dart b/pkg/language_versioning_2.7_test/test/src/part_of_ex2.8_v_ex2.8.dart
new file mode 100644
index 0000000..6957d94
--- /dev/null
+++ b/pkg/language_versioning_2.7_test/test/src/part_of_ex2.8_v_ex2.8.dart
@@ -0,0 +1,9 @@
+// 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.
+
+// @dart=2.8
+
+part of "../lib_ex2.8_test.dart";
+
+var x28x28 = 0;
diff --git a/pkg/language_versioning_2.7_test/test/src/part_of_ex2.8_v_im2.7.dart b/pkg/language_versioning_2.7_test/test/src/part_of_ex2.8_v_im2.7.dart
new file mode 100644
index 0000000..d96ba59
--- /dev/null
+++ b/pkg/language_versioning_2.7_test/test/src/part_of_ex2.8_v_im2.7.dart
@@ -0,0 +1,9 @@
+// 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.
+
+// Implicit language version 2.7 from configuration.
+
+part of "../lib_ex2.8_test.dart";
+
+var x28i27 = 0;
diff --git a/pkg/language_versioning_2.7_test/test/src/part_of_im2.7_v_ex2.7.dart b/pkg/language_versioning_2.7_test/test/src/part_of_im2.7_v_ex2.7.dart
new file mode 100644
index 0000000..a4d2212
--- /dev/null
+++ b/pkg/language_versioning_2.7_test/test/src/part_of_im2.7_v_ex2.7.dart
@@ -0,0 +1,9 @@
+// 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.
+
+// @dart=2.7
+
+part of "../lib_im2.7_test.dart";
+
+var i27x27 = 0;
diff --git a/pkg/language_versioning_2.7_test/test/src/part_of_im2.7_v_ex2.8.dart b/pkg/language_versioning_2.7_test/test/src/part_of_im2.7_v_ex2.8.dart
new file mode 100644
index 0000000..bedd006
--- /dev/null
+++ b/pkg/language_versioning_2.7_test/test/src/part_of_im2.7_v_ex2.8.dart
@@ -0,0 +1,9 @@
+// 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.
+
+// @dart=2.8
+
+part of "../lib_im2.7_test.dart";
+
+var i27x28 = 0;
diff --git a/pkg/language_versioning_2.7_test/test/src/part_of_im2.7_v_im2.7.dart b/pkg/language_versioning_2.7_test/test/src/part_of_im2.7_v_im2.7.dart
new file mode 100644
index 0000000..aed5ff3
--- /dev/null
+++ b/pkg/language_versioning_2.7_test/test/src/part_of_im2.7_v_im2.7.dart
@@ -0,0 +1,9 @@
+// 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.
+
+// Implicit language version 2.7 from configuration.
+
+part of "../lib_im2.7_test.dart";
+
+var i27i27 = 0;
diff --git a/pkg/nnbd_migration/lib/src/edge_builder.dart b/pkg/nnbd_migration/lib/src/edge_builder.dart
index 5f0abe0..8011686 100644
--- a/pkg/nnbd_migration/lib/src/edge_builder.dart
+++ b/pkg/nnbd_migration/lib/src/edge_builder.dart
@@ -2995,11 +2995,26 @@
/// upcast T to that type if possible, skipping the flatten when not
/// necessary.
DecoratedType _wrapFuture(DecoratedType type, AstNode node) {
- if (type.type.isDartCoreNull || type.type.isBottom) {
+ var dartType = type.type;
+ if (dartType.isDartCoreNull || dartType.isBottom) {
return _futureOf(type, node);
}
- if (_typeSystem.isSubtypeOf(type.type, typeProvider.futureDynamicType)) {
+ if (dartType is InterfaceType &&
+ dartType.element == typeProvider.futureOrElement) {
+ var typeArguments = type.typeArguments;
+ if (typeArguments.length == 1) {
+ // Wrapping FutureOr<T?1>?2 should produce Future<T?3>, where either 1
+ // or 2 being nullable causes 3 to become nullable.
+ var typeArgument = typeArguments[0];
+ return _futureOf(
+ typeArgument
+ .withNode(NullabilityNode.forLUB(typeArgument.node, type.node)),
+ node);
+ }
+ }
+
+ if (_typeSystem.isSubtypeOf(dartType, typeProvider.futureDynamicType)) {
return _decoratedClassHierarchy.asInstanceOf(
type, typeProvider.futureDynamicType.element);
}
diff --git a/pkg/nnbd_migration/lib/src/fix_builder.dart b/pkg/nnbd_migration/lib/src/fix_builder.dart
index 4ac58a0..52f6983 100644
--- a/pkg/nnbd_migration/lib/src/fix_builder.dart
+++ b/pkg/nnbd_migration/lib/src/fix_builder.dart
@@ -1035,8 +1035,7 @@
var decoratedType = _fixBuilder._variables
.decoratedTypeAnnotation(_fixBuilder.source, node);
if (!typeIsNonNullableByContext(node)) {
- var type = decoratedType.type;
- if (!type.isDynamic && !type.isVoid && !type.isDartCoreNull) {
+ if (!_typeIsNaturallyNullable(decoratedType.type)) {
_makeTypeNameNullable(node, decoratedType);
}
}
@@ -1073,12 +1072,28 @@
}
void _makeTypeNameNullable(TypeAnnotation node, DecoratedType decoratedType) {
+ bool makeNullable = decoratedType.node.isNullable;
+ if (decoratedType.type.isDartAsyncFutureOr) {
+ var typeArguments = decoratedType.typeArguments;
+ if (typeArguments.length == 1) {
+ var typeArgument = typeArguments[0];
+ if ((_typeIsNaturallyNullable(typeArgument.type) ||
+ typeArgument.node.isNullable)) {
+ // FutureOr<T?>? is equivalent to FutureOr<T?>, so there is no need to
+ // make this type nullable.
+ makeNullable = false;
+ }
+ }
+ }
(_fixBuilder._getChange(node) as NodeChangeForTypeAnnotation)
.recordNullability(
- decoratedType, decoratedType.node.isNullable,
+ decoratedType, makeNullable,
nullabilityHint:
_fixBuilder._variables.getNullabilityHint(source, node));
}
+
+ bool _typeIsNaturallyNullable(DartType type) =>
+ type.isDynamic || type.isVoid || type.isDartCoreNull;
}
/// Specialization of [_AssignmentLikeExpressionHandler] for
diff --git a/pkg/nnbd_migration/lib/src/variables.dart b/pkg/nnbd_migration/lib/src/variables.dart
index b5d533d..c054c01 100644
--- a/pkg/nnbd_migration/lib/src/variables.dart
+++ b/pkg/nnbd_migration/lib/src/variables.dart
@@ -286,13 +286,16 @@
DartType toFinalType(DecoratedType decoratedType) {
var type = decoratedType.type;
if (type.isVoid || type.isDynamic) return type;
- if (type is NeverType || type.isDartCoreNull) {
+ if (type is NeverType) {
if (decoratedType.node.isNullable) {
return (_typeProvider.nullType as TypeImpl)
.withNullability(NullabilitySuffix.none);
} else {
return NeverTypeImpl.instance;
}
+ } else if (type.isDartCoreNull) {
+ return (_typeProvider.nullType as TypeImpl)
+ .withNullability(NullabilitySuffix.none);
}
var nullabilitySuffix = decoratedType.node.isNullable
? NullabilitySuffix.question
diff --git a/pkg/nnbd_migration/test/api_test.dart b/pkg/nnbd_migration/test/api_test.dart
index b7597fe..6b71795 100644
--- a/pkg/nnbd_migration/test/api_test.dart
+++ b/pkg/nnbd_migration/test/api_test.dart
@@ -325,6 +325,28 @@
await _checkSingleFileChanges(content, expected);
}
+ Future<void> test_avoid_redundant_future_or() async {
+ // FutureOr<int?> and FutureOr<int?>? are equivalent types; we never insert
+ // the redundant second `?`.
+ var content = '''
+import 'dart:async';
+abstract class C {
+ FutureOr<int/*?*/> f();
+ FutureOr<int>/*?*/ g();
+ FutureOr<int> h(bool b) => b ? f() : g();
+}
+''';
+ var expected = '''
+import 'dart:async';
+abstract class C {
+ FutureOr<int?> f();
+ FutureOr<int>? g();
+ FutureOr<int?> h(bool b) => b ? f() : g();
+}
+''';
+ await _checkSingleFileChanges(content, expected);
+ }
+
Future<void>
test_back_propagation_stops_at_implicitly_typed_variables() async {
var content = '''
@@ -3018,7 +3040,7 @@
FutureOr<int> foi1,
FutureOr<int?> foi2,
FutureOr<int>? foi3,
- FutureOr<int?>? foi4
+ FutureOr<int?> foi4
) {
int i1 = foi1 as int;
int? i2 = foi2 as int?;
@@ -5561,6 +5583,20 @@
await _checkSingleFileChanges(content, expected);
}
+ Future<void> test_return_future_or_null_from_async_method() async {
+ var content = '''
+import 'dart:async';
+Future<Null> f() async => g();
+FutureOr<Null> g() => null;
+''';
+ var expected = '''
+import 'dart:async';
+Future<Null> f() async => g();
+FutureOr<Null> g() => null;
+''';
+ await _checkSingleFileChanges(content, expected);
+ }
+
Future<void> test_setter_overrides_implicit_setter() async {
var content = '''
class A {
diff --git a/pkg/nnbd_migration/test/decorated_type_test.dart b/pkg/nnbd_migration/test/decorated_type_test.dart
index 853bf6d..4a18071f 100644
--- a/pkg/nnbd_migration/test/decorated_type_test.dart
+++ b/pkg/nnbd_migration/test/decorated_type_test.dart
@@ -540,8 +540,10 @@
}
void test_toFinalType_null_non_nullable() {
+ // We never change explicit `Null` types to `Never`, even if we can't find
+ // any reason they need to be nullable.
var type = _variables.toFinalType(DecoratedType(null_.type, never));
- assertDartType(type, 'Never');
+ assertDartType(type, 'Null');
}
void test_toFinalType_null_nullable() {
diff --git a/pkg/nnbd_migration/test/edge_builder_test.dart b/pkg/nnbd_migration/test/edge_builder_test.dart
index c39e923..adc7f8d 100644
--- a/pkg/nnbd_migration/test/edge_builder_test.dart
+++ b/pkg/nnbd_migration/test/edge_builder_test.dart
@@ -6812,6 +6812,29 @@
// No assertions; just checking that it doesn't crash.
}
+ Future<void> test_return_from_async_futureOr_to_future() async {
+ await analyze('''
+import 'dart:async';
+Future<Object> f(FutureOr<int> x) async => x;
+''');
+ var lubNodeMatcher = anyNode;
+ assertEdge(lubNodeMatcher, decoratedTypeAnnotation('Object').node,
+ hard: false, checkable: false);
+ var lubNode = lubNodeMatcher.matchingNode as NullabilityNodeForLUB;
+ expect(lubNode.left, same(decoratedTypeAnnotation('int> x').node));
+ expect(lubNode.right, same(decoratedTypeAnnotation('FutureOr<int>').node));
+ }
+
+ Future<void> test_return_from_async_list_to_future() async {
+ await analyze('''
+import 'dart:async';
+Future<Object> f(List<int> x) async => x;
+''');
+ assertEdge(decoratedTypeAnnotation('List<int>').node,
+ decoratedTypeAnnotation('Object').node,
+ hard: false, checkable: false);
+ }
+
Future<void> test_return_from_async_null() async {
await analyze('''
Future<int> f() async {
diff --git a/pkg/nnbd_migration/test/fix_builder_test.dart b/pkg/nnbd_migration/test/fix_builder_test.dart
index 9ce7d5f..930cd9a 100644
--- a/pkg/nnbd_migration/test/fix_builder_test.dart
+++ b/pkg/nnbd_migration/test/fix_builder_test.dart
@@ -3055,6 +3055,98 @@
visitTypeAnnotation(findNode.typeAnnotation('dynamic'), 'dynamic');
}
+ Future<void> test_typeName_futureOr_dynamic_nullable() async {
+ await analyze('''
+import 'dart:async';
+void _f() {
+ FutureOr<dynamic> x = null;
+}
+''');
+ // The type of `x` should be `FutureOr<dynamic>?`, but this is equivalent to
+ // `FutureOr<dynamic>`, so we don't add a `?`. Note: expected type is
+ // still `FutureOr<dynamic>?`; we don't go to extra effort to remove the
+ // redundant `?` from the internal type representation, just from the source
+ // code we generate.
+ visitTypeAnnotation(
+ findNode.typeAnnotation('FutureOr<dynamic> x'), 'FutureOr<dynamic>?',
+ changes: {});
+ }
+
+ Future<void> test_typeName_futureOr_inner() async {
+ await analyze('''
+import 'dart:async';
+void _f(FutureOr<int/*?*/> x) {
+ FutureOr<int> y = x;
+}
+''');
+ visitTypeAnnotation(
+ findNode.typeAnnotation('FutureOr<int> y'), 'FutureOr<int?>',
+ changes: {findNode.typeAnnotation('int> y'): isMakeNullable});
+ }
+
+ Future<void> test_typeName_futureOr_null_nullable() async {
+ await analyze('''
+import 'dart:async';
+void _f() {
+ FutureOr<Null> x = null;
+}
+''');
+ // The type of `x` should be `FutureOr<Null>?`, but this is equivalent to
+ // `FutureOr<Null>`, so we don't add a `?`. Note: expected type is
+ // still `FutureOr<Null>?`; we don't go to extra effort to remove the
+ // redundant `?` from the internal type representation, just from the source
+ // code we generate.
+ visitTypeAnnotation(
+ findNode.typeAnnotation('FutureOr<Null> x'), 'FutureOr<Null>?',
+ changes: {});
+ }
+
+ Future<void> test_typeName_futureOr_outer() async {
+ await analyze('''
+import 'dart:async';
+void _f(FutureOr<int>/*?*/ x) {
+ FutureOr<int> y = x;
+}
+''');
+ var typeAnnotation = findNode.typeAnnotation('FutureOr<int> y');
+ visitTypeAnnotation(typeAnnotation, 'FutureOr<int>?',
+ changes: {typeAnnotation: isMakeNullable});
+ }
+
+ Future<void> test_typeName_futureOr_redundant() async {
+ await analyze('''
+import 'dart:async';
+void _f(bool b, FutureOr<int>/*?*/ x, FutureOr<int/*?*/> y) {
+ FutureOr<int> z = b ? x : y;
+}
+''');
+ // The type of `z` should be `FutureOr<int?>?`, but this is equivalent to
+ // `FutureOr<int?>`, so we only add the first `?`. Note: expected type is
+ // still `FutureOr<int?>?`; we don't go to extra effort to remove the
+ // redundant `?` from the internal type representation, just from the source
+ // code we generate.
+ visitTypeAnnotation(
+ findNode.typeAnnotation('FutureOr<int> z'), 'FutureOr<int?>?',
+ changes: {findNode.typeAnnotation('int> z'): isMakeNullable});
+ }
+
+ Future<void> test_typeName_futureOr_void_nullable() async {
+ await analyze('''
+import 'dart:async';
+void _f() {
+ FutureOr<void> x = null;
+}
+''');
+ // The type of `x` should be `FutureOr<void>?`, but this is equivalent to
+ // `FutureOr<void>`, so we don't add a `?`. Note: expected type is
+ // still `FutureOr<void>?`; we don't go to extra effort to remove the
+ // redundant `?` from the internal type representation, just from the source
+ // code we generate.
+ visitTypeAnnotation(
+ findNode.typeAnnotation('FutureOr<void> x'), 'FutureOr<void>?',
+ changes: {});
+ }
+
Future<void> test_typeName_generic_nonNullable() async {
await analyze('''
void _f() {
@@ -3085,6 +3177,19 @@
changes: {findNode.typeAnnotation('int'): isMakeNullable});
}
+ Future<void> test_typeName_generic_nullable_arg_and_outer() async {
+ await analyze('''
+void _f(bool b) {
+ List<int> i = b ? [null] : null;
+}
+''');
+ var listInt = findNode.typeAnnotation('List<int>');
+ visitTypeAnnotation(listInt, 'List<int?>?', changes: {
+ findNode.typeAnnotation('int'): isMakeNullable,
+ listInt: isMakeNullable
+ });
+ }
+
Future<void> test_typeName_simple_nonNullable() async {
await analyze('''
void _f() {
diff --git a/tools/bots/results.dart b/pkg/test_runner/lib/bot_results.dart
similarity index 78%
rename from tools/bots/results.dart
rename to pkg/test_runner/lib/bot_results.dart
index d3707f4..8ae9059 100644
--- a/tools/bots/results.dart
+++ b/pkg/test_runner/lib/bot_results.dart
@@ -1,13 +1,13 @@
-// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file
+// 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.
-// results.json and flaky.json parser.
+/// Parses results.json and flaky.json.
import 'dart:async';
import 'dart:convert';
import 'dart:io';
-import 'dart:math';
+import 'dart:math' as math;
import 'package:pool/pool.dart';
@@ -18,34 +18,34 @@
const testResultsStoragePath = "gs://dart-test-results/builders";
/// Limit the number of concurrent subprocesses by half the number of cores.
-final gsutilPool = new Pool(max(1, Platform.numberOfProcessors ~/ 2));
+final gsutilPool = Pool(math.max(1, Platform.numberOfProcessors ~/ 2));
/// Runs gsutil with the provided [arguments] and returns the standard output.
+///
/// Returns null if the requested URL didn't exist.
Future<String> runGsutil(List<String> arguments) async {
return gsutilPool.withResource(() async {
- final processResult = await Process.run(
+ var processResult = await Process.run(
"python", [gsutilPy]..addAll(arguments),
runInShell: Platform.isWindows);
+ var stderr = processResult.stderr as String;
if (processResult.exitCode != 0) {
- if (processResult.exitCode == 1 &&
- processResult.stderr.contains("No URLs matched") ||
- processResult.stderr
- .contains("One or more URLs matched no objects")) {
+ if (processResult.exitCode == 1 && stderr.contains("No URLs matched") ||
+ stderr.contains("One or more URLs matched no objects")) {
return null;
}
- String error = "Failed to run: python $gsutilPy $arguments\n"
+ var error = "Failed to run: python $gsutilPy $arguments\n"
"exitCode: ${processResult.exitCode}\n"
"stdout:\n${processResult.stdout}\n"
"stderr:\n${processResult.stderr}";
if (processResult.exitCode == 1 &&
- processResult.stderr.contains("401 Anonymous caller")) {
+ stderr.contains("401 Anonymous caller")) {
error =
"\n\nYou need to authenticate by running:\npython $gsutilPy config\n";
}
- throw new Exception(error);
+ throw Exception(error);
}
- return processResult.stdout;
+ return processResult.stdout as String;
});
}
@@ -56,12 +56,12 @@
/// Returns the files and directories in the provided cloud storage [directory],
/// or null if it didn't exist.
Future<Iterable<String>> lsGsutil(String directory) async {
- final contents = await runGsutil(["ls", directory]);
+ var contents = await runGsutil(["ls", directory]);
if (contents == null) {
return null;
}
return LineSplitter.split(contents).map((String path) {
- final elements = path.split("/");
+ var elements = path.split("/");
if (elements[elements.length - 1].isEmpty) {
return elements[elements.length - 2];
} else {
@@ -113,23 +113,22 @@
}
Future<List<Map<String, dynamic>>> loadResults(String path) async {
- final results = <Map<String, dynamic>>[];
- final lines = new File(path)
+ var results = <Map<String, dynamic>>[];
+ var lines = File(path)
.openRead()
.cast<List<int>>()
.transform(utf8.decoder)
- .transform(new LineSplitter());
- await for (final line in lines) {
- final Map<String, dynamic> map = jsonDecode(line);
- results.add(map);
+ .transform(const LineSplitter());
+ await for (var line in lines) {
+ results.add(jsonDecode(line) as Map<String, dynamic>);
}
return results;
}
Map<String, Map<String, dynamic>> createResultsMap(
List<Map<String, dynamic>> results) {
- Map<String, Map<String, dynamic>> result = {};
- for (Map<String, dynamic> map in results) {
+ var result = <String, Map<String, dynamic>>{};
+ for (var map in results) {
var key = "${map["configuration"]}:${map["name"]}";
result.putIfAbsent(key, () => map);
}
diff --git a/pkg/test_runner/lib/src/expectation_set.dart b/pkg/test_runner/lib/src/expectation_set.dart
index f896cd0..94ca4ef 100644
--- a/pkg/test_runner/lib/src/expectation_set.dart
+++ b/pkg/test_runner/lib/src/expectation_set.dart
@@ -49,8 +49,6 @@
} on SyntaxError catch (error) {
stderr.writeln(error.toString());
exit(1);
-
- throw "unreachable";
}
}
diff --git a/pkg/test_runner/lib/src/process_queue.dart b/pkg/test_runner/lib/src/process_queue.dart
index 878a3fc..7be0d74 100644
--- a/pkg/test_runner/lib/src/process_queue.dart
+++ b/pkg/test_runner/lib/src/process_queue.dart
@@ -1186,7 +1186,6 @@
// it will always fail. So rather than re-trying a 1000+ times, we
// exit.
io.exit(1);
- return true;
});
}
diff --git a/pkg/test_runner/lib/src/test_suite.dart b/pkg/test_runner/lib/src/test_suite.dart
index fe5f5d2..4351b8d 100644
--- a/pkg/test_runner/lib/src/test_suite.dart
+++ b/pkg/test_runner/lib/src/test_suite.dart
@@ -749,7 +749,6 @@
// Unreachable.
print("Cannot create URL for path $file. Not in build or dart directory.");
exit(1);
- return null;
}
String _uriForBrowserTest(String pathComponent) {
diff --git a/pkg/test_runner/lib/src/update_errors.dart b/pkg/test_runner/lib/src/update_errors.dart
index c7f2887..a961ea9a 100644
--- a/pkg/test_runner/lib/src/update_errors.dart
+++ b/pkg/test_runner/lib/src/update_errors.dart
@@ -12,12 +12,11 @@
/// Removes existing static error marker comments in [source] and adds markers
/// for the given [errors].
///
-/// If [removeAnalyzer] is `false`, then existing analyzer errors in [source]
-/// are preserved. Likewise for [removeCfe] and CFE errors.
+/// If [remove] is not `null`, then only removes existing errors for the given
+/// sources.
String updateErrorExpectations(String source, List<StaticError> errors,
- {bool removeAnalyzer, bool removeCfe}) {
- removeAnalyzer ??= true;
- removeCfe ??= true;
+ {Set<ErrorSource> remove}) {
+ remove ??= {};
var existingErrors = StaticError.parseExpectations(source);
var lines = source.split("\n");
@@ -38,13 +37,9 @@
}
// Re-add errors for the portions we intend to preserve.
- var keepAnalyzer = !removeAnalyzer && error.hasError(ErrorSource.analyzer);
- var keepCfe = !removeCfe && error.hasError(ErrorSource.cfe);
-
var keptErrors = {
- if (keepAnalyzer)
- ErrorSource.analyzer: error.errorFor(ErrorSource.analyzer),
- if (keepCfe) ErrorSource.cfe: error.errorFor(ErrorSource.cfe),
+ for (var source in ErrorSource.all.toSet().difference(remove))
+ if (error.hasError(source)) source: error.errorFor(source)
};
if (keptErrors.isNotEmpty) {
diff --git a/pkg/test_runner/lib/test_runner.dart b/pkg/test_runner/lib/test_runner.dart
new file mode 100644
index 0000000..065b840
--- /dev/null
+++ b/pkg/test_runner/lib/test_runner.dart
@@ -0,0 +1,609 @@
+// 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.
+
+// Run tests like on the given builder and/or named configuration.
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:args/args.dart';
+import 'package:smith/smith.dart';
+
+import 'bot_results.dart';
+
+const int deflakingCount = 5;
+
+/// Quotes a string in shell single quote mode. This function produces a single
+/// shell argument that evaluates to the exact string provided, handling any
+/// special characters in the input string. Shell single quote mode works uses
+/// the single quote character as the delimiter and uses the characters
+/// in-between verbatim without any special processing. To insert the single
+/// quote character itself, escape single quote mode, insert an escaped single
+/// quote, and then return to single quote mode.
+///
+/// Examples:
+/// foo becomes 'foo'
+/// foo bar becomes 'foo bar'
+/// foo\ bar becomes 'foo\ bar'
+/// foo's bar becomes 'foo '\''s bar'
+/// foo "b"ar becomes 'foo "b"'
+/// foo
+/// bar becomes 'foo
+/// bar'
+String shellSingleQuote(String string) {
+ return "'${string.replaceAll("'", "'\\''")}'";
+}
+
+/// Like [shellSingleQuote], but if the string only contains safe ASCII
+/// characters, don't quote it. Note that it's not always safe to omit the
+/// quotes even if the string only has safe characters, as doing so might match
+/// a shell keyword or a shell builtin in the first argument in a command. It
+/// should be safe to use this for the second argument onwards in a command.
+String simpleShellSingleQuote(String string) {
+ return RegExp(r"^[a-zA-Z0-9%+,./:_-]*$").hasMatch(string)
+ ? string
+ : shellSingleQuote(string);
+}
+
+/// Runs a process and exits likewise if the process exits non-zero.
+Future<ProcessResult> runProcess(String executable, List<String> arguments,
+ {bool runInShell = false}) async {
+ var processResult =
+ await Process.run(executable, arguments, runInShell: runInShell);
+ if (processResult.exitCode != 0) {
+ var command =
+ [executable, ...arguments].map(simpleShellSingleQuote).join(" ");
+ throw Exception("Command exited ${processResult.exitCode}: $command\n"
+ "${processResult.stdout}\n${processResult.stderr}");
+ }
+ return processResult;
+}
+
+/// Runs a process and exits likewise if the process exits non-zero, but let the
+/// child process inherit out stdio handles.
+Future<ProcessResult> runProcessInheritStdio(
+ String executable, List<String> arguments,
+ {bool runInShell = false}) async {
+ var process = await Process.start(executable, arguments,
+ mode: ProcessStartMode.inheritStdio, runInShell: runInShell);
+ var exitCode = await process.exitCode;
+ var processResult = ProcessResult(process.pid, exitCode, "", "");
+ if (processResult.exitCode != 0) {
+ var command =
+ [executable, ...arguments].map(simpleShellSingleQuote).join(" ");
+ throw Exception("Command exited ${processResult.exitCode}: $command");
+ }
+ return processResult;
+}
+
+/// Finds the branch of a builder given the list of branches.
+String branchOfBuilder(String builder, List<String> branches) {
+ return branches.where((branch) => branch != "master").firstWhere(
+ (branch) => builder.endsWith("-$branch"),
+ orElse: () => "master");
+}
+
+/// Finds the named configuration to test according to the test matrix
+/// information and the command line options.
+Map<String, Set<Builder>> resolveNamedConfigurations(
+ TestMatrix testMatrix,
+ String requestedBranch,
+ List<String> requestedNamedConfigurations,
+ String requestedBuilder) {
+ assert(requestedBranch != null);
+ var testedConfigurations = <String, Set<Builder>>{};
+ var foundBuilder = false;
+ for (var builder in testMatrix.builders) {
+ if (requestedBuilder != null && builder.name != requestedBuilder) {
+ continue;
+ }
+ var branch = branchOfBuilder(builder.name, testMatrix.branches);
+ if (branch != requestedBranch) {
+ if (requestedBuilder == null) {
+ continue;
+ }
+ stderr.writeln("error: Builder $requestedBuilder is on branch $branch "
+ "rather than $requestedBranch");
+ stderr.writeln("error: To compare with that branch, use: -B $branch");
+ return null;
+ }
+ foundBuilder = true;
+ for (var step in builder.steps.where((step) => step.isTestStep)) {
+ var testedConfiguration = step.testedConfiguration;
+ if (testedConfiguration == null) {
+ // This test step does not use a configuration; for example,
+ // because it is a simple script that does not produce results.
+ continue;
+ }
+ var namedConfiguration = testedConfiguration.name;
+ if (requestedNamedConfigurations.isEmpty ||
+ requestedNamedConfigurations.contains(namedConfiguration)) {
+ testedConfigurations
+ .putIfAbsent(namedConfiguration, () => {})
+ .add(builder);
+ }
+ }
+ }
+ if (requestedBuilder != null && !foundBuilder) {
+ stderr.writeln("error: Builder $requestedBuilder doesn't exist");
+ return null;
+ }
+ if (requestedBuilder != null &&
+ requestedNamedConfigurations.isEmpty &&
+ testedConfigurations.isEmpty) {
+ stderr.writeln("error: Builder $requestedBuilder isn't testing any named "
+ "configurations");
+ return null;
+ }
+ if (requestedNamedConfigurations.isNotEmpty) {
+ var hasUntestedConfiguration = false;
+ for (var requestedConfiguration in requestedNamedConfigurations) {
+ if (!testedConfigurations.containsKey(requestedConfiguration)) {
+ var builder = requestedBuilder != null
+ ? "builder $requestedBuilder"
+ : "any builder";
+ stderr.writeln("error: The named configuration "
+ "$requestedConfiguration isn't tested on $builder");
+ hasUntestedConfiguration = true;
+ }
+ }
+ if (hasUntestedConfiguration) {
+ return null;
+ }
+ }
+
+ return testedConfigurations;
+}
+
+/// Locates the merge base between head and the [branch] on the given [remote].
+Future<String> findMergeBase(String remote, String branch) async {
+ var arguments = ["merge-base", "$remote/$branch", "HEAD"];
+ var result =
+ await Process.run("git", arguments, runInShell: Platform.isWindows);
+
+ var stdout = result.stdout as String;
+ var stderr = result.stderr as String;
+
+ if (result.exitCode != 0) {
+ throw Exception("Failed to run: git ${arguments.join(' ')}\n"
+ "stdout:\n$stdout\n"
+ "stderr:\n$stderr\n");
+ }
+ return LineSplitter.split(stdout).first;
+}
+
+/// Exception thrown when looking up the build for a commit failed.
+class CommitNotBuiltException implements Exception {
+ final String reason;
+
+ CommitNotBuiltException(this.reason);
+
+ String toString() => reason;
+}
+
+/// The result after searching for a build of a commit.
+class BuildSearchResult {
+ final int build;
+ final String commit;
+
+ BuildSearchResult(this.build, this.commit);
+}
+
+/// Locates the build number of the [commit] on the [builder], or throws an
+/// exception if the builder hasn't built the commit.
+Future<BuildSearchResult> searchForBuild(String builder, String commit) async {
+ var requestUrl = Uri.parse(
+ "https://cr-buildbucket.appspot.com/_ah/api/buildbucket/v1/search"
+ "?bucket=luci.dart.ci.sandbox"
+ "&tag=builder%3A$builder"
+ "&tag=buildset%3Acommit%2Fgit%2F$commit"
+ "&fields=builds(status%2Ctags%2Curl)");
+ var client = HttpClient();
+ var request = await client.getUrl(requestUrl);
+ var response = await request.close();
+ var object = await response
+ .cast<List<int>>()
+ .transform(const Utf8Decoder())
+ .transform(const JsonDecoder())
+ .first as Map<String, dynamic>;
+ client.close();
+ var builds = object["builds"] as List<dynamic>;
+ if (builds == null || builds.isEmpty) {
+ throw CommitNotBuiltException(
+ "Builder $builder hasn't built commit $commit");
+ }
+ var build = builds.last;
+ var tags = (build["tags"] as List).cast<String>();
+ var buildAddressTag =
+ tags.firstWhere((tag) => tag.startsWith("build_address:"));
+ var buildAddress = buildAddressTag.substring("build_address:".length);
+ if (build["status"] != "COMPLETED") {
+ throw CommitNotBuiltException("Build $buildAddress isn't completed yet");
+ }
+ return BuildSearchResult(int.parse(buildAddress.split("/").last), commit);
+}
+
+Future<BuildSearchResult> searchForApproximateBuild(
+ String builder, String commit) async {
+ try {
+ return await searchForBuild(builder, commit);
+ } on CommitNotBuiltException catch (e) {
+ print("Warning: $e, searching for an inexact previous build...");
+ var limit = 25;
+ var arguments = [
+ "rev-list",
+ "$commit~$limit..$commit~1",
+ "--first-parent",
+ "--topo-order"
+ ];
+ var processResult = await Process.run("git", arguments, runInShell: true);
+ if (processResult.exitCode != 0) {
+ throw Exception("Failed to list potential commits: git $arguments\n"
+ "exitCode: ${processResult.exitCode}\n"
+ "stdout: ${processResult.stdout}\n"
+ "stdout: ${processResult.stderr}\n");
+ }
+ for (var fallbackCommit
+ in LineSplitter.split(processResult.stdout as String)) {
+ try {
+ return await searchForBuild(builder, fallbackCommit);
+ } catch (e) {
+ print(
+ "Warning: Searching for inexact baseline build: $e, continuing...");
+ }
+ }
+ throw CommitNotBuiltException(
+ "Failed to locate approximate baseline results for "
+ "$commit in past $limit commits");
+ }
+}
+
+void overrideConfiguration(Map<String, Map<String, dynamic>> results,
+ String configuration, String newConfiguration) {
+ results.forEach((String key, Map<String, dynamic> result) {
+ if (result["configuration"] == configuration) {
+ result["configuration"] = newConfiguration;
+ }
+ });
+}
+
+void printUsage(ArgParser parser, {String error, bool printOptions = false}) {
+ if (error != null) {
+ print("$error\n");
+ exitCode = 1;
+ }
+ print("""
+Usage: test.dart -b [BUILDER] -n [CONFIGURATION] [OPTION]... [--]
+ [TEST.PY OPTION]... [SELECTOR]...
+
+Run tests and compare with the results on the given builder. Either the -n or
+the -b option, or both, must be used. Any options following -- and non-option
+arguments will be forwarded to test.py invocations. The specified named
+configuration's results will be downloaded from the specified builder. If only a
+named configuration is specified, the results are downloaded from the
+appropriate builders. If only a builder is specified, the default named
+configuration is used if the builder only has a single named configuration.
+Otherwise the available named configurations are listed.
+
+See the documentation at https://goto.google.com/dart-status-file-free-workflow
+""");
+ if (printOptions) {
+ print(parser.usage);
+ } else {
+ print("Run test.dart --help to see all options.");
+ }
+}
+
+Future<void> runTests(List<String> args) async {
+ var parser = ArgParser();
+ parser.addOption("builder",
+ abbr: "b", help: "Run tests like on the given builder");
+ parser.addOption("branch",
+ abbr: "B",
+ help: "Select the builders building this branch",
+ defaultsTo: "master");
+ parser.addOption("commit", abbr: "C", help: "Compare with this commit");
+ parser.addFlag("deflake",
+ help: "Re-run failing newly tests $deflakingCount times.");
+ parser.addFlag("report-flakes",
+ help: "Report test failures for tests known to be flaky.\n"
+ "This ignores all flakiness data from CI but flakes\n"
+ "detected by --deflake will remain hidden");
+ parser.addFlag("list-configurations",
+ help: "Output list of configurations.", negatable: false);
+ parser.addMultiOption("named-configuration",
+ abbr: "n",
+ help: "The named test configuration(s) that supplies the\nvalues for all "
+ "test options, specifying how tests\nshould be run.");
+ parser.addOption("local-configuration",
+ abbr: "N",
+ help: "Use a different named configuration for local\ntesting than the "
+ "named configuration the baseline\nresults were downloaded for. The "
+ "results may be\ninexact if the baseline configuration is "
+ "different.");
+ parser.addOption("remote",
+ abbr: "R",
+ help: "Compare with this remote and git branch",
+ defaultsTo: "origin");
+ parser.addFlag("help", help: "Show the program usage.", negatable: false);
+
+ ArgResults options;
+ try {
+ options = parser.parse(args);
+ } on FormatException catch (exception) {
+ printUsage(parser, error: exception.message);
+ return;
+ }
+
+ if (options["help"] as bool) {
+ printUsage(parser, printOptions: true);
+ return;
+ }
+
+ if (options["list-configurations"] as bool) {
+ var process = await Process.start(
+ "python", ["tools/test.py", "--list-configurations"],
+ mode: ProcessStartMode.inheritStdio, runInShell: Platform.isWindows);
+ exitCode = await process.exitCode;
+ return;
+ }
+
+ var requestedBuilder = options["builder"] as String;
+ var requestedNamedConfigurations =
+ (options["named-configuration"] as List).cast<String>();
+ var localConfiguration = options["local-configuration"] as String;
+
+ if (requestedBuilder == null && requestedNamedConfigurations.isEmpty) {
+ printUsage(parser,
+ error: "Please specify either a configuration (-n) or "
+ "a builder (-b)");
+ return;
+ }
+
+ if (localConfiguration != null && requestedNamedConfigurations.length > 1) {
+ printUsage(parser,
+ error: "Local configuration (-N) can only be used with a"
+ " single named configuration (-n)");
+ return;
+ }
+
+ // Locate gsutil.py.
+ gsutilPy =
+ Platform.script.resolve("../third_party/gsutil/gsutil.py").toFilePath();
+
+ // Load the test matrix.
+ var testMatrixPath = Platform.script.resolve("bots/test_matrix.json");
+ var testMatrix = TestMatrix.fromPath(testMatrixPath.toFilePath());
+ // Determine what named configuration to run and which builders to download
+ // existing results from.
+ var testedConfigurations = resolveNamedConfigurations(
+ testMatrix,
+ options["branch"] as String,
+ requestedNamedConfigurations,
+ requestedBuilder);
+ if (testedConfigurations == null) {
+ // No valid configuration could be found. The error has already been
+ // reported by [resolveConfigurations].
+ exitCode = 1;
+ return;
+ }
+ var namedConfigurations = testedConfigurations.keys.toSet().toList();
+ var builders =
+ testedConfigurations.values.expand((builders) => builders).toSet();
+
+ // Print information about the resolved builders to compare with.
+ for (var namedConfiguration in namedConfigurations) {
+ var testedBuilders = testedConfigurations[namedConfiguration];
+ var onWhichBuilders = testedBuilders.length == 1
+ ? "builder ${testedBuilders.single.name}"
+ : "builders${testedBuilders.map((b) => "\n ${b.name}").join()}";
+ if (localConfiguration != null) {
+ print("Testing named configuration $localConfiguration "
+ "compared with configuration $namedConfiguration "
+ "on $onWhichBuilders");
+ } else {
+ print("Testing named configuration $namedConfiguration "
+ "compared with $onWhichBuilders");
+ }
+ }
+
+ // Use given commit or find out where the current HEAD branched.
+ var commit = options["commit"] as String ??
+ await findMergeBase(
+ options["remote"] as String, options["branch"] as String);
+ print("Base commit is $commit");
+
+ // Store the downloaded results and our test results in a temporary directory.
+ var outDirectory = await Directory.systemTemp.createTemp("test.dart.");
+ try {
+ var tasks = <Future>[];
+ var needsConfigurationOverride = localConfiguration != null &&
+ localConfiguration != namedConfigurations.single;
+ var needsMerge = builders.length > 1;
+ var inexactBuilds = <String, String>{};
+ var previousFileName = "previous.json";
+ var flakyFileName = "flaky.json";
+ var downloadNumber = 0;
+
+ // Download the previous results and flakiness info from cloud storage.
+ for (var builder in builders) {
+ var builderName = builder.name;
+ if (needsMerge) {
+ previousFileName = "previous-$downloadNumber.json";
+ flakyFileName = "flaky-$downloadNumber.json";
+ downloadNumber++;
+ }
+
+ // Use the buildbucket API to search for builds of the right commit.
+ print("Finding build on builder $builderName to compare with...");
+ var buildSearchResult =
+ await searchForApproximateBuild(builderName, commit);
+ if (buildSearchResult.commit != commit) {
+ print("Warning: Using commit ${buildSearchResult.commit} "
+ "as baseline instead of $commit for $builderName");
+ inexactBuilds[builderName] = buildSearchResult.commit;
+ }
+
+ var buildNumber = buildSearchResult.build.toString();
+ print("Downloading results from builder $builderName "
+ "build $buildNumber...");
+ tasks.add(cpGsutil(
+ buildFileCloudPath(builderName, buildNumber, "results.json"),
+ "${outDirectory.path}/$previousFileName"));
+ if (!(options["report-flakes"] as bool)) {
+ tasks.add(cpGsutil(
+ buildFileCloudPath(builderName, buildNumber, "flaky.json"),
+ "${outDirectory.path}/$flakyFileName"));
+ }
+ }
+
+ // Run the tests.
+ var configurationsToRun = localConfiguration != null
+ ? <String>[localConfiguration]
+ : namedConfigurations;
+ print("".padLeft(80, "="));
+ print("Running tests");
+ print("".padLeft(80, "="));
+ await runProcessInheritStdio(
+ "python",
+ [
+ "tools/test.py",
+ "--named-configuration=${configurationsToRun.join(",")}",
+ "--output-directory=${outDirectory.path}",
+ "--clean-exit",
+ "--silent-failures",
+ "--write-results",
+ "--write-logs",
+ ...options.rest,
+ ],
+ runInShell: Platform.isWindows);
+ // Wait for the downloads and the test run to complete.
+ await Future.wait(tasks);
+ // Merge the results and flaky data downloaded from the builders.
+ var mergedResults = <String, Map<String, dynamic>>{};
+ var mergedFlaky = <String, Map<String, dynamic>>{};
+ if (needsMerge || needsConfigurationOverride) {
+ for (var i = 0; i < downloadNumber; ++i) {
+ previousFileName = needsMerge ? "previous-$i.json" : "previous.json";
+ var results =
+ await loadResultsMap("${outDirectory.path}/$previousFileName");
+ if (needsConfigurationOverride) {
+ overrideConfiguration(
+ results, namedConfigurations.single, localConfiguration);
+ }
+ mergedResults.addAll(results);
+ if (!(options["report-flakes"] as bool)) {
+ flakyFileName = needsMerge ? "flaky-$i.json" : "flaky.json";
+ var flakyTests =
+ await loadResultsMap("${outDirectory.path}/$flakyFileName");
+ if (needsConfigurationOverride) {
+ overrideConfiguration(
+ flakyTests, namedConfigurations.single, localConfiguration);
+ }
+ mergedFlaky.addAll(flakyTests);
+ }
+ }
+ }
+ // Write out the merged results for the builders.
+ if (needsMerge || needsConfigurationOverride) {
+ await File("${outDirectory.path}/previous.json").writeAsString(
+ mergedResults.values.map((data) => jsonEncode(data) + "\n").join(""));
+ }
+ // Ensure that there is a flaky.json even if it wasn't downloaded.
+ if (needsMerge ||
+ needsConfigurationOverride ||
+ options["report-flakes"] as bool) {
+ await File("${outDirectory.path}/flaky.json").writeAsString(
+ mergedFlaky.values.map((data) => jsonEncode(data) + "\n").join(""));
+ }
+ // Deflake results of the tests if required.
+ if (options["deflake"] as bool) {
+ await deflake(outDirectory, configurationsToRun, options.rest);
+ }
+ // Write out the final comparison.
+ print("".padLeft(80, "="));
+ print("Test Results");
+ print("".padLeft(80, "="));
+ var compareOutput = await runProcess(Platform.resolvedExecutable, [
+ "tools/bots/compare_results.dart",
+ "--human",
+ "--verbose",
+ "--changed",
+ "--failing",
+ "--passing",
+ "--flakiness-data=${outDirectory.path}/flaky.json",
+ "--logs=${outDirectory.path}/logs.json",
+ "${outDirectory.path}/previous.json",
+ "${outDirectory.path}/results.json",
+ ]);
+ if (compareOutput.stdout == "") {
+ print("There were no test failures.");
+ } else {
+ stdout.write(compareOutput.stdout);
+ }
+ if (inexactBuilds.isNotEmpty) {
+ print("");
+ var builders = inexactBuilds.keys.toList()..sort();
+ for (var builder in builders) {
+ var inexactCommit = inexactBuilds[builder];
+ print("Warning: Results may be inexact because commit $inexactCommit "
+ "was used as the baseline for $builder instead of $commit");
+ }
+ }
+ } finally {
+ await outDirectory.delete(recursive: true);
+ }
+}
+
+Future<void> deflake(Directory outDirectory, List<String> configurations,
+ List<String> testPyArgs) async {
+ // Find the list of tests to deflake.
+ var deflakeListOutput = await runProcess(Platform.resolvedExecutable, [
+ "tools/bots/compare_results.dart",
+ "--changed",
+ "--failing",
+ "--passing",
+ "--flakiness-data=${outDirectory.path}/flaky.json",
+ "${outDirectory.path}/previous.json",
+ "${outDirectory.path}/results.json",
+ ]);
+ var deflakeListPath = "${outDirectory.path}/deflake.list";
+ var deflakeListFile = File(deflakeListPath);
+ await deflakeListFile.writeAsString(deflakeListOutput.stdout as String);
+
+ // Deflake the changed tests.
+ var deflakingResultsPaths = <String>[];
+ for (var i = 1; deflakeListOutput.stdout != "" && i <= deflakingCount; i++) {
+ print("".padLeft(80, "="));
+ print("Running deflaking iteration $i");
+ print("".padLeft(80, "="));
+ var deflakeDirectory = Directory("${outDirectory.path}/$i");
+ await deflakeDirectory.create();
+ var deflakeArguments = [
+ "--named-configuration=${configurations.join(",")}",
+ "--output-directory=${deflakeDirectory.path}",
+ "--clean-exit",
+ "--silent-failures",
+ "--write-results",
+ "--test-list=$deflakeListPath",
+ ...testPyArgs,
+ ];
+
+ await runProcessInheritStdio(
+ "python", ["tools/test.py", ...deflakeArguments],
+ runInShell: Platform.isWindows);
+ deflakingResultsPaths.add("${deflakeDirectory.path}/results.json");
+ }
+
+ // Update the flakiness information based on what we've learned.
+ print("Updating flakiness information...");
+ await runProcess(Platform.resolvedExecutable, [
+ "tools/bots/update_flakiness.dart",
+ "--input=${outDirectory.path}/flaky.json",
+ "--output=${outDirectory.path}/flaky.json",
+ "${outDirectory.path}/results.json",
+ ...deflakingResultsPaths,
+ ]);
+}
diff --git a/pkg/test_runner/test/update_errors_test.dart b/pkg/test_runner/test/update_errors_test.dart
index 6a8e9c7..6c433625 100644
--- a/pkg/test_runner/test/update_errors_test.dart
+++ b/pkg/test_runner/test/update_errors_test.dart
@@ -1,6 +1,7 @@
// Copyright (c) 2019, 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.
+import 'dart:math' as math;
import 'package:expect/expect.dart';
@@ -16,7 +17,7 @@
// escapes here like `\/`.
void main() {
- // Inserts analyzer, CFE, and both errors.
+ // Inserts single-front end errors.
expectUpdate("""
int i = "bad";
@@ -26,12 +27,7 @@
""", errors: [
makeError(line: 1, column: 9, length: 5, analyzerError: "some.error"),
makeError(line: 3, column: 15, length: 7, cfeError: "Bad."),
- makeError(
- line: 5,
- column: 13,
- length: 5,
- analyzerError: "an.error",
- cfeError: "Wrong.\nLine.\nAnother."),
+ makeError(line: 5, column: 13, length: 5, webError: "Web.\nError."),
], expected: """
int i = "bad";
/\/ ^^^^^
@@ -43,15 +39,72 @@
int third = "boo";
/\/ ^^^^^
-/\/ [analyzer] an.error
-/\/ [cfe] Wrong.
-/\/ Line.
-/\/ Another.
+/\/ [web] Web.
+/\/ Error.
+""");
+
+ // Inserts errors for multiple front ends.
+ expectUpdate("""
+int i = "bad";
+
+int another = "wrong";
+
+int third = "boo";
+
+int last = "oops";
+""", errors: [
+ makeError(
+ line: 1,
+ column: 9,
+ length: 5,
+ analyzerError: "some.error",
+ cfeError: "Bad."),
+ makeError(
+ line: 3,
+ column: 15,
+ length: 7,
+ cfeError: "Another bad.",
+ webError: "Web.\nError."),
+ makeError(
+ line: 5,
+ column: 13,
+ length: 5,
+ analyzerError: "third.error",
+ webError: "Web error."),
+ makeError(
+ line: 7,
+ column: 12,
+ length: 6,
+ analyzerError: "last.error",
+ cfeError: "Final.\nError.",
+ webError: "Web error."),
+ ], expected: """
+int i = "bad";
+/\/ ^^^^^
+/\/ [analyzer] some.error
+/\/ [cfe] Bad.
+
+int another = "wrong";
+/\/ ^^^^^^^
+/\/ [cfe] Another bad.
+/\/ [web] Web.
+/\/ Error.
+
+int third = "boo";
+/\/ ^^^^^
+/\/ [analyzer] third.error
+/\/ [web] Web error.
+
+int last = "oops";
+/\/ ^^^^^^
+/\/ [analyzer] last.error
+/\/ [cfe] Final.
+/\/ Error.
+/\/ [web] Web error.
""");
// Removes only analyzer errors.
- expectUpdate(
- """
+ expectUpdate("""
int i = "bad";
/\/ ^^^^^
/\/ [analyzer] some.error
@@ -64,9 +117,7 @@
/\/ ^^^^^
/\/ [analyzer] an.error
/\/ [cfe] Wrong.
-""",
- removeCfe: false,
- expected: """
+""", remove: {ErrorSource.analyzer}, expected: """
int i = "bad";
int another = "wrong";
@@ -79,8 +130,7 @@
""");
// Removes only CFE errors.
- expectUpdate(
- """
+ expectUpdate("""
int i = "bad";
/\/ ^^^^^
/\/ [analyzer] some.error
@@ -93,9 +143,7 @@
/\/ ^^^^^
/\/ [analyzer] an.error
/\/ [cfe] Wrong.
-""",
- removeAnalyzer: false,
- expected: """
+""", remove: {ErrorSource.cfe}, expected: """
int i = "bad";
/\/ ^^^^^
/\/ [analyzer] some.error
@@ -107,6 +155,60 @@
/\/ [analyzer] an.error
""");
+ // Removes only web errors.
+ expectUpdate("""
+int i = "bad";
+/\/ ^^^^^
+/\/ [analyzer] some.error
+
+int another = "wrong";
+/\/ ^^^^^^^
+/\/ [web] Bad.
+
+int third = "boo";
+/\/ ^^^^^
+/\/ [cfe] Error.
+/\/ [web] Wrong.
+""", remove: {ErrorSource.web}, expected: """
+int i = "bad";
+/\/ ^^^^^
+/\/ [analyzer] some.error
+
+int another = "wrong";
+
+int third = "boo";
+/\/ ^^^^^
+/\/ [cfe] Error.
+""");
+
+ // Removes multiple error sources.
+ expectUpdate("""
+int i = "bad";
+/\/ ^^^^^
+/\/ [analyzer] some.error
+/\/ [cfe] CFE error.
+
+int another = "wrong";
+/\/ ^^^^^^^
+/\/ [web] Bad.
+
+int third = "boo";
+/\/ ^^^^^
+/\/ [analyzer] another.error
+/\/ [cfe] Error.
+/\/ [web] Wrong.
+""", remove: {ErrorSource.analyzer, ErrorSource.web}, expected: """
+int i = "bad";
+/\/ ^^^^^
+/\/ [cfe] CFE error.
+
+int another = "wrong";
+
+int third = "boo";
+/\/ ^^^^^
+/\/ [cfe] Error.
+""");
+
// Preserves previous error's indentation if possible.
expectUpdate("""
int i = "bad";
@@ -303,8 +405,7 @@
void regression() {
// https://github.com/dart-lang/sdk/issues/37990.
- expectUpdate(
- """
+ expectUpdate("""
int get xx => 3;
int get yy => 3;
@@ -325,20 +426,16 @@
}
}
-""",
- removeAnalyzer: false,
- errors: [
- makeError(
- line: 6,
- column: 5,
- length: 14,
- cfeError: "Setter not found: 'xx'."),
- makeError(
- line: 16,
- column: 7,
- cfeError: "The method 'call' isn't defined for the class 'int'.")
- ],
- expected: """
+""", remove: {
+ ErrorSource.cfe
+ }, errors: [
+ makeError(
+ line: 6, column: 5, length: 14, cfeError: "Setter not found: 'xx'."),
+ makeError(
+ line: 16,
+ column: 7,
+ cfeError: "The method 'call' isn't defined for the class 'int'.")
+ ], expected: """
int get xx => 3;
int get yy => 3;
@@ -362,18 +459,62 @@
}
void expectUpdate(String original,
- {List<StaticError> errors,
- bool removeAnalyzer = true,
- bool removeCfe = true,
- String expected}) {
+ {List<StaticError> errors, Set<ErrorSource> remove, String expected}) {
errors ??= const [];
+ remove ??= ErrorSource.all.toSet();
- var actual = updateErrorExpectations(original, errors,
- removeAnalyzer: removeAnalyzer, removeCfe: removeCfe);
+ var actual = updateErrorExpectations(original, errors, remove: remove);
if (actual != expected) {
// Not using Expect.equals() because the diffs it shows aren't helpful for
// strings this large.
- Expect.fail("Output did not match expectation. Expected:\n$expected"
- "\n\nWas:\n$actual");
+ var actualLines = actual.split("\n");
+ var expectedLines = expected.split("\n");
+
+ // Figure out which leading lines do match so we can ignore those and
+ // highlight the offending ones.
+ var matchingActual = <int>{};
+ var matchingExpected = <int>{};
+ for (var i = 0;
+ i < math.min(actualLines.length, expectedLines.length);
+ i++) {
+ if (actualLines[i] != expectedLines[i]) break;
+ matchingActual.add(i);
+ matchingExpected.add(i);
+ }
+
+ // Find which trailing lines are the same so we can hide those too.
+ for (var i = 0;
+ i < math.min(actualLines.length, expectedLines.length);
+ i++) {
+ // Count backwards from the ends of each list.
+ var actualIndex = actualLines.length - i - 1;
+ var expectedIndex = expectedLines.length - i - 1;
+ if (actualLines[actualIndex] != expectedLines[expectedIndex]) break;
+ matchingActual.add(actualIndex);
+ matchingExpected.add(expectedIndex);
+ }
+
+ var buffer = StringBuffer();
+ void writeLine(int index, String line, Set<int> matchingLines) {
+ // Only show the line if it was different from the expectation.
+ if (matchingLines.contains(index)) {
+ buffer.writeln(" : $line");
+ } else {
+ buffer.writeln("${(index + 1).toString().padLeft(4)}: $line");
+ }
+ }
+
+ buffer.writeln("Output did not match expectation. Expected:");
+ for (var i = 0; i < expectedLines.length; i++) {
+ writeLine(i, expectedLines[i], matchingExpected);
+ }
+
+ buffer.writeln();
+ buffer.writeln("Was:");
+ for (var i = 0; i < actualLines.length; i++) {
+ writeLine(i, actualLines[i], matchingActual);
+ }
+
+ Expect.fail(buffer.toString());
}
}
diff --git a/pkg/test_runner/tool/update_static_error_tests.dart b/pkg/test_runner/tool/update_static_error_tests.dart
index a8017d7..263fc75 100644
--- a/pkg/test_runner/tool/update_static_error_tests.dart
+++ b/pkg/test_runner/tool/update_static_error_tests.dart
@@ -19,6 +19,8 @@
"Usage: dart update_static_error_tests.dart [flags...] <path glob>";
Future<void> main(List<String> args) async {
+ var sources = ErrorSource.all.map((e) => e.marker).toList();
+
var parser = ArgParser();
parser.addFlag("help", abbr: "h");
@@ -28,41 +30,32 @@
help: "Print result but do not overwrite any files.",
negatable: false);
- parser.addSeparator("Strip expectations out of the tests:");
- parser.addFlag("remove",
+ parser.addSeparator("What operations to perform:");
+ parser.addFlag("remove-all",
abbr: "r",
help: "Remove all existing error expectations.",
negatable: false);
- parser.addFlag("remove-analyzer",
- help: "Remove existing analyzer error expectations.", negatable: false);
- parser.addFlag("remove-cfe",
- help: "Remove existing CFE error expectations.", negatable: false);
-
- parser.addSeparator(
- "Insert expectations in the tests based on current front end output:");
- parser.addFlag("insert",
+ parser.addMultiOption("remove",
+ help: "Remove error expectations for given front ends.",
+ allowed: sources);
+ parser.addFlag("insert-all",
abbr: "i",
- help: "Insert analyzer and CFE error expectations.",
+ help: "Insert error expectations for all front ends.",
negatable: false);
- parser.addFlag("insert-analyzer",
- help: "Insert analyzer error expectations.", negatable: false);
- parser.addFlag("insert-cfe",
- help: "Insert CFE error expectations.", negatable: false);
-
- parser.addSeparator("Update combines remove and insert:");
- parser.addFlag("update",
+ parser.addMultiOption("insert",
+ help: "Insert error expectations from given front ends.",
+ allowed: sources);
+ parser.addFlag("update-all",
abbr: "u",
- help: "Replace analyzer and CFE error expectations.",
+ help: "Replace error expectations for all front ends.",
negatable: false);
- parser.addFlag("update-analyzer",
- help: "Replace analyzer error expectations.", negatable: false);
- parser.addFlag("update-cfe",
- help: "Replace CFE error expectations.", negatable: false);
+ parser.addMultiOption("update",
+ help: "Update error expectations for given front ends.",
+ allowed: sources);
parser.addSeparator("Other flags:");
- parser.addFlag("nnbd",
- help: "Analyze with the 'non-nullable' experiment enabled.",
- negatable: false);
+ parser.addFlag("null-safety",
+ help: "Enable the 'non-nullable' experiment.", negatable: false);
var results = parser.parse(args);
@@ -76,29 +69,38 @@
}
var dryRun = results["dry-run"] as bool;
- var removeAnalyzer = results["remove-analyzer"] as bool ||
- results["remove"] as bool ||
- results["update-analyzer"] as bool ||
- results["update"] as bool;
+ var nullSafety = results["null-safety"] as bool;
- var removeCfe = results["remove-cfe"] as bool ||
- results["remove"] as bool ||
- results["update-cfe"] as bool ||
- results["update"] as bool;
+ var removeSources = <ErrorSource>{};
+ var insertSources = <ErrorSource>{};
- var insertAnalyzer = results["insert-analyzer"] as bool ||
- results["insert"] as bool ||
- results["update-analyzer"] as bool ||
- results["update"] as bool;
+ for (var source in results["remove"] as List<String>) {
+ removeSources.add(ErrorSource.find(source));
+ }
- var insertCfe = results["insert-cfe"] as bool ||
- results["insert"] as bool ||
- results["update-cfe"] as bool ||
- results["update"] as bool;
+ for (var source in results["insert"] as List<String>) {
+ insertSources.add(ErrorSource.find(source));
+ }
- var nnbd = results["nnbd"] as bool;
+ for (var source in results["update"] as List<String>) {
+ removeSources.add(ErrorSource.find(source));
+ insertSources.add(ErrorSource.find(source));
+ }
- if (!removeAnalyzer && !removeCfe && !insertAnalyzer && !insertCfe) {
+ if (results["remove-all"] as bool) {
+ removeSources.addAll(ErrorSource.all);
+ }
+
+ if (results["insert-all"] as bool) {
+ insertSources.addAll(ErrorSource.all);
+ }
+
+ if (results["update-all"] as bool) {
+ removeSources.addAll(ErrorSource.all);
+ insertSources.addAll(ErrorSource.all);
+ }
+
+ if (removeSources.isEmpty && insertSources.isEmpty) {
_usageError(
parser, "Must provide at least one flag for an operation to perform.");
}
@@ -109,11 +111,13 @@
}
var result = results.rest.single;
+
// Allow tests to be specified without the extension for compatibility with
// the regular test runner syntax.
if (!result.endsWith(".dart")) {
result += ".dart";
}
+
// Allow tests to be specified either relative to the "tests" directory
// or relative to the current directory.
var root = result.startsWith("tests") ? "." : "tests";
@@ -124,17 +128,15 @@
if (entry is File) {
await _processFile(entry,
dryRun: dryRun,
- removeAnalyzer: removeAnalyzer,
- removeCfe: removeCfe,
- insertAnalyzer: insertAnalyzer,
- insertCfe: insertCfe,
- nnbd: nnbd);
+ remove: removeSources,
+ insert: insertSources,
+ nullSafety: nullSafety);
}
}
}
void _usageError(ArgParser parser, String message) {
- stderr.writeln("Usage error: $message");
+ stderr.writeln(message);
stderr.writeln();
stderr.writeln(_usage);
stderr.writeln(parser.usage);
@@ -143,17 +145,15 @@
Future<void> _processFile(File file,
{bool dryRun,
- bool removeAnalyzer,
- bool removeCfe,
- bool insertAnalyzer,
- bool insertCfe,
- bool nnbd}) async {
+ Set<ErrorSource> remove,
+ Set<ErrorSource> insert,
+ bool nullSafety}) async {
stdout.write("${file.path}...");
var source = file.readAsStringSync();
var testFile = TestFile.parse(Path("."), file.absolute.path, source);
var experiments = [
- if (nnbd) "non-nullable",
+ if (nullSafety) "non-nullable",
if (testFile.experiments.isNotEmpty) ...testFile.experiments
];
@@ -163,7 +163,7 @@
];
var errors = <StaticError>[];
- if (insertAnalyzer) {
+ if (insert.contains(ErrorSource.analyzer)) {
stdout.write("\r${file.path} (Running analyzer...)");
var fileErrors = await runAnalyzer(file.absolute.path, options);
if (fileErrors == null) {
@@ -173,7 +173,7 @@
}
}
- if (insertCfe) {
+ if (insert.contains(ErrorSource.cfe)) {
// Clear the previous line.
stdout.write("\r${file.path} ");
stdout.write("\r${file.path} (Running CFE...)");
@@ -185,10 +185,13 @@
}
}
+ if (insert.contains(ErrorSource.web)) {
+ // TODO(rnystrom): Run DDC and collect web errors.
+ }
+
errors = StaticError.simplify(errors);
- var result = updateErrorExpectations(source, errors,
- removeAnalyzer: removeAnalyzer, removeCfe: removeCfe);
+ var result = updateErrorExpectations(source, errors, remove: remove);
stdout.writeln("\r${file.path} (Updated with ${errors.length} errors)");
diff --git a/pkg/vm/lib/bytecode/gen_bytecode.dart b/pkg/vm/lib/bytecode/gen_bytecode.dart
index 6a2d435..ae66a6a6 100644
--- a/pkg/vm/lib/bytecode/gen_bytecode.dart
+++ b/pkg/vm/lib/bytecode/gen_bytecode.dart
@@ -1488,7 +1488,9 @@
for (int i = 0; i < typeArgs.length; ++i) {
final typeArg = typeArgs[i];
if (!(typeArg is TypeParameterType &&
- typeArg.parameter == functionTypeParameters[i])) {
+ typeArg.parameter == functionTypeParameters[i] &&
+ (typeArg.nullability == Nullability.nonNullable ||
+ typeArg.nullability == Nullability.undetermined))) {
return false;
}
}
diff --git a/pkg/vm/lib/bytecode/object_table.dart b/pkg/vm/lib/bytecode/object_table.dart
index 338bb5f..734c26e 100644
--- a/pkg/vm/lib/bytecode/object_table.dart
+++ b/pkg/vm/lib/bytecode/object_table.dart
@@ -335,6 +335,20 @@
String objectKindToString(ObjectKind kind) =>
kind.toString().substring('ObjectKind.k'.length);
+String nullabilityToString(Nullability nullability) {
+ switch (nullability) {
+ case Nullability.legacy:
+ return '*';
+ case Nullability.nullable:
+ return '?';
+ case Nullability.undetermined:
+ return '%';
+ case Nullability.nonNullable:
+ return '';
+ }
+ throw "Unknown Nullability: $nullability";
+}
+
/// Represents object (library, class, member, closure, type or name) in the
/// object table.
abstract class ObjectHandle extends BytecodeObject {
@@ -763,8 +777,7 @@
other is _NeverTypeHandle && this.nullability == other.nullability;
@override
- // TODO(regis): Print nullability.
- String toString() => 'Never';
+ String toString() => 'Never${nullabilityToString(nullability)}';
}
class _SimpleTypeHandle extends _TypeHandle {
@@ -803,8 +816,7 @@
this.nullability == other.nullability;
@override
- // TODO(regis): Print nullability.
- String toString() => '$class_';
+ String toString() => '$class_${nullabilityToString(nullability)}';
}
class _TypeParameterHandle extends _TypeHandle {
@@ -857,8 +869,8 @@
this.nullability == other.nullability;
@override
- // TODO(regis): Print nullability.
- String toString() => '$parent::TypeParam/$indexInParent';
+ String toString() =>
+ '$parent::TypeParam/$indexInParent${nullabilityToString(nullability)}';
}
class _GenericTypeHandle extends _TypeHandle {
@@ -903,8 +915,7 @@
this.nullability == other.nullability;
@override
- // TODO(regis): Print nullability.
- String toString() => '$class_ $typeArgs';
+ String toString() => '$class_ $typeArgs${nullabilityToString(nullability)}';
}
class _RecursiveGenericTypeHandle extends _TypeHandle {
@@ -956,8 +967,8 @@
this.nullability == other.nullability;
@override
- // TODO(regis): Print nullability.
- String toString() => '(recursive #$id) $class_ $typeArgs';
+ String toString() =>
+ '(recursive #$id) $class_ $typeArgs${nullabilityToString(nullability)}';
}
class _RecursiveTypeRefHandle extends _TypeHandle {
@@ -1009,7 +1020,6 @@
this.type == other.type;
@override
- // TODO(regis): Print nullability.
String toString() => '$type ${name.name}';
}
@@ -1139,6 +1149,7 @@
hash = _combineHashes(hash, listHashCode(positionalParams));
hash = _combineHashes(hash, listHashCode(namedParams));
hash = _combineHashes(hash, returnType.hashCode);
+ hash = _combineHashes(hash, nullability.index);
return hash;
}
@@ -1149,10 +1160,10 @@
this.numRequiredParams == other.numRequiredParams &&
listEquals(this.positionalParams, other.positionalParams) &&
listEquals(this.namedParams, other.namedParams) &&
- this.returnType == other.returnType;
+ this.returnType == other.returnType &&
+ this.nullability == other.nullability;
@override
- // TODO(regis): Print nullability.
String toString() {
StringBuffer sb = new StringBuffer();
sb.write('FunctionType');
@@ -1173,7 +1184,7 @@
}
sb.write('{ ${namedParams.join(', ')} }');
}
- sb.write(') -> ');
+ sb.write(')${nullabilityToString(nullability)} -> ');
sb.write(returnType);
return sb.toString();
}
diff --git a/pkg/vm/testcases/bytecode/asserts.dart.expect b/pkg/vm/testcases/bytecode/asserts.dart.expect
index 5da6d08..39a0d1e 100644
--- a/pkg/vm/testcases/bytecode/asserts.dart.expect
+++ b/pkg/vm/testcases/bytecode/asserts.dart.expect
@@ -11,7 +11,7 @@
Function 'test1', static, reflectable, debuggable
- parameters [dart:core::bool 'condition'] (required: 1)
+ parameters [dart:core::bool* 'condition'] (required: 1)
return-type void
Bytecode {
@@ -37,7 +37,7 @@
Function 'test2', static, reflectable, debuggable
- parameters [FunctionType () -> dart:core::bool 'condition', FunctionType () -> dart:core::String 'message'] (required: 2)
+ parameters [FunctionType ()* -> dart:core::bool* 'condition', FunctionType ()* -> dart:core::String* 'message'] (required: 2)
return-type void
Bytecode {
diff --git a/pkg/vm/testcases/bytecode/async.dart.expect b/pkg/vm/testcases/bytecode/async.dart.expect
index b758e31..7c448ee 100644
--- a/pkg/vm/testcases/bytecode/async.dart.expect
+++ b/pkg/vm/testcases/bytecode/async.dart.expect
@@ -9,7 +9,7 @@
Class '', script = '#lib'
-Field 'asyncInFieldInitializer', type = FunctionType (dart:async::Future < dart:core::int >) -> dart:async::Future < dart:core::Null >, getter = 'get:asyncInFieldInitializer', reflectable, static, has-initializer
+Field 'asyncInFieldInitializer', type = FunctionType (dart:async::Future < dart:core::int* >*)* -> dart:async::Future < dart:core::Null? >*, getter = 'get:asyncInFieldInitializer', reflectable, static, has-initializer
initializer
Bytecode {
Entry 3
@@ -34,11 +34,11 @@
[0] = ClosureFunction 0
[1] = InstanceField dart:core::_Closure::_context (field)
[2] = Reserved
- [3] = Type dart:async::Future < dart:core::int >
+ [3] = Type dart:async::Future < dart:core::int* >*
[4] = ObjectRef 'x'
[5] = SubtypeTestCache
[6] = Class dart:async::_AsyncAwaitCompleter
- [7] = ObjectRef < dart:core::Null >
+ [7] = ObjectRef < dart:core::Null? >
[8] = DirectCall 'dart:async::_AsyncAwaitCompleter:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[9] = Reserved
[10] = ClosureFunction 1
@@ -67,7 +67,7 @@
[33] = Reserved
[34] = EndClosureFunctionScope
}
-Closure #lib::asyncInFieldInitializer (field)::'<anonymous closure>' async (dart:async::Future < dart:core::int > x) -> dart:async::Future < dart:core::Null >
+Closure #lib::asyncInFieldInitializer (field)::'<anonymous closure>' async (dart:async::Future < dart:core::int* >* x) -> dart:async::Future < dart:core::Null? >*
ClosureCode {
EntryFixed 2, 4
Push FP[-6]
@@ -233,7 +233,7 @@
Function 'foo', static, reflectable, async
parameters [] (required: 0)
- return-type dart:async::Future < dart:core::int >
+ return-type dart:async::Future < dart:core::int* >*
Bytecode {
Entry 7
@@ -293,7 +293,7 @@
}
ConstantPool {
[0] = Class dart:async::_AsyncAwaitCompleter
- [1] = ObjectRef < dart:core::int >
+ [1] = ObjectRef < dart:core::int* >
[2] = DirectCall 'dart:async::_AsyncAwaitCompleter:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[3] = Reserved
[4] = ClosureFunction 0
@@ -380,8 +380,8 @@
Function 'simpleAsyncAwait', static, reflectable, async
- parameters [dart:async::Future < dart:core::int > 'a', dart:async::Future < dart:core::int > 'b'] (required: 2)
- return-type dart:async::Future < dart:core::int >
+ parameters [dart:async::Future < dart:core::int* >* 'a', dart:async::Future < dart:core::int* >* 'b'] (required: 2)
+ return-type dart:async::Future < dart:core::int* >*
Bytecode {
Entry 4
@@ -449,7 +449,7 @@
}
ConstantPool {
[0] = Class dart:async::_AsyncAwaitCompleter
- [1] = ObjectRef < dart:core::int >
+ [1] = ObjectRef < dart:core::int* >
[2] = DirectCall 'dart:async::_AsyncAwaitCompleter:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[3] = Reserved
[4] = ClosureFunction 0
@@ -605,8 +605,8 @@
Function 'loops', static, reflectable, async
- parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
- return-type dart:async::Future < dart:core::int >
+ parameters [dart:core::List < dart:core::int* >* 'list'] (required: 1)
+ return-type dart:async::Future < dart:core::int* >*
Bytecode {
Entry 4
@@ -671,7 +671,7 @@
}
ConstantPool {
[0] = Class dart:async::_AsyncAwaitCompleter
- [1] = ObjectRef < dart:core::int >
+ [1] = ObjectRef < dart:core::int* >
[2] = DirectCall 'dart:async::_AsyncAwaitCompleter:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[3] = Reserved
[4] = ClosureFunction 0
@@ -951,8 +951,8 @@
Function 'tryCatchRethrow', static, reflectable, async
- parameters [dart:async::Future < dart:core::int > 'a', dart:async::Future < dart:core::int > 'b', dart:async::Future < dart:core::int > 'c'] (required: 3)
- return-type dart:async::Future < dart:core::int >
+ parameters [dart:async::Future < dart:core::int* >* 'a', dart:async::Future < dart:core::int* >* 'b', dart:async::Future < dart:core::int* >* 'c'] (required: 3)
+ return-type dart:async::Future < dart:core::int* >*
Bytecode {
Entry 4
@@ -1023,7 +1023,7 @@
}
ConstantPool {
[0] = Class dart:async::_AsyncAwaitCompleter
- [1] = ObjectRef < dart:core::int >
+ [1] = ObjectRef < dart:core::int* >
[2] = DirectCall 'dart:async::_AsyncAwaitCompleter:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[3] = Reserved
[4] = ClosureFunction 0
@@ -1033,7 +1033,7 @@
[8] = DirectCall 'dart:async::_awaitHelper', ArgDesc num-args 4, num-type-args 0, names []
[9] = Reserved
[10] = Type dynamic
- [11] = Type dart:core::Error
+ [11] = Type dart:core::Error*
[12] = InterfaceCall 'dart:core::Object::_simpleInstanceOf', ArgDesc num-args 2, num-type-args 0, names []
[13] = Reserved
[14] = ObjectRef 'fin'
@@ -1480,7 +1480,7 @@
Function 'closure', static, reflectable, debuggable
- parameters [dart:async::Future < dart:core::int > 'a'] (required: 1)
+ parameters [dart:async::Future < dart:core::int* >* 'a'] (required: 1)
return-type dynamic
Bytecode {
@@ -1517,7 +1517,7 @@
[1] = InstanceField dart:core::_Closure::_context (field)
[2] = Reserved
[3] = Class dart:async::_AsyncAwaitCompleter
- [4] = ObjectRef < dart:core::int >
+ [4] = ObjectRef < dart:core::int* >
[5] = DirectCall 'dart:async::_AsyncAwaitCompleter:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[6] = Reserved
[7] = ClosureFunction 1
@@ -1549,7 +1549,7 @@
[33] = Reserved
[34] = EndClosureFunctionScope
}
-Closure #lib::closure::'nested' async () -> dart:async::Future < dart:core::int >
+Closure #lib::closure::'nested' async () -> dart:async::Future < dart:core::int* >*
ClosureCode {
EntryFixed 1, 4
Push FP[-5]
@@ -1776,8 +1776,8 @@
Function 'testAssert', static, reflectable, async
- parameters [dart:async::Future < dart:core::int > 'a'] (required: 1)
- return-type dart:async::Future < dart:core::int >
+ parameters [dart:async::Future < dart:core::int* >* 'a'] (required: 1)
+ return-type dart:async::Future < dart:core::int* >*
Bytecode {
Entry 4
@@ -1842,7 +1842,7 @@
}
ConstantPool {
[0] = Class dart:async::_AsyncAwaitCompleter
- [1] = ObjectRef < dart:core::int >
+ [1] = ObjectRef < dart:core::int* >
[2] = DirectCall 'dart:async::_AsyncAwaitCompleter:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[3] = Reserved
[4] = ClosureFunction 0
diff --git a/pkg/vm/testcases/bytecode/bootstrapping.dart.expect b/pkg/vm/testcases/bytecode/bootstrapping.dart.expect
index 6551407..ba143ef 100644
--- a/pkg/vm/testcases/bytecode/bootstrapping.dart.expect
+++ b/pkg/vm/testcases/bytecode/bootstrapping.dart.expect
@@ -9,23 +9,23 @@
Class '', script = '#lib'
-Field '_stdinFD', type = dart:core::int, reflectable, static, has-initializer
+Field '_stdinFD', type = dart:core::int*, reflectable, static, has-initializer
value = const 0
-Field '_stdoutFD', type = dart:core::int, reflectable, static, has-initializer
+Field '_stdoutFD', type = dart:core::int*, reflectable, static, has-initializer
value = const 1
-Field '_stderrFD', type = dart:core::int, reflectable, static, has-initializer
+Field '_stderrFD', type = dart:core::int*, reflectable, static, has-initializer
value = const 2
-Field '_rawScript', type = dart:core::String, reflectable, static
+Field '_rawScript', type = dart:core::String*, reflectable, static
value = null
-Field '_stdin', type = #lib::Stdin, reflectable, static
+Field '_stdin', type = #lib::Stdin*, reflectable, static
value = null
Function '_printString', static, reflectable, debuggable, native 'Builtin_PrintString'
- parameters [dart:core::String 's'] (required: 1)
+ parameters [dart:core::String* 's'] (required: 1)
return-type void
Bytecode {
@@ -78,7 +78,7 @@
Function '_setScheduleImmediateClosure', static, reflectable, debuggable
- parameters [FunctionType (FunctionType () -> void) -> void 'closure'] (required: 1)
+ parameters [FunctionType (FunctionType ()* -> void)* -> void 'closure'] (required: 1)
return-type void
Bytecode {
@@ -95,7 +95,7 @@
Function '_setStdioFDs', static, reflectable, debuggable
- parameters [dart:core::int 'stdin', dart:core::int 'stdout', dart:core::int 'stderr'] (required: 3)
+ parameters [dart:core::int* 'stdin', dart:core::int* 'stdout', dart:core::int* 'stderr'] (required: 3)
return-type void
Bytecode {
@@ -119,7 +119,7 @@
Function '_scriptUri', static, reflectable, debuggable
parameters [] (required: 0)
- return-type dart:core::Uri
+ return-type dart:core::Uri*
Bytecode {
Entry 2
@@ -191,7 +191,7 @@
Function 'get:stdin', getter, static, reflectable, debuggable
parameters [] (required: 0)
- return-type #lib::Stdin
+ return-type #lib::Stdin*
Bytecode {
Entry 2
@@ -236,14 +236,14 @@
}
Class '_ScheduleImmediate', script = '#lib'
- extends dart:core::Object
+ extends dart:core::Object*
-Field '_closure', type = FunctionType (FunctionType () -> void) -> void, reflectable, static, has-initializer
+Field '_closure', type = FunctionType (FunctionType ()* -> void)* -> void, reflectable, static, has-initializer
value = null
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::_ScheduleImmediate
+ return-type #lib::_ScheduleImmediate*
Bytecode {
Entry 0
@@ -262,53 +262,53 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class '_NamespaceImpl', script = '#lib'
- extends dart:core::Object
- implements [#lib::_Namespace]
+ extends dart:core::Object*
+ implements [#lib::_Namespace*]
-Field '_cachedNamespace', type = #lib::_NamespaceImpl, reflectable, static, has-initializer
+Field '_cachedNamespace', type = #lib::_NamespaceImpl*, reflectable, static, has-initializer
value = null
Function '_', constructor, reflectable, debuggable
parameters [] (required: 0)
- return-type #lib::_NamespaceImpl
+ return-type #lib::_NamespaceImpl*
Bytecode {
Entry 0
@@ -326,8 +326,8 @@
Function '_create', static, reflectable, debuggable, native 'Namespace_Create'
- parameters [#lib::_NamespaceImpl 'namespace', dynamic 'n'] (required: 2)
- return-type #lib::_NamespaceImpl
+ parameters [#lib::_NamespaceImpl* 'namespace', dynamic 'n'] (required: 2)
+ return-type #lib::_NamespaceImpl*
Bytecode {
Entry 0
@@ -343,8 +343,8 @@
Function '_getPointer', static, reflectable, debuggable, native 'Namespace_GetPointer'
- parameters [#lib::_NamespaceImpl 'namespace'] (required: 1)
- return-type dart:core::int
+ parameters [#lib::_NamespaceImpl* 'namespace'] (required: 1)
+ return-type dart:core::int*
Bytecode {
Entry 0
@@ -360,7 +360,7 @@
Function '_getDefault', static, reflectable, debuggable, native 'Namespace_GetDefault'
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Bytecode {
Entry 0
@@ -403,7 +403,7 @@
Function 'get:_namespace', getter, static, reflectable, debuggable
parameters [] (required: 0)
- return-type #lib::_NamespaceImpl
+ return-type #lib::_NamespaceImpl*
Bytecode {
Entry 2
@@ -436,7 +436,7 @@
Function 'get:_namespacePointer', getter, static, reflectable, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Bytecode {
Entry 0
@@ -455,50 +455,50 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class '_Namespace', script = '#lib'
- extends dart:core::Object
+ extends dart:core::Object*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::_Namespace
+ return-type #lib::_Namespace*
Bytecode {
Entry 0
@@ -536,7 +536,7 @@
Function 'get:_namespace', getter, static, reflectable, debuggable
parameters [] (required: 0)
- return-type #lib::_Namespace
+ return-type #lib::_Namespace*
Bytecode {
Entry 0
@@ -552,7 +552,7 @@
Function 'get:_namespacePointer', getter, static, reflectable, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Bytecode {
Entry 0
@@ -568,45 +568,45 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'VMLibraryHooks', script = '#lib'
- extends dart:core::Object
+ extends dart:core::Object*
Field 'timerFactory', type = dynamic, reflectable, static, has-initializer
value = null
@@ -643,7 +643,7 @@
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::VMLibraryHooks
+ return-type #lib::VMLibraryHooks*
Bytecode {
Entry 0
@@ -708,50 +708,50 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'Stdin', script = '#lib'
- extends dart:core::Object
+ extends dart:core::Object*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::Stdin
+ return-type #lib::Stdin*
Bytecode {
Entry 0
@@ -770,50 +770,50 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class '_StdIOUtils', script = '#lib'
- extends dart:core::Object
+ extends dart:core::Object*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::_StdIOUtils
+ return-type #lib::_StdIOUtils*
Bytecode {
Entry 0
@@ -831,8 +831,8 @@
Function '_getStdioInputStream', static, reflectable, debuggable
- parameters [dart:core::int 'fd'] (required: 1)
- return-type #lib::Stdin
+ parameters [dart:core::int* 'fd'] (required: 1)
+ return-type #lib::Stdin*
Bytecode {
Entry 0
@@ -846,43 +846,43 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
}
]library #lib from "#lib" as #lib {
diff --git a/pkg/vm/testcases/bytecode/closures.dart.expect b/pkg/vm/testcases/bytecode/closures.dart.expect
index 97d6e4e..711bace 100644
--- a/pkg/vm/testcases/bytecode/closures.dart.expect
+++ b/pkg/vm/testcases/bytecode/closures.dart.expect
@@ -12,7 +12,7 @@
Function 'simpleClosure', static, reflectable, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Bytecode {
Entry 4
@@ -51,7 +51,7 @@
[0] = ClosureFunction 0
[1] = InstanceField dart:core::_Closure::_context (field)
[2] = Reserved
- [3] = Type dart:core::int
+ [3] = Type dart:core::int*
[4] = ObjectRef 'y'
[5] = SubtypeTestCache
[6] = EndClosureFunctionScope
@@ -63,7 +63,7 @@
[12] = Reserved
[13] = ObjectRef ArgDesc num-args 2, num-type-args 0, names []
}
-Closure #lib::simpleClosure::'<anonymous closure>' (dart:core::int y) -> dart:core::Null
+Closure #lib::simpleClosure::'<anonymous closure>' (dart:core::int* y) -> dart:core::Null?
ClosureCode {
EntryFixed 2, 3
Push FP[-6]
@@ -92,7 +92,7 @@
Function 'callWithArgs', static, reflectable, debuggable
- type-params <dart:core::Object T1, dart:core::Object T2, dart:core::Object T3, dart:core::Object T4, dart:core::Object T5, dart:core::Object T6, dart:core::Object T7, dart:core::Object T8>
+ type-params <dart:core::Object* T1, dart:core::Object* T2, dart:core::Object* T3, dart:core::Object* T4, dart:core::Object* T5, dart:core::Object* T6, dart:core::Object* T7, dart:core::Object* T8>
parameters [] (required: 0)
return-type void
@@ -161,15 +161,15 @@
ReturnTOS
}
ConstantPool {
- [0] = ObjectRef < dart:core::Type >
- [1] = Type #lib::callWithArgs::TypeParam/0
- [2] = Type #lib::callWithArgs::TypeParam/1
- [3] = Type #lib::callWithArgs::TypeParam/2
- [4] = Type #lib::callWithArgs::TypeParam/3
- [5] = Type #lib::callWithArgs::TypeParam/4
- [6] = Type #lib::callWithArgs::TypeParam/5
- [7] = Type #lib::callWithArgs::TypeParam/6
- [8] = Type #lib::callWithArgs::TypeParam/7
+ [0] = ObjectRef < dart:core::Type* >
+ [1] = Type #lib::callWithArgs::TypeParam/0*
+ [2] = Type #lib::callWithArgs::TypeParam/1*
+ [3] = Type #lib::callWithArgs::TypeParam/2*
+ [4] = Type #lib::callWithArgs::TypeParam/3*
+ [5] = Type #lib::callWithArgs::TypeParam/4*
+ [6] = Type #lib::callWithArgs::TypeParam/5*
+ [7] = Type #lib::callWithArgs::TypeParam/6*
+ [8] = Type #lib::callWithArgs::TypeParam/7*
[9] = DirectCall 'dart:core::List::_fromLiteral (constructor)', ArgDesc num-args 2, num-type-args 0, names []
[10] = Reserved
[11] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
@@ -218,21 +218,21 @@
ReturnTOS
}
ConstantPool {
- [0] = ObjectRef < #lib::C3, #lib::C4 >
+ [0] = ObjectRef < #lib::C3*, #lib::C4* >
[1] = Class #lib::A
- [2] = ObjectRef < #lib::C1, #lib::C2 >
+ [2] = ObjectRef < #lib::C1*, #lib::C2* >
[3] = DirectCall '#lib::A:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[4] = Reserved
[5] = InterfaceCall '#lib::A::foo', ArgDesc num-args 1, num-type-args 2, names []
[6] = Reserved
- [7] = ObjectRef < dart:core::List < #lib::C3 >, dart:core::List < #lib::C4 > >
- [8] = ObjectRef < dart:core::List < #lib::C1 >, dart:core::List < #lib::C2 > >
+ [7] = ObjectRef < dart:core::List < #lib::C3* >*, dart:core::List < #lib::C4* >* >
+ [8] = ObjectRef < dart:core::List < #lib::C1* >*, dart:core::List < #lib::C2* >* >
}
Function 'testPartialInstantiation', static, reflectable, debuggable
parameters [] (required: 0)
- return-type FunctionType (dart:core::int) -> dynamic
+ return-type FunctionType (dart:core::int*)* -> dynamic
Bytecode {
Entry 7
@@ -297,7 +297,7 @@
[7] = Reserved
[8] = DirectCall 'dart:_internal::_prependTypeArguments', ArgDesc num-args 4, num-type-args 0, names []
[9] = Reserved
- [10] = Type #lib::testPartialInstantiation::Closure/0::TypeParam/0
+ [10] = Type #lib::testPartialInstantiation::Closure/0::TypeParam/0*
[11] = ObjectRef 't'
[12] = SubtypeTestCache
[13] = EndClosureFunctionScope
@@ -305,12 +305,12 @@
[15] = Reserved
[16] = InstanceField dart:core::_Closure::_function (field)
[17] = Reserved
- [18] = ObjectRef < dart:core::int >
+ [18] = ObjectRef < dart:core::int* >
[19] = DirectCall 'dart:_internal::_boundsCheckForPartialInstantiation', ArgDesc num-args 2, num-type-args 0, names []
[20] = Reserved
[21] = Class dart:core::_Closure
}
-Closure #lib::testPartialInstantiation::'foo' <dart:core::Object T> (#lib::testPartialInstantiation::Closure/0::TypeParam/0 t) -> void
+Closure #lib::testPartialInstantiation::'foo' <dart:core::Object* T> (#lib::testPartialInstantiation::Closure/0::TypeParam/0* t) -> void
ClosureCode {
EntryFixed 2, 3
Push FP[-6]
@@ -362,12 +362,12 @@
}
Class 'C1', script = '#lib'
- extends dart:core::Object
+ extends dart:core::Object*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::C1
+ return-type #lib::C1*
Bytecode {
Entry 0
@@ -386,50 +386,50 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'C2', script = '#lib'
- extends dart:core::Object
+ extends dart:core::Object*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::C2
+ return-type #lib::C2*
Bytecode {
Entry 0
@@ -448,50 +448,50 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'C3', script = '#lib'
- extends dart:core::Object
+ extends dart:core::Object*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::C3
+ return-type #lib::C3*
Bytecode {
Entry 0
@@ -510,50 +510,50 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'C4', script = '#lib'
- extends dart:core::Object
+ extends dart:core::Object*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::C4
+ return-type #lib::C4*
Bytecode {
Entry 0
@@ -572,50 +572,50 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'C5', script = '#lib'
- extends dart:core::Object
+ extends dart:core::Object*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::C5
+ return-type #lib::C5*
Bytecode {
Entry 0
@@ -634,50 +634,50 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'C6', script = '#lib'
- extends dart:core::Object
+ extends dart:core::Object*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::C6
+ return-type #lib::C6*
Bytecode {
Entry 0
@@ -696,50 +696,50 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'C7', script = '#lib'
- extends dart:core::Object
+ extends dart:core::Object*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::C7
+ return-type #lib::C7*
Bytecode {
Entry 0
@@ -758,50 +758,50 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'C8', script = '#lib'
- extends dart:core::Object
+ extends dart:core::Object*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::C8
+ return-type #lib::C8*
Bytecode {
Entry 0
@@ -820,51 +820,51 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'A', script = '#lib'
- type-params <dart:core::Object T1, dart:core::Object T2> (args: 2)
- extends dart:core::Object
+ type-params <dart:core::Object* T1, dart:core::Object* T2> (args: 2)
+ extends dart:core::Object*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::A < #lib::A::TypeParam/0, #lib::A::TypeParam/1 >
+ return-type #lib::A < #lib::A::TypeParam/0*, #lib::A::TypeParam/1* >*
Bytecode {
Entry 0
@@ -882,7 +882,7 @@
Function 'foo', reflectable, debuggable
- type-params <dart:core::Object T3, dart:core::Object T4>
+ type-params <dart:core::Object* T3, dart:core::Object* T4>
parameters [] (required: 0)
return-type void
@@ -942,21 +942,21 @@
[9] = Reserved
[10] = ClosureFunction 1
[11] = ClosureFunction 2
- [12] = ObjectRef < dart:core::Type >
- [13] = Type #lib::A::TypeParam/0
+ [12] = ObjectRef < dart:core::Type* >
+ [13] = Type #lib::A::TypeParam/0*
[14] = TypeArgumentsField #lib::A
- [15] = Type #lib::A::TypeParam/1
- [16] = Type #lib::A::foo::TypeParam/0
- [17] = Type #lib::A::foo::TypeParam/1
- [18] = Type #lib::A::foo::Closure/0::TypeParam/0
- [19] = Type #lib::A::foo::Closure/0::TypeParam/1
- [20] = Type #lib::A::foo::Closure/1::TypeParam/0
- [21] = Type #lib::A::foo::Closure/1::TypeParam/1
+ [15] = Type #lib::A::TypeParam/1*
+ [16] = Type #lib::A::foo::TypeParam/0*
+ [17] = Type #lib::A::foo::TypeParam/1*
+ [18] = Type #lib::A::foo::Closure/0::TypeParam/0*
+ [19] = Type #lib::A::foo::Closure/0::TypeParam/1*
+ [20] = Type #lib::A::foo::Closure/1::TypeParam/0*
+ [21] = Type #lib::A::foo::Closure/1::TypeParam/1*
[22] = DirectCall 'dart:core::List::_fromLiteral (constructor)', ArgDesc num-args 2, num-type-args 0, names []
[23] = Reserved
[24] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
[25] = Reserved
- [26] = ObjectRef < #lib::A::TypeParam/0, #lib::A::TypeParam/1, #lib::A::foo::TypeParam/0, #lib::A::foo::TypeParam/1, #lib::A::foo::Closure/0::TypeParam/0, #lib::A::foo::Closure/0::TypeParam/1, #lib::A::foo::Closure/1::TypeParam/0, #lib::A::foo::Closure/1::TypeParam/1 >
+ [26] = ObjectRef < #lib::A::TypeParam/0*, #lib::A::TypeParam/1*, #lib::A::foo::TypeParam/0*, #lib::A::foo::TypeParam/1*, #lib::A::foo::Closure/0::TypeParam/0*, #lib::A::foo::Closure/0::TypeParam/1*, #lib::A::foo::Closure/1::TypeParam/0*, #lib::A::foo::Closure/1::TypeParam/1* >
[27] = DirectCall '#lib::callWithArgs', ArgDesc num-args 0, num-type-args 8, names []
[28] = Reserved
[29] = EndClosureFunctionScope
@@ -966,14 +966,14 @@
[33] = Reserved
[34] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
[35] = EndClosureFunctionScope
- [36] = ObjectRef < #lib::C7, #lib::C8 >
+ [36] = ObjectRef < #lib::C7*, #lib::C8* >
[37] = ObjectRef ArgDesc num-args 1, num-type-args 2, names []
- [38] = ObjectRef < dart:core::List < #lib::C7 >, dart:core::List < #lib::C8 > >
+ [38] = ObjectRef < dart:core::List < #lib::C7* >*, dart:core::List < #lib::C8* >* >
[39] = EndClosureFunctionScope
- [40] = ObjectRef < #lib::C5, #lib::C6 >
- [41] = ObjectRef < dart:core::List < #lib::C5 >, dart:core::List < #lib::C6 > >
+ [40] = ObjectRef < #lib::C5*, #lib::C6* >
+ [41] = ObjectRef < dart:core::List < #lib::C5* >*, dart:core::List < #lib::C6* >* >
}
-Closure #lib::A::foo::'nested1' <dart:core::Object T5, dart:core::Object T6> () -> void
+Closure #lib::A::foo::'nested1' <dart:core::Object* T5, dart:core::Object* T6> () -> void
ClosureCode {
EntryFixed 1, 5
Push FP[-5]
@@ -1033,7 +1033,7 @@
ReturnTOS
}
-Closure #lib::A::foo::Closure/0::'nested2' <dart:core::Object T7, dart:core::Object T8> () -> void
+Closure #lib::A::foo::Closure/0::'nested2' <dart:core::Object* T7, dart:core::Object* T8> () -> void
ClosureCode {
EntryFixed 1, 5
Push FP[-5]
@@ -1083,7 +1083,7 @@
ReturnTOS
}
-Closure #lib::A::foo::Closure/1::'<anonymous closure>' () -> dart:core::Null
+Closure #lib::A::foo::Closure/1::'<anonymous closure>' () -> dart:core::Null?
ClosureCode {
EntryFixed 1, 4
Push FP[-5]
@@ -1169,52 +1169,52 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'B', script = '#lib'
- extends dart:core::Object
+ extends dart:core::Object*
-Field 'foo', type = dart:core::int, getter = 'get:foo', setter = 'set:foo', reflectable, has-initializer
+Field 'foo', type = dart:core::int*, getter = 'get:foo', setter = 'set:foo', reflectable, has-initializer
value = null
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::B
+ return-type #lib::B*
Bytecode {
Entry 0
@@ -1320,7 +1320,7 @@
[0] = ClosureFunction 0
[1] = InstanceField dart:core::_Closure::_context (field)
[2] = Reserved
- [3] = Type dart:core::int
+ [3] = Type dart:core::int*
[4] = ObjectRef 'y'
[5] = SubtypeTestCache
[6] = ClosureFunction 1
@@ -1343,7 +1343,7 @@
[23] = Reserved
[24] = EndClosureFunctionScope
}
-Closure #lib::B::topLevel::'<anonymous closure>' (dart:core::int y) -> dart:core::Null
+Closure #lib::B::topLevel::'<anonymous closure>' (dart:core::int* y) -> dart:core::Null?
ClosureCode {
EntryFixed 2, 4
Push FP[-6]
@@ -1443,7 +1443,7 @@
ReturnTOS
}
-Closure #lib::B::topLevel::'<anonymous closure>' () -> dart:core::Null
+Closure #lib::B::topLevel::'<anonymous closure>' () -> dart:core::Null?
ClosureCode {
EntryFixed 1, 3
Push FP[-5]
@@ -1464,50 +1464,50 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'C', script = '#lib'
- extends dart:core::Object
+ extends dart:core::Object*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::C
+ return-type #lib::C*
Bytecode {
Entry 0
@@ -1618,7 +1618,7 @@
ReturnTOS
}
ConstantPool {
- [0] = ObjectRef < dart:core::Function >
+ [0] = ObjectRef < dart:core::Function* >
[1] = ObjectRef const <dynamic> []
[2] = DirectCall 'dart:core::List::_fromLiteral (constructor)', ArgDesc num-args 2, num-type-args 0, names []
[3] = Reserved
@@ -1632,16 +1632,16 @@
[11] = Reserved
[12] = InstanceField dart:core::_Closure::_function (field)
[13] = Reserved
- [14] = InstantiatedInterfaceCall 'dart:core::List::add', ArgDesc num-args 2, num-type-args 0, names [], receiver dart:core::List < dart:core::Function >
+ [14] = InstantiatedInterfaceCall 'dart:core::List::add', ArgDesc num-args 2, num-type-args 0, names [], receiver dart:core::List < dart:core::Function* >*
[15] = Reserved
[16] = Reserved
[17] = ClosureFunction 1
- [18] = Type dart:core::int
+ [18] = Type dart:core::int*
[19] = ObjectRef 'ii'
[20] = SubtypeTestCache
[21] = EndClosureFunctionScope
}
-Closure #lib::C::testForLoop::'<anonymous closure>' () -> dart:core::int
+Closure #lib::C::testForLoop::'<anonymous closure>' () -> dart:core::int*
ClosureCode {
EntryFixed 1, 2
Push FP[-5]
@@ -1658,7 +1658,7 @@
ReturnTOS
}
-Closure #lib::C::testForLoop::'<anonymous closure>' (dart:core::int ii) -> dart:core::Null
+Closure #lib::C::testForLoop::'<anonymous closure>' (dart:core::int* ii) -> dart:core::Null?
ClosureCode {
EntryFixed 2, 3
Push FP[-6]
@@ -1688,7 +1688,7 @@
Function 'testForInLoop', reflectable, debuggable
- parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
+ parameters [dart:core::List < dart:core::int* >* 'list'] (required: 1)
return-type void
Bytecode {
@@ -1762,7 +1762,7 @@
[17] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
[18] = Reserved
}
-Closure #lib::C::testForInLoop::'<anonymous closure>' () -> dart:core::Null
+Closure #lib::C::testForInLoop::'<anonymous closure>' () -> dart:core::Null?
ClosureCode {
EntryFixed 1, 3
Push FP[-5]
@@ -1783,51 +1783,51 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'D', script = '#lib'
- type-params <dart:core::Object T> (args: 1)
- extends dart:core::Object
+ type-params <dart:core::Object* T> (args: 1)
+ extends dart:core::Object*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::D < #lib::D::TypeParam/0 >
+ return-type #lib::D < #lib::D::TypeParam/0* >*
Bytecode {
Entry 0
@@ -1845,7 +1845,7 @@
Function 'foo', reflectable, debuggable
- parameters [#lib::D::TypeParam/0 't'] (required: 1)
+ parameters [#lib::D::TypeParam/0* 't'] (required: 1)
return-type dynamic
Bytecode {
@@ -1885,7 +1885,7 @@
}
Parameter flags: [2]
ConstantPool {
- [0] = Type #lib::D::TypeParam/0
+ [0] = Type #lib::D::TypeParam/0*
[1] = TypeArgumentsField #lib::D
[2] = ObjectRef 't'
[3] = SubtypeTestCache
@@ -1900,7 +1900,7 @@
[12] = InstanceField dart:core::_Closure::_function (field)
[13] = Reserved
}
-Closure #lib::D::foo::'<anonymous closure>' () -> #lib::D::TypeParam/0
+Closure #lib::D::foo::'<anonymous closure>' () -> #lib::D::TypeParam/0*
ClosureCode {
EntryFixed 1, 2
Push FP[-5]
@@ -1959,7 +1959,7 @@
[12] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
[13] = EndClosureFunctionScope
}
-Closure #lib::D::bar::'<anonymous closure>' () -> dart:core::Null
+Closure #lib::D::bar::'<anonymous closure>' () -> dart:core::Null?
ClosureCode {
EntryFixed 1, 4
Push FP[-5]
@@ -1993,7 +1993,7 @@
ReturnTOS
}
-Closure #lib::D::bar::Closure/0::'inner' () -> dart:core::Null
+Closure #lib::D::bar::Closure/0::'inner' () -> dart:core::Null?
ClosureCode {
EntryFixed 1, 2
Push FP[-5]
@@ -2008,52 +2008,52 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'E', script = '#lib', abstract
- extends dart:core::Object
+ extends dart:core::Object*
-Field 'foo1', type = FunctionType (dart:core::int, dart:core::int) -> dart:core::int, getter = 'get:foo1', setter = 'set:foo1', reflectable, has-initializer
+Field 'foo1', type = FunctionType (dart:core::int*, dart:core::int*)* -> dart:core::int*, getter = 'get:foo1', setter = 'set:foo1', reflectable, has-initializer
value = null
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::E
+ return-type #lib::E*
Bytecode {
Entry 0
@@ -2073,23 +2073,23 @@
Function 'get:foo2', getter, abstract, reflectable, debuggable
parameters [] (required: 0)
- return-type FunctionType <dart:core::Object T> (null::TypeParam/0, null::TypeParam/0) -> dart:core::int
+ return-type FunctionType <dart:core::Object* T> (null::TypeParam/0*, null::TypeParam/0*)* -> dart:core::int*
Function 'evalArg1', abstract, reflectable, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'evalArg2', abstract, reflectable, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'getE', abstract, reflectable, debuggable
parameters [] (required: 0)
- return-type #lib::E
+ return-type #lib::E*
Function 'testCallThroughGetter1', reflectable, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Bytecode {
Entry 3
@@ -2122,7 +2122,7 @@
Function 'testCallThroughGetter2', reflectable, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Bytecode {
Entry 3
@@ -2148,7 +2148,7 @@
[1] = Reserved
[2] = InterfaceCall '#lib::E::evalArg2', ArgDesc num-args 1, num-type-args 0, names []
[3] = Reserved
- [4] = ObjectRef < dart:core::int >
+ [4] = ObjectRef < dart:core::int* >
[5] = InterfaceCall '#lib::E::get:foo2', ArgDesc num-args 1, num-type-args 0, names []
[6] = Reserved
[7] = ObjectRef ArgDesc num-args 3, num-type-args 1, names []
@@ -2157,7 +2157,7 @@
Function 'testCallThroughGetter3', reflectable, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Bytecode {
Entry 4
@@ -2188,7 +2188,7 @@
[3] = Reserved
[4] = InterfaceCall '#lib::E::evalArg2', ArgDesc num-args 1, num-type-args 0, names []
[5] = Reserved
- [6] = ObjectRef < dart:core::int >
+ [6] = ObjectRef < dart:core::int* >
[7] = InterfaceCall '#lib::E::get:foo2', ArgDesc num-args 1, num-type-args 0, names []
[8] = Reserved
[9] = ObjectRef ArgDesc num-args 3, num-type-args 1, names []
@@ -2197,43 +2197,43 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
}
]library #lib from "#lib" as #lib {
diff --git a/pkg/vm/testcases/bytecode/field_initializers.dart.expect b/pkg/vm/testcases/bytecode/field_initializers.dart.expect
index 7e0795c..9ee6e00 100644
--- a/pkg/vm/testcases/bytecode/field_initializers.dart.expect
+++ b/pkg/vm/testcases/bytecode/field_initializers.dart.expect
@@ -24,26 +24,26 @@
}
Class 'A', script = '#lib'
- extends dart:core::Object
+ extends dart:core::Object*
-Field 'foo1', type = dart:core::int, getter = 'get:foo1', setter = 'set:foo1', reflectable
+Field 'foo1', type = dart:core::int*, getter = 'get:foo1', setter = 'set:foo1', reflectable
value = null
-Field 'foo2', type = dart:core::int, getter = 'get:foo2', setter = 'set:foo2', reflectable, has-initializer
+Field 'foo2', type = dart:core::int*, getter = 'get:foo2', setter = 'set:foo2', reflectable, has-initializer
value = null
-Field 'foo3', type = dart:core::int, getter = 'get:foo3', setter = 'set:foo3', reflectable, has-initializer
+Field 'foo3', type = dart:core::int*, getter = 'get:foo3', setter = 'set:foo3', reflectable, has-initializer
value = const 42
-Field 'foo4', type = dart:core::int, getter = 'get:foo4', setter = 'set:foo4', reflectable
+Field 'foo4', type = dart:core::int*, getter = 'get:foo4', setter = 'set:foo4', reflectable
value = null
-Field 'foo5', type = dart:core::int, getter = 'get:foo5', setter = 'set:foo5', reflectable, has-initializer
+Field 'foo5', type = dart:core::int*, getter = 'get:foo5', setter = 'set:foo5', reflectable, has-initializer
value = const 43
Function '', constructor, reflectable, debuggable
- parameters [dart:core::int 'foo4'] (required: 1)
- return-type #lib::A
+ parameters [dart:core::int* 'foo4'] (required: 1)
+ return-type #lib::A*
Bytecode {
Entry 0
@@ -79,8 +79,8 @@
Function 'constr2', constructor, reflectable, debuggable
- parameters [dart:core::int 'x', dart:core::int 'y'] (required: 2)
- return-type #lib::A
+ parameters [dart:core::int* 'x', dart:core::int* 'y'] (required: 2)
+ return-type #lib::A*
Bytecode {
Entry 0
@@ -119,7 +119,7 @@
Function 'redirecting1', constructor, reflectable, debuggable
parameters [] (required: 0)
- return-type #lib::A
+ return-type #lib::A*
Bytecode {
Entry 0
@@ -138,8 +138,8 @@
Function 'redirecting2', constructor, reflectable, debuggable
- parameters [dart:core::int 'a', dart:core::int 'b', dart:core::int 'c'] (required: 3)
- return-type #lib::A
+ parameters [dart:core::int* 'a', dart:core::int* 'b', dart:core::int* 'c'] (required: 3)
+ return-type #lib::A*
Bytecode {
Entry 0
@@ -162,58 +162,58 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'B', script = '#lib'
- extends #lib::A
+ extends #lib::A*
-Field 'foo6', type = dart:core::int, getter = 'get:foo6', setter = 'set:foo6', reflectable, has-initializer
+Field 'foo6', type = dart:core::int*, getter = 'get:foo6', setter = 'set:foo6', reflectable, has-initializer
value = const 46
-Field 'foo7', type = dart:core::int, reflectable, static, has-initializer
+Field 'foo7', type = dart:core::int*, reflectable, static, has-initializer
value = const 47
-Field 'foo8', type = dart:core::int, reflectable, static, const, final, has-initializer
+Field 'foo8', type = dart:core::int*, reflectable, static, const, final, has-initializer
value = const 48
Function '', constructor, reflectable, debuggable
parameters [] (required: 0)
- return-type #lib::B
+ return-type #lib::B*
Bytecode {
Entry 0
@@ -237,8 +237,8 @@
Function 'c2', constructor, reflectable, debuggable
- parameters [dart:core::int 'i', dart:core::int 'j'] (required: 2)
- return-type #lib::B
+ parameters [dart:core::int* 'i', dart:core::int* 'j'] (required: 2)
+ return-type #lib::B*
Bytecode {
Entry 0
diff --git a/pkg/vm/testcases/bytecode/instance_creation.dart.expect b/pkg/vm/testcases/bytecode/instance_creation.dart.expect
index 26b018c..54bd3ff 100644
--- a/pkg/vm/testcases/bytecode/instance_creation.dart.expect
+++ b/pkg/vm/testcases/bytecode/instance_creation.dart.expect
@@ -62,19 +62,19 @@
}
ConstantPool {
[0] = Class #lib::A
- [1] = ObjectRef < dart:core::int, dart:core::String >
+ [1] = ObjectRef < dart:core::int*, dart:core::String* >
[2] = ObjectRef 'hi'
[3] = DirectCall '#lib::A:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
[4] = Reserved
[5] = Class #lib::B
- [6] = ObjectRef < dart:core::List < dart:core::int >, dart:core::String, dart:core::int >
+ [6] = ObjectRef < dart:core::List < dart:core::int* >*, dart:core::String*, dart:core::int* >
[7] = DirectCall '#lib::B:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[8] = Reserved
}
Function 'foo3', static, reflectable, debuggable
- type-params <dart:core::Object T>
+ type-params <dart:core::Object* T>
parameters [] (required: 0)
return-type void
@@ -97,7 +97,7 @@
}
ConstantPool {
[0] = Class #lib::B
- [1] = ObjectRef < dart:core::List < dart:core::List < #lib::foo3::TypeParam/0 > >, dart:core::String, dart:core::List < #lib::foo3::TypeParam/0 > >
+ [1] = ObjectRef < dart:core::List < dart:core::List < #lib::foo3::TypeParam/0* >* >*, dart:core::String*, dart:core::List < #lib::foo3::TypeParam/0* >* >
[2] = DirectCall '#lib::B:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[3] = Reserved
}
@@ -117,7 +117,7 @@
ReturnTOS
}
ConstantPool {
- [0] = ObjectRef < dart:core::int, dart:core::List < dart:core::String > >
+ [0] = ObjectRef < dart:core::int*, dart:core::List < dart:core::String* >* >
[1] = DirectCall '#lib::G::test_factory (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[2] = Reserved
}
@@ -161,14 +161,14 @@
ReturnTOS
}
ConstantPool {
- [0] = ObjectRef < dart:core::String >
+ [0] = ObjectRef < dart:core::String* >
[1] = DirectCall 'dart:core::_GrowableList:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
[2] = Reserved
}
Function 'foo7', static, reflectable, debuggable
- parameters [dart:core::int 'n'] (required: 1)
+ parameters [dart:core::int* 'n'] (required: 1)
return-type dynamic
Bytecode {
@@ -180,7 +180,7 @@
ReturnTOS
}
ConstantPool {
- [0] = ObjectRef < dart:core::int >
+ [0] = ObjectRef < dart:core::int* >
[1] = DirectCall 'dart:core::_List:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
[2] = Reserved
}
@@ -208,24 +208,24 @@
[1] = Reserved
[2] = DirectCall '#lib::foo2', ArgDesc num-args 0, num-type-args 0, names []
[3] = Reserved
- [4] = ObjectRef < dart:core::String >
+ [4] = ObjectRef < dart:core::String* >
[5] = DirectCall '#lib::foo3', ArgDesc num-args 0, num-type-args 1, names []
[6] = Reserved
}
Class 'Base', script = '#lib'
- type-params <dart:core::Object T1, dart:core::Object T2> (args: 2)
- extends dart:core::Object
+ type-params <dart:core::Object* T1, dart:core::Object* T2> (args: 2)
+ extends dart:core::Object*
-Field 't1', type = #lib::Base::TypeParam/0, getter = 'get:t1', setter = 'set:t1', reflectable, has-initializer
+Field 't1', type = #lib::Base::TypeParam/0*, getter = 'get:t1', setter = 'set:t1', reflectable, has-initializer
value = null
-Field 't2', type = #lib::Base::TypeParam/1, getter = 'get:t2', setter = 'set:t2', reflectable, has-initializer
+Field 't2', type = #lib::Base::TypeParam/1*, getter = 'get:t2', setter = 'set:t2', reflectable, has-initializer
value = null
Function '', constructor, reflectable, debuggable
parameters [] (required: 0)
- return-type #lib::Base < #lib::Base::TypeParam/0, #lib::Base::TypeParam/1 >
+ return-type #lib::Base < #lib::Base::TypeParam/0*, #lib::Base::TypeParam/1* >*
Bytecode {
Entry 1
@@ -270,10 +270,10 @@
[0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
[2] = ObjectRef 'Base: '
- [3] = Type #lib::Base::TypeParam/0
+ [3] = Type #lib::Base::TypeParam/0*
[4] = TypeArgumentsField #lib::Base
[5] = ObjectRef ', '
- [6] = Type #lib::Base::TypeParam/1
+ [6] = Type #lib::Base::TypeParam/1*
[7] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
[8] = Reserved
[9] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
@@ -283,50 +283,50 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'A', script = '#lib'
- extends #lib::Base < dart:core::int, dart:core::String >
+ extends #lib::Base < dart:core::int*, dart:core::String* >*
Function '', constructor, reflectable, debuggable
- parameters [dart:core::String 's'] (required: 1)
- return-type #lib::A < dart:core::int, dart:core::String >
+ parameters [dart:core::String* 's'] (required: 1)
+ return-type #lib::A < dart:core::int*, dart:core::String* >*
Bytecode {
Entry 0
@@ -343,13 +343,13 @@
}
Class 'B', script = '#lib'
- type-params <dart:core::Object T> (args: 3)
- extends #lib::Base < dart:core::List < #lib::B::TypeParam/0 >, dart:core::String >
+ type-params <dart:core::Object* T> (args: 3)
+ extends #lib::Base < dart:core::List < #lib::B::TypeParam/0* >*, dart:core::String* >*
Function '', constructor, reflectable, debuggable
parameters [] (required: 0)
- return-type #lib::B < dart:core::List < #lib::B::TypeParam/0 >, dart:core::String, #lib::B::TypeParam/0 >
+ return-type #lib::B < dart:core::List < #lib::B::TypeParam/0* >*, dart:core::String*, #lib::B::TypeParam/0* >*
Bytecode {
Entry 1
@@ -382,7 +382,7 @@
[0] = DirectCall '#lib::Base:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
[2] = ObjectRef 'B: '
- [3] = Type #lib::B::TypeParam/0
+ [3] = Type #lib::B::TypeParam/0*
[4] = TypeArgumentsField #lib::B
[5] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
[6] = Reserved
@@ -391,12 +391,12 @@
}
Class 'C', script = '#lib'
- extends dart:core::Object
+ extends dart:core::Object*
Function '', constructor, reflectable, debuggable
- parameters [dart:core::String 's'] (required: 1)
- return-type #lib::C
+ parameters [dart:core::String* 's'] (required: 1)
+ return-type #lib::C*
Bytecode {
Entry 1
@@ -435,51 +435,51 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'E', script = '#lib'
- type-params <dart:core::Object K, dart:core::Object V> (args: 2)
- extends dart:core::Object
+ type-params <dart:core::Object* K, dart:core::Object* V> (args: 2)
+ extends dart:core::Object*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::E < #lib::E::TypeParam/0, #lib::E::TypeParam/1 >
+ return-type #lib::E < #lib::E::TypeParam/0*, #lib::E::TypeParam/1* >*
Bytecode {
Entry 0
@@ -517,51 +517,51 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'F', script = '#lib'
- type-params <dart:core::Object K, dart:core::Object V> (args: 4)
- extends #lib::E < dart:core::String, dart:core::List < #lib::F::TypeParam/1 > >
+ type-params <dart:core::Object* K, dart:core::Object* V> (args: 4)
+ extends #lib::E < dart:core::String*, dart:core::List < #lib::F::TypeParam/1* >* >*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::F < dart:core::String, dart:core::List < #lib::F::TypeParam/1 >, #lib::F::TypeParam/0, #lib::F::TypeParam/1 >
+ return-type #lib::F < dart:core::String*, dart:core::List < #lib::F::TypeParam/1* >*, #lib::F::TypeParam/0*, #lib::F::TypeParam/1* >*
Bytecode {
Entry 0
@@ -597,13 +597,13 @@
}
Class 'G', script = '#lib'
- type-params <dart:core::Object K, dart:core::Object V> (args: 2)
- extends dart:core::Object
+ type-params <dart:core::Object* K, dart:core::Object* V> (args: 2)
+ extends dart:core::Object*
Function '', constructor, reflectable, debuggable
parameters [] (required: 0)
- return-type #lib::G < #lib::G::TypeParam/0, #lib::G::TypeParam/1 >
+ return-type #lib::G < #lib::G::TypeParam/0*, #lib::G::TypeParam/1* >*
Bytecode {
Entry 0
@@ -621,9 +621,9 @@
Function 'test_factory', factory, static, reflectable, debuggable
- type-params <dart:core::Object K, dart:core::Object V>
+ type-params <dart:core::Object* K, dart:core::Object* V>
parameters [] (required: 0)
- return-type #lib::G < #lib::G::test_factory (constructor)::TypeParam/0, #lib::G::test_factory (constructor)::TypeParam/1 >
+ return-type #lib::G < #lib::G::test_factory (constructor)::TypeParam/0*, #lib::G::test_factory (constructor)::TypeParam/1* >*
Bytecode {
Entry 1
@@ -641,7 +641,7 @@
}
ConstantPool {
[0] = Class #lib::H
- [1] = ObjectRef < #lib::G::test_factory (constructor)::TypeParam/0, #lib::G::test_factory (constructor)::TypeParam/1, dart:core::String, #lib::G::test_factory (constructor)::TypeParam/0, #lib::G::test_factory (constructor)::TypeParam/1 >
+ [1] = ObjectRef < #lib::G::test_factory (constructor)::TypeParam/0*, #lib::G::test_factory (constructor)::TypeParam/1*, dart:core::String*, #lib::G::test_factory (constructor)::TypeParam/0*, #lib::G::test_factory (constructor)::TypeParam/1* >
[2] = DirectCall '#lib::H:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[3] = Reserved
}
@@ -649,51 +649,51 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'H', script = '#lib'
- type-params <dart:core::Object P1, dart:core::Object P2, dart:core::Object P3> (args: 5)
- extends #lib::G < #lib::H::TypeParam/1, #lib::H::TypeParam/2 >
+ type-params <dart:core::Object* P1, dart:core::Object* P2, dart:core::Object* P3> (args: 5)
+ extends #lib::G < #lib::H::TypeParam/1*, #lib::H::TypeParam/2* >*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::H < #lib::H::TypeParam/1, #lib::H::TypeParam/2, #lib::H::TypeParam/0, #lib::H::TypeParam/1, #lib::H::TypeParam/2 >
+ return-type #lib::H < #lib::H::TypeParam/1*, #lib::H::TypeParam/2*, #lib::H::TypeParam/0*, #lib::H::TypeParam/1*, #lib::H::TypeParam/2* >*
Bytecode {
Entry 0
@@ -710,12 +710,12 @@
}
Class 'I', script = '#lib'
- extends dart:core::Object
+ extends dart:core::Object*
Function '', constructor, reflectable, debuggable
parameters [dynamic 'param'] (required: 1)
- return-type #lib::I
+ return-type #lib::I*
Bytecode {
Entry 0
@@ -734,7 +734,7 @@
Function 'test_factory2', factory, static, has-optional-named-params, reflectable, debuggable
parameters [dynamic 'param'] (required: 0)
- return-type #lib::I
+ return-type #lib::I*
Bytecode {
EntryOptional 1, 0, 1
@@ -761,50 +761,50 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'J', script = '#lib'
- extends dart:core::Object
+ extends dart:core::Object*
Function '', factory, static, reflectable, debuggable, native 'agent_J'
parameters [] (required: 0)
- return-type #lib::J
+ return-type #lib::J*
Bytecode {
Entry 0
@@ -820,52 +820,52 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'K', script = '#lib', abstract
- type-params <dart:core::Object A, dart:core::Object B> (args: 2)
- extends dart:core::Object
+ type-params <dart:core::Object* A, dart:core::Object* B> (args: 2)
+ extends dart:core::Object*
Function '', factory, static, reflectable, debuggable
- type-params <dart:core::Object A, dart:core::Object B>
+ type-params <dart:core::Object* A, dart:core::Object* B>
parameters [] (required: 0)
- return-type #lib::K < #lib::K:: (constructor)::TypeParam/0, #lib::K:: (constructor)::TypeParam/1 >
+ return-type #lib::K < #lib::K:: (constructor)::TypeParam/0*, #lib::K:: (constructor)::TypeParam/1* >*
Bytecode {
Entry 1
@@ -888,52 +888,52 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'TestTypeArgReuse', script = '#lib'
- type-params <dart:core::Object P, dart:core::Object Q> (args: 2)
- extends #lib::Base < #lib::TestTypeArgReuse::TypeParam/0, #lib::TestTypeArgReuse::TypeParam/1 >
- implements [#lib::K < #lib::TestTypeArgReuse::TypeParam/0, #lib::TestTypeArgReuse::TypeParam/1 >]
+ type-params <dart:core::Object* P, dart:core::Object* Q> (args: 2)
+ extends #lib::Base < #lib::TestTypeArgReuse::TypeParam/0*, #lib::TestTypeArgReuse::TypeParam/1* >*
+ implements [#lib::K < #lib::TestTypeArgReuse::TypeParam/0*, #lib::TestTypeArgReuse::TypeParam/1* >*]
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::TestTypeArgReuse < #lib::TestTypeArgReuse::TypeParam/0, #lib::TestTypeArgReuse::TypeParam/1 >
+ return-type #lib::TestTypeArgReuse < #lib::TestTypeArgReuse::TypeParam/0*, #lib::TestTypeArgReuse::TypeParam/1* >*
Bytecode {
Entry 0
diff --git a/pkg/vm/testcases/bytecode/literals.dart.expect b/pkg/vm/testcases/bytecode/literals.dart.expect
index be92e6d..62c9981 100644
--- a/pkg/vm/testcases/bytecode/literals.dart.expect
+++ b/pkg/vm/testcases/bytecode/literals.dart.expect
@@ -9,7 +9,7 @@
Class '', script = '#lib'
-Field 'c1', type = #lib::A, getter = 'get:c1', reflectable, static, const, final, has-initializer
+Field 'c1', type = #lib::A*, getter = 'get:c1', reflectable, static, const, final, has-initializer
initializer
Bytecode {
Entry 0
@@ -18,17 +18,17 @@
ReturnTOS
}
ConstantPool {
- [0] = ObjectRef const #lib::A {#lib::A::index (field): const 2, #lib::A::_name (field): 'A.elem3'}
+ [0] = ObjectRef const #lib::A* {#lib::A::index (field): const 2, #lib::A::_name (field): 'A.elem3'}
}
-Field 'c2', type = dart:core::String, reflectable, static, const, final, has-initializer
+Field 'c2', type = dart:core::String*, reflectable, static, const, final, has-initializer
value = 'hello!'
-Field 'c3', type = dart:core::int, reflectable, static, const, final, has-initializer
+Field 'c3', type = dart:core::int*, reflectable, static, const, final, has-initializer
value = const 6
-Field 'c4', type = #lib::C, getter = 'get:c4', reflectable, static, const, final, has-initializer
+Field 'c4', type = #lib::C*, getter = 'get:c4', reflectable, static, const, final, has-initializer
initializer
Bytecode {
Entry 0
@@ -37,11 +37,11 @@
ReturnTOS
}
ConstantPool {
- [0] = ObjectRef const #lib::C {#lib::C::j (field): const 3, #lib::B::i (field): const 15}
+ [0] = ObjectRef const #lib::C* {#lib::C::j (field): const 3, #lib::B::i (field): const 15}
}
-Field 'c5', type = #lib::D, getter = 'get:c5', reflectable, static, const, final, has-initializer
+Field 'c5', type = #lib::D*, getter = 'get:c5', reflectable, static, const, final, has-initializer
initializer
Bytecode {
Entry 0
@@ -50,11 +50,11 @@
ReturnTOS
}
ConstantPool {
- [0] = ObjectRef const #lib::D {#lib::D::x (field): const #lib::B {#lib::B::i (field): const 4}, #lib::D::y (field): null}
+ [0] = ObjectRef const #lib::D* {#lib::D::x (field): const #lib::B* {#lib::B::i (field): const 4}, #lib::D::y (field): null}
}
-Field 'fieldWithDoubleLiteralInitializer', type = dart:core::double, reflectable, static, has-initializer
+Field 'fieldWithDoubleLiteralInitializer', type = dart:core::double*, reflectable, static, has-initializer
value = const 1.0
Function 'test_constants1', static, reflectable, debuggable
@@ -83,12 +83,12 @@
ReturnTOS
}
ConstantPool {
- [0] = ObjectRef const #lib::A {#lib::A::index (field): const 2, #lib::A::_name (field): 'A.elem3'}
+ [0] = ObjectRef const #lib::A* {#lib::A::index (field): const 2, #lib::A::_name (field): 'A.elem3'}
[1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
[2] = Reserved
[3] = ObjectRef 'hello!'
- [4] = ObjectRef const #lib::C {#lib::C::j (field): const 3, #lib::B::i (field): const 15}
- [5] = ObjectRef const #lib::D {#lib::D::x (field): const #lib::B {#lib::B::i (field): const 4}, #lib::D::y (field): null}
+ [4] = ObjectRef const #lib::C* {#lib::C::j (field): const 3, #lib::B::i (field): const 15}
+ [5] = ObjectRef const #lib::D* {#lib::D::x (field): const #lib::B* {#lib::B::i (field): const 4}, #lib::D::y (field): null}
}
@@ -124,15 +124,15 @@
[0] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
[2] = ObjectRef 'foo'
- [3] = ObjectRef const #lib::A {#lib::A::index (field): const 1, #lib::A::_name (field): 'A.elem2'}
- [4] = ObjectRef const <dart:core::Object> [const 42, 'foo', dart:core::int]
- [5] = ObjectRef const dart:core::_ImmutableMap < dart:core::String, #lib::A > {dart:core::_ImmutableMap::_kvPairs (field): const <dynamic> ['E2', const #lib::A {#lib::A::index (field): const 1, #lib::A::_name (field): 'A.elem2'}, 'E4', const #lib::A {#lib::A::index (field): const 3, #lib::A::_name (field): 'A.elem4'}]}
- [6] = ObjectRef const #lib::D {#lib::D::x (field): const #lib::C {#lib::C::j (field): const 9, #lib::B::i (field): const 30}, #lib::D::y (field): const dart:core::_ImmutableMap < dart:core::String, dart:core::Object > {dart:core::_ImmutableMap::_kvPairs (field): const <dynamic> ['foo', const 42, 'bar', const #lib::B {#lib::B::i (field): const 6}]}}
+ [3] = ObjectRef const #lib::A* {#lib::A::index (field): const 1, #lib::A::_name (field): 'A.elem2'}
+ [4] = ObjectRef const <dart:core::Object*> [const 42, 'foo', dart:core::int*]
+ [5] = ObjectRef const dart:core::_ImmutableMap < dart:core::String*, #lib::A* >* {dart:core::_ImmutableMap::_kvPairs (field): const <dynamic> ['E2', const #lib::A* {#lib::A::index (field): const 1, #lib::A::_name (field): 'A.elem2'}, 'E4', const #lib::A* {#lib::A::index (field): const 3, #lib::A::_name (field): 'A.elem4'}]}
+ [6] = ObjectRef const #lib::D* {#lib::D::x (field): const #lib::C* {#lib::C::j (field): const 9, #lib::B::i (field): const 30}, #lib::D::y (field): const dart:core::_ImmutableMap < dart:core::String*, dart:core::Object* >* {dart:core::_ImmutableMap::_kvPairs (field): const <dynamic> ['foo', const 42, 'bar', const #lib::B* {#lib::B::i (field): const 6}]}}
}
Function 'test_list_literal', static, reflectable, debuggable
- parameters [dart:core::int 'a'] (required: 1)
+ parameters [dart:core::int* 'a'] (required: 1)
return-type void
Bytecode {
@@ -185,12 +185,12 @@
ReturnTOS
}
ConstantPool {
- [0] = ObjectRef < dart:core::int >
+ [0] = ObjectRef < dart:core::int* >
[1] = DirectCall 'dart:core::List::_fromLiteral (constructor)', ArgDesc num-args 2, num-type-args 0, names []
[2] = Reserved
[3] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
[4] = Reserved
- [5] = ObjectRef < dart:core::String >
+ [5] = ObjectRef < dart:core::String* >
[6] = ObjectRef 'a'
[7] = InterfaceCall 'dart:core::int::toString', ArgDesc num-args 1, num-type-args 0, names []
[8] = Reserved
@@ -199,8 +199,8 @@
Function 'test_map_literal', static, reflectable, debuggable
- type-params <dart:core::Object T>
- parameters [dart:core::int 'a', dart:core::int 'b', #lib::test_map_literal::TypeParam/0 'c'] (required: 3)
+ type-params <dart:core::Object* T>
+ parameters [dart:core::int* 'a', dart:core::int* 'b', #lib::test_map_literal::TypeParam/0* 'c'] (required: 3)
return-type void
Bytecode {
@@ -285,19 +285,19 @@
ReturnTOS
}
ConstantPool {
- [0] = ObjectRef < dart:core::int, dart:core::int >
+ [0] = ObjectRef < dart:core::int*, dart:core::int* >
[1] = ObjectRef < dynamic >
[2] = DirectCall 'dart:core::Map::_fromLiteral (constructor)', ArgDesc num-args 2, num-type-args 0, names []
[3] = Reserved
[4] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
[5] = Reserved
- [6] = ObjectRef < dart:core::String, dart:core::int >
+ [6] = ObjectRef < dart:core::String*, dart:core::int* >
[7] = ObjectRef 'foo'
[8] = InterfaceCall 'dart:core::int::toString', ArgDesc num-args 1, num-type-args 0, names []
[9] = Reserved
- [10] = ObjectRef < dart:core::String, #lib::test_map_literal::TypeParam/0 >
+ [10] = ObjectRef < dart:core::String*, #lib::test_map_literal::TypeParam/0* >
[11] = ObjectRef const <dynamic> []
- [12] = ObjectRef < #lib::test_map_literal::TypeParam/0, dart:core::int >
+ [12] = ObjectRef < #lib::test_map_literal::TypeParam/0*, dart:core::int* >
}
@@ -326,7 +326,7 @@
Function 'test_type_literal', static, reflectable, debuggable
- type-params <dart:core::Object T>
+ type-params <dart:core::Object* T>
parameters [] (required: 0)
return-type void
@@ -346,10 +346,10 @@
ReturnTOS
}
ConstantPool {
- [0] = Type dart:core::String
+ [0] = Type dart:core::String*
[1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
[2] = Reserved
- [3] = Type #lib::test_type_literal::TypeParam/0
+ [3] = Type #lib::test_type_literal::TypeParam/0*
}
@@ -364,7 +364,7 @@
ReturnTOS
}
ConstantPool {
- [0] = ObjectRef const #lib::F < dart:core::Map < dart:core::int, dart:core::String >, dart:core::int, dart:core::String > {}
+ [0] = ObjectRef const #lib::F < dart:core::Map < dart:core::int*, dart:core::String* >*, dart:core::int*, dart:core::String* >* {}
}
@@ -379,7 +379,7 @@
ReturnTOS
}
ConstantPool {
- [0] = Type FunctionType <dart:core::Object X> (null::TypeParam/0) -> null::TypeParam/0
+ [0] = Type FunctionType <dart:core::Object* X> (null::TypeParam/0*)* -> null::TypeParam/0*
}
@@ -412,15 +412,15 @@
}
Class 'A', script = '#lib', enum
- extends dart:core::Object
+ extends dart:core::Object*
-Field 'index', type = dart:core::int, getter = 'get:index', reflectable, final
+Field 'index', type = dart:core::int*, getter = 'get:index', reflectable, final
value = null
-Field '_name', type = dart:core::String, getter = 'get:_name', reflectable, final
+Field '_name', type = dart:core::String*, getter = 'get:_name', reflectable, final
value = null
-Field 'values', type = dart:core::List < #lib::A >, getter = 'get:values', reflectable, static, const, final, has-initializer
+Field 'values', type = dart:core::List < #lib::A* >*, getter = 'get:values', reflectable, static, const, final, has-initializer
initializer
Bytecode {
Entry 0
@@ -429,11 +429,11 @@
ReturnTOS
}
ConstantPool {
- [0] = ObjectRef const <#lib::A> [const #lib::A {#lib::A::index (field): const 0, #lib::A::_name (field): 'A.elem1'}, const #lib::A {#lib::A::index (field): const 1, #lib::A::_name (field): 'A.elem2'}, const #lib::A {#lib::A::index (field): const 2, #lib::A::_name (field): 'A.elem3'}, const #lib::A {#lib::A::index (field): const 3, #lib::A::_name (field): 'A.elem4'}]
+ [0] = ObjectRef const <#lib::A*> [const #lib::A* {#lib::A::index (field): const 0, #lib::A::_name (field): 'A.elem1'}, const #lib::A* {#lib::A::index (field): const 1, #lib::A::_name (field): 'A.elem2'}, const #lib::A* {#lib::A::index (field): const 2, #lib::A::_name (field): 'A.elem3'}, const #lib::A* {#lib::A::index (field): const 3, #lib::A::_name (field): 'A.elem4'}]
}
-Field 'elem1', type = #lib::A, getter = 'get:elem1', reflectable, static, const, final, has-initializer
+Field 'elem1', type = #lib::A*, getter = 'get:elem1', reflectable, static, const, final, has-initializer
initializer
Bytecode {
Entry 0
@@ -442,11 +442,11 @@
ReturnTOS
}
ConstantPool {
- [0] = ObjectRef const #lib::A {#lib::A::index (field): const 0, #lib::A::_name (field): 'A.elem1'}
+ [0] = ObjectRef const #lib::A* {#lib::A::index (field): const 0, #lib::A::_name (field): 'A.elem1'}
}
-Field 'elem2', type = #lib::A, getter = 'get:elem2', reflectable, static, const, final, has-initializer
+Field 'elem2', type = #lib::A*, getter = 'get:elem2', reflectable, static, const, final, has-initializer
initializer
Bytecode {
Entry 0
@@ -455,11 +455,11 @@
ReturnTOS
}
ConstantPool {
- [0] = ObjectRef const #lib::A {#lib::A::index (field): const 1, #lib::A::_name (field): 'A.elem2'}
+ [0] = ObjectRef const #lib::A* {#lib::A::index (field): const 1, #lib::A::_name (field): 'A.elem2'}
}
-Field 'elem3', type = #lib::A, getter = 'get:elem3', reflectable, static, const, final, has-initializer
+Field 'elem3', type = #lib::A*, getter = 'get:elem3', reflectable, static, const, final, has-initializer
initializer
Bytecode {
Entry 0
@@ -468,11 +468,11 @@
ReturnTOS
}
ConstantPool {
- [0] = ObjectRef const #lib::A {#lib::A::index (field): const 2, #lib::A::_name (field): 'A.elem3'}
+ [0] = ObjectRef const #lib::A* {#lib::A::index (field): const 2, #lib::A::_name (field): 'A.elem3'}
}
-Field 'elem4', type = #lib::A, getter = 'get:elem4', reflectable, static, const, final, has-initializer
+Field 'elem4', type = #lib::A*, getter = 'get:elem4', reflectable, static, const, final, has-initializer
initializer
Bytecode {
Entry 0
@@ -481,13 +481,13 @@
ReturnTOS
}
ConstantPool {
- [0] = ObjectRef const #lib::A {#lib::A::index (field): const 3, #lib::A::_name (field): 'A.elem4'}
+ [0] = ObjectRef const #lib::A* {#lib::A::index (field): const 3, #lib::A::_name (field): 'A.elem4'}
}
Function '', constructor, const, reflectable, debuggable
- parameters [dart:core::int 'index', dart:core::String '_name'] (required: 2)
- return-type #lib::A
+ parameters [dart:core::int* 'index', dart:core::String* '_name'] (required: 2)
+ return-type #lib::A*
Bytecode {
Entry 0
@@ -516,7 +516,7 @@
Function 'toString', reflectable, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Bytecode {
Entry 0
@@ -533,48 +533,48 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'B', script = '#lib'
- extends dart:core::Object
+ extends dart:core::Object*
-Field 'i', type = dart:core::int, getter = 'get:i', reflectable, final
+Field 'i', type = dart:core::int*, getter = 'get:i', reflectable, final
value = null
Function '', constructor, const, reflectable, debuggable
- parameters [dart:core::int 'i'] (required: 1)
- return-type #lib::B
+ parameters [dart:core::int* 'i'] (required: 1)
+ return-type #lib::B*
Bytecode {
Entry 0
@@ -598,52 +598,52 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'C', script = '#lib'
- extends #lib::B
+ extends #lib::B*
-Field 'j', type = dart:core::int, getter = 'get:j', reflectable, final
+Field 'j', type = dart:core::int*, getter = 'get:j', reflectable, final
value = null
Function '', constructor, const, reflectable, debuggable
- parameters [dart:core::int 'a', dart:core::int 'b', dart:core::int 'c'] (required: 3)
- return-type #lib::C
+ parameters [dart:core::int* 'a', dart:core::int* 'b', dart:core::int* 'c'] (required: 3)
+ return-type #lib::C*
Bytecode {
Entry 0
@@ -670,7 +670,7 @@
}
Class 'D', script = '#lib'
- extends dart:core::Object
+ extends dart:core::Object*
Field 'x', type = dynamic, getter = 'get:x', reflectable, final
value = null
@@ -680,7 +680,7 @@
Function '', constructor, const, has-optional-positional-params, reflectable, debuggable
parameters [dynamic 'x', dynamic 'y'] (required: 1)
- return-type #lib::D
+ return-type #lib::D*
Bytecode {
EntryOptional 2, 1, 0
@@ -712,51 +712,51 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'E', script = '#lib'
- type-params <dart:core::Object T> (args: 1)
- extends dart:core::Object
+ type-params <dart:core::Object* T> (args: 1)
+ extends dart:core::Object*
Function '', constructor, const, reflectable, debuggable
parameters [] (required: 0)
- return-type #lib::E < #lib::E::TypeParam/0 >
+ return-type #lib::E < #lib::E::TypeParam/0* >*
Bytecode {
Entry 0
@@ -775,51 +775,51 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'F', script = '#lib'
- type-params <dart:core::Object P, dart:core::Object Q> (args: 3)
- extends #lib::E < dart:core::Map < #lib::F::TypeParam/0, #lib::F::TypeParam/1 > >
+ type-params <dart:core::Object* P, dart:core::Object* Q> (args: 3)
+ extends #lib::E < dart:core::Map < #lib::F::TypeParam/0*, #lib::F::TypeParam/1* >* >*
Function '', constructor, const, reflectable, debuggable
parameters [] (required: 0)
- return-type #lib::F < dart:core::Map < #lib::F::TypeParam/0, #lib::F::TypeParam/1 >, #lib::F::TypeParam/0, #lib::F::TypeParam/1 >
+ return-type #lib::F < dart:core::Map < #lib::F::TypeParam/0*, #lib::F::TypeParam/1* >*, #lib::F::TypeParam/0*, #lib::F::TypeParam/1* >*
Bytecode {
Entry 0
diff --git a/pkg/vm/testcases/bytecode/loops.dart.expect b/pkg/vm/testcases/bytecode/loops.dart.expect
index 4b4932f..11d1d08 100644
--- a/pkg/vm/testcases/bytecode/loops.dart.expect
+++ b/pkg/vm/testcases/bytecode/loops.dart.expect
@@ -11,8 +11,8 @@
Function 'test_for', static, reflectable, debuggable
- parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
- return-type dart:core::int
+ parameters [dart:core::List < dart:core::int* >* 'list'] (required: 1)
+ return-type dart:core::int*
Bytecode {
Entry 2
@@ -56,8 +56,8 @@
Function 'test_for_break', static, reflectable, debuggable
- parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
- return-type dart:core::int
+ parameters [dart:core::List < dart:core::int* >* 'list'] (required: 1)
+ return-type dart:core::int*
Bytecode {
Entry 2
@@ -107,8 +107,8 @@
Function 'test_for_continue', static, reflectable, debuggable
- parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
- return-type dart:core::int
+ parameters [dart:core::List < dart:core::int* >* 'list'] (required: 1)
+ return-type dart:core::int*
Bytecode {
Entry 2
@@ -160,8 +160,8 @@
Function 'test_while', static, reflectable, debuggable
- parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
- return-type dart:core::int
+ parameters [dart:core::List < dart:core::int* >* 'list'] (required: 1)
+ return-type dart:core::int*
Bytecode {
Entry 4
@@ -207,8 +207,8 @@
Function 'test_do_while', static, reflectable, debuggable
- parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
- return-type dart:core::int
+ parameters [dart:core::List < dart:core::int* >* 'list'] (required: 1)
+ return-type dart:core::int*
Bytecode {
Entry 2
@@ -249,8 +249,8 @@
Function 'test_for_in', static, reflectable, debuggable
- parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
- return-type dart:core::int
+ parameters [dart:core::List < dart:core::int* >* 'list'] (required: 1)
+ return-type dart:core::int*
Bytecode {
Entry 3
@@ -289,8 +289,8 @@
Function 'test_for_in_with_outer_var', static, reflectable, debuggable
- parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
- return-type dart:core::int
+ parameters [dart:core::List < dart:core::int* >* 'list'] (required: 1)
+ return-type dart:core::int*
Bytecode {
Entry 4
diff --git a/pkg/vm/testcases/bytecode/optional_params.dart.expect b/pkg/vm/testcases/bytecode/optional_params.dart.expect
index 09d42e2..5e959bc 100644
--- a/pkg/vm/testcases/bytecode/optional_params.dart.expect
+++ b/pkg/vm/testcases/bytecode/optional_params.dart.expect
@@ -177,7 +177,7 @@
[0] = ObjectRef 'a'
[1] = ObjectRef const 42
[2] = ObjectRef 'b'
- [3] = ObjectRef const <dart:core::String> ['default_b']
+ [3] = ObjectRef const <dart:core::String*> ['default_b']
[4] = ObjectRef 'c'
[5] = ObjectRef 'default_c'
[6] = ObjectRef 'y = '
@@ -193,8 +193,8 @@
Function 'foo3', static, has-optional-named-params, reflectable, debuggable
- type-params <dart:core::Object P, dart:core::Object Q>
- parameters [dynamic 'z', dynamic 'y', dart:core::bool 'a', dart:core::Map < #lib::foo3::TypeParam/0, #lib::foo3::TypeParam/1 > 'b'] (required: 2)
+ type-params <dart:core::Object* P, dart:core::Object* Q>
+ parameters [dynamic 'z', dynamic 'y', dart:core::bool* 'a', dart:core::Map < #lib::foo3::TypeParam/0*, #lib::foo3::TypeParam/1* >* 'b'] (required: 2)
return-type void
Bytecode {
@@ -225,7 +225,7 @@
[1] = ObjectRef const false
[2] = ObjectRef 'b'
[3] = ObjectRef null
- [4] = Type #lib::foo3::TypeParam/0
+ [4] = Type #lib::foo3::TypeParam/0*
[5] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
[6] = Reserved
}
diff --git a/pkg/vm/testcases/bytecode/super_calls.dart.expect b/pkg/vm/testcases/bytecode/super_calls.dart.expect
index 0d2d233..18ea65f 100644
--- a/pkg/vm/testcases/bytecode/super_calls.dart.expect
+++ b/pkg/vm/testcases/bytecode/super_calls.dart.expect
@@ -24,12 +24,12 @@
}
Class 'Base1', script = '#lib'
- extends dart:core::Object
+ extends dart:core::Object*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::Base1
+ return-type #lib::Base1*
Bytecode {
Entry 0
@@ -47,8 +47,8 @@
Function 'foo', reflectable, debuggable
- type-params <dart:core::Object T>
- parameters [#lib::Base1::foo::TypeParam/0 'a1', dart:core::int 'a2'] (required: 2)
+ type-params <dart:core::Object* T>
+ parameters [#lib::Base1::foo::TypeParam/0* 'a1', dart:core::int* 'a2'] (required: 2)
return-type void
Bytecode {
@@ -77,7 +77,7 @@
Function 'set:bazz', setter, reflectable, debuggable
- parameters [dart:core::int 'x'] (required: 1)
+ parameters [dart:core::int* 'x'] (required: 1)
return-type void
Bytecode {
@@ -92,50 +92,50 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'A', script = '#lib'
- extends #lib::Base1
+ extends #lib::Base1*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::A
+ return-type #lib::A*
Bytecode {
Entry 0
@@ -153,7 +153,7 @@
Function 'testSuperCall', reflectable, debuggable
- parameters [dart:core::int 'x'] (required: 1)
+ parameters [dart:core::int* 'x'] (required: 1)
return-type dynamic
Bytecode {
@@ -167,7 +167,7 @@
ReturnTOS
}
ConstantPool {
- [0] = ObjectRef < dart:core::String >
+ [0] = ObjectRef < dart:core::String* >
[1] = ObjectRef 'a1'
[2] = DirectCall '#lib::Base1::foo', ArgDesc num-args 3, num-type-args 1, names []
[3] = Reserved
@@ -223,7 +223,7 @@
ReturnTOS
}
ConstantPool {
- [0] = ObjectRef < dart:core::int >
+ [0] = ObjectRef < dart:core::int* >
[1] = DirectCall '#lib::Base1::get:bar', ArgDesc num-args 1, num-type-args 0, names []
[2] = Reserved
[3] = ObjectRef 'param'
@@ -252,12 +252,12 @@
}
Class 'Base2', script = '#lib', abstract
- extends dart:core::Object
+ extends dart:core::Object*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::Base2
+ return-type #lib::Base2*
Bytecode {
Entry 0
@@ -275,8 +275,8 @@
Function 'foo', abstract, reflectable, debuggable
- type-params <dart:core::Object T>
- parameters [dart:core::String 'a1', #lib::Base2::foo::TypeParam/0 'a2', dart:core::int 'a3'] (required: 3)
+ type-params <dart:core::Object* T>
+ parameters [dart:core::String* 'a1', #lib::Base2::foo::TypeParam/0* 'a2', dart:core::int* 'a3'] (required: 3)
return-type void
Function 'get:bar', getter, abstract, reflectable, debuggable
@@ -284,55 +284,55 @@
return-type dynamic
Function 'set:bazz', setter, abstract, reflectable, debuggable
- parameters [dart:core::int 'x'] (required: 1)
+ parameters [dart:core::int* 'x'] (required: 1)
return-type void
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'B', script = '#lib', abstract
- extends #lib::Base2
+ extends #lib::Base2*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::B
+ return-type #lib::B*
Bytecode {
Entry 0
@@ -350,7 +350,7 @@
Function 'testSuperCall', reflectable, debuggable
- parameters [dart:core::int 'x'] (required: 1)
+ parameters [dart:core::int* 'x'] (required: 1)
return-type dynamic
Bytecode {
@@ -392,7 +392,7 @@
[0] = ObjectRef ArgDesc num-args 4, num-type-args 1, names []
[1] = ObjectRef 'foo'
[2] = ObjectRef < dynamic >
- [3] = ObjectRef < dart:core::double >
+ [3] = ObjectRef < dart:core::double* >
[4] = ObjectRef 'a1'
[5] = ObjectRef const 3.14
[6] = DirectCall 'dart:core::_InvocationMirror::_allocateInvocationMirror', ArgDesc num-args 4, num-type-args 0, names []
@@ -497,7 +497,7 @@
ReturnTOS
}
ConstantPool {
- [0] = ObjectRef < dart:core::int >
+ [0] = ObjectRef < dart:core::int* >
[1] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
[2] = ObjectRef 'bar'
[3] = ObjectRef < dynamic >
diff --git a/pkg/vm/testcases/bytecode/switch.dart.expect b/pkg/vm/testcases/bytecode/switch.dart.expect
index 9ce3651..555f7a8 100644
--- a/pkg/vm/testcases/bytecode/switch.dart.expect
+++ b/pkg/vm/testcases/bytecode/switch.dart.expect
@@ -11,8 +11,8 @@
Function 'foo1', static, reflectable, debuggable
- parameters [dart:core::int 'x'] (required: 1)
- return-type dart:core::int
+ parameters [dart:core::int* 'x'] (required: 1)
+ return-type dart:core::int*
Bytecode {
Entry 2
@@ -57,8 +57,8 @@
Function 'foo2', static, reflectable, debuggable
- parameters [dart:core::int 'x'] (required: 1)
- return-type dart:core::int
+ parameters [dart:core::int* 'x'] (required: 1)
+ return-type dart:core::int*
Bytecode {
Entry 2
@@ -114,8 +114,8 @@
Function 'foo3', static, reflectable, debuggable
- parameters [dart:core::int 'x'] (required: 1)
- return-type dart:core::int
+ parameters [dart:core::int* 'x'] (required: 1)
+ return-type dart:core::int*
Bytecode {
Entry 2
diff --git a/pkg/vm/testcases/bytecode/try_blocks.dart.expect b/pkg/vm/testcases/bytecode/try_blocks.dart.expect
index 20f7426..ecb97c5 100644
--- a/pkg/vm/testcases/bytecode/try_blocks.dart.expect
+++ b/pkg/vm/testcases/bytecode/try_blocks.dart.expect
@@ -184,15 +184,15 @@
[0] = ObjectRef 'danger!'
[1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
[2] = Reserved
- [3] = Type dart:core::TypeError
+ [3] = Type dart:core::TypeError*
[4] = InterfaceCall 'dart:core::Object::_simpleInstanceOf', ArgDesc num-args 2, num-type-args 0, names []
[5] = Reserved
[6] = ObjectRef 'caught type error'
- [7] = Type dart:core::AssertionError
+ [7] = Type dart:core::AssertionError*
[8] = ObjectRef 'caught assertion error '
[9] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
[10] = Reserved
- [11] = Type dart:core::Error
+ [11] = Type dart:core::Error*
[12] = ObjectRef 'caught error '
[13] = ObjectRef ' '
[14] = Type dynamic
@@ -328,7 +328,7 @@
[18] = Reserved
[19] = ClosureFunction 1
[20] = ObjectRef 'danger bar'
- [21] = Type dart:core::Error
+ [21] = Type dart:core::Error*
[22] = InterfaceCall 'dart:core::Object::_simpleInstanceOf', ArgDesc num-args 2, num-type-args 0, names []
[23] = Reserved
[24] = ObjectRef 'error '
@@ -436,7 +436,7 @@
Function 'testRethrow', static, reflectable, debuggable
- parameters [dart:core::bool 'cond'] (required: 1)
+ parameters [dart:core::bool* 'cond'] (required: 1)
return-type dynamic
Bytecode {
@@ -582,7 +582,7 @@
Function 'testTryFinally2', static, reflectable, debuggable
- parameters [dart:core::int 'x'] (required: 1)
+ parameters [dart:core::int* 'x'] (required: 1)
return-type dynamic
Bytecode {
@@ -828,7 +828,7 @@
[15] = DynamicCall 'call', ArgDesc num-args 1, num-type-args 0, names []
[16] = Reserved
}
-Closure #lib::testTryFinally3::'<anonymous closure>' () -> dart:core::int
+Closure #lib::testTryFinally3::'<anonymous closure>' () -> dart:core::int*
ClosureCode {
EntryFixed 1, 6
Push FP[-5]
diff --git a/pkg/vm/testcases/bytecode/type_ops.dart.expect b/pkg/vm/testcases/bytecode/type_ops.dart.expect
index 0036353..ed3f0ce 100644
--- a/pkg/vm/testcases/bytecode/type_ops.dart.expect
+++ b/pkg/vm/testcases/bytecode/type_ops.dart.expect
@@ -9,7 +9,7 @@
Class '', script = '#lib'
-Field 'globalVar', type = dart:core::List < dart:core::Iterable null >, reflectable, static
+Field 'globalVar', type = dart:core::List < dart:core::Iterable null* >*, reflectable, static
value = null
Function 'foo1', static, reflectable, debuggable
@@ -46,17 +46,17 @@
ReturnTOS
}
ConstantPool {
- [0] = Type #lib::B < dart:core::String >
+ [0] = Type #lib::B < dart:core::String* >*
[1] = InterfaceCall 'dart:core::Object::_simpleInstanceOf', ArgDesc num-args 2, num-type-args 0, names []
[2] = Reserved
[3] = ObjectRef '11'
[4] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
[5] = Reserved
- [6] = Type #lib::C < dart:core::String, dart:core::int, dart:core::Object, dynamic >
+ [6] = Type #lib::C < dart:core::String*, dart:core::int*, dart:core::Object*, dynamic >*
[7] = InterfaceCall 'dart:core::Object::_instanceOf', ArgDesc num-args 4, num-type-args 0, names []
[8] = Reserved
[9] = ObjectRef '12'
- [10] = Type #lib::A < dart:core::int >
+ [10] = Type #lib::A < dart:core::int* >*
[11] = ObjectRef ' in type cast'
[12] = SubtypeTestCache
}
@@ -80,7 +80,7 @@
ReturnTOS
}
ConstantPool {
- [0] = Type dart:core::List < dart:core::Iterable null >
+ [0] = Type dart:core::List < dart:core::Iterable null* >*
[1] = ObjectRef ''
[2] = SubtypeTestCache
[3] = StaticField #lib::globalVar (field)
@@ -101,13 +101,13 @@
}
Class 'A', script = '#lib'
- type-params <dart:core::Object T> (args: 1)
- extends dart:core::Object
+ type-params <dart:core::Object* T> (args: 1)
+ extends dart:core::Object*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::A < #lib::A::TypeParam/0 >
+ return-type #lib::A < #lib::A::TypeParam/0* >*
Bytecode {
Entry 0
@@ -126,50 +126,50 @@
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'B', script = '#lib'
- extends #lib::A < dart:core::String >
+ extends #lib::A < dart:core::String* >*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::B < dart:core::String >
+ return-type #lib::B < dart:core::String* >*
Bytecode {
Entry 0
@@ -186,13 +186,13 @@
}
Class 'C', script = '#lib'
- type-params <dart:core::Object T1, dart:core::Object T2, dart:core::Object T3> (args: 4)
- extends #lib::B < dart:core::String >
+ type-params <dart:core::Object* T1, dart:core::Object* T2, dart:core::Object* T3> (args: 4)
+ extends #lib::B < dart:core::String* >*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::C < dart:core::String, #lib::C::TypeParam/0, #lib::C::TypeParam/1, #lib::C::TypeParam/2 >
+ return-type #lib::C < dart:core::String*, #lib::C::TypeParam/0*, #lib::C::TypeParam/1*, #lib::C::TypeParam/2* >*
Bytecode {
Entry 0
@@ -209,15 +209,15 @@
}
Class 'D', script = '#lib'
- type-params <dart:core::Object P, dart:core::Object Q> (args: 5)
- extends #lib::C < dart:core::String, dart:core::int, #lib::D::TypeParam/1, #lib::D::TypeParam/0 >
+ type-params <dart:core::Object* P, dart:core::Object* Q> (args: 5)
+ extends #lib::C < dart:core::String*, dart:core::int*, #lib::D::TypeParam/1*, #lib::D::TypeParam/0* >*
-Field 'foo', type = dart:core::Map < #lib::D::TypeParam/0, #lib::D::TypeParam/1 >, getter = 'get:foo', setter = 'set:foo', reflectable
+Field 'foo', type = dart:core::Map < #lib::D::TypeParam/0*, #lib::D::TypeParam/1* >*, getter = 'get:foo', setter = 'set:foo', reflectable
value = null
Function '', constructor, reflectable, debuggable
parameters [dynamic 'tt'] (required: 1)
- return-type #lib::D < dart:core::String, dart:core::int, #lib::D::TypeParam/1, #lib::D::TypeParam/0, #lib::D::TypeParam/1 >
+ return-type #lib::D < dart:core::String*, dart:core::int*, #lib::D::TypeParam/1*, #lib::D::TypeParam/0*, #lib::D::TypeParam/1* >*
Bytecode {
Entry 0
@@ -238,7 +238,7 @@
ReturnTOS
}
ConstantPool {
- [0] = Type dart:core::Map < #lib::D::TypeParam/0, #lib::D::TypeParam/1 >
+ [0] = Type dart:core::Map < #lib::D::TypeParam/0*, #lib::D::TypeParam/1* >*
[1] = TypeArgumentsField #lib::D
[2] = ObjectRef ''
[3] = SubtypeTestCache
@@ -293,15 +293,15 @@
}
ConstantPool {
[0] = TypeArgumentsField #lib::D
- [1] = Type #lib::A < #lib::D::TypeParam/0 >
+ [1] = Type #lib::A < #lib::D::TypeParam/0* >*
[2] = InterfaceCall 'dart:core::Object::_instanceOf', ArgDesc num-args 4, num-type-args 0, names []
[3] = Reserved
[4] = ObjectRef '21'
[5] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
[6] = Reserved
- [7] = Type #lib::C < dart:core::String, dynamic, #lib::D::TypeParam/1, dart:core::List < #lib::D::TypeParam/0 > >
+ [7] = Type #lib::C < dart:core::String*, dynamic, #lib::D::TypeParam/1*, dart:core::List < #lib::D::TypeParam/0* >* >*
[8] = ObjectRef '22'
- [9] = Type dart:core::Map < #lib::D::TypeParam/0, #lib::D::TypeParam/1 >
+ [9] = Type dart:core::Map < #lib::D::TypeParam/0*, #lib::D::TypeParam/1* >*
[10] = ObjectRef ''
[11] = SubtypeTestCache
[12] = InterfaceCall '#lib::D::set:foo', ArgDesc num-args 2, num-type-args 0, names []
@@ -310,7 +310,7 @@
Function 'foo3', reflectable, debuggable
- type-params <dart:core::Object T1, dart:core::Object T2>
+ type-params <dart:core::Object* T1, dart:core::Object* T2>
parameters [dynamic 'z'] (required: 1)
return-type dynamic
@@ -350,16 +350,16 @@
ReturnTOS
}
ConstantPool {
- [0] = Type #lib::A < #lib::D::foo3::TypeParam/0 >
+ [0] = Type #lib::A < #lib::D::foo3::TypeParam/0* >*
[1] = InterfaceCall 'dart:core::Object::_instanceOf', ArgDesc num-args 4, num-type-args 0, names []
[2] = Reserved
[3] = ObjectRef '31'
[4] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
[5] = Reserved
[6] = TypeArgumentsField #lib::D
- [7] = Type #lib::C < dart:core::String, dart:core::Map < #lib::D::foo3::TypeParam/0, #lib::D::TypeParam/0 >, dart:core::List < #lib::D::foo3::TypeParam/1 >, #lib::D::TypeParam/1 >
+ [7] = Type #lib::C < dart:core::String*, dart:core::Map < #lib::D::foo3::TypeParam/0*, #lib::D::TypeParam/0* >*, dart:core::List < #lib::D::foo3::TypeParam/1* >*, #lib::D::TypeParam/1* >*
[8] = ObjectRef '32'
- [9] = Type dart:core::Map < #lib::D::foo3::TypeParam/1, #lib::D::TypeParam/1 >
+ [9] = Type dart:core::Map < #lib::D::foo3::TypeParam/1*, #lib::D::TypeParam/1* >*
[10] = ObjectRef ' in type cast'
[11] = SubtypeTestCache
[12] = InterfaceCall 'dart:core::Map::get:values', ArgDesc num-args 1, num-type-args 0, names []
@@ -369,7 +369,7 @@
Function 'foo4', reflectable, debuggable
parameters [dynamic 'w'] (required: 1)
- return-type dart:core::Map < #lib::D::TypeParam/0, #lib::D::TypeParam/1 >
+ return-type dart:core::Map < #lib::D::TypeParam/0*, #lib::D::TypeParam/1* >*
Bytecode {
Entry 2
@@ -406,8 +406,8 @@
}
ConstantPool {
[0] = TypeArgumentsField #lib::D
- [1] = ObjectRef < dart:core::Map < #lib::D::TypeParam/0, #lib::D::TypeParam/1 > >
- [2] = Type dart:core::Map < #lib::D::TypeParam/0, #lib::D::TypeParam/1 >
+ [1] = ObjectRef < dart:core::Map < #lib::D::TypeParam/0*, #lib::D::TypeParam/1* >* >
+ [2] = Type dart:core::Map < #lib::D::TypeParam/0*, #lib::D::TypeParam/1* >*
[3] = ObjectRef ''
[4] = SubtypeTestCache
[5] = DirectCall 'dart:core::List::_fromLiteral (constructor)', ArgDesc num-args 2, num-type-args 0, names []
@@ -416,14 +416,14 @@
}
Class 'E', script = '#lib'
- type-params <dart:core::String P> (args: 1)
- extends dart:core::Object
+ type-params <dart:core::String* P> (args: 1)
+ extends dart:core::Object*
Function '', factory, static, reflectable, debuggable
- type-params <dart:core::String P>
+ type-params <dart:core::String* P>
parameters [] (required: 0)
- return-type #lib::E < #lib::E:: (constructor)::TypeParam/0 >
+ return-type #lib::E < #lib::E:: (constructor)::TypeParam/0* >*
Bytecode {
Entry 0
@@ -436,8 +436,8 @@
Function 'foo6', reflectable, debuggable
- type-params <#lib::E::TypeParam/0 T, dart:core::List < #lib::E::foo6::TypeParam/0 > U>
- parameters [dart:core::Map < #lib::E::foo6::TypeParam/0, #lib::E::foo6::TypeParam/1 > 'map'] (required: 1)
+ type-params <#lib::E::TypeParam/0* T, dart:core::List < #lib::E::foo6::TypeParam/0* >* U>
+ parameters [dart:core::Map < #lib::E::foo6::TypeParam/0*, #lib::E::foo6::TypeParam/1* >* 'map'] (required: 1)
return-type void
Bytecode {
@@ -466,60 +466,60 @@
Default function type arguments: CP#1
ConstantPool {
[0] = TypeArgumentsField #lib::E
- [1] = ObjectRef < #lib::E::TypeParam/0, dart:core::List < #lib::E::TypeParam/0 > >
- [2] = Type #lib::E::foo6::TypeParam/0
- [3] = Type #lib::E::TypeParam/0
+ [1] = ObjectRef < #lib::E::TypeParam/0*, dart:core::List < #lib::E::TypeParam/0* >* >
+ [2] = Type #lib::E::foo6::TypeParam/0*
+ [3] = Type #lib::E::TypeParam/0*
[4] = ObjectRef 'T'
}
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'F', script = '#lib', abstract
- type-params <dart:core::Object T> (args: 1)
- extends dart:core::Object
+ type-params <dart:core::Object* T> (args: 1)
+ extends dart:core::Object*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::F < #lib::F::TypeParam/0 >
+ return-type #lib::F < #lib::F::TypeParam/0* >*
Bytecode {
Entry 0
@@ -537,62 +537,62 @@
Function 'foo7', abstract, reflectable, debuggable
- type-params <#lib::F::TypeParam/0 Q>
- parameters [#lib::F::foo7::TypeParam/0 'a', dart:core::num 'b', #lib::F::TypeParam/0 'c'] (required: 3)
+ type-params <#lib::F::TypeParam/0* Q>
+ parameters [#lib::F::foo7::TypeParam/0* 'a', dart:core::num* 'b', #lib::F::TypeParam/0* 'c'] (required: 3)
return-type void
Function 'foo8', abstract, reflectable, debuggable
- type-params <#lib::F::TypeParam/0 Q>
- parameters [#lib::F::foo8::TypeParam/0 'a', dart:core::num 'b', #lib::F::TypeParam/0 'c'] (required: 3)
+ type-params <#lib::F::TypeParam/0* Q>
+ parameters [#lib::F::foo8::TypeParam/0* 'a', dart:core::num* 'b', #lib::F::TypeParam/0* 'c'] (required: 3)
return-type void
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'G', script = '#lib'
- type-params <dart:core::Object T> (args: 1)
- extends dart:core::Object
+ type-params <dart:core::Object* T> (args: 1)
+ extends dart:core::Object*
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::G < #lib::G::TypeParam/0 >
+ return-type #lib::G < #lib::G::TypeParam/0* >*
Bytecode {
Entry 0
@@ -610,8 +610,8 @@
Function 'foo7', reflectable, debuggable
- type-params <#lib::G::TypeParam/0 Q>
- parameters [#lib::G::foo7::TypeParam/0 'a', dart:core::int 'b', #lib::G::TypeParam/0 'c'] (required: 3)
+ type-params <#lib::G::TypeParam/0* Q>
+ parameters [#lib::G::foo7::TypeParam/0* 'a', dart:core::int* 'b', #lib::G::TypeParam/0* 'c'] (required: 3)
return-type void
Bytecode {
@@ -647,63 +647,63 @@
Default function type arguments: CP#6
ConstantPool {
[0] = TypeArgumentsField #lib::G
- [1] = Type #lib::G::foo7::TypeParam/0
- [2] = Type #lib::G::TypeParam/0
+ [1] = Type #lib::G::foo7::TypeParam/0*
+ [2] = Type #lib::G::TypeParam/0*
[3] = ObjectRef 'Q'
[4] = ObjectRef 'c'
[5] = SubtypeTestCache
- [6] = ObjectRef < #lib::G::TypeParam/0 >
+ [6] = ObjectRef < #lib::G::TypeParam/0* >
}
Function 'get:_identityHashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function '_instanceOf', abstract, debuggable
parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOf', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfTrue', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '_simpleInstanceOfFalse', abstract, debuggable
parameters [dynamic 'type'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function '==', abstract, debuggable
parameters [dynamic 'other'] (required: 1)
- return-type dart:core::bool
+ return-type dart:core::bool*
Function 'get:hashCode', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::int
+ return-type dart:core::int*
Function 'toString', abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::String
+ return-type dart:core::String*
Function 'noSuchMethod', abstract, debuggable
- parameters [dart:core::Invocation 'invocation'] (required: 1)
+ parameters [dart:core::Invocation* 'invocation'] (required: 1)
return-type dynamic
Function 'get:runtimeType', getter, abstract, debuggable
parameters [] (required: 0)
- return-type dart:core::Type
+ return-type dart:core::Type*
Class 'H', script = '#lib'
- type-params <dart:core::Object T> (args: 1)
- extends #lib::G < #lib::H::TypeParam/0 >
- implements [#lib::F < #lib::H::TypeParam/0 >]
+ type-params <dart:core::Object* T> (args: 1)
+ extends #lib::G < #lib::H::TypeParam/0* >*
+ implements [#lib::F < #lib::H::TypeParam/0* >*]
Function '', constructor, reflectable
parameters [] (required: 0)
- return-type #lib::H < #lib::H::TypeParam/0 >
+ return-type #lib::H < #lib::H::TypeParam/0* >*
Bytecode {
Entry 0
@@ -721,8 +721,8 @@
Function 'foo8', reflectable, debuggable
- type-params <#lib::H::TypeParam/0 Q>
- parameters [#lib::H::foo8::TypeParam/0 'a', dart:core::int 'b', #lib::H::TypeParam/0 'c'] (required: 3)
+ type-params <#lib::H::TypeParam/0* Q>
+ parameters [#lib::H::foo8::TypeParam/0* 'a', dart:core::int* 'b', #lib::H::TypeParam/0* 'c'] (required: 3)
return-type void
Bytecode {
@@ -765,21 +765,21 @@
Default function type arguments: CP#9
ConstantPool {
[0] = TypeArgumentsField #lib::H
- [1] = Type #lib::H::foo8::TypeParam/0
- [2] = Type #lib::H::TypeParam/0
+ [1] = Type #lib::H::foo8::TypeParam/0*
+ [2] = Type #lib::H::TypeParam/0*
[3] = ObjectRef 'Q'
[4] = ObjectRef 'c'
[5] = SubtypeTestCache
- [6] = Type dart:core::int
+ [6] = Type dart:core::int*
[7] = ObjectRef 'b'
[8] = SubtypeTestCache
- [9] = ObjectRef < #lib::H::TypeParam/0 >
+ [9] = ObjectRef < #lib::H::TypeParam/0* >
}
Function 'foo7', reflectable, debuggable, forwarding-stub
- type-params <#lib::H::TypeParam/0 Q>
- parameters [#lib::H::foo7::TypeParam/0 'a', dart:core::num 'b', #lib::H::TypeParam/0 'c'] (required: 3)
+ type-params <#lib::H::TypeParam/0* Q>
+ parameters [#lib::H::foo7::TypeParam/0* 'a', dart:core::num* 'b', #lib::H::TypeParam/0* 'c'] (required: 3)
return-type void
Bytecode {
@@ -815,31 +815,34 @@
PushConstant CP#7
AssertAssignable 1, CP#8
Drop1
+ PushNull
Push r0
+ InstantiateTypeArgumentsTOS 0, CP#9
Push FP[-8]
Push FP[-7]
Push FP[-6]
Push FP[-5]
- UncheckedDirectCall CP#9, 5
+ UncheckedDirectCall CP#10, 5
ReturnTOS
}
Parameter flags: [0, 1, 2]
-Forwarding stub target: CP#11
-Default function type arguments: CP#12
+Forwarding stub target: CP#12
+Default function type arguments: CP#13
ConstantPool {
[0] = TypeArgumentsField #lib::H
- [1] = Type #lib::H::foo7::TypeParam/0
- [2] = Type #lib::H::TypeParam/0
+ [1] = Type #lib::H::foo7::TypeParam/0*
+ [2] = Type #lib::H::TypeParam/0*
[3] = ObjectRef 'Q'
[4] = ObjectRef 'c'
[5] = SubtypeTestCache
- [6] = Type dart:core::int
+ [6] = Type dart:core::int*
[7] = ObjectRef 'b'
[8] = SubtypeTestCache
- [9] = DirectCall '#lib::G::foo7', ArgDesc num-args 4, num-type-args 1, names []
- [10] = Reserved
- [11] = ObjectRef #lib::G::foo7
- [12] = ObjectRef < #lib::H::TypeParam/0 >
+ [9] = ObjectRef < #lib::H::foo7::TypeParam/0* >
+ [10] = DirectCall '#lib::G::foo7', ArgDesc num-args 4, num-type-args 1, names []
+ [11] = Reserved
+ [12] = ObjectRef #lib::G::foo7
+ [13] = ObjectRef < #lib::H::TypeParam/0* >
}
diff --git a/pkg/vm_service/lib/src/vm_service.dart b/pkg/vm_service/lib/src/vm_service.dart
index c3bc86a..7f843c3 100644
--- a/pkg/vm_service/lib/src/vm_service.dart
+++ b/pkg/vm_service/lib/src/vm_service.dart
@@ -5430,10 +5430,11 @@
/// The amount of non-Dart memory that is retained by Dart objects. For
/// example, memory associated with Dart objects through APIs such as
- /// Dart_NewWeakPersistentHandle and Dart_NewExternalTypedData. This usage is
- /// only as accurate as the values supplied to these APIs from the VM embedder
- /// or native extensions. This external memory applies GC pressure, but is
- /// separate from heapUsage and heapCapacity.
+ /// Dart_NewFinalizableHandle, Dart_NewWeakPersistentHandle and
+ /// Dart_NewExternalTypedData. This usage is only as accurate as the values
+ /// supplied to these APIs from the VM embedder or native extensions. This
+ /// external memory applies GC pressure, but is separate from heapUsage and
+ /// heapCapacity.
int externalUsage;
/// The total capacity of the heap in bytes. This is the amount of memory used
diff --git a/runtime/bin/BUILD.gn b/runtime/bin/BUILD.gn
index 609fa42..fb682c0 100644
--- a/runtime/bin/BUILD.gn
+++ b/runtime/bin/BUILD.gn
@@ -199,7 +199,7 @@
}
if (is_mac) {
- libs = [
+ frameworks = [
"CoreFoundation.framework",
"CoreServices.framework",
]
@@ -445,13 +445,13 @@
defines = []
deps = [ "//third_party/zlib" ] + extra_deps
if (is_mac || is_ios) {
- libs = [
+ frameworks = [
"CoreFoundation.framework",
"Security.framework",
]
if (is_mac) {
- libs += [ "CoreServices.framework" ]
+ frameworks += [ "CoreServices.framework" ]
}
}
diff --git a/runtime/bin/dartdev_isolate.cc b/runtime/bin/dartdev_isolate.cc
index f87dc6f..6e0ed3d 100644
--- a/runtime/bin/dartdev_isolate.cc
+++ b/runtime/bin/dartdev_isolate.cc
@@ -173,13 +173,23 @@
void DartDevIsolate::DartDevRunner::RunCallback(uword args) {
MonitorLocker locker_(DartDevRunner::monitor_);
DartDevRunner* runner = reinterpret_cast<DartDevRunner*>(args);
+
+ // TODO(bkonyi): bring up DartDev from kernel instead of a app-jit snapshot.
+ // See https://github.com/dart-lang/sdk/issues/42804
const char* dartdev_path = DartDevIsolate::TryResolveDartDevSnapshotPath();
if (dartdev_path == nullptr) {
ProcessError("Failed to find DartDev snapshot.", kErrorExitCode);
return;
}
+
+ // Hardcode flags to match those used to generate the DartDev snapshot.
Dart_IsolateFlags flags;
Dart_IsolateFlagsInitialize(&flags);
+ flags.enable_asserts = false;
+ flags.null_safety = false;
+ flags.use_field_guards = true;
+ flags.use_osr = true;
+
char* error;
Dart_Isolate dartdev_isolate = runner->create_isolate_(
dartdev_path, "dartdev", nullptr, runner->packages_file_, &flags,
diff --git a/runtime/bin/directory.cc b/runtime/bin/directory.cc
index 4a5629e..9920d0f 100644
--- a/runtime/bin/directory.cc
+++ b/runtime/bin/directory.cc
@@ -232,9 +232,7 @@
}
}
-static void ReleaseListing(void* isolate_callback_data,
- Dart_WeakPersistentHandle handle,
- void* peer) {
+static void ReleaseListing(void* isolate_callback_data, void* peer) {
AsyncDirectoryListing* listing =
reinterpret_cast<AsyncDirectoryListing*>(peer);
listing->Release();
@@ -247,8 +245,8 @@
DartUtils::GetIntptrValue(Dart_GetNativeArgument(args, 1));
AsyncDirectoryListing* listing =
reinterpret_cast<AsyncDirectoryListing*>(listing_pointer);
- Dart_NewWeakPersistentHandle(dart_this, reinterpret_cast<void*>(listing),
- sizeof(*listing), ReleaseListing);
+ Dart_NewFinalizableHandle(dart_this, reinterpret_cast<void*>(listing),
+ sizeof(*listing), ReleaseListing);
Dart_Handle result = Dart_SetNativeInstanceField(
dart_this, kAsyncDirectoryListerFieldIndex, listing_pointer);
ThrowIfError(result);
diff --git a/runtime/bin/file.cc b/runtime/bin/file.cc
index 886970e..29a7c11 100644
--- a/runtime/bin/file.cc
+++ b/runtime/bin/file.cc
@@ -68,9 +68,7 @@
Dart_SetIntegerReturnValue(args, file_pointer);
}
-static void ReleaseFile(void* isolate_callback_data,
- Dart_WeakPersistentHandle handle,
- void* peer) {
+static void ReleaseFile(void* isolate_callback_data, void* peer) {
File* file = reinterpret_cast<File*>(peer);
file->Release();
}
@@ -79,9 +77,9 @@
Dart_Handle dart_this = ThrowIfError(Dart_GetNativeArgument(args, 0));
intptr_t file_pointer = DartUtils::GetNativeIntptrArgument(args, 1);
File* file = reinterpret_cast<File*>(file_pointer);
- Dart_WeakPersistentHandle handle = Dart_NewWeakPersistentHandle(
+ Dart_FinalizableHandle handle = Dart_NewFinalizableHandle(
dart_this, reinterpret_cast<void*>(file), sizeof(*file), ReleaseFile);
- file->SetWeakHandle(handle);
+ file->SetFinalizableHandle(handle);
SetFile(dart_this, file_pointer);
}
@@ -148,7 +146,7 @@
return;
}
file->Close();
- file->DeleteWeakHandle(Dart_CurrentIsolate());
+ file->DeleteFinalizableHandle(Dart_CurrentIsolate(), dart_this);
file->Release();
ThrowIfError(
diff --git a/runtime/bin/file.h b/runtime/bin/file.h
index 9e68346..98d3748 100644
--- a/runtime/bin/file.h
+++ b/runtime/bin/file.h
@@ -184,21 +184,23 @@
// Calls the platform-specific functions to close the file.
void Close();
- // Returns the weak persistent handle for the File's Dart wrapper.
- Dart_WeakPersistentHandle WeakHandle() const { return weak_handle_; }
-
- // Set the weak persistent handle for the File's Dart wrapper.
- void SetWeakHandle(Dart_WeakPersistentHandle handle) {
- ASSERT(weak_handle_ == NULL);
- weak_handle_ = handle;
+ // Returns the finalizable handle for the File's Dart wrapper.
+ Dart_FinalizableHandle FinalizableHandle() const {
+ return finalizable_handle_;
}
- // Deletes the weak persistent handle for the File's Dart wrapper. Call
+ // Set the finalizable handle for the File's Dart wrapper.
+ void SetFinalizableHandle(Dart_FinalizableHandle handle) {
+ ASSERT(finalizable_handle_ == NULL);
+ finalizable_handle_ = handle;
+ }
+
+ // Deletes the finalizable handle for the File's Dart wrapper. Call
// when the file is explicitly closed and the finalizer is no longer
// needed.
- void DeleteWeakHandle(Dart_Isolate isolate) {
- Dart_DeleteWeakPersistentHandle(weak_handle_);
- weak_handle_ = NULL;
+ void DeleteFinalizableHandle(Dart_Isolate isolate, Dart_Handle strong_ref) {
+ Dart_DeleteFinalizableHandle(finalizable_handle_, strong_ref);
+ finalizable_handle_ = NULL;
}
// Open the file with the given path. The file is always opened for
@@ -319,7 +321,7 @@
private:
explicit File(FileHandle* handle)
- : ReferenceCounted(), handle_(handle), weak_handle_(NULL) {}
+ : ReferenceCounted(), handle_(handle), finalizable_handle_(NULL) {}
~File();
@@ -330,10 +332,10 @@
// FileHandle is an OS specific class which stores data about the file.
FileHandle* handle_; // OS specific handle for the file.
- // We retain the weak handle because we can do cleanup eagerly when Dart code
- // calls closeSync(). In that case, we delete the weak handle so that the
- // finalizer doesn't run.
- Dart_WeakPersistentHandle weak_handle_;
+ // We retain the finalizable handle because we can do cleanup eagerly when
+ // Dart code calls closeSync(). In that case, we delete the finalizable
+ // handle so that the finalizer doesn't run.
+ Dart_FinalizableHandle finalizable_handle_;
friend class ReferenceCounted<File>;
DISALLOW_COPY_AND_ASSIGN(File);
diff --git a/runtime/bin/file_win.cc b/runtime/bin/file_win.cc
index 8023814..848036a 100644
--- a/runtime/bin/file_win.cc
+++ b/runtime/bin/file_win.cc
@@ -796,13 +796,18 @@
return _wutime64(system_name.wide(), ×) == 0;
}
+// Keep this function synchronized with the behavior
+// of `FileSystemEntity.isAbsolute` in file_system_entity.dart.
bool File::IsAbsolutePath(const char* pathname) {
- // Should we consider network paths?
- if (pathname == NULL) {
- return false;
- }
- return ((strlen(pathname) > 2) && (pathname[1] == ':') &&
- ((pathname[2] == '\\') || (pathname[2] == '/')));
+ if (pathname == NULL) return false;
+ char first = pathname[0];
+ if (pathname == 0) return false;
+ char second = pathname[1];
+ if (first == '\\' && second == '\\') return true;
+ if (second != ':') return false;
+ first |= 0x20;
+ char third = pathname[2];
+ return (first >= 'a') && (first <= 'z') && (third == '\\' || third == '/');
}
const char* File::GetCanonicalPath(Namespace* namespc,
diff --git a/runtime/bin/filter.cc b/runtime/bin/filter.cc
index c7eb4db..53f6967 100644
--- a/runtime/bin/filter.cc
+++ b/runtime/bin/filter.cc
@@ -256,9 +256,7 @@
}
}
-static void DeleteFilter(void* isolate_data,
- Dart_WeakPersistentHandle handle,
- void* filter_pointer) {
+static void DeleteFilter(void* isolate_data, void* filter_pointer) {
Filter* filter = reinterpret_cast<Filter*>(filter_pointer);
delete filter;
}
@@ -272,8 +270,8 @@
if (Dart_IsError(err)) {
return err;
}
- Dart_NewWeakPersistentHandle(filter, reinterpret_cast<void*>(filter_pointer),
- size, DeleteFilter);
+ Dart_NewFinalizableHandle(filter, reinterpret_cast<void*>(filter_pointer),
+ size, DeleteFilter);
return err;
}
diff --git a/runtime/bin/io_natives.cc b/runtime/bin/io_natives.cc
index 6ee986d..6c36240 100644
--- a/runtime/bin/io_natives.cc
+++ b/runtime/bin/io_natives.cc
@@ -82,6 +82,7 @@
V(Filter_Process, 4) \
V(Filter_Processed, 3) \
V(InternetAddress_Parse, 1) \
+ V(InternetAddress_ParseScopedLinkLocalAddress, 1) \
V(InternetAddress_RawAddrToString, 1) \
V(IOService_NewServicePort, 0) \
V(Namespace_Create, 2) \
diff --git a/runtime/bin/loader.cc b/runtime/bin/loader.cc
index e5c869a..a058ebb 100644
--- a/runtime/bin/loader.cc
+++ b/runtime/bin/loader.cc
@@ -145,9 +145,7 @@
return Dart_Null();
}
#else
-static void MallocFinalizer(void* isolate_callback_data,
- Dart_WeakPersistentHandle handle,
- void* peer) {
+static void MallocFinalizer(void* isolate_callback_data, void* peer) {
free(peer);
}
@@ -185,8 +183,8 @@
}
result = Dart_NewExternalTypedData(Dart_TypedData_kUint8, kernel_buffer,
kernel_buffer_size);
- Dart_NewWeakPersistentHandle(result, kernel_buffer, kernel_buffer_size,
- MallocFinalizer);
+ Dart_NewFinalizableHandle(result, kernel_buffer, kernel_buffer_size,
+ MallocFinalizer);
return result;
}
if (tag == Dart_kImportExtensionTag) {
diff --git a/runtime/bin/namespace.cc b/runtime/bin/namespace.cc
index c322c52..fd5a091 100644
--- a/runtime/bin/namespace.cc
+++ b/runtime/bin/namespace.cc
@@ -16,9 +16,7 @@
static const int kNamespaceNativeFieldIndex = 0;
-static void ReleaseNamespace(void* isolate_callback_data,
- Dart_WeakPersistentHandle handle,
- void* peer) {
+static void ReleaseNamespace(void* isolate_callback_data, void* peer) {
Namespace* namespc = reinterpret_cast<Namespace*>(peer);
ASSERT(namespc != NULL);
namespc->Release();
@@ -84,8 +82,8 @@
// Set up a finalizer for the Dart object so that we can do any necessary
// platform-specific cleanup for the namespc.
- Dart_NewWeakPersistentHandle(namespc_obj, reinterpret_cast<void*>(namespc),
- sizeof(*namespc), ReleaseNamespace);
+ Dart_NewFinalizableHandle(namespc_obj, reinterpret_cast<void*>(namespc),
+ sizeof(*namespc), ReleaseNamespace);
Dart_SetReturnValue(args, namespc_obj);
}
diff --git a/runtime/bin/secure_socket_filter.cc b/runtime/bin/secure_socket_filter.cc
index 56060ba..a21bc8e 100644
--- a/runtime/bin/secure_socket_filter.cc
+++ b/runtime/bin/secure_socket_filter.cc
@@ -62,9 +62,7 @@
return filter;
}
-static void DeleteFilter(void* isolate_data,
- Dart_WeakPersistentHandle handle,
- void* context_pointer) {
+static void DeleteFilter(void* isolate_data, void* context_pointer) {
SSLFilter* filter = reinterpret_cast<SSLFilter*>(context_pointer);
filter->Release();
}
@@ -78,8 +76,8 @@
dart_this, SSLFilter::kSSLFilterNativeFieldIndex,
reinterpret_cast<intptr_t>(filter));
RETURN_IF_ERROR(err);
- Dart_NewWeakPersistentHandle(dart_this, reinterpret_cast<void*>(filter),
- SSLFilter::kApproximateSize, DeleteFilter);
+ Dart_NewFinalizableHandle(dart_this, reinterpret_cast<void*>(filter),
+ SSLFilter::kApproximateSize, DeleteFilter);
return Dart_Null();
}
diff --git a/runtime/bin/security_context.cc b/runtime/bin/security_context.cc
index 5d649df..3b98b30 100644
--- a/runtime/bin/security_context.cc
+++ b/runtime/bin/security_context.cc
@@ -93,9 +93,7 @@
return context;
}
-static void DeleteSecurityContext(void* isolate_data,
- Dart_WeakPersistentHandle handle,
- void* context_pointer) {
+static void DeleteSecurityContext(void* isolate_data, void* context_pointer) {
SSLCertContext* context = static_cast<SSLCertContext*>(context_pointer);
context->Release();
}
@@ -109,15 +107,13 @@
dart_this, SSLCertContext::kSecurityContextNativeFieldIndex,
reinterpret_cast<intptr_t>(context));
RETURN_IF_ERROR(err);
- Dart_NewWeakPersistentHandle(dart_this, context,
- SSLCertContext::kApproximateSize,
- DeleteSecurityContext);
+ Dart_NewFinalizableHandle(dart_this, context,
+ SSLCertContext::kApproximateSize,
+ DeleteSecurityContext);
return Dart_Null();
}
-static void ReleaseCertificate(void* isolate_data,
- Dart_WeakPersistentHandle handle,
- void* context_pointer) {
+static void ReleaseCertificate(void* isolate_data, void* context_pointer) {
X509* cert = reinterpret_cast<X509*>(context_pointer);
X509_free(cert);
}
@@ -158,9 +154,9 @@
const intptr_t approximate_size_of_certificate =
sizeof(*certificate) + EstimateX509Size(certificate);
ASSERT(approximate_size_of_certificate > 0);
- Dart_NewWeakPersistentHandle(result, reinterpret_cast<void*>(certificate),
- approximate_size_of_certificate,
- ReleaseCertificate);
+ Dart_NewFinalizableHandle(result, reinterpret_cast<void*>(certificate),
+ approximate_size_of_certificate,
+ ReleaseCertificate);
return result;
}
diff --git a/runtime/bin/socket.cc b/runtime/bin/socket.cc
index ac3814f..ec90206 100644
--- a/runtime/bin/socket.cc
+++ b/runtime/bin/socket.cc
@@ -1253,9 +1253,7 @@
Dart_SetBooleanReturnValue(args, available);
}
-static void NormalSocketFinalizer(void* isolate_data,
- Dart_WeakPersistentHandle handle,
- void* data) {
+static void NormalSocketFinalizer(void* isolate_data, void* data) {
Socket* socket = reinterpret_cast<Socket*>(data);
if (socket->fd() >= 0) {
const int64_t flags = 1 << kCloseCommand;
@@ -1266,9 +1264,7 @@
socket->Release();
}
-static void ListeningSocketFinalizer(void* isolate_data,
- Dart_WeakPersistentHandle handle,
- void* data) {
+static void ListeningSocketFinalizer(void* isolate_data, void* data) {
Socket* socket = reinterpret_cast<Socket*>(data);
if (socket->fd() >= 0) {
const int64_t flags = (1 << kListeningSocket) | (1 << kCloseCommand);
@@ -1279,9 +1275,7 @@
socket->Release();
}
-static void StdioSocketFinalizer(void* isolate_data,
- Dart_WeakPersistentHandle handle,
- void* data) {
+static void StdioSocketFinalizer(void* isolate_data, void* data) {
Socket* socket = reinterpret_cast<Socket*>(data);
if (socket->fd() >= 0) {
socket->CloseFd();
@@ -1289,9 +1283,7 @@
socket->Release();
}
-static void SignalSocketFinalizer(void* isolate_data,
- Dart_WeakPersistentHandle handle,
- void* data) {
+static void SignalSocketFinalizer(void* isolate_data, void* data) {
Socket* socket = reinterpret_cast<Socket*>(data);
if (socket->fd() >= 0) {
Process::ClearSignalHandlerByFd(socket->fd(), socket->isolate_port());
@@ -1312,7 +1304,7 @@
if (Dart_IsError(err)) {
Dart_PropagateError(err);
}
- Dart_WeakPersistentHandleFinalizer callback;
+ Dart_HandleFinalizer callback;
switch (finalizer) {
case kFinalizerNormal:
callback = NormalSocketFinalizer;
@@ -1332,8 +1324,8 @@
break;
}
if (callback != NULL) {
- Dart_NewWeakPersistentHandle(handle, reinterpret_cast<void*>(socket),
- sizeof(Socket), callback);
+ Dart_NewFinalizableHandle(handle, reinterpret_cast<void*>(socket),
+ sizeof(Socket), callback);
}
}
diff --git a/runtime/bin/socket_base.cc b/runtime/bin/socket_base.cc
index 9fdd8ba..4e61ce4 100644
--- a/runtime/bin/socket_base.cc
+++ b/runtime/bin/socket_base.cc
@@ -243,6 +243,31 @@
}
}
+void FUNCTION_NAME(InternetAddress_ParseScopedLinkLocalAddress)(
+ Dart_NativeArguments args) {
+ const char* address =
+ DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
+ // This must be an IPv6 address.
+ intptr_t type = 1;
+ ASSERT(address != NULL);
+ OSError* os_error = NULL;
+ AddressList<SocketAddress>* addresses =
+ SocketBase::LookupAddress(address, type, &os_error);
+ if (addresses != NULL) {
+ Dart_Handle list = Dart_NewList(addresses->count());
+ for (intptr_t i = 0; i < addresses->count(); i++) {
+ SocketAddress* addr = addresses->GetAt(i);
+ Dart_ListSetAt(
+ list, i, Dart_NewInteger(SocketAddress::GetAddrScope(addr->addr())));
+ }
+ delete addresses;
+ Dart_SetReturnValue(args, list);
+ } else {
+ Dart_SetReturnValue(args, DartUtils::NewDartOSError(os_error));
+ delete os_error;
+ }
+}
+
void FUNCTION_NAME(InternetAddress_RawAddrToString)(Dart_NativeArguments args) {
RawAddr addr;
SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 0), &addr);
diff --git a/runtime/bin/sync_socket.cc b/runtime/bin/sync_socket.cc
index 99cf792..c8e7714 100644
--- a/runtime/bin/sync_socket.cc
+++ b/runtime/bin/sync_socket.cc
@@ -313,9 +313,7 @@
delete addr;
}
-static void SynchronousSocketFinalizer(void* isolate_data,
- Dart_WeakPersistentHandle handle,
- void* data) {
+static void SynchronousSocketFinalizer(void* isolate_data, void* data) {
SynchronousSocket* socket = reinterpret_cast<SynchronousSocket*>(data);
if (socket->fd() >= 0) {
SynchronousSocket::Close(socket->fd());
@@ -334,9 +332,9 @@
return error;
}
- Dart_NewWeakPersistentHandle(handle, reinterpret_cast<void*>(socket),
- sizeof(SynchronousSocket),
- SynchronousSocketFinalizer);
+ Dart_NewFinalizableHandle(handle, reinterpret_cast<void*>(socket),
+ sizeof(SynchronousSocket),
+ SynchronousSocketFinalizer);
return error;
}
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index 8c6afd4..978d67b 100644
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -239,17 +239,26 @@
* The type Dart_PersistentHandle is a Dart_Handle and it is used to
* document that a persistent handle is expected as a parameter to a call
* or the return value from a call is a persistent handle.
+ *
+ * FinalizableHandles are persistent handles which are auto deleted when
+ * the object is garbage collected. It is never safe to use these handles
+ * unless you know the object is still reachable.
+ *
+ * WeakPersistentHandles are persistent handles which are auto deleted
+ * when the object is garbage collected.
*/
typedef struct _Dart_Handle* Dart_Handle;
typedef Dart_Handle Dart_PersistentHandle;
typedef struct _Dart_WeakPersistentHandle* Dart_WeakPersistentHandle;
-// These three structs are versioned by DART_API_DL_MAJOR_VERSION, bump the
+typedef struct _Dart_FinalizableHandle* Dart_FinalizableHandle;
+// These structs are versioned by DART_API_DL_MAJOR_VERSION, bump the
// version when changing this struct.
typedef void (*Dart_WeakPersistentHandleFinalizer)(
void* isolate_callback_data,
Dart_WeakPersistentHandle handle,
void* peer);
+typedef void (*Dart_HandleFinalizer)(void* isolate_callback_data, void* peer);
/**
* Is this an error handle?
@@ -444,6 +453,8 @@
/**
* Deallocates a persistent handle.
+ *
+ * Requires there to be a current isolate group.
*/
DART_EXPORT void Dart_DeletePersistentHandle(Dart_PersistentHandle object);
@@ -457,16 +468,17 @@
* calling Dart_DeleteWeakPersistentHandle.
*
* If the object becomes unreachable the callback is invoked with the weak
- * persistent handle and the peer as arguments. The callback can be executed
- * on any thread, will not have a current isolate, and can only call
- * Dart_DeletePersistentHandle or Dart_DeleteWeakPersistentHandle. The callback
- * must not call Dart_DeleteWeakPersistentHandle for the handle being finalized,
- * as it is automatically deleted by the VM after the callback returns.
- * This gives the embedder the ability to cleanup data associated with the
- * object and clear out any cached references to the handle. All references to
- * this handle after the callback will be invalid. It is illegal to call into
- * the VM from the callback. If the handle is deleted before the object becomes
- * unreachable, the callback is never invoked.
+ * persistent handle and the peer as arguments. The callback can be executed on
+ * any thread, will have an isolate group, but will not have a current isolate.
+ * The callback can only call Dart_DeletePersistentHandle or
+ * Dart_DeleteWeakPersistentHandle. The callback must not call
+ * Dart_DeleteWeakPersistentHandle for the handle being finalized, as it is
+ * automatically deleted by the VM after the callback returns. This gives the
+ * embedder the ability to cleanup data associated with the object and clear
+ * out any cached references to the handle. All references to this handle after
+ * the callback will be invalid. It is illegal to call into the VM with any
+ * other Dart_* functions from the callback. If the handle is deleted before
+ * the object becomes unreachable, the callback is never invoked.
*
* Requires there to be a current isolate.
*
@@ -488,12 +500,86 @@
intptr_t external_allocation_size,
Dart_WeakPersistentHandleFinalizer callback);
+/**
+ * Deletes the given weak persistent [object] handle.
+ *
+ * Requires there to be a current isolate group.
+ */
DART_EXPORT void Dart_DeleteWeakPersistentHandle(
Dart_WeakPersistentHandle object);
+/**
+ * Updates the external memory size for the given weak persistent handle.
+ *
+ * May trigger garbage collection.
+ */
DART_EXPORT void Dart_UpdateExternalSize(Dart_WeakPersistentHandle object,
intptr_t external_allocation_size);
+/**
+ * Allocates a finalizable handle for an object.
+ *
+ * This handle has the lifetime of the current isolate group unless the object
+ * pointed to by the handle is garbage collected, in this case the VM
+ * automatically deletes the handle after invoking the callback associated
+ * with the handle. The handle can also be explicitly deallocated by
+ * calling Dart_DeleteFinalizableHandle.
+ *
+ * If the object becomes unreachable the callback is invoked with the
+ * the peer as argument. The callback can be executed on any thread, will have
+ * an isolate group, but will not have a current isolate. The callback can only
+ * call Dart_DeletePersistentHandle or Dart_DeleteWeakPersistentHandle.
+ * This gives the embedder the ability to cleanup data associated with the
+ * object and clear out any cached references to the handle. All references to
+ * this handle after the callback will be invalid. It is illegal to call into
+ * the VM with any other Dart_* functions from the callback. If the handle is
+ * deleted before the object becomes unreachable, the callback is never
+ * invoked.
+ *
+ * Requires there to be a current isolate.
+ *
+ * \param object An object.
+ * \param peer A pointer to a native object or NULL. This value is
+ * provided to callback when it is invoked.
+ * \param external_allocation_size The number of externally allocated
+ * bytes for peer. Used to inform the garbage collector.
+ * \param callback A function pointer that will be invoked sometime
+ * after the object is garbage collected, unless the handle has been deleted.
+ * A valid callback needs to be specified it cannot be NULL.
+ *
+ * \return The finalizable handle or NULL. NULL is returned in case of bad
+ * parameters.
+ */
+DART_EXPORT Dart_FinalizableHandle
+Dart_NewFinalizableHandle(Dart_Handle object,
+ void* peer,
+ intptr_t external_allocation_size,
+ Dart_HandleFinalizer callback);
+
+/**
+ * Deletes the given finalizable [object] handle.
+ *
+ * The caller has to provide the actual Dart object the handle was created from
+ * to prove the object (and therefore the finalizable handle) is still alive.
+ *
+ * Requires there to be a current isolate.
+ */
+DART_EXPORT void Dart_DeleteFinalizableHandle(Dart_FinalizableHandle object,
+ Dart_Handle strong_ref_to_object);
+
+/**
+ * Updates the external memory size for the given finalizable handle.
+ *
+ * The caller has to provide the actual Dart object the handle was created from
+ * to prove the object (and therefore the finalizable handle) is still alive.
+ *
+ * May trigger garbage collection.
+ */
+DART_EXPORT void Dart_UpdateFinalizableExternalSize(
+ Dart_FinalizableHandle object,
+ Dart_Handle strong_ref_to_object,
+ intptr_t external_allocation_size);
+
/*
* ==========================
* Initialization and Globals
diff --git a/runtime/include/dart_api_dl.h b/runtime/include/dart_api_dl.h
index ba8424d..19fd0f3 100644
--- a/runtime/include/dart_api_dl.h
+++ b/runtime/include/dart_api_dl.h
@@ -108,6 +108,25 @@
DART_EXTERN_C void (*Dart_DeleteWeakPersistentHandle_DL)(
Dart_WeakPersistentHandle object);
+DART_EXTERN_C void (*Dart_UpdateExternalSize_DL)(
+ Dart_WeakPersistentHandle object,
+ intptr_t external_allocation_size);
+
+DART_EXTERN_C Dart_FinalizableHandle (*Dart_NewFinalizableHandle_DL)(
+ Dart_Handle object,
+ void* peer,
+ intptr_t external_allocation_size,
+ Dart_HandleFinalizer callback);
+
+DART_EXTERN_C void (*Dart_DeleteFinalizableHandle_DL)(
+ Dart_FinalizableHandle object,
+ Dart_Handle strong_ref_to_object);
+
+DART_EXTERN_C void (*Dart_UpdateFinalizableExternalSize_DL)(
+ Dart_FinalizableHandle object,
+ Dart_Handle strong_ref_to_object,
+ intptr_t external_allocation_size);
+
DART_EXTERN_C bool (*Dart_Post_DL)(Dart_Port_DL port_id, Dart_Handle object);
DART_EXTERN_C Dart_Handle (*Dart_NewSendPort_DL)(Dart_Port_DL port_id);
@@ -123,4 +142,4 @@
//
// End of verbatim copy.
-#endif /* RUNTIME_INCLUDE_DART_API_DL_H_ */ /* NOLINT */
\ No newline at end of file
+#endif /* RUNTIME_INCLUDE_DART_API_DL_H_ */ /* NOLINT */
diff --git a/runtime/include/dart_version.h b/runtime/include/dart_version.h
index 777620b..d2d904d 100644
--- a/runtime/include/dart_version.h
+++ b/runtime/include/dart_version.h
@@ -11,6 +11,6 @@
// On backwards compatible changes the minor version is increased.
// The versioning covers the symbols exposed in dart_api_dl.h
#define DART_API_DL_MAJOR_VERSION 1
-#define DART_API_DL_MINOR_VERSION 0
+#define DART_API_DL_MINOR_VERSION 1
#endif /* RUNTIME_INCLUDE_DART_VERSION_H_ */ /* NOLINT */
diff --git a/runtime/include/internal/dart_api_dl_impl.h b/runtime/include/internal/dart_api_dl_impl.h
index f77063d..a306e2d 100644
--- a/runtime/include/internal/dart_api_dl_impl.h
+++ b/runtime/include/internal/dart_api_dl_impl.h
@@ -41,6 +41,10 @@
F(Dart_NewWeakPersistentHandle) \
F(Dart_HandleFromWeakPersistent) \
F(Dart_DeleteWeakPersistentHandle) \
+ F(Dart_UpdateExternalSize) \
+ F(Dart_NewFinalizableHandle) \
+ F(Dart_DeleteFinalizableHandle) \
+ F(Dart_UpdateFinalizableExternalSize) \
/* Dart_Port */ \
F(Dart_Post) \
F(Dart_NewSendPort) \
diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc
index fe943ae..4ed6bfe 100644
--- a/runtime/lib/isolate.cc
+++ b/runtime/lib/isolate.cc
@@ -615,7 +615,6 @@
}
static void ExternalTypedDataFinalizer(void* isolate_callback_data,
- Dart_WeakPersistentHandle handle,
void* peer) {
free(peer);
}
@@ -725,7 +724,8 @@
thread->heap()->SpaceForExternal(length)));
FinalizablePersistentHandle::New(thread->isolate(), typed_data,
/* peer= */ data,
- &ExternalTypedDataFinalizer, length);
+ &ExternalTypedDataFinalizer, length,
+ /*auto_delete=*/true);
return typed_data.raw();
}
diff --git a/runtime/observatory/lib/object_graph.dart b/runtime/observatory/lib/object_graph.dart
index 6e44872..0e891ce 100644
--- a/runtime/observatory/lib/object_graph.dart
+++ b/runtime/observatory/lib/object_graph.dart
@@ -218,7 +218,7 @@
int get internalSize;
/// The sum of all external allocations associated with this object.
- /// See Dart_NewWeakPersistentHandle.
+ /// See Dart_NewFinalizableHandle and Dart_NewWeakPersistentHandle.
int get externalSize;
/// The [shallowSize] of this object, plus the retainedSize of all its
diff --git a/runtime/observatory/tests/service/bad_web_socket_address_test.dart b/runtime/observatory/tests/service/bad_web_socket_address_test.dart
index 8f83fd8..b0a3bbb 100644
--- a/runtime/observatory/tests/service/bad_web_socket_address_test.dart
+++ b/runtime/observatory/tests/service/bad_web_socket_address_test.dart
@@ -15,7 +15,7 @@
} catch (e) {
error = e;
}
- expect(error, new isInstanceOf<NetworkRpcException>());
+ expect(error, isA<NetworkRpcException>());
}
main() async {
diff --git a/runtime/observatory/tests/service/dev_fs_http_put_test.dart b/runtime/observatory/tests/service/dev_fs_http_put_test.dart
index 107778d..a9bed79 100644
--- a/runtime/observatory/tests/service/dev_fs_http_put_test.dart
+++ b/runtime/observatory/tests/service/dev_fs_http_put_test.dart
@@ -31,7 +31,7 @@
result = await vm.invokeRpcNoUpgrade('_createDevFS', {'fsName': fsId});
expect(result['type'], equals('FileSystem'));
expect(result['name'], equals(fsId));
- expect(result['uri'], new isInstanceOf<String>());
+ expect(result['uri'], isA<String>());
// Write the file by issuing an HTTP PUT.
HttpClient client = new HttpClient();
diff --git a/runtime/observatory/tests/service/dev_fs_http_put_weird_char_test.dart b/runtime/observatory/tests/service/dev_fs_http_put_weird_char_test.dart
index 7801775..a2c758c 100644
--- a/runtime/observatory/tests/service/dev_fs_http_put_weird_char_test.dart
+++ b/runtime/observatory/tests/service/dev_fs_http_put_weird_char_test.dart
@@ -32,7 +32,7 @@
result = await vm.invokeRpcNoUpgrade('_createDevFS', {'fsName': fsId});
expect(result['type'], equals('FileSystem'));
expect(result['name'], equals(fsId));
- expect(result['uri'], new isInstanceOf<String>());
+ expect(result['uri'], isA<String>());
// Write the file by issuing an HTTP PUT.
HttpClient client = new HttpClient();
diff --git a/runtime/observatory/tests/service/dev_fs_test.dart b/runtime/observatory/tests/service/dev_fs_test.dart
index 920a152..cf4ca71 100644
--- a/runtime/observatory/tests/service/dev_fs_test.dart
+++ b/runtime/observatory/tests/service/dev_fs_test.dart
@@ -17,7 +17,7 @@
result = await vm.invokeRpcNoUpgrade('_createDevFS', params);
expect(result['type'], equals('FileSystem'));
expect(result['name'], equals('alpha'));
- expect(result['uri'], new isInstanceOf<String>());
+ expect(result['uri'], isA<String>());
result = await vm.invokeRpcNoUpgrade('_listDevFS', {});
expect(result['type'], equals('FileSystemList'));
@@ -62,7 +62,7 @@
result = await vm.invokeRpcNoUpgrade('_createDevFS', {'fsName': fsId});
expect(result['type'], equals('FileSystem'));
expect(result['name'], equals(fsId));
- expect(result['uri'], new isInstanceOf<String>());
+ expect(result['uri'], isA<String>());
bool caughtException = false;
try {
diff --git a/runtime/observatory/tests/service/dev_fs_uri_test.dart b/runtime/observatory/tests/service/dev_fs_uri_test.dart
index 42e5150..13b4af4 100644
--- a/runtime/observatory/tests/service/dev_fs_uri_test.dart
+++ b/runtime/observatory/tests/service/dev_fs_uri_test.dart
@@ -37,7 +37,7 @@
result = await vm.invokeRpcNoUpgrade('_createDevFS', {'fsName': fsId});
expect(result['type'], equals('FileSystem'));
expect(result['name'], equals(fsId));
- expect(result['uri'], new isInstanceOf<String>());
+ expect(result['uri'], isA<String>());
// Write the file by issuing an HTTP PUT.
HttpClient client = new HttpClient();
diff --git a/runtime/observatory/tests/service/dev_fs_weird_char_test.dart b/runtime/observatory/tests/service/dev_fs_weird_char_test.dart
index f2fddce..e8277a6 100644
--- a/runtime/observatory/tests/service/dev_fs_weird_char_test.dart
+++ b/runtime/observatory/tests/service/dev_fs_weird_char_test.dart
@@ -19,7 +19,7 @@
result = await vm.invokeRpcNoUpgrade('_createDevFS', {'fsName': fsId});
expect(result['type'], equals('FileSystem'));
expect(result['name'], equals(fsId));
- expect(result['uri'], new isInstanceOf<String>());
+ expect(result['uri'], isA<String>());
// Write the file.
result = await vm.invokeRpcNoUpgrade('_writeDevFSFile',
diff --git a/runtime/observatory/tests/service/developer_extension_test.dart b/runtime/observatory/tests/service/developer_extension_test.dart
index 30ca38d..c5226de 100644
--- a/runtime/observatory/tests/service/developer_extension_test.dart
+++ b/runtime/observatory/tests/service/developer_extension_test.dart
@@ -73,7 +73,7 @@
resumeIsolateAndAwaitEvent(Isolate.kExtensionStream, (ServiceEvent event) {
expect(event.kind, equals(ServiceEvent.kExtension));
expect(event.extensionKind, equals('ALPHA'));
- expect(event.extensionData, new isInstanceOf<Map>());
+ expect(event.extensionData, isA<Map>());
expect(event.extensionData['cat'], equals('dog'));
}),
hasStoppedAtBreakpoint,
diff --git a/runtime/observatory/tests/service/evaluate_in_frame_with_scope_test.dart b/runtime/observatory/tests/service/evaluate_in_frame_with_scope_test.dart
index fecc245..8eb463a 100644
--- a/runtime/observatory/tests/service/evaluate_in_frame_with_scope_test.dart
+++ b/runtime/observatory/tests/service/evaluate_in_frame_with_scope_test.dart
@@ -44,24 +44,22 @@
var thing2 = thing2Field.staticValue;
print(thing2);
- final isInstanceOf<Instance> isInstanceOfInstance =
- new isInstanceOf<Instance>();
ServiceObject result = await isolate.evalFrame(0, "x + y + a + b",
scope: <String, ServiceObject>{"a": thing1, "b": thing2});
- expect(result, isInstanceOfInstance);
+ expect(result, isA<Instance>());
print(result);
expect((result as Instance).valueAsString, equals('2033'));
result = await isolate.evalFrame(0, "local + a + b",
scope: <String, ServiceObject>{"a": thing1, "b": thing2});
- expect(result, isInstanceOfInstance);
+ expect(result, isA<Instance>());
print(result);
expect((result as Instance).valueAsString, equals('2033'));
// Note the eval's scope is shadowing the locals' scope.
result = await isolate.evalFrame(0, "x + y",
scope: <String, ServiceObject>{"x": thing1, "y": thing2});
- expect(result, isInstanceOfInstance);
+ expect(result, isA<Instance>());
print(result);
expect((result as Instance).valueAsString, equals('7'));
diff --git a/runtime/observatory/tests/service/get_allocation_profile_public_rpc_test.dart b/runtime/observatory/tests/service/get_allocation_profile_public_rpc_test.dart
index d1c81e0..137d44a 100644
--- a/runtime/observatory/tests/service/get_allocation_profile_public_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_allocation_profile_public_rpc_test.dart
@@ -44,7 +44,7 @@
result = await isolate.invokeRpcNoUpgrade('getAllocationProfile', params);
expect(result['type'], equals('AllocationProfile'));
var firstReset = result['dateLastAccumulatorReset'];
- expect(firstReset, new isInstanceOf<String>());
+ expect(firstReset, isA<String>());
expect(result.containsKey('dateLastServiceGC'), isFalse);
expect(result.containsKey('_heaps'), isFalse);
expect(result['members'].length, isPositive);
@@ -74,7 +74,7 @@
expect(result['type'], equals('AllocationProfile'));
expect(result['dateLastAccumulatorReset'], equals(secondReset));
var firstGC = result['dateLastServiceGC'];
- expect(firstGC, new isInstanceOf<String>());
+ expect(firstGC, isA<String>());
expect(result.containsKey('_heaps'), isFalse);
expect(result['members'].length, isPositive);
diff --git a/runtime/observatory/tests/service/get_allocation_profile_rpc_test.dart b/runtime/observatory/tests/service/get_allocation_profile_rpc_test.dart
index 05ab7c8..6021980 100644
--- a/runtime/observatory/tests/service/get_allocation_profile_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_allocation_profile_rpc_test.dart
@@ -44,7 +44,7 @@
result = await isolate.invokeRpcNoUpgrade('_getAllocationProfile', params);
expect(result['type'], equals('AllocationProfile'));
var firstReset = result['dateLastAccumulatorReset'];
- expect(firstReset, new isInstanceOf<String>());
+ expect(firstReset, isA<String>());
expect(result.containsKey('dateLastServiceGC'), isFalse);
expect(result['_heaps'].length, isPositive);
expect(result['_heaps']['new']['type'], equals('HeapSpace'));
@@ -74,7 +74,7 @@
expect(result['type'], equals('AllocationProfile'));
expect(result['dateLastAccumulatorReset'], equals(secondReset));
var firstGC = result['dateLastServiceGC'];
- expect(firstGC, new isInstanceOf<String>());
+ expect(firstGC, isA<String>());
expect(result['_heaps'].length, isPositive);
expect(result['_heaps']['new']['type'], equals('HeapSpace'));
expect(result['_heaps']['old']['type'], equals('HeapSpace'));
diff --git a/runtime/observatory/tests/service/get_cpu_profile_timeline_rpc_test.dart b/runtime/observatory/tests/service/get_cpu_profile_timeline_rpc_test.dart
index db43578..2bbf22f 100644
--- a/runtime/observatory/tests/service/get_cpu_profile_timeline_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_cpu_profile_timeline_rpc_test.dart
@@ -22,8 +22,8 @@
Future checkTimeline(VM vm) async {
var result = await TimelineRepositoryBase().getCpuProfileTimeline(vm);
- var isString = new isInstanceOf<String>();
- var isInt = new isInstanceOf<int>();
+ var isString = isA<String>();
+ var isInt = isA<int>();
Map frames = result['stackFrames'];
expect(frames.length, greaterThan(10), reason: "Should have many samples");
for (Map frame in frames.values) {
diff --git a/runtime/observatory/tests/service/get_cpu_samples_rpc_test.dart b/runtime/observatory/tests/service/get_cpu_samples_rpc_test.dart
index 93a7353..8d7bbb9 100644
--- a/runtime/observatory/tests/service/get_cpu_samples_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_cpu_samples_rpc_test.dart
@@ -24,9 +24,9 @@
await isolate.invokeRpcNoUpgrade('getCpuSamples', {'_code': true});
expect(result['type'], equals('CpuSamples'));
- final isString = isInstanceOf<String>();
- final isInt = isInstanceOf<int>();
- final isList = isInstanceOf<List>();
+ final isString = isA<String>();
+ final isInt = isA<int>();
+ final isList = isA<List>();
final functions = result['functions'];
expect(functions.length, greaterThan(10),
reason: "Should have many functions");
diff --git a/runtime/observatory/tests/service/get_heap_map_rpc_test.dart b/runtime/observatory/tests/service/get_heap_map_rpc_test.dart
index c85a561..26949bc 100644
--- a/runtime/observatory/tests/service/get_heap_map_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_heap_map_rpc_test.dart
@@ -17,7 +17,7 @@
expect(result['pageSizeBytes'], isPositive);
expect(result['classList'], isNotNull);
expect(result['pages'].length, isPositive);
- expect(result['pages'][0]['objectStart'], new isInstanceOf<String>());
+ expect(result['pages'][0]['objectStart'], isA<String>());
expect(result['pages'][0]['objects'].length, isPositive);
expect(result['pages'][0]['objects'][0], isPositive);
},
@@ -30,7 +30,7 @@
expect(result['pageSizeBytes'], isPositive);
expect(result['classList'], isNotNull);
expect(result['pages'].length, isPositive);
- expect(result['pages'][0]['objectStart'], new isInstanceOf<String>());
+ expect(result['pages'][0]['objectStart'], isA<String>());
expect(result['pages'][0]['objects'].length, isPositive);
expect(result['pages'][0]['objects'][0], isPositive);
},
@@ -43,7 +43,7 @@
expect(result['pageSizeBytes'], isPositive);
expect(result['classList'], isNotNull);
expect(result['pages'].length, isPositive);
- expect(result['pages'][0]['objectStart'], new isInstanceOf<String>());
+ expect(result['pages'][0]['objectStart'], isA<String>());
expect(result['pages'][0]['objects'].length, isPositive);
expect(result['pages'][0]['objects'][0], isPositive);
},
@@ -56,7 +56,7 @@
expect(result['pageSizeBytes'], isPositive);
expect(result['classList'], isNotNull);
expect(result['pages'].length, isPositive);
- expect(result['pages'][0]['objectStart'], new isInstanceOf<String>());
+ expect(result['pages'][0]['objectStart'], isA<String>());
expect(result['pages'][0]['objects'].length, isPositive);
expect(result['pages'][0]['objects'][0], isPositive);
},
diff --git a/runtime/observatory/tests/service/get_isolate_rpc_test.dart b/runtime/observatory/tests/service/get_isolate_rpc_test.dart
index 2346282..293b0d3 100644
--- a/runtime/observatory/tests/service/get_isolate_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_isolate_rpc_test.dart
@@ -15,7 +15,7 @@
var result = await vm.invokeRpcNoUpgrade('getIsolate', params);
expect(result['type'], equals('Isolate'));
expect(result['id'], startsWith('isolates/'));
- expect(result['number'], new isInstanceOf<String>());
+ expect(result['number'], isA<String>());
expect(result['_originNumber'], equals(result['number']));
expect(result['startTime'], isPositive);
expect(result['livePorts'], isPositive);
diff --git a/runtime/observatory/tests/service/get_object_rpc_test.dart b/runtime/observatory/tests/service/get_object_rpc_test.dart
index faf5eca..e9e508b 100644
--- a/runtime/observatory/tests/service/get_object_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_object_rpc_test.dart
@@ -726,9 +726,9 @@
expect(result['library']['type'], equals('@Library'));
expect(result['source'], startsWith('// Copyright (c)'));
expect(result['tokenPosTable'].length, isPositive);
- expect(result['tokenPosTable'][0], new isInstanceOf<List>());
+ expect(result['tokenPosTable'][0], isA<List>());
expect(result['tokenPosTable'][0].length, isPositive);
- expect(result['tokenPosTable'][0][0], new isInstanceOf<int>());
+ expect(result['tokenPosTable'][0][0], isA<int>());
},
// invalid script.
@@ -974,17 +974,15 @@
expect(result['name'], endsWith('_DummyClass.dummyFunction'));
expect(result['_vmName'], endsWith('dummyFunction'));
expect(result['kind'], equals('Dart'));
- expect(result['_optimized'], new isInstanceOf<bool>());
+ expect(result['_optimized'], isA<bool>());
expect(result['function']['type'], equals('@Function'));
- expect(result['_startAddress'], new isInstanceOf<String>());
- expect(result['_endAddress'], new isInstanceOf<String>());
+ expect(result['_startAddress'], isA<String>());
+ expect(result['_endAddress'], isA<String>());
expect(result['_objectPool'], isNotNull);
expect(result['_disassembly'], isNotNull);
expect(result['_descriptors'], isNotNull);
- expect(
- result['_inlinedFunctions'], anyOf([isNull, new isInstanceOf<List>()]));
- expect(
- result['_inlinedIntervals'], anyOf([isNull, new isInstanceOf<List>()]));
+ expect(result['_inlinedFunctions'], anyOf([isNull, isA<List>()]));
+ expect(result['_inlinedIntervals'], anyOf([isNull, isA<List>()]));
},
// invalid code.
diff --git a/runtime/observatory/tests/service/get_process_memory_usage_rpc_test.dart b/runtime/observatory/tests/service/get_process_memory_usage_rpc_test.dart
index 0d97607..6dcfe36 100644
--- a/runtime/observatory/tests/service/get_process_memory_usage_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_process_memory_usage_rpc_test.dart
@@ -12,9 +12,9 @@
var result = await vm.invokeRpcNoUpgrade("getProcessMemoryUsage", {});
expect(result['type'], equals('ProcessMemoryUsage'));
checkProcessMemoryItem(item) {
- expect(item['name'], isInstanceOf<String>());
- expect(item['description'], isInstanceOf<String>());
- expect(item['size'], isInstanceOf<int>());
+ expect(item['name'], isA<String>());
+ expect(item['description'], isA<String>());
+ expect(item['size'], isA<int>());
expect(item['size'], greaterThanOrEqualTo(0));
for (var child in item['children']) {
checkProcessMemoryItem(child);
diff --git a/runtime/observatory/tests/service/get_vm_rpc_test.dart b/runtime/observatory/tests/service/get_vm_rpc_test.dart
index 97f973a..0291ff3 100644
--- a/runtime/observatory/tests/service/get_vm_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_vm_rpc_test.dart
@@ -16,11 +16,11 @@
expect(result['type'], equals('VM'));
expect(result['name'], equals('Walter'));
expect(result['architectureBits'], isPositive);
- expect(result['targetCPU'], new isInstanceOf<String>());
- expect(result['hostCPU'], new isInstanceOf<String>());
+ expect(result['targetCPU'], isA<String>());
+ expect(result['hostCPU'], isA<String>());
expect(result['operatingSystem'], Platform.operatingSystem);
- expect(result['version'], new isInstanceOf<String>());
- expect(result['pid'], new isInstanceOf<int>());
+ expect(result['version'], isA<String>());
+ expect(result['pid'], isA<int>());
expect(result['startTime'], isPositive);
expect(result['isolates'].length, isPositive);
expect(result['isolates'][0]['type'], equals('@Isolate'));
diff --git a/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart b/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart
index b149a7e..71a8b61a 100644
--- a/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart
@@ -109,10 +109,10 @@
continue;
}
Map arguments = event['args'];
- expect(arguments, new isInstanceOf<Map>());
- expect(arguments['isolateGroupId'], new isInstanceOf<String>());
+ expect(arguments, isA<Map>());
+ expect(arguments['isolateGroupId'], isA<String>());
if (event['cat'] != 'GC') {
- expect(arguments['isolateId'], new isInstanceOf<String>());
+ expect(arguments['isolateId'], isA<String>());
}
}
}
@@ -121,7 +121,7 @@
(VM vm) async {
Map result = await vm.invokeRpcNoUpgrade('getVMTimeline', {});
expect(result['type'], equals('Timeline'));
- expect(result['traceEvents'], new isInstanceOf<List>());
+ expect(result['traceEvents'], isA<List>());
final int numEvents = result['traceEvents'].length;
List dartEvents = filterForDartEvents(result['traceEvents']);
expect(dartEvents.length, greaterThanOrEqualTo(11));
diff --git a/runtime/observatory/tests/service/get_zone_memory_info_rpc_test.dart b/runtime/observatory/tests/service/get_zone_memory_info_rpc_test.dart
index 428c42e..3de0b1d 100644
--- a/runtime/observatory/tests/service/get_zone_memory_info_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_zone_memory_info_rpc_test.dart
@@ -9,12 +9,11 @@
var tests = <VMTest>[
(VM vm) async {
- isInstanceOf<int> isInt = new isInstanceOf<int>();
// Just iterate over all the isolates to confirm they have
// the correct fields needed to examine zone memory usage.
for (Isolate isolate in new List.from(vm.isolates)) {
await isolate.reload();
- expect(isolate.zoneHighWatermark, isInt);
+ expect(isolate.zoneHighWatermark, isA<int>());
expect(isolate.threads, isNotNull);
List<Thread> threads = isolate.threads;
@@ -22,8 +21,8 @@
expect(thread.type, equals('_Thread'));
expect(thread.id, isNotNull);
expect(thread.kind, isNotNull);
- expect(thread.zoneHighWatermark, isInt);
- expect(thread.zoneCapacity, isInt);
+ expect(thread.zoneHighWatermark, isA<int>());
+ expect(thread.zoneCapacity, isA<int>());
}
}
},
diff --git a/runtime/observatory/tests/service/logging_test.dart b/runtime/observatory/tests/service/logging_test.dart
index 4acf8b0..84fa6b1 100644
--- a/runtime/observatory/tests/service/logging_test.dart
+++ b/runtime/observatory/tests/service/logging_test.dart
@@ -37,7 +37,7 @@
expect(event.logRecord['sequenceNumber'], equals(0));
expect(event.logRecord['message'].valueAsString, equals('Hey Buddy!'));
expect(event.logRecord['level'], equals(Level.FINE));
- expect(event.logRecord['time'], new isInstanceOf<DateTime>());
+ expect(event.logRecord['time'], isA<DateTime>());
}),
hasStoppedAtBreakpoint,
resumeIsolateAndAwaitEvent(Isolate.kLoggingStream, (ServiceEvent event) {
@@ -45,7 +45,7 @@
expect(event.logRecord['sequenceNumber'], equals(1));
expect(event.logRecord['level'], equals(Level.INFO));
expect(event.logRecord['message'].valueAsString, equals('YES'));
- expect(event.logRecord['time'], new isInstanceOf<DateTime>());
+ expect(event.logRecord['time'], isA<DateTime>());
}),
];
diff --git a/runtime/observatory/tests/service/network_profiling_test.dart b/runtime/observatory/tests/service/network_profiling_test.dart
index 4da5995..352d1b2 100644
--- a/runtime/observatory/tests/service/network_profiling_test.dart
+++ b/runtime/observatory/tests/service/network_profiling_test.dart
@@ -59,7 +59,7 @@
Future<void> checkFinishEvent(ServiceEvent event) {
expect(event.kind, equals(ServiceEvent.kExtension));
expect(event.extensionKind, equals('socketTest'));
- expect(event.extensionData, isInstanceOf<Map>());
+ expect(event.extensionData, isA<Map>());
expect(event.extensionData['socket'], equals('test'));
}
diff --git a/runtime/observatory/tests/service/vm_timeline_flags_test.dart b/runtime/observatory/tests/service/vm_timeline_flags_test.dart
index 72608f6..9553054 100644
--- a/runtime/observatory/tests/service/vm_timeline_flags_test.dart
+++ b/runtime/observatory/tests/service/vm_timeline_flags_test.dart
@@ -43,7 +43,7 @@
// Get the timeline.
Map result = await isolate.vm.invokeRpcNoUpgrade('getVMTimeline', {});
expect(result['type'], equals('Timeline'));
- expect(result['traceEvents'], new isInstanceOf<List>());
+ expect(result['traceEvents'], isA<List>());
// Confirm that it as no non-meta data events.
expect(filterEvents(result['traceEvents'], isNotMetaData).length, 0);
},
@@ -77,7 +77,7 @@
// Get the timeline.
Map result = await isolate.vm.invokeRpcNoUpgrade('getVMTimeline', {});
expect(result['type'], equals('Timeline'));
- expect(result['traceEvents'], new isInstanceOf<List>());
+ expect(result['traceEvents'], isA<List>());
print(result['traceEvents']);
// Confirm that Dart events are added.
expect(filterEvents(result['traceEvents'], isDart).length, greaterThan(0));
@@ -101,7 +101,7 @@
// Grab the timeline and remember the number of Dart events.
Map result = await isolate.vm.invokeRpcNoUpgrade('getVMTimeline', {});
expect(result['type'], equals('Timeline'));
- expect(result['traceEvents'], new isInstanceOf<List>());
+ expect(result['traceEvents'], isA<List>());
dartEventCount = filterEvents(result['traceEvents'], isDart).length;
await completer.future;
@@ -119,7 +119,7 @@
// Grab the timeline and verify that we haven't added any new Dart events.
Map result = await isolate.vm.invokeRpcNoUpgrade('getVMTimeline', {});
expect(result['type'], equals('Timeline'));
- expect(result['traceEvents'], new isInstanceOf<List>());
+ expect(result['traceEvents'], isA<List>());
expect(filterEvents(result['traceEvents'], isDart).length, dartEventCount);
// Confirm that zero non-Dart events are added.
expect(filterEvents(result['traceEvents'], isNotDartAndMetaData).length,
diff --git a/runtime/tests/vm/dart/sdk_hash_test.dart b/runtime/tests/vm/dart/sdk_hash_test.dart
index 855e007..8e31050 100644
--- a/runtime/tests/vm/dart/sdk_hash_test.dart
+++ b/runtime/tests/vm/dart/sdk_hash_test.dart
@@ -14,7 +14,6 @@
// Keep in sync with pkg/kernel/lib/binary/tag.dart:
const tagComponentFile = [0x90, 0xAB, 0xCD, 0xEF];
-const tagBinaryFormatVersion = [0x00, 0x00, 0x00, 43];
Future<void> main(List<String> args) async {
if (args.length == 1 && args[0] == '--child') {
@@ -53,7 +52,6 @@
// The SDK Hash is located after the ComponentFile and BinaryFormatVersion
// tags (both UInt32).
Expect.listEquals(tagComponentFile, bytes.sublist(0, 4));
- Expect.listEquals(tagBinaryFormatVersion, bytes.sublist(4, 8));
Expect.notEquals('0000000000', ascii.decode(bytes.sublist(8, 10)));
// Flip the first byte in the hash:
bytes[8] = ~bytes[8];
diff --git a/runtime/tests/vm/dart_2/sdk_hash_test.dart b/runtime/tests/vm/dart_2/sdk_hash_test.dart
index b6f166c..c73dc03 100644
--- a/runtime/tests/vm/dart_2/sdk_hash_test.dart
+++ b/runtime/tests/vm/dart_2/sdk_hash_test.dart
@@ -14,7 +14,6 @@
// Keep in sync with pkg/kernel/lib/binary/tag.dart:
const tagComponentFile = [0x90, 0xAB, 0xCD, 0xEF];
-const tagBinaryFormatVersion = [0x00, 0x00, 0x00, 43];
Future<void> main(List<String> args) async {
if (args.length == 1 && args[0] == '--child') {
@@ -53,7 +52,6 @@
// The SDK Hash is located after the ComponentFile and BinaryFormatVersion
// tags (both UInt32).
Expect.listEquals(tagComponentFile, bytes.sublist(0, 4));
- Expect.listEquals(tagBinaryFormatVersion, bytes.sublist(4, 8));
Expect.notEquals('0000000000', ascii.decode(bytes.sublist(8, 18)));
// Flip the first byte in the hash:
bytes[8] = ~bytes[8];
diff --git a/runtime/vm/BUILD.gn b/runtime/vm/BUILD.gn
index 3c042b1..0d1d129f 100644
--- a/runtime/vm/BUILD.gn
+++ b/runtime/vm/BUILD.gn
@@ -74,7 +74,7 @@
if (is_fuchsia) {
if (using_fuchsia_gn_sdk) {
extra_deps = [
- "$fuchsia_sdk_root/fidl/fuchsia.intl",
+ "$fuchsia_sdk_root/fidl/fuchsia.deprecatedtimezone",
"$fuchsia_sdk_root/pkg/async",
"$fuchsia_sdk_root/pkg/async-default",
"$fuchsia_sdk_root/pkg/async-loop",
@@ -87,7 +87,7 @@
]
} else if (using_fuchsia_sdk) {
extra_deps = [
- "$fuchsia_sdk_root/fidl:fuchsia.intl",
+ "$fuchsia_sdk_root/fidl:fuchsia.deprecatedtimezone",
"$fuchsia_sdk_root/pkg:async-loop",
"$fuchsia_sdk_root/pkg:async-loop-default",
"$fuchsia_sdk_root/pkg:inspect",
@@ -98,7 +98,9 @@
]
} else {
extra_deps = [
- "//sdk/fidl/fuchsia.intl",
+ # TODO(US-399): Remove time_service specific code when it is no longer
+ # necessary.
+ "//sdk/fidl/fuchsia.deprecatedtimezone",
"//sdk/lib/sys/cpp",
"//sdk/lib/sys/inspect/cpp",
"//zircon/public/lib/fbl",
diff --git a/runtime/vm/compiler/backend/constant_propagator.cc b/runtime/vm/compiler/backend/constant_propagator.cc
index d412104..4fc79f6 100644
--- a/runtime/vm/compiler/backend/constant_propagator.cc
+++ b/runtime/vm/compiler/backend/constant_propagator.cc
@@ -1024,6 +1024,9 @@
AbstractType& result = AbstractType::Handle(
Z, instr->type().InstantiateFrom(
instantiator_type_args, function_type_args, kAllFree, Heap::kOld));
+ if (result.IsTypeRef()) {
+ result = TypeRef::Cast(result).type();
+ }
ASSERT(result.IsInstantiated());
result = result.Canonicalize();
SetValue(instr, result);
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index a6c66f3..d77f84c 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -10,6 +10,7 @@
#include "lib/stacktrace.h"
#include "platform/assert.h"
+#include "platform/unicode.h"
#include "vm/class_finalizer.h"
#include "vm/clustered_snapshot.h"
#include "vm/compilation_trace.h"
@@ -22,7 +23,6 @@
#include "vm/debugger.h"
#include "vm/dwarf.h"
#include "vm/elf.h"
-#include "platform/unicode.h"
#include "vm/exceptions.h"
#include "vm/flags.h"
#include "vm/growable_array.h"
@@ -690,6 +690,14 @@
#endif
return reinterpret_cast<FinalizablePersistentHandle*>(handle);
}
+FinalizablePersistentHandle* FinalizablePersistentHandle::Cast(
+ Dart_FinalizableHandle handle) {
+#if defined(DEBUG)
+ ApiState* state = IsolateGroup::Current()->api_state();
+ ASSERT(state->IsValidFinalizableHandle(handle));
+#endif
+ return reinterpret_cast<FinalizablePersistentHandle*>(handle);
+}
void FinalizablePersistentHandle::Finalize(
IsolateGroup* isolate_group,
@@ -697,13 +705,24 @@
if (!handle->raw()->IsHeapObject()) {
return; // Free handle.
}
- Dart_WeakPersistentHandleFinalizer callback = handle->callback();
- ASSERT(callback != NULL);
void* peer = handle->peer();
- Dart_WeakPersistentHandle object = handle->apiHandle();
- (*callback)(isolate_group->embedder_data(), object, peer);
ApiState* state = isolate_group->api_state();
ASSERT(state != NULL);
+
+ ASSERT(handle->auto_delete());
+
+ if (handle->callback_signature_ == CallbackSignature::kHandleFinalizer) {
+ Dart_HandleFinalizer callback = handle->callback();
+ ASSERT(callback != NULL);
+ (*callback)(isolate_group->embedder_data(), peer);
+ } else {
+ Dart_WeakPersistentHandleFinalizer callback =
+ handle->CallbackWeakFinalizer();
+ ASSERT(callback != NULL);
+ Dart_WeakPersistentHandle object = handle->ApiWeakPersistentHandle();
+ (*callback)(isolate_group->embedder_data(), object, peer);
+ }
+
state->FreeWeakPersistentHandle(handle);
}
@@ -920,6 +939,19 @@
return Api::NewHandle(thread, weak_ref->raw());
}
+static Dart_Handle HandleFromFinalizable(Dart_FinalizableHandle object) {
+ Thread* thread = Thread::Current();
+ Isolate* isolate = thread->isolate();
+ CHECK_ISOLATE(isolate);
+ ApiState* state = isolate->group()->api_state();
+ ASSERT(state != NULL);
+ TransitionNativeToVM transition(thread);
+ NoSafepointScope no_safepoint_scope;
+ FinalizablePersistentHandle* weak_ref =
+ FinalizablePersistentHandle::Cast(object);
+ return Api::NewHandle(thread, weak_ref->raw());
+}
+
DART_EXPORT Dart_PersistentHandle Dart_NewPersistentHandle(Dart_Handle object) {
DARTSCOPE(Thread::Current());
Isolate* I = T->isolate();
@@ -943,7 +975,7 @@
obj1_ref->set_raw(obj2_ref);
}
-static Dart_WeakPersistentHandle AllocateFinalizableHandle(
+static Dart_WeakPersistentHandle AllocateWeakPersistentHandle(
Thread* thread,
const Object& ref,
void* peer,
@@ -954,11 +986,12 @@
}
FinalizablePersistentHandle* finalizable_ref =
FinalizablePersistentHandle::New(thread->isolate(), ref, peer, callback,
- external_allocation_size);
- return finalizable_ref->apiHandle();
+ external_allocation_size,
+ /*auto_delete=*/true);
+ return finalizable_ref->ApiWeakPersistentHandle();
}
-static Dart_WeakPersistentHandle AllocateFinalizableHandle(
+static Dart_WeakPersistentHandle AllocateWeakPersistentHandle(
Thread* thread,
Dart_Handle object,
void* peer,
@@ -967,6 +1000,36 @@
REUSABLE_OBJECT_HANDLESCOPE(thread);
Object& ref = thread->ObjectHandle();
ref = Api::UnwrapHandle(object);
+ return AllocateWeakPersistentHandle(thread, ref, peer,
+ external_allocation_size, callback);
+}
+
+static Dart_FinalizableHandle AllocateFinalizableHandle(
+ Thread* thread,
+ const Object& ref,
+ void* peer,
+ intptr_t external_allocation_size,
+ Dart_HandleFinalizer callback) {
+ if (!ref.raw()->IsHeapObject()) {
+ return NULL;
+ }
+
+ FinalizablePersistentHandle* finalizable_ref =
+ FinalizablePersistentHandle::New(thread->isolate(), ref, peer, callback,
+ external_allocation_size,
+ /*auto_delete=*/true);
+ return finalizable_ref->ApiFinalizableHandle();
+}
+
+static Dart_FinalizableHandle AllocateFinalizableHandle(
+ Thread* thread,
+ Dart_Handle object,
+ void* peer,
+ intptr_t external_allocation_size,
+ Dart_HandleFinalizer callback) {
+ REUSABLE_OBJECT_HANDLESCOPE(thread);
+ Object& ref = thread->ObjectHandle();
+ ref = Api::UnwrapHandle(object);
return AllocateFinalizableHandle(thread, ref, peer, external_allocation_size,
callback);
}
@@ -982,6 +1045,22 @@
return NULL;
}
TransitionNativeToVM transition(thread);
+
+ return AllocateWeakPersistentHandle(thread, object, peer,
+ external_allocation_size, callback);
+}
+
+DART_EXPORT Dart_FinalizableHandle
+Dart_NewFinalizableHandle(Dart_Handle object,
+ void* peer,
+ intptr_t external_allocation_size,
+ Dart_HandleFinalizer callback) {
+ Thread* thread = Thread::Current();
+ CHECK_ISOLATE(thread->isolate());
+ if (callback == nullptr) {
+ return nullptr;
+ }
+ TransitionNativeToVM transition(thread);
return AllocateFinalizableHandle(thread, object, peer,
external_allocation_size, callback);
}
@@ -998,6 +1077,21 @@
weak_ref->UpdateExternalSize(external_size, isolate_group);
}
+DART_EXPORT void Dart_UpdateFinalizableExternalSize(
+ Dart_FinalizableHandle object,
+ Dart_Handle strong_ref_to_object,
+ intptr_t external_allocation_size) {
+ if (!Dart_IdentityEquals(strong_ref_to_object,
+ HandleFromFinalizable(object))) {
+ FATAL1(
+ "%s expects arguments 'object' and 'strong_ref_to_object' to point to "
+ "the same object.",
+ CURRENT_FUNC);
+ }
+ auto wph_object = reinterpret_cast<Dart_WeakPersistentHandle>(object);
+ Dart_UpdateExternalSize(wph_object, external_allocation_size);
+}
+
DART_EXPORT void Dart_DeletePersistentHandle(Dart_PersistentHandle object) {
IsolateGroup* isolate_group = IsolateGroup::Current();
CHECK_ISOLATE_GROUP(isolate_group);
@@ -1025,6 +1119,22 @@
state->FreeWeakPersistentHandle(weak_ref);
}
+DART_EXPORT void Dart_DeleteFinalizableHandle(
+ Dart_FinalizableHandle object,
+ Dart_Handle strong_ref_to_object) {
+ if (!Dart_IdentityEquals(strong_ref_to_object,
+ HandleFromFinalizable(object))) {
+ FATAL1(
+ "%s expects arguments 'object' and 'strong_ref_to_object' to point to "
+ "the same object.",
+ CURRENT_FUNC);
+ }
+
+ auto wph_object = reinterpret_cast<Dart_WeakPersistentHandle>(object);
+
+ return Dart_DeleteWeakPersistentHandle(wph_object);
+}
+
// --- Initialization and Globals ---
DART_EXPORT const char* Dart_VersionString() {
@@ -3814,8 +3924,8 @@
result = ExternalTypedData::New(cid, reinterpret_cast<uint8_t*>(data), length,
thread->heap()->SpaceForExternal(bytes));
if (callback != nullptr) {
- AllocateFinalizableHandle(thread, result, peer, external_allocation_size,
- callback);
+ AllocateWeakPersistentHandle(thread, result, peer, external_allocation_size,
+ callback);
}
return Api::NewHandle(thread, result.raw());
}
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index 7063353..84681a8 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -2792,12 +2792,16 @@
static void NopCallback(void* isolate_callback_data,
Dart_WeakPersistentHandle handle,
void* peer) {}
+static void NopCallback(void* isolate_callback_data, void* peer) {}
static void UnreachedCallback(void* isolate_callback_data,
Dart_WeakPersistentHandle handle,
void* peer) {
UNREACHABLE();
}
+static void UnreachedCallback(void* isolate_callback_data, void* peer) {
+ UNREACHABLE();
+}
static void ExternalTypedDataFinalizer(void* isolate_callback_data,
Dart_WeakPersistentHandle handle,
@@ -2826,9 +2830,7 @@
}
}
-static void SlowFinalizer(void* isolate_callback_data,
- Dart_WeakPersistentHandle handle,
- void* peer) {
+static void SlowFinalizer(void* isolate_callback_data, void* peer) {
OS::Sleep(10);
intptr_t* count = reinterpret_cast<intptr_t*>(peer);
(*count)++;
@@ -2839,9 +2841,36 @@
for (intptr_t i = 0; i < 10; i++) {
Dart_EnterScope();
Dart_Handle str1 = Dart_NewStringFromCString("Live fast");
- Dart_NewWeakPersistentHandle(str1, &count, 0, SlowFinalizer);
+ Dart_NewFinalizableHandle(str1, &count, 0, SlowFinalizer);
Dart_Handle str2 = Dart_NewStringFromCString("Die young");
- Dart_NewWeakPersistentHandle(str2, &count, 0, SlowFinalizer);
+ Dart_NewFinalizableHandle(str2, &count, 0, SlowFinalizer);
+ Dart_ExitScope();
+
+ {
+ TransitionNativeToVM transition(thread);
+ GCTestHelper::CollectAllGarbage();
+ }
+ }
+
+ EXPECT_EQ(20, count);
+}
+
+static void SlowWeakPersistentHandle(void* isolate_callback_data,
+ Dart_WeakPersistentHandle handle,
+ void* peer) {
+ OS::Sleep(10);
+ intptr_t* count = reinterpret_cast<intptr_t*>(peer);
+ (*count)++;
+}
+
+TEST_CASE(DartAPI_SlowWeakPersistenhandle) {
+ intptr_t count = 0;
+ for (intptr_t i = 0; i < 10; i++) {
+ Dart_EnterScope();
+ Dart_Handle str1 = Dart_NewStringFromCString("Live fast");
+ Dart_NewWeakPersistentHandle(str1, &count, 0, SlowWeakPersistentHandle);
+ Dart_Handle str2 = Dart_NewStringFromCString("Die young");
+ Dart_NewWeakPersistentHandle(str2, &count, 0, SlowWeakPersistentHandle);
Dart_ExitScope();
{
@@ -3219,6 +3248,122 @@
}
}
+static Dart_FinalizableHandle finalizable_new_ref = nullptr;
+static void* finalizable_new_ref_peer = 0;
+static Dart_FinalizableHandle finalizable_old_ref = nullptr;
+static void* finalizable_old_ref_peer = 0;
+
+static void FinalizableHandleCallback(void* isolate_callback_data, void* peer) {
+ if (peer == finalizable_new_ref_peer) {
+ finalizable_new_ref_peer = 0;
+ finalizable_new_ref = nullptr;
+ } else if (peer == finalizable_old_ref_peer) {
+ finalizable_old_ref_peer = 0;
+ finalizable_old_ref = nullptr;
+ }
+}
+
+TEST_CASE(DartAPI_FinalizableHandle) {
+ // GCs due to allocations or weak handle creation can cause early promotion
+ // and interfer with the scenario this test is verifying.
+ NoHeapGrowthControlScope force_growth;
+
+ void* peer = reinterpret_cast<void*>(0);
+ Dart_Handle local_new_ref = Dart_Null();
+ finalizable_new_ref = Dart_NewFinalizableHandle(local_new_ref, peer, 0,
+ FinalizableHandleCallback);
+ finalizable_new_ref_peer = peer;
+
+ peer = reinterpret_cast<void*>(1);
+ Dart_Handle local_old_ref = Dart_Null();
+ finalizable_old_ref = Dart_NewFinalizableHandle(local_old_ref, peer, 0,
+ FinalizableHandleCallback);
+ finalizable_old_ref_peer = peer;
+
+ {
+ Dart_EnterScope();
+
+ // Create an object in new space.
+ Dart_Handle new_ref = AllocateNewString("new string");
+ EXPECT_VALID(new_ref);
+
+ // Create an object in old space.
+ Dart_Handle old_ref = AllocateOldString("old string");
+ EXPECT_VALID(old_ref);
+
+ // Create a weak ref to the new space object.
+ peer = reinterpret_cast<void*>(2);
+ finalizable_new_ref =
+ Dart_NewFinalizableHandle(new_ref, peer, 0, FinalizableHandleCallback);
+ finalizable_new_ref_peer = peer;
+
+ // Create a weak ref to the old space object.
+ peer = reinterpret_cast<void*>(3);
+ finalizable_old_ref =
+ Dart_NewFinalizableHandle(old_ref, peer, 0, FinalizableHandleCallback);
+ finalizable_old_ref_peer = peer;
+
+ {
+ TransitionNativeToVM transition(thread);
+ // Garbage collect new space.
+ GCTestHelper::CollectNewSpace();
+ }
+
+ // Nothing should be invalidated or cleared.
+ EXPECT_VALID(new_ref);
+ EXPECT(!Dart_IsNull(new_ref));
+ EXPECT_VALID(old_ref);
+ EXPECT(!Dart_IsNull(old_ref));
+
+ {
+ TransitionNativeToVM transition(thread);
+ // Garbage collect old space.
+ GCTestHelper::CollectOldSpace();
+ }
+
+ // Nothing should be invalidated or cleared.
+ EXPECT_VALID(new_ref);
+ EXPECT(!Dart_IsNull(new_ref));
+ EXPECT_VALID(old_ref);
+ EXPECT(!Dart_IsNull(old_ref));
+
+ // Delete local (strong) references.
+ Dart_ExitScope();
+ }
+
+ {
+ TransitionNativeToVM transition(thread);
+ // Garbage collect new space again.
+ GCTestHelper::CollectNewSpace();
+ }
+
+ {
+ Dart_EnterScope();
+ // Weak ref to new space object should now be cleared.
+ EXPECT(finalizable_new_ref == nullptr);
+ Dart_ExitScope();
+ }
+
+ {
+ TransitionNativeToVM transition(thread);
+ // Garbage collect old space again.
+ GCTestHelper::CollectOldSpace();
+ }
+
+ {
+ Dart_EnterScope();
+ // Weak ref to old space object should now be cleared.
+ EXPECT(finalizable_new_ref == nullptr);
+ EXPECT(finalizable_old_ref == nullptr);
+ Dart_ExitScope();
+ }
+
+ {
+ TransitionNativeToVM transition(thread);
+ GCTestHelper::CollectAllGarbage();
+ }
+}
+
TEST_CASE(DartAPI_WeakPersistentHandleErrors) {
Dart_EnterScope();
@@ -3239,6 +3384,26 @@
Dart_ExitScope();
}
+TEST_CASE(DartAPI_FinalizableHandleErrors) {
+ Dart_EnterScope();
+
+ // NULL callback.
+ Dart_Handle obj1 = NewString("new string");
+ EXPECT_VALID(obj1);
+ Dart_FinalizableHandle ref1 =
+ Dart_NewFinalizableHandle(obj1, nullptr, 0, nullptr);
+ EXPECT_EQ(ref1, static_cast<void*>(nullptr));
+
+ // Immediate object.
+ Dart_Handle obj2 = Dart_NewInteger(0);
+ EXPECT_VALID(obj2);
+ Dart_FinalizableHandle ref2 =
+ Dart_NewFinalizableHandle(obj2, nullptr, 0, FinalizableHandleCallback);
+ EXPECT_EQ(ref2, static_cast<void*>(nullptr));
+
+ Dart_ExitScope();
+}
+
static Dart_PersistentHandle persistent_handle1;
static Dart_WeakPersistentHandle weak_persistent_handle2;
static Dart_WeakPersistentHandle weak_persistent_handle3;
@@ -3285,6 +3450,44 @@
Dart_ExitScope();
}
+static Dart_FinalizableHandle finalizable_handle3;
+
+static void FinalizableHandlePeerCleanupFinalizer(void* isolate_callback_data,
+ void* peer) {
+ Dart_DeletePersistentHandle(persistent_handle1);
+ Dart_DeleteWeakPersistentHandle(weak_persistent_handle2);
+ *static_cast<int*>(peer) = 42;
+}
+
+TEST_CASE(DartAPI_FinalizableHandleCleanupFinalizer) {
+ Heap* heap = Isolate::Current()->heap();
+
+ const char* kTestString1 = "Test String1";
+ Dart_EnterScope();
+ CHECK_API_SCOPE(thread);
+ Dart_Handle ref1 = Dart_NewStringFromCString(kTestString1);
+ persistent_handle1 = Dart_NewPersistentHandle(ref1);
+ Dart_Handle ref2 = Dart_NewStringFromCString(kTestString1);
+ int peer2 = 0;
+ weak_persistent_handle2 =
+ Dart_NewWeakPersistentHandle(ref2, &peer2, 0, NopCallback);
+ int peer3 = 0;
+ {
+ Dart_EnterScope();
+ Dart_Handle ref3 = Dart_NewStringFromCString(kTestString1);
+ finalizable_handle3 = Dart_NewFinalizableHandle(
+ ref3, &peer3, 0, FinalizableHandlePeerCleanupFinalizer);
+ Dart_ExitScope();
+ }
+ {
+ TransitionNativeToVM transition(thread);
+ GCTestHelper::CollectAllGarbage();
+ EXPECT(heap->ExternalInWords(Heap::kOld) == 0);
+ EXPECT(peer3 == 42);
+ }
+ Dart_ExitScope();
+}
+
static void WeakPersistentHandlePeerFinalizer(void* isolate_callback_data,
Dart_WeakPersistentHandle handle,
void* peer) {
@@ -3313,6 +3516,32 @@
}
}
+static void FinalizableHandlePeerFinalizer(void* isolate_callback_data,
+ void* peer) {
+ *static_cast<int*>(peer) = 42;
+}
+
+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);
+ EXPECT(peer == 0);
+ Dart_ExitScope();
+ }
+ {
+ TransitionNativeToVM transition(thread);
+ GCTestHelper::CollectOldSpace();
+ EXPECT(peer == 0);
+ GCTestHelper::CollectNewSpace();
+ EXPECT(peer == 42);
+ }
+}
+
TEST_CASE(DartAPI_WeakPersistentHandleNoCallback) {
Dart_WeakPersistentHandle weak_ref = NULL;
int peer = 0;
@@ -3337,6 +3566,35 @@
}
}
+TEST_CASE(DartAPI_FinalizableHandleNoCallback) {
+ Dart_FinalizableHandle weak_ref = nullptr;
+ Dart_PersistentHandle strong_ref = nullptr;
+ int peer = 0;
+ {
+ Dart_EnterScope();
+ Dart_Handle obj = NewString("new string");
+ EXPECT_VALID(obj);
+ weak_ref = Dart_NewFinalizableHandle(obj, &peer, 0,
+ FinalizableHandlePeerFinalizer);
+ strong_ref = Dart_NewPersistentHandle(obj);
+ Dart_ExitScope();
+ }
+ // A finalizer is not invoked on a deleted handle. Therefore, the
+ // peer value should not change after the referent is collected.
+ Dart_DeleteFinalizableHandle(weak_ref, strong_ref);
+ Dart_DeletePersistentHandle(strong_ref);
+ EXPECT(peer == 0);
+ {
+ TransitionNativeToVM transition(thread);
+ GCTestHelper::CollectOldSpace();
+ EXPECT(peer == 0);
+ GCTestHelper::CollectNewSpace();
+ EXPECT(peer == 0);
+ }
+}
+
+Dart_WeakPersistentHandle delete_on_finalization;
+
VM_UNIT_TEST_CASE(DartAPI_WeakPersistentHandlesCallbackShutdown) {
TestCase::CreateTestIsolate();
Dart_EnterScope();
@@ -3349,6 +3607,17 @@
EXPECT(peer == 42);
}
+VM_UNIT_TEST_CASE(DartAPI_FinalizableHandlesCallbackShutdown) {
+ TestCase::CreateTestIsolate();
+ Dart_EnterScope();
+ Dart_Handle ref = Dart_True();
+ int peer = 1234;
+ Dart_NewFinalizableHandle(ref, &peer, 0, FinalizableHandlePeerFinalizer);
+ Dart_ExitScope();
+ Dart_ShutdownIsolate();
+ EXPECT(peer == 42);
+}
+
TEST_CASE(DartAPI_WeakPersistentHandleExternalAllocationSize) {
Heap* heap = Isolate::Current()->heap();
EXPECT(heap->ExternalInWords(Heap::kNew) == 0);
@@ -3397,6 +3666,52 @@
}
}
+TEST_CASE(DartAPI_FinalizableHandleExternalAllocationSize) {
+ 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_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);
+ EXPECT_VALID(AsHandle(strong_ref));
+ Dart_ExitScope();
+ }
+ {
+ TransitionNativeToVM transition(thread);
+ GCTestHelper::CollectOldSpace();
+ EXPECT(heap->ExternalInWords(Heap::kNew) ==
+ (kWeak1ExternalSize + kWeak2ExternalSize) / kWordSize);
+ // Collect weakly referenced string, and promote strongly referenced string.
+ GCTestHelper::CollectNewSpace();
+ GCTestHelper::CollectNewSpace();
+ EXPECT(heap->ExternalInWords(Heap::kNew) == 0);
+ EXPECT(heap->ExternalInWords(Heap::kOld) == kWeak2ExternalSize / kWordSize);
+ }
+ Dart_DeletePersistentHandle(strong_ref);
+ {
+ TransitionNativeToVM transition(thread);
+ GCTestHelper::CollectOldSpace();
+ EXPECT(heap->ExternalInWords(Heap::kOld) == 0);
+ }
+}
+
TEST_CASE(DartAPI_WeakPersistentHandleExternalAllocationSizeNewspaceGC) {
Heap* heap = Isolate::Current()->heap();
Dart_WeakPersistentHandle weak1 = NULL;
@@ -3439,6 +3754,49 @@
}
}
+TEST_CASE(DartAPI_FinalizableHandleExternalAllocationSizeNewspaceGC) {
+ Heap* heap = Isolate::Current()->heap();
+ Dart_FinalizableHandle weak1 = nullptr;
+ Dart_PersistentHandle strong1 = nullptr;
+ // Large enough to exceed any new space limit. Not actually allocated.
+ const intptr_t kWeak1ExternalSize = 500 * MB;
+ {
+ Dart_EnterScope();
+ Dart_Handle obj = NewString("weakly referenced string");
+ EXPECT_VALID(obj);
+ // Triggers a scavenge immediately, since kWeak1ExternalSize is above limit.
+ weak1 = Dart_NewFinalizableHandle(obj, nullptr, kWeak1ExternalSize,
+ NopCallback);
+ strong1 = Dart_NewPersistentHandle(obj);
+ // ... but the object is still alive and not yet promoted, so external size
+ // in new space is still above the limit. Thus, even the following tiny
+ // external allocation will trigger another scavenge.
+ Dart_FinalizableHandle trigger =
+ Dart_NewFinalizableHandle(obj, nullptr, 1, NopCallback);
+ Dart_DeleteFinalizableHandle(trigger, obj);
+ // After the two scavenges above, 'obj' should now be promoted, hence its
+ // external size charged to old space.
+ {
+ CHECK_API_SCOPE(thread);
+ TransitionNativeToVM transition(thread);
+ HANDLESCOPE(thread);
+ String& handle = String::Handle(thread->zone());
+ handle ^= Api::UnwrapHandle(obj);
+ EXPECT(handle.IsOld());
+ }
+ EXPECT(heap->ExternalInWords(Heap::kNew) == 0);
+ EXPECT(heap->ExternalInWords(Heap::kOld) == kWeak1ExternalSize / kWordSize);
+ Dart_ExitScope();
+ }
+ Dart_DeleteFinalizableHandle(weak1, strong1);
+ Dart_DeletePersistentHandle(strong1);
+ {
+ TransitionNativeToVM transition(thread);
+ GCTestHelper::CollectOldSpace();
+ EXPECT_EQ(0, heap->ExternalInWords(Heap::kOld));
+ }
+}
+
TEST_CASE(DartAPI_WeakPersistentHandleExternalAllocationSizeOldspaceGC) {
// Check that external allocation in old space can trigger GC.
Isolate* isolate = Isolate::Current();
@@ -3446,6 +3804,7 @@
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.
@@ -3469,7 +3828,48 @@
}
// Large enough to trigger GC in old space. Not actually allocated.
const intptr_t kHugeExternalSize = (kWordSize == 4) ? 513 * MB : 1025 * MB;
- Dart_NewWeakPersistentHandle(live, NULL, kHugeExternalSize, NopCallback);
+ weak2 =
+ Dart_NewWeakPersistentHandle(live, NULL, kHugeExternalSize, NopCallback);
+ {
+ TransitionNativeToVM transition(thread);
+ GCTestHelper::WaitForGCTasks(); // Finalize GC for accurate live size.
+ // Expect small garbage to be collected.
+ EXPECT_EQ(kHugeExternalSize,
+ isolate->heap()->ExternalInWords(Heap::kOld) * kWordSize);
+ }
+ Dart_ExitScope();
+}
+
+TEST_CASE(DartAPI_FinalizableHandleExternalAllocationSizeOldspaceGC) {
+ // Check that external allocation in old space can trigger GC.
+ Isolate* isolate = Isolate::Current();
+ 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.
+ EXPECT_EQ(0, isolate->heap()->ExternalInWords(Heap::kOld));
+ }
+ const intptr_t kSmallExternalSize = 1 * KB;
+ {
+ Dart_EnterScope();
+ Dart_Handle dead = AllocateOldString("dead");
+ EXPECT_VALID(dead);
+ weak = Dart_NewFinalizableHandle(dead, nullptr, kSmallExternalSize,
+ NopCallback);
+ Dart_ExitScope();
+ }
+ {
+ TransitionNativeToVM transition(thread);
+ GCTestHelper::WaitForGCTasks(); // Finalize GC for accurate live size.
+ EXPECT_EQ(kSmallExternalSize,
+ isolate->heap()->ExternalInWords(Heap::kOld) * kWordSize);
+ }
+ // Large enough to trigger GC in old space. Not actually allocated.
+ const intptr_t kHugeExternalSize = (kWordSize == 4) ? 513 * MB : 1025 * MB;
+ Dart_NewFinalizableHandle(live, nullptr, kHugeExternalSize, NopCallback);
{
TransitionNativeToVM transition(thread);
GCTestHelper::WaitForGCTasks(); // Finalize GC for accurate live size.
@@ -3514,6 +3914,44 @@
}
}
+TEST_CASE(DartAPI_FinalizableHandleExternalAllocationSizeOddReferents) {
+ Heap* heap = Isolate::Current()->heap();
+ Dart_FinalizableHandle weak1 = nullptr;
+ Dart_PersistentHandle strong1 = nullptr;
+ static const intptr_t kWeak1ExternalSize = 1 * KB;
+ Dart_FinalizableHandle weak2 = nullptr;
+ Dart_PersistentHandle strong2 = nullptr;
+ static const intptr_t kWeak2ExternalSize = 2 * KB;
+ EXPECT_EQ(0, heap->ExternalInWords(Heap::kOld));
+ {
+ Dart_EnterScope();
+ Dart_Handle dart_true = Dart_True(); // VM heap object.
+ EXPECT_VALID(dart_true);
+ weak1 = Dart_NewFinalizableHandle(dart_true, nullptr, kWeak1ExternalSize,
+ UnreachedCallback);
+ strong1 = Dart_NewPersistentHandle(dart_true);
+ Dart_Handle zero = Dart_False(); // VM heap object.
+ EXPECT_VALID(zero);
+ weak2 = Dart_NewFinalizableHandle(zero, nullptr, kWeak2ExternalSize,
+ UnreachedCallback);
+ strong2 = Dart_NewPersistentHandle(zero);
+ // Both should be charged to old space.
+ EXPECT(heap->ExternalInWords(Heap::kOld) ==
+ (kWeak1ExternalSize + kWeak2ExternalSize) / kWordSize);
+ Dart_ExitScope();
+ }
+ Dart_DeleteFinalizableHandle(weak1, strong1);
+ Dart_DeletePersistentHandle(strong1);
+ Dart_DeleteFinalizableHandle(weak2, strong2);
+ Dart_DeletePersistentHandle(strong2);
+ EXPECT_EQ(0, heap->ExternalInWords(Heap::kOld));
+ {
+ TransitionNativeToVM transition(thread);
+ GCTestHelper::CollectOldSpace();
+ EXPECT_EQ(0, heap->ExternalInWords(Heap::kOld));
+ }
+}
+
#define EXAMPLE_RESOURCE_NATIVE_LIST(V) \
V(ExampleResource_Allocate, 1) \
V(ExampleResource_Use, 1) \
diff --git a/runtime/vm/dart_api_state.h b/runtime/vm/dart_api_state.h
index 5b22c93..7b52e98 100644
--- a/runtime/vm/dart_api_state.h
+++ b/runtime/vm/dart_api_state.h
@@ -190,12 +190,29 @@
// dart API.
class FinalizablePersistentHandle {
public:
+ // TODO(http://dartbug.com/42312): Delete this on migrating signature
+ // Dart_NewWeakPersistentHandle to Dart_HandleFinalizer.
+ enum class CallbackSignature {
+ // Uses a Dart_WeakPersistentHandleFinalizer.
+ kWeakPersistentHandleFinalizer = 0,
+ // Uses a Dart_HandleFinalizer.
+ kHandleFinalizer = 1,
+ };
+
static FinalizablePersistentHandle* New(
Isolate* isolate,
const Object& object,
void* peer,
Dart_WeakPersistentHandleFinalizer callback,
- intptr_t external_size);
+ intptr_t external_size,
+ bool auto_delete);
+
+ static FinalizablePersistentHandle* New(Isolate* isolate,
+ const Object& object,
+ void* peer,
+ Dart_HandleFinalizer callback,
+ intptr_t external_size,
+ bool auto_delete);
// Accessors.
ObjectPtr raw() const { return raw_; }
@@ -204,10 +221,26 @@
return OFFSET_OF(FinalizablePersistentHandle, raw_);
}
void* peer() const { return peer_; }
- Dart_WeakPersistentHandleFinalizer callback() const { return callback_; }
- Dart_WeakPersistentHandle apiHandle() {
+ Dart_WeakPersistentHandleFinalizer CallbackWeakFinalizer() const {
+ ASSERT(callback_signature_ ==
+ CallbackSignature::kWeakPersistentHandleFinalizer);
+ return callback_.weak_persistent;
+ }
+ Dart_HandleFinalizer callback() const {
+ ASSERT(callback_signature_ == CallbackSignature::kHandleFinalizer);
+ return callback_.finalizable;
+ }
+ uword callback_address() const {
+ return reinterpret_cast<uword>(callback_.finalizable);
+ }
+ Dart_WeakPersistentHandle ApiWeakPersistentHandle() {
return reinterpret_cast<Dart_WeakPersistentHandle>(this);
}
+ Dart_FinalizableHandle ApiFinalizableHandle() {
+ return reinterpret_cast<Dart_FinalizableHandle>(this);
+ }
+
+ bool auto_delete() const { return auto_delete_; }
intptr_t external_size() const {
return ExternalSizeInWordsBits::decode(external_data_) * kWordSize;
@@ -256,6 +289,7 @@
}
static FinalizablePersistentHandle* Cast(Dart_WeakPersistentHandle handle);
+ static FinalizablePersistentHandle* Cast(Dart_FinalizableHandle handle);
private:
enum {
@@ -264,6 +298,15 @@
kExternalSizeBitsSize = (kBitsPerWord - 1),
};
+ union HandleFinalizer {
+ Dart_HandleFinalizer finalizable;
+ Dart_WeakPersistentHandleFinalizer weak_persistent;
+ HandleFinalizer(Dart_HandleFinalizer finalizer) : finalizable(finalizer) {}
+ HandleFinalizer(Dart_WeakPersistentHandleFinalizer finalizer)
+ : weak_persistent(finalizer) {}
+ HandleFinalizer() : finalizable(nullptr) {}
+ };
+
// This part of external_data_ is the number of externally allocated bytes.
class ExternalSizeInWordsBits : public BitField<uword,
intptr_t,
@@ -277,7 +320,10 @@
friend class FinalizablePersistentHandles;
FinalizablePersistentHandle()
- : raw_(nullptr), peer_(NULL), external_data_(0), callback_(NULL) {}
+ : raw_(nullptr),
+ peer_(NULL),
+ external_data_(0),
+ callback_(HandleFinalizer()) {}
~FinalizablePersistentHandle() {}
static void Finalize(IsolateGroup* isolate_group,
@@ -293,6 +339,7 @@
raw_ = static_cast<ObjectPtr>(reinterpret_cast<uword>(free_list));
ASSERT(!raw_->IsHeapObject());
}
+
void FreeHandle(FinalizablePersistentHandle* free_list) {
Clear();
SetNext(free_list);
@@ -302,7 +349,9 @@
raw_ = Object::null();
peer_ = NULL;
external_data_ = 0;
- callback_ = NULL;
+ callback_ = HandleFinalizer();
+ auto_delete_ = false;
+ callback_signature_ = CallbackSignature::kWeakPersistentHandleFinalizer;
}
void set_raw(ObjectPtr raw) { raw_ = raw; }
@@ -311,10 +360,14 @@
void set_peer(void* peer) { peer_ = peer; }
- void set_callback(Dart_WeakPersistentHandleFinalizer callback) {
- callback_ = callback;
+ void set_callback_signature(CallbackSignature callback_signature) {
+ callback_signature_ = callback_signature;
}
+ void set_callback(HandleFinalizer callback) { callback_ = callback; }
+
+ void set_auto_delete(bool auto_delete) { auto_delete_ = auto_delete; }
+
void set_external_size(intptr_t size) {
intptr_t size_in_words = Utils::RoundUp(size, kObjectAlignment) / kWordSize;
ASSERT(ExternalSizeInWordsBits::is_valid(size_in_words));
@@ -343,7 +396,9 @@
ObjectPtr raw_;
void* peer_;
uword external_data_;
- Dart_WeakPersistentHandleFinalizer callback_;
+ HandleFinalizer callback_;
+ bool auto_delete_;
+ CallbackSignature callback_signature_;
DISALLOW_ALLOCATION(); // Allocated through AllocateHandle methods.
DISALLOW_COPY_AND_ASSIGN(FinalizablePersistentHandle);
@@ -563,6 +618,10 @@
return IsValidScopedHandle(reinterpret_cast<uword>(object));
}
+ bool IsValidHandle(Dart_FinalizableHandle object) const {
+ return IsValidScopedHandle(reinterpret_cast<uword>(object));
+ }
+
bool IsFreeHandle(Dart_WeakPersistentHandle object) const {
FinalizablePersistentHandle* handle = free_list_;
while (handle != NULL) {
@@ -746,6 +805,7 @@
MutexLocker ml(&mutex_);
return weak_persistent_handles_.AllocateHandle();
}
+
void FreeWeakPersistentHandle(FinalizablePersistentHandle* weak_ref) {
MutexLocker ml(&mutex_);
weak_persistent_handles_.FreeHandle(weak_ref);
@@ -767,6 +827,11 @@
return weak_persistent_handles_.IsValidHandle(object);
}
+ bool IsValidFinalizableHandle(Dart_FinalizableHandle object) {
+ MutexLocker ml(&mutex_);
+ return weak_persistent_handles_.IsValidHandle(object);
+ }
+
bool IsActiveWeakPersistentHandle(Dart_WeakPersistentHandle object) {
MutexLocker ml(&mutex_);
return weak_persistent_handles_.IsValidHandle(object) &&
@@ -832,13 +897,38 @@
const Object& object,
void* peer,
Dart_WeakPersistentHandleFinalizer callback,
- intptr_t external_size) {
+ intptr_t external_size,
+ bool auto_delete) {
+ ApiState* state = isolate->group()->api_state();
+ ASSERT(state != NULL);
+ ASSERT(callback != NULL);
+ FinalizablePersistentHandle* ref = state->AllocateWeakPersistentHandle();
+ ref->set_raw(object);
+ ref->set_peer(peer);
+ ref->set_callback_signature(
+ CallbackSignature::kWeakPersistentHandleFinalizer);
+ ref->set_callback(HandleFinalizer(callback));
+ ref->set_auto_delete(auto_delete);
+ // This may trigger GC, so it must be called last.
+ ref->SetExternalSize(external_size, isolate->group());
+ return ref;
+}
+
+inline FinalizablePersistentHandle* FinalizablePersistentHandle::New(
+ Isolate* isolate,
+ const Object& object,
+ void* peer,
+ Dart_HandleFinalizer callback,
+ intptr_t external_size,
+ bool auto_delete) {
ApiState* state = isolate->group()->api_state();
ASSERT(state != NULL);
FinalizablePersistentHandle* ref = state->AllocateWeakPersistentHandle();
ref->set_raw(object);
ref->set_peer(peer);
- ref->set_callback(callback);
+ ref->set_callback_signature(CallbackSignature::kHandleFinalizer);
+ ref->set_callback(HandleFinalizer(callback));
+ ref->set_auto_delete(auto_delete);
// This may trigger GC, so it must be called last.
ref->SetExternalSize(external_size, isolate->group());
return ref;
diff --git a/runtime/vm/heap/heap.cc b/runtime/vm/heap/heap.cc
index 1eb27bf..83ff8a8 100644
--- a/runtime/vm/heap/heap.cc
+++ b/runtime/vm/heap/heap.cc
@@ -595,7 +595,7 @@
EvacuateNewSpace(thread, reason);
if (thread->is_marking()) {
// If incremental marking is happening, we need to finish the GC cycle
- // and perform a follow-up GC to pruge any "floating garbage" that may be
+ // and perform a follow-up GC to purge any "floating garbage" that may be
// retained by the incremental barrier.
CollectOldSpaceGarbage(thread, kMarkSweep, reason);
}
diff --git a/runtime/vm/heap/heap.h b/runtime/vm/heap/heap.h
index 841edb1..f780ea1 100644
--- a/runtime/vm/heap/heap.h
+++ b/runtime/vm/heap/heap.h
@@ -61,7 +61,7 @@
kOldSpace, // Old space limit crossed.
kFinalize, // Concurrent marking finished.
kFull, // Heap::CollectAllGarbage
- kExternal, // Dart_NewWeakPersistentHandle
+ kExternal, // Dart_NewFinalizableHandle Dart_NewWeakPersistentHandle
kIdle, // Dart_NotifyIdle
kLowMemory, // Dart_NotifyLowMemory
kDebugging, // service request, etc.
diff --git a/runtime/vm/heap/heap_test.cc b/runtime/vm/heap/heap_test.cc
index cd2c0e8..f7201f1 100644
--- a/runtime/vm/heap/heap_test.cc
+++ b/runtime/vm/heap/heap_test.cc
@@ -571,9 +571,7 @@
EXPECT(size_before < size_after);
}
-static void NoopFinalizer(void* isolate_callback_data,
- Dart_WeakPersistentHandle handle,
- void* peer) {}
+static void NoopFinalizer(void* isolate_callback_data, void* peer) {}
ISOLATE_UNIT_TEST_CASE(ExternalPromotion) {
Isolate* isolate = Isolate::Current();
@@ -587,7 +585,8 @@
Array& neu = Array::Handle();
for (intptr_t i = 0; i < 100; i++) {
neu = Array::New(1, Heap::kNew);
- FinalizablePersistentHandle::New(isolate, neu, NULL, NoopFinalizer, 1 * MB);
+ FinalizablePersistentHandle::New(isolate, neu, NULL, NoopFinalizer, 1 * MB,
+ /*auto_delete=*/true);
old.SetAt(i, neu);
}
@@ -753,7 +752,8 @@
Array& neu = Array::Handle();
for (intptr_t i = 0; i < 100; i++) {
neu = Array::New(1, Heap::kNew);
- FinalizablePersistentHandle::New(isolate, neu, NULL, NoopFinalizer, 1 * MB);
+ FinalizablePersistentHandle::New(isolate, neu, NULL, NoopFinalizer, 1 * MB,
+ /*auto_delete=*/true);
old.SetAt(i, neu);
if ((i % 4) == 0) {
diff --git a/runtime/vm/kernel_binary.h b/runtime/vm/kernel_binary.h
index 33dc838..01e34ab 100644
--- a/runtime/vm/kernel_binary.h
+++ b/runtime/vm/kernel_binary.h
@@ -20,8 +20,8 @@
static const uint32_t kMagicProgramFile = 0x90ABCDEFu;
// Both version numbers are inclusive.
-static const uint32_t kMinSupportedKernelFormatVersion = 43;
-static const uint32_t kMaxSupportedKernelFormatVersion = 43;
+static const uint32_t kMinSupportedKernelFormatVersion = 44;
+static const uint32_t kMaxSupportedKernelFormatVersion = 44;
// Keep in sync with package:kernel/lib/binary/tag.dart
#define KERNEL_TAG_LIST(V) \
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index 184aa5b..092af49 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -376,7 +376,6 @@
const intptr_t source_table_size = helper_.SourceTableSize();
const Array& scripts =
Array::Handle(Z, Array::New(source_table_size, Heap::kOld));
- patch_classes_ = Array::New(source_table_size, Heap::kOld);
// Copy the Kernel string offsets out of the binary and into the VM's heap.
ASSERT(program_->string_table_offset() >= 0);
@@ -489,11 +488,7 @@
expression_evaluation_library_(Library::Handle(Z)) {
ASSERT(T.active_class_ == &active_class_);
T.finalize_ = false;
-
- const Array& scripts = Array::Handle(Z, kernel_program_info_.scripts());
- patch_classes_ = Array::New(scripts.Length(), Heap::kOld);
library_kernel_data_ = kernel_data.raw();
-
H.InitFromKernelProgramInfo(kernel_program_info_);
}
@@ -2107,6 +2102,13 @@
intptr_t source_uri_index) {
const Script& correct_script = Script::Handle(Z, ScriptAt(source_uri_index));
if (klass.script() != correct_script.raw()) {
+ // Lazily create the [patch_classes_] array in case we need it.
+ if (patch_classes_.IsNull()) {
+ const Array& scripts = Array::Handle(Z, kernel_program_info_.scripts());
+ ASSERT(!scripts.IsNull());
+ patch_classes_ = Array::New(scripts.Length(), Heap::kOld);
+ }
+
// Use cache for patch classes. This works best for in-order usages.
PatchClass& patch_class = PatchClass::ZoneHandle(Z);
patch_class ^= patch_classes_.At(source_uri_index);
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 64a51b7..9616065 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -22421,7 +22421,8 @@
intptr_t external_size) {
ASSERT(callback != NULL);
return FinalizablePersistentHandle::New(Isolate::Current(), referent, peer,
- callback, external_size);
+ callback, external_size,
+ /*auto_delete=*/true);
}
StringPtr String::Transform(int32_t (*mapping)(int32_t ch),
@@ -24052,7 +24053,6 @@
}
static void TransferableTypedDataFinalizer(void* isolate_callback_data,
- Dart_WeakPersistentHandle handle,
void* peer) {
delete (reinterpret_cast<TransferableTypedDataPeer*>(peer));
}
@@ -24075,8 +24075,8 @@
// Set up finalizer so it frees allocated memory if handle is
// garbage-collected.
peer->set_handle(FinalizablePersistentHandle::New(
- thread->isolate(), result, peer, &TransferableTypedDataFinalizer,
- length));
+ thread->isolate(), result, peer, &TransferableTypedDataFinalizer, length,
+ /*auto_delete=*/true));
return result.raw();
}
diff --git a/runtime/vm/object_graph.cc b/runtime/vm/object_graph.cc
index 7e0ab00..901efba 100644
--- a/runtime/vm/object_graph.cc
+++ b/runtime/vm/object_graph.cc
@@ -982,7 +982,7 @@
writer_->WriteUnsigned(weak_persistent_handle->external_size());
// Attempt to include a native symbol name.
auto const name = NativeSymbolResolver::LookupSymbolName(
- reinterpret_cast<uword>(weak_persistent_handle->callback()), nullptr);
+ weak_persistent_handle->callback_address(), nullptr);
writer_->WriteUtf8((name == nullptr) ? "Unknown native function" : name);
if (name != nullptr) {
NativeSymbolResolver::FreeSymbolName(name);
diff --git a/runtime/vm/os_fuchsia.cc b/runtime/vm/os_fuchsia.cc
index be98736..c30ee49 100644
--- a/runtime/vm/os_fuchsia.cc
+++ b/runtime/vm/os_fuchsia.cc
@@ -11,7 +11,7 @@
#include <fcntl.h>
#include <stdint.h>
-#include <fuchsia/intl/cpp/fidl.h>
+#include <fuchsia/deprecatedtimezone/cpp/fidl.h>
#include <lib/async/default.h>
#include <lib/async-loop/loop.h>
#include <lib/async-loop/default.h>
@@ -24,31 +24,17 @@
#include <zircon/syscalls/object.h>
#include <zircon/types.h>
-#include "unicode/errorcode.h"
-#include "unicode/timezone.h"
-
#include "platform/assert.h"
-#include "platform/syslog.h"
#include "platform/utils.h"
#include "vm/zone.h"
namespace {
-static constexpr int32_t kMsPerSec = 1000;
-
// The data directory containing ICU timezone data files.
static constexpr char kICUTZDataDir[] = "/config/data/tzdata/icu/44/le";
-// This is the general OK status.
-static constexpr int32_t kOk = 0;
-
-// This status means that the error code is not initialized yet ("set" was not
-// yet called). Error codes are usually either 0 (kOk), or negative.
-static constexpr int32_t kUninitialized = 1;
-
// The status codes for tzdata file open and read.
enum class TZDataStatus {
- // The operation completed without error.
OK = 0,
// The open call for the tzdata file did not succeed.
COULD_NOT_OPEN = -1,
@@ -58,8 +44,6 @@
// Adds a facility for introspecting timezone data errors. Allows insight into
// the internal state of the VM even if error reporting facilities fail.
-//
-// Under normal operation, all metric values below should be zero.
class InspectMetrics {
public:
// Does not take ownership of inspector.
@@ -67,14 +51,9 @@
: inspector_(inspector),
root_(inspector_->GetRoot()),
metrics_(root_.CreateChild("os")),
- dst_status_(metrics_.CreateInt("dst_status", kUninitialized)),
- tz_data_status_(metrics_.CreateInt("tz_data_status", kUninitialized)),
- tz_data_close_status_(
- metrics_.CreateInt("tz_data_close_status", kUninitialized)),
- get_profile_status_(
- metrics_.CreateInt("get_profile_status", kUninitialized)),
- profiles_timezone_content_status_(
- metrics_.CreateInt("timezone_content_status", kOk)) {}
+ dst_status_(metrics_.CreateInt("dst_status", 0)),
+ tz_data_status_(metrics_.CreateInt("tz_data_status", 0)),
+ tz_data_close_status_(metrics_.CreateInt("tz_data_close_status", 0)) {}
// Sets the last status code for DST offset calls.
void SetDSTOffsetStatus(zx_status_t status) {
@@ -88,17 +67,6 @@
tz_data_close_status_.Set(status);
}
- // Sets the last status code for the call to PropertyProvider::GetProfile.
- void SetProfileStatus(zx_status_t status) {
- get_profile_status_.Set(static_cast<int32_t>(status));
- }
-
- // Sets the last status seen while examining timezones returned from
- // PropertyProvider::GetProfile.
- void SetTimeZoneContentStatus(zx_status_t status) {
- profiles_timezone_content_status_.Set(static_cast<int32_t>(status));
- }
-
private:
// The inspector that all metrics are being reported into.
inspect::Inspector* inspector_;
@@ -117,15 +85,6 @@
// The return code for the close() call for tzdata files.
inspect::IntProperty tz_data_close_status_;
-
- // The return code of the GetProfile call in GetTimeZoneName. If this is
- // nonzero, then os_fuchsia.cc reported a default timezone as a fallback.
- inspect::IntProperty get_profile_status_;
-
- // U_ILLEGAL_ARGUMENT_ERROR(=1) if timezones read from ProfileProvider were
- // incorrect. Otherwise 0. If this metric reports U_ILLEGAL_ARGUMENT_ERROR,
- // the os_fuchsia.cc module reported a default timezone as a fallback.
- inspect::IntProperty profiles_timezone_content_status_;
};
// Initialized on OS:Init(), deinitialized on OS::Cleanup.
@@ -177,85 +136,50 @@
return static_cast<intptr_t>(getpid());
}
-// This is the default timezone returned if it could not be obtained. For
-// Fuchsia, the default device timezone is always UTC.
-static const char kDefaultTimezone[] = "UTC";
-
// TODO(FL-98): Change this to talk to fuchsia.dart to get timezone service to
// directly get timezone.
//
// Putting this hack right now due to CP-120 as I need to remove
// component:ConnectToEnvironmentServices and this is the only thing that is
// blocking it and FL-98 will take time.
-static fuchsia::intl::PropertyProviderSyncPtr property_provider;
+static fuchsia::deprecatedtimezone::TimezoneSyncPtr tz;
static zx_status_t GetLocalAndDstOffsetInSeconds(int64_t seconds_since_epoch,
int32_t* local_offset,
int32_t* dst_offset) {
- const char* timezone_id = OS::GetTimeZoneName(seconds_since_epoch);
- std::unique_ptr<icu::TimeZone> timezone(
- icu::TimeZone::createTimeZone(timezone_id));
- UErrorCode error = U_ZERO_ERROR;
- const auto ms_since_epoch =
- static_cast<UDate>(kMsPerSec * seconds_since_epoch);
- // The units of time that local_offset and dst_offset are returned from this
- // function is, usefully, not documented, but it seems that the units are
- // milliseconds. Add these variables here for clarity.
- int32_t local_offset_ms = 0;
- int32_t dst_offset_ms = 0;
- timezone->getOffset(ms_since_epoch, /*local_time=*/false, local_offset_ms,
- dst_offset_ms, error);
- metrics->SetDSTOffsetStatus(error);
- if (error != U_ZERO_ERROR) {
- icu::ErrorCode icu_error;
- icu_error.set(error);
- Syslog::PrintErr("could not get DST offset: %s\n", icu_error.errorName());
- return ZX_ERR_INTERNAL;
+ zx_status_t status = tz->GetTimezoneOffsetMinutes(seconds_since_epoch * 1000,
+ local_offset, dst_offset);
+ metrics->SetDSTOffsetStatus(status);
+ if (status != ZX_OK) {
+ return status;
}
- // We must return offset in seconds, so convert.
- *local_offset = local_offset_ms / kMsPerSec;
- *dst_offset = dst_offset_ms / kMsPerSec;
+ *local_offset *= 60;
+ *dst_offset *= 60;
return ZX_OK;
}
const char* OS::GetTimeZoneName(int64_t seconds_since_epoch) {
// TODO(abarth): Handle time zone changes.
- static const std::unique_ptr<std::string> tz_name =
- std::make_unique<std::string>([]() -> std::string {
- fuchsia::intl::Profile profile;
- const zx_status_t status = property_provider->GetProfile(&profile);
- metrics->SetProfileStatus(status);
- if (status != ZX_OK) {
- return kDefaultTimezone;
- }
- const std::vector<fuchsia::intl::TimeZoneId>& timezones =
- profile.time_zones();
- if (timezones.empty()) {
- metrics->SetTimeZoneContentStatus(U_ILLEGAL_ARGUMENT_ERROR);
- // Empty timezone array is not up to fuchsia::intl spec. The serving
- // endpoint is broken and should be fixed.
- Syslog::PrintErr("got empty timezone value\n");
- return kDefaultTimezone;
- }
- return timezones[0].id;
- }());
+ static const auto* tz_name = new std::string([] {
+ std::string result;
+ tz->GetTimezoneId(&result);
+ return result;
+ }());
return tz_name->c_str();
}
int OS::GetTimeZoneOffsetInSeconds(int64_t seconds_since_epoch) {
- int32_t local_offset = 0;
- int32_t dst_offset = 0;
- const zx_status_t status = GetLocalAndDstOffsetInSeconds(
+ int32_t local_offset, dst_offset;
+ zx_status_t status = GetLocalAndDstOffsetInSeconds(
seconds_since_epoch, &local_offset, &dst_offset);
return status == ZX_OK ? local_offset + dst_offset : 0;
}
int OS::GetLocalTimeZoneAdjustmentInSeconds() {
+ int32_t local_offset, dst_offset;
zx_time_t now = 0;
zx_clock_get(ZX_CLOCK_UTC, &now);
- int32_t local_offset = 0;
- int32_t dst_offset = 0;
- const zx_status_t status = GetLocalAndDstOffsetInSeconds(
+ zx_status_t status = GetLocalAndDstOffsetInSeconds(
now / ZX_SEC(1), &local_offset, &dst_offset);
return status == ZX_OK ? local_offset : 0;
}
@@ -279,7 +203,7 @@
}
int64_t OS::GetCurrentMonotonicMicros() {
- const int64_t ticks = GetCurrentMonotonicTicks();
+ int64_t ticks = GetCurrentMonotonicTicks();
ASSERT(GetCurrentMonotonicFrequency() == kNanosecondsPerSecond);
return ticks / kNanosecondsPerMicrosecond;
}
@@ -433,8 +357,7 @@
metrics = std::make_unique<InspectMetrics>(component_inspector->inspector());
InitializeTZData();
- auto services = sys::ServiceDirectory::CreateFromNamespace();
- services->Connect(property_provider.NewRequest());
+ context->svc()->Connect(tz.NewRequest());
}
void OS::Cleanup() {
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index a2a6128..9d6b227 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -4269,12 +4269,11 @@
obj.AddPropertyF(
"peer", "0x%" Px "",
reinterpret_cast<uintptr_t>(weak_persistent_handle->peer()));
- obj.AddPropertyF(
- "callbackAddress", "0x%" Px "",
- reinterpret_cast<uintptr_t>(weak_persistent_handle->callback()));
+ obj.AddPropertyF("callbackAddress", "0x%" Px "",
+ weak_persistent_handle->callback_address());
// Attempt to include a native symbol name.
char* name = NativeSymbolResolver::LookupSymbolName(
- reinterpret_cast<uword>(weak_persistent_handle->callback()), nullptr);
+ weak_persistent_handle->callback_address(), nullptr);
obj.AddProperty("callbackSymbolName", (name == nullptr) ? "" : name);
if (name != nullptr) {
NativeSymbolResolver::FreeSymbolName(name);
diff --git a/runtime/vm/service/service.md b/runtime/vm/service/service.md
index b46ceac..39dfd7e 100644
--- a/runtime/vm/service/service.md
+++ b/runtime/vm/service/service.md
@@ -3098,10 +3098,11 @@
class MemoryUsage extends Response {
// The amount of non-Dart memory that is retained by Dart objects. For
// example, memory associated with Dart objects through APIs such as
- // Dart_NewWeakPersistentHandle and Dart_NewExternalTypedData. This usage is
- // only as accurate as the values supplied to these APIs from the VM embedder or
- // native extensions. This external memory applies GC pressure, but is separate
- // from heapUsage and heapCapacity.
+ // Dart_NewFinalizableHandle, Dart_NewWeakPersistentHandle and
+ // Dart_NewExternalTypedData. This usage is only as accurate as the values
+ // supplied to these APIs from the VM embedder or native extensions. This
+ // external memory applies GC pressure, but is separate from heapUsage and
+ // heapCapacity.
int externalUsage;
// The total capacity of the heap in bytes. This is the amount of memory used
diff --git a/samples/ffi/async/sample_async_callback.dart b/samples/ffi/async/sample_async_callback.dart
index 432a2eb..06cbef3 100644
--- a/samples/ffi/async/sample_async_callback.dart
+++ b/samples/ffi/async/sample_async_callback.dart
@@ -27,7 +27,7 @@
print("C = C T1 or C T2.");
print("Dart: Setup.");
Expect.isTrue(NativeApi.majorVersion == 1);
- Expect.isTrue(NativeApi.minorVersion >= 0);
+ Expect.isTrue(NativeApi.minorVersion >= 1);
final initializeApi = dl.lookupFunction<IntPtr Function(Pointer<Void>),
int Function(Pointer<Void>)>("InitDartApiDL");
Expect.isTrue(initializeApi(NativeApi.initializeApiDLData) == 0);
diff --git a/samples/ffi/async/sample_native_port_call.dart b/samples/ffi/async/sample_native_port_call.dart
index aa4b48e..43891e2 100644
--- a/samples/ffi/async/sample_native_port_call.dart
+++ b/samples/ffi/async/sample_native_port_call.dart
@@ -36,7 +36,7 @@
print("C = C T1 or C T2.");
print("Dart: Setup.");
Expect.isTrue(NativeApi.majorVersion == 1);
- Expect.isTrue(NativeApi.minorVersion >= 0);
+ Expect.isTrue(NativeApi.minorVersion >= 1);
final initializeApi = dl.lookupFunction<IntPtr Function(Pointer<Void>),
int Function(Pointer<Void>)>("InitDartApiDL");
Expect.isTrue(initializeApi(NativeApi.initializeApiDLData) == 0);
diff --git a/samples/ffi/sample_ffi_functions_callbacks_closures.dart b/samples/ffi/sample_ffi_functions_callbacks_closures.dart
index ba876da..e5bb157 100644
--- a/samples/ffi/sample_ffi_functions_callbacks_closures.dart
+++ b/samples/ffi/sample_ffi_functions_callbacks_closures.dart
@@ -54,7 +54,7 @@
void doDynamicLinking() {
Expect.isTrue(NativeApi.majorVersion == 1);
- Expect.isTrue(NativeApi.minorVersion >= 0);
+ Expect.isTrue(NativeApi.minorVersion >= 1);
final initializeApi = testLibrary.lookupFunction<
IntPtr Function(Pointer<Void>),
int Function(Pointer<Void>)>("InitDartApiDL");
diff --git a/sdk/lib/_http/http_impl.dart b/sdk/lib/_http/http_impl.dart
index 162461c..4f51724 100644
--- a/sdk/lib/_http/http_impl.dart
+++ b/sdk/lib/_http/http_impl.dart
@@ -1091,7 +1091,7 @@
}
_responseCompleter.future.then((response) {
- _timeline?.instant('Response receieved');
+ _timeline?.instant('Response received');
Map formatConnectionInfo() => {
'localPort': response.connectionInfo?.localPort,
'remoteAddress': response.connectionInfo?.remoteAddress.address,
diff --git a/sdk/lib/_internal/vm/bin/common_patch.dart b/sdk/lib/_internal/vm/bin/common_patch.dart
index 9899f2e..cd9f149 100644
--- a/sdk/lib/_internal/vm/bin/common_patch.dart
+++ b/sdk/lib/_internal/vm/bin/common_patch.dart
@@ -33,7 +33,7 @@
import "dart:nativewrappers" show NativeFieldWrapperClass1;
-import "dart:typed_data" show Uint8List;
+import "dart:typed_data" show Uint8List, BytesBuilder;
/// These are the additional parts of this patch library:
// part "directory_patch.dart";
diff --git a/sdk/lib/_internal/vm/bin/socket_patch.dart b/sdk/lib/_internal/vm/bin/socket_patch.dart
index e2bff2f..a4cd2f2 100644
--- a/sdk/lib/_internal/vm/bin/socket_patch.dart
+++ b/sdk/lib/_internal/vm/bin/socket_patch.dart
@@ -226,14 +226,36 @@
return _InternetAddress(
InternetAddressType.unix, address, null, rawAddress);
} else {
- var in_addr = _parse(address);
- if (in_addr == null) {
- throw ArgumentError("Invalid internet address $address");
+ int index = address.indexOf('%');
+ String originalAddress = address;
+ String? scopeID;
+ if (index > 0) {
+ scopeID = address.substring(index, address.length);
+ address = address.substring(0, index);
}
- InternetAddressType type = in_addr.length == _IPv4AddrLength
+ var inAddr = _parse(address);
+ if (inAddr == null) {
+ throw ArgumentError.value("Invalid internet address $address");
+ }
+ InternetAddressType type = inAddr.length == _IPv4AddrLength
? InternetAddressType.IPv4
: InternetAddressType.IPv6;
- return _InternetAddress(type, address, null, in_addr);
+ if (scopeID != null && scopeID.length > 0) {
+ if (type != InternetAddressType.IPv6) {
+ throw ArgumentError.value("IPv4 addresses cannot have a scope id");
+ }
+ // This is an IPv6 address with scope id.
+ var list = _parseScopedLinkLocalAddress(originalAddress);
+
+ if (list is! OSError && (list as List).isNotEmpty) {
+ return _InternetAddress(InternetAddressType.IPv6, originalAddress,
+ null, inAddr, list.first);
+ } else {
+ throw ArgumentError.value(
+ "Invalid IPv6 address $address with scope ID");
+ }
+ }
+ return _InternetAddress(type, originalAddress, null, inAddr, 0);
}
}
@@ -262,12 +284,11 @@
static _InternetAddress? tryParse(String address) {
checkNotNullable(address, "address");
- var addressBytes = _parse(address);
- if (addressBytes == null) return null;
- var type = addressBytes.length == _IPv4AddrLength
- ? InternetAddressType.IPv4
- : InternetAddressType.IPv6;
- return _InternetAddress(type, address, null, addressBytes);
+ try {
+ return _InternetAddress.fromString(address);
+ } catch (e) {
+ return null;
+ }
}
factory _InternetAddress.fixed(int id) {
@@ -297,7 +318,8 @@
// Create a clone of this _InternetAddress replacing the host.
_InternetAddress _cloneWithNewHost(String host) {
- return _InternetAddress(type, address, host, Uint8List.fromList(_in_addr));
+ return _InternetAddress(
+ type, address, host, Uint8List.fromList(_in_addr), _scope_id);
}
bool operator ==(other) {
@@ -330,7 +352,8 @@
static String _rawAddrToString(Uint8List address)
native "InternetAddress_RawAddrToString";
-
+ static List _parseScopedLinkLocalAddress(String address)
+ native "InternetAddress_ParseScopedLinkLocalAddress";
static Uint8List? _parse(String address) native "InternetAddress_Parse";
}
diff --git a/sdk/lib/internal/bytes_builder.dart b/sdk/lib/internal/bytes_builder.dart
new file mode 100644
index 0000000..ea19576
--- /dev/null
+++ b/sdk/lib/internal/bytes_builder.dart
@@ -0,0 +1,240 @@
+// Copyright (c) 2013, 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.
+
+part of dart._internal;
+
+/// Builds a list of bytes, allowing bytes and lists of bytes to be added at the
+/// end.
+///
+/// Used to efficiently collect bytes and lists of bytes.
+abstract class BytesBuilder {
+ /// Construct a new empty [BytesBuilder].
+ ///
+ /// If [copy] is true (the default), the created builder is a *copying*
+ /// builder. A copying builder maintains its own internal buffer and copies
+ /// the bytes added to it eagerly.
+ ///
+ /// If [copy] set to false, the created builder assumes that lists added
+ /// to it will not change.
+ /// Any [Uint8List] added using [add] is kept until
+ /// [toBytes] or [takeBytes] is called,
+ /// and only then are their contents copied.
+ /// A non-[Uint8List] may be copied eagerly.
+ /// If only a single [Uint8List] is added to the builder,
+ /// that list is returned by [toBytes] or [takeBytes] directly, without any copying.
+ /// A list added to a non-copying builder *should not* change its content
+ /// after being added, and it *must not* change its length after being added.
+ /// (Normal [Uint8List]s are fixed length lists, but growing lists implementing
+ /// [Uint8List] exist.)
+ factory BytesBuilder({bool copy = true}) =>
+ copy ? _CopyingBytesBuilder() : _BytesBuilder();
+
+ /// Appends [bytes] to the current contents of this builder.
+ ///
+ /// Each value of [bytes] will be truncated
+ /// to an 8-bit value in the range 0 .. 255.
+ void add(List<int> bytes);
+
+ /// Appends [byte] to the current contents of this builder.
+ ///
+ /// The [byte] will be truncated to an 8-bit value in the range 0 .. 255.
+ void addByte(int byte);
+
+ /// Returns the bytes currently contained in this builder and clears it.
+ ///
+ /// The returned list may be a view of a larger buffer.
+ Uint8List takeBytes();
+
+ /// Returns a copy of the current byte contents of this builder.
+ ///
+ /// Leaves the contents of this builder intact.
+ Uint8List toBytes();
+
+ /// The number of bytes in this builder.
+ int get length;
+
+ /// Whether the buffer is empty.
+ bool get isEmpty;
+
+ /// Whether the buffer is non-empty.
+ bool get isNotEmpty;
+
+ /// Clears the contents of this builder.
+ ///
+ /// The current contents are discarded and this builder becomes empty.
+ void clear();
+}
+
+/// A [BytesBuilder] which appends bytes to a growing internal buffer.
+class _CopyingBytesBuilder implements BytesBuilder {
+ /// Initial size of internal buffer.
+ static const int _initSize = 1024;
+
+ /// Reusable empty [Uint8List].
+ ///
+ /// Safe for reuse because a fixed-length empty list is immutable.
+ static final _emptyList = Uint8List(0);
+
+ /// Current count of bytes written to buffer.
+ int _length = 0;
+
+ /// Internal buffer accumulating bytes.
+ ///
+ /// Will grow as necessary
+ Uint8List _buffer;
+
+ _CopyingBytesBuilder() : _buffer = _emptyList;
+
+ void add(List<int> bytes) {
+ int byteCount = bytes.length;
+ if (byteCount == 0) return;
+ int required = _length + byteCount;
+ if (_buffer.length < required) {
+ _grow(required);
+ }
+ assert(_buffer.length >= required);
+ if (bytes is Uint8List) {
+ _buffer.setRange(_length, required, bytes);
+ } else {
+ for (int i = 0; i < byteCount; i++) {
+ _buffer[_length + i] = bytes[i];
+ }
+ }
+ _length = required;
+ }
+
+ void addByte(int byte) {
+ if (_buffer.length == _length) {
+ // The grow algorithm always at least doubles.
+ // If we added one to _length it would quadruple unnecessarily.
+ _grow(_length);
+ }
+ assert(_buffer.length > _length);
+ _buffer[_length] = byte;
+ _length++;
+ }
+
+ void _grow(int required) {
+ // We will create a list in the range of 2-4 times larger than
+ // required.
+ int newSize = required * 2;
+ if (newSize < _initSize) {
+ newSize = _initSize;
+ } else {
+ newSize = _pow2roundup(newSize);
+ }
+ var newBuffer = Uint8List(newSize);
+ newBuffer.setRange(0, _buffer.length, _buffer);
+ _buffer = newBuffer;
+ }
+
+ Uint8List takeBytes() {
+ if (_length == 0) return _emptyList;
+ var buffer = Uint8List.view(_buffer.buffer, _buffer.offsetInBytes, _length);
+ _clear();
+ return buffer;
+ }
+
+ Uint8List toBytes() {
+ if (_length == 0) return _emptyList;
+ return Uint8List.fromList(
+ Uint8List.view(_buffer.buffer, _buffer.offsetInBytes, _length));
+ }
+
+ int get length => _length;
+
+ bool get isEmpty => _length == 0;
+
+ bool get isNotEmpty => _length != 0;
+
+ void clear() {
+ _clear();
+ }
+
+ void _clear() {
+ _length = 0;
+ _buffer = _emptyList;
+ }
+
+ /// Rounds numbers <= 2^32 up to the nearest power of 2.
+ static int _pow2roundup(int x) {
+ assert(x > 0);
+ --x;
+ x |= x >> 1;
+ x |= x >> 2;
+ x |= x >> 4;
+ x |= x >> 8;
+ x |= x >> 16;
+ return x + 1;
+ }
+}
+
+/// A non-copying [BytesBuilder].
+///
+/// Accumulates lists of integers and lazily builds
+/// a collected list with all the bytes when requested.
+class _BytesBuilder implements BytesBuilder {
+ int _length = 0;
+ final List<Uint8List> _chunks = [];
+
+ void add(List<int> bytes) {
+ Uint8List typedBytes;
+ if (bytes is Uint8List) {
+ typedBytes = bytes;
+ } else {
+ typedBytes = Uint8List.fromList(bytes);
+ }
+ _chunks.add(typedBytes);
+ _length += typedBytes.length;
+ }
+
+ void addByte(int byte) {
+ // TODO(lrn): Optimize repeated `addByte` calls.
+ _chunks.add(Uint8List(1)..[0] = byte);
+ _length++;
+ }
+
+ Uint8List takeBytes() {
+ if (_length == 0) return _CopyingBytesBuilder._emptyList;
+ if (_chunks.length == 1) {
+ var buffer = _chunks[0];
+ _clear();
+ return buffer;
+ }
+ var buffer = Uint8List(_length);
+ int offset = 0;
+ for (var chunk in _chunks) {
+ buffer.setRange(offset, offset + chunk.length, chunk);
+ offset += chunk.length;
+ }
+ _clear();
+ return buffer;
+ }
+
+ Uint8List toBytes() {
+ if (_length == 0) return _CopyingBytesBuilder._emptyList;
+ var buffer = Uint8List(_length);
+ int offset = 0;
+ for (var chunk in _chunks) {
+ buffer.setRange(offset, offset + chunk.length, chunk);
+ offset += chunk.length;
+ }
+ return buffer;
+ }
+
+ int get length => _length;
+
+ bool get isEmpty => _length == 0;
+
+ bool get isNotEmpty => _length != 0;
+
+ void clear() {
+ _clear();
+ }
+
+ void _clear() {
+ _length = 0;
+ _chunks.clear();
+ }
+}
diff --git a/sdk/lib/internal/internal.dart b/sdk/lib/internal/internal.dart
index dad3b05..3070b30 100644
--- a/sdk/lib/internal/internal.dart
+++ b/sdk/lib/internal/internal.dart
@@ -21,6 +21,7 @@
import 'dart:typed_data' show Uint8List;
part 'async_cast.dart';
+part 'bytes_builder.dart';
part 'cast.dart';
part 'errors.dart';
part 'iterable.dart';
diff --git a/sdk/lib/internal/internal_sources.gni b/sdk/lib/internal/internal_sources.gni
index 8510ab2..c35e678 100644
--- a/sdk/lib/internal/internal_sources.gni
+++ b/sdk/lib/internal/internal_sources.gni
@@ -8,6 +8,7 @@
# The above file needs to be first as it lists the parts below.
"async_cast.dart",
+ "bytes_builder.dart",
"cast.dart",
"errors.dart",
"iterable.dart",
diff --git a/sdk/lib/io/bytes_builder.dart b/sdk/lib/io/bytes_builder.dart
deleted file mode 100644
index 6f13693..0000000
--- a/sdk/lib/io/bytes_builder.dart
+++ /dev/null
@@ -1,234 +0,0 @@
-// Copyright (c) 2013, 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.
-
-part of dart.io;
-
-/**
- * Builds a list of bytes, allowing bytes and lists of bytes to be added at the
- * end.
- *
- * Used to efficiently collect bytes and lists of bytes.
- */
-abstract class BytesBuilder {
- /**
- * Construct a new empty [BytesBuilder].
- *
- * If [copy] is true, the data is always copied when added to the list. If
- * it [copy] is false, the data is only copied if needed. That means that if
- * the lists are changed after added to the [BytesBuilder], it may effect the
- * output. Default is `true`.
- */
- factory BytesBuilder({bool copy: true}) {
- if (copy) {
- return new _CopyingBytesBuilder();
- } else {
- return new _BytesBuilder();
- }
- }
-
- /**
- * Appends [bytes] to the current contents of the builder.
- *
- * Each value of [bytes] will be bit-representation truncated to the range
- * 0 .. 255.
- */
- void add(List<int> bytes);
-
- /**
- * Append [byte] to the current contents of the builder.
- *
- * The [byte] will be bit-representation truncated to the range 0 .. 255.
- */
- void addByte(int byte);
-
- /**
- * Returns the contents of `this` and clears `this`.
- *
- * The list returned is a view of the internal buffer, limited to the
- * [length].
- */
- Uint8List takeBytes();
-
- /**
- * Returns a copy of the current contents of the builder.
- *
- * Leaves the contents of the builder intact.
- */
- Uint8List toBytes();
-
- /**
- * The number of bytes in the builder.
- */
- int get length;
-
- /**
- * Returns `true` if the buffer is empty.
- */
- bool get isEmpty;
-
- /**
- * Returns `true` if the buffer is not empty.
- */
- bool get isNotEmpty;
-
- /**
- * Clear the contents of the builder.
- */
- void clear();
-}
-
-class _CopyingBytesBuilder implements BytesBuilder {
- // Start with 1024 bytes.
- static const int _initSize = 1024;
-
- // Safe for reuse because a fixed-length empty list is immutable.
- static final _emptyList = new Uint8List(0);
-
- int _length = 0;
- Uint8List _buffer;
-
- _CopyingBytesBuilder([int initialCapacity = 0])
- : _buffer = (initialCapacity <= 0)
- ? _emptyList
- : new Uint8List(_pow2roundup(initialCapacity));
-
- void add(List<int> bytes) {
- int bytesLength = bytes.length;
- if (bytesLength == 0) return;
- int required = _length + bytesLength;
- if (_buffer.length < required) {
- _grow(required);
- }
- assert(_buffer.length >= required);
- if (bytes is Uint8List) {
- _buffer.setRange(_length, required, bytes);
- } else {
- for (int i = 0; i < bytesLength; i++) {
- _buffer[_length + i] = bytes[i];
- }
- }
- _length = required;
- }
-
- void addByte(int byte) {
- if (_buffer.length == _length) {
- // The grow algorithm always at least doubles.
- // If we added one to _length it would quadruple unnecessarily.
- _grow(_length);
- }
- assert(_buffer.length > _length);
- _buffer[_length] = byte;
- _length++;
- }
-
- void _grow(int required) {
- // We will create a list in the range of 2-4 times larger than
- // required.
- int newSize = required * 2;
- if (newSize < _initSize) {
- newSize = _initSize;
- } else {
- newSize = _pow2roundup(newSize);
- }
- var newBuffer = new Uint8List(newSize);
- newBuffer.setRange(0, _buffer.length, _buffer);
- _buffer = newBuffer;
- }
-
- Uint8List takeBytes() {
- if (_length == 0) return _emptyList;
- var buffer =
- new Uint8List.view(_buffer.buffer, _buffer.offsetInBytes, _length);
- clear();
- return buffer;
- }
-
- Uint8List toBytes() {
- if (_length == 0) return _emptyList;
- return new Uint8List.fromList(
- new Uint8List.view(_buffer.buffer, _buffer.offsetInBytes, _length));
- }
-
- int get length => _length;
-
- bool get isEmpty => _length == 0;
-
- bool get isNotEmpty => _length != 0;
-
- void clear() {
- _length = 0;
- _buffer = _emptyList;
- }
-
- static int _pow2roundup(int x) {
- assert(x > 0);
- --x;
- x |= x >> 1;
- x |= x >> 2;
- x |= x >> 4;
- x |= x >> 8;
- x |= x >> 16;
- return x + 1;
- }
-}
-
-class _BytesBuilder implements BytesBuilder {
- int _length = 0;
- final List<Uint8List> _chunks = [];
-
- void add(List<int> bytes) {
- Uint8List typedBytes;
- if (bytes is Uint8List) {
- typedBytes = bytes;
- } else {
- typedBytes = new Uint8List.fromList(bytes);
- }
- _chunks.add(typedBytes);
- _length += typedBytes.length;
- }
-
- void addByte(int byte) {
- _chunks.add(new Uint8List(1)..[0] = byte);
- _length++;
- }
-
- Uint8List takeBytes() {
- if (_length == 0) return _CopyingBytesBuilder._emptyList;
- if (_chunks.length == 1) {
- var buffer = _chunks[0];
- clear();
- return buffer;
- }
- var buffer = new Uint8List(_length);
- int offset = 0;
- for (var chunk in _chunks) {
- buffer.setRange(offset, offset + chunk.length, chunk);
- offset += chunk.length;
- }
- clear();
- return buffer;
- }
-
- Uint8List toBytes() {
- if (_length == 0) return _CopyingBytesBuilder._emptyList;
- var buffer = new Uint8List(_length);
- int offset = 0;
- for (var chunk in _chunks) {
- buffer.setRange(offset, offset + chunk.length, chunk);
- offset += chunk.length;
- }
- return buffer;
- }
-
- int get length => _length;
-
- bool get isEmpty => _length == 0;
-
- bool get isNotEmpty => _length != 0;
-
- void clear() {
- _length = 0;
- _chunks.clear();
- }
-}
diff --git a/sdk/lib/io/directory_impl.dart b/sdk/lib/io/directory_impl.dart
index 9ca5b6c..0a356e1 100644
--- a/sdk/lib/io/directory_impl.dart
+++ b/sdk/lib/io/directory_impl.dart
@@ -70,7 +70,7 @@
if (result is ArgumentError) throw result;
if (result is OSError) {
throw new FileSystemException(
- "Setting current working directory failed", path, result);
+ "Setting current working directory failed", path.toString(), result);
}
}
diff --git a/sdk/lib/io/file_system_entity.dart b/sdk/lib/io/file_system_entity.dart
index b8cf2ff..6bba998 100644
--- a/sdk/lib/io/file_system_entity.dart
+++ b/sdk/lib/io/file_system_entity.dart
@@ -240,6 +240,10 @@
* files and directories.
*/
abstract class FileSystemEntity {
+ static const _backslashChar = 0x5c;
+ static const _slashChar = 0x2f;
+ static const _colonChar = 0x3a;
+
String get _path;
Uint8List get _rawPath;
@@ -531,16 +535,31 @@
}
static final RegExp _absoluteWindowsPathPattern =
- new RegExp(r'^(\\\\|[a-zA-Z]:[/\\])');
+ new RegExp(r'^(?:\\\\|[a-zA-Z]:[/\\])');
/**
- * Returns a [bool] indicating whether this object's path is absolute.
+ * Whether this object's path is absolute.
*
- * On Windows, a path is absolute if it starts with \\\\ or a drive letter
- * between a and z (upper or lower case) followed by :\\ or :/.
- * On non-Windows, a path is absolute if it starts with /.
+ * An absolute path is independent of the current working
+ * directory ([Directory.current]).
+ * A non-absolute path must be interpreted relative to
+ * the current working directory.
+ *
+ * On Windows, a path is absolute if it starts with `\\`
+ * (two backslashesor representing a UNC path) or with a drive letter
+ * between `a` and `z` (upper or lower case) followed by `:\` or `:/`.
+ * The makes, for example, `\file.ext` a non-absolute path
+ * because it depends on the current drive letter.
+ *
+ * On non-Windows, a path is absolute if it starts with `/`.
+ *
+ * If the path is not absolute, use [absolute] to get an entity
+ * with an absolute path referencing the same object in the file system,
+ * if possible.
*/
- bool get isAbsolute {
+ bool get isAbsolute => _isAbsolute(path);
+
+ static bool _isAbsolute(String path) {
if (Platform.isWindows) {
return path.startsWith(_absoluteWindowsPathPattern);
} else {
@@ -553,37 +572,86 @@
*
* The type of the returned instance is the type of [this].
*
- * The absolute path is computed by prefixing
- * a relative path with the current working directory, and returning
- * an absolute path unchanged.
+ * A file system entity with an already absolute path
+ * (as reported by [isAbsolute]) is returned directly.
+ * For a non-absolute path, the returned entity is absolute ([isAbsolute])
+ * *if possible*, but still refers to the same file system object.
*/
FileSystemEntity get absolute;
String get _absolutePath {
if (isAbsolute) return path;
+ if (Platform.isWindows) return _absoluteWindowsPath(path);
String current = Directory.current.path;
- if (current.endsWith('/') ||
- (Platform.isWindows && current.endsWith('\\'))) {
+ if (current.endsWith('/')) {
return '$current$path';
} else {
return '$current${Platform.pathSeparator}$path';
}
}
- Uint8List get _rawAbsolutePath {
- if (isAbsolute) return _rawPath;
- var current = Directory.current._rawPath.toList();
- assert(current.last == 0);
- current.removeLast(); // Remove null terminator.
- if ((current.last == '/'.codeUnitAt(0)) ||
- (Platform.isWindows && (current.last == '\\'.codeUnitAt(0)))) {
- current.addAll(_rawPath);
- return new Uint8List.fromList(current);
- } else {
- current.addAll(utf8.encode(Platform.pathSeparator));
- current.addAll(_rawPath);
- return new Uint8List.fromList(current);
+ /// The ASCII code of the Windows drive letter if [entity], if any.
+ ///
+ /// Returns the ASCII code of the upper-cased drive letter of
+ /// the path of [entity], if it has a drive letter (starts with `[a-zA-z]:`),
+ /// or `-1` if it has no drive letter.
+ static int _windowsDriveLetter(String path) {
+ if (!path.startsWith(':', 1)) return -1;
+ var first = path.codeUnitAt(0) & ~0x20;
+ if (first >= 0x41 && first <= 0x5b) return first;
+ return -1;
+ }
+
+ /// The relative [path] converted to an absolute path.
+ static String _absoluteWindowsPath(String path) {
+ assert(Platform.isWindows);
+ assert(!_isAbsolute(path));
+ // Could perhaps use something like
+ // https://docs.microsoft.com/en-us/windows/win32/api/pathcch/nf-pathcch-pathalloccombine
+ var current = Directory.current.path;
+ if (path.startsWith(r'\')) {
+ assert(!path.startsWith(r'\', 1));
+ // Absolute path, no drive letter.
+ var currentDrive = _windowsDriveLetter(current);
+ if (currentDrive >= 0) {
+ return '${current[0]}:$path';
+ }
+ // If `current` is a UNC path \\server\share[...],
+ // we make the absolute path relative to the share.
+ // Also works with `\\?\c:\` paths.
+ if (current.startsWith(r'\\')) {
+ var serverEnd = current.indexOf(r'\', 2);
+ if (serverEnd >= 0) {
+ // We may want to recognize UNC paths of the form:
+ // \\?\UNC\Server\share\...
+ // specially, and be relative to the *share* not to UNC\.
+ var shareEnd = current.indexOf(r'\', serverEnd + 1);
+ if (shareEnd < 0) shareEnd = current.length;
+ return '${current.substring(0, shareEnd)}$path';
+ }
+ }
+ // If `current` is not in the drive-letter:path format,
+ // or not \\server\share[\path],
+ // we ignore it and return a relative path.
+ return path;
}
+ var entityDrive = _windowsDriveLetter(path);
+ if (entityDrive >= 0) {
+ if (entityDrive != _windowsDriveLetter(current)) {
+ // Need to resolve relative to current directory of the drive.
+ // Windows remembers the last CWD of each drive.
+ // We currently don't have that information, so we assume the root of that drive.
+ return '${path[0]}:\\$path';
+ }
+
+ /// A `c:relative\path` path on the same drive as `current`.
+ path = path.substring(2);
+ assert(!path.startsWith(r'\\'));
+ }
+ if (current.endsWith(r'\') || current.endsWith('/')) {
+ return '$current$path';
+ }
+ return '$current\\$path';
}
static bool _identicalSync(String path1, String path2) {
diff --git a/sdk/lib/io/io.dart b/sdk/lib/io/io.dart
index 7dcabd8..c667cfe 100644
--- a/sdk/lib/io/io.dart
+++ b/sdk/lib/io/io.dart
@@ -197,9 +197,10 @@
import 'dart:typed_data';
export 'dart:_http';
+@Deprecated("Import BytesBuilder from dart:typed_data instead")
+export 'dart:_internal' show BytesBuilder;
export 'dart:_internal' show HttpStatus;
-part 'bytes_builder.dart';
part 'common.dart';
part 'data_transformer.dart';
part 'directory.dart';
diff --git a/sdk/lib/io/io_sources.gni b/sdk/lib/io/io_sources.gni
index 59b2ca9..7410a13 100644
--- a/sdk/lib/io/io_sources.gni
+++ b/sdk/lib/io/io_sources.gni
@@ -6,7 +6,6 @@
"io.dart",
# The above file needs to be first if additional parts are added to the lib.
- "bytes_builder.dart",
"common.dart",
"data_transformer.dart",
"directory.dart",
diff --git a/sdk/lib/io/link.dart b/sdk/lib/io/link.dart
index 3f2896f..ce50a4e 100644
--- a/sdk/lib/io/link.dart
+++ b/sdk/lib/io/link.dart
@@ -53,7 +53,7 @@
* On the Windows platform, this call will create a true symbolic link
* instead of a Junction. In order to create a symbolic link on Windows, Dart
* must be run in Administrator mode or the system must have Developer Mode
- * enabled, otherwise a [FileSystemException] will be raised with
+ * enabled, otherwise a [FileSystemException] will be raised with
* `ERROR_PRIVILEGE_NOT_HELD` set as the errno when this call is made.
*
* On other platforms, the posix symlink() call is used to make a symbolic
@@ -74,7 +74,7 @@
* On the Windows platform, this call will create a true symbolic link
* instead of a Junction. In order to create a symbolic link on Windows, Dart
* must be run in Administrator mode or the system must have Developer Mode
- * enabled, otherwise a [FileSystemException] will be raised with
+ * enabled, otherwise a [FileSystemException] will be raised with
* `ERROR_PRIVILEGE_NOT_HELD` set as the errno when this call is made.
*
* On other platforms, the posix symlink() call is used to make a symbolic
@@ -172,7 +172,7 @@
bool existsSync() => FileSystemEntity._isLinkRawSync(_rawPath);
- Link get absolute => new Link.fromRawPath(_rawAbsolutePath);
+ Link get absolute => isAbsolute ? this : _Link(_absolutePath);
Future<Link> create(String target, {bool recursive: false}) {
var result =
diff --git a/sdk/lib/typed_data/typed_data.dart b/sdk/lib/typed_data/typed_data.dart
index 8852ab8..eeafdc6 100644
--- a/sdk/lib/typed_data/typed_data.dart
+++ b/sdk/lib/typed_data/typed_data.dart
@@ -14,6 +14,8 @@
import "dart:_internal" show Since, UnmodifiableListBase;
+export "dart:_internal" show BytesBuilder;
+
part "unmodifiable_typed_data.dart";
/**
diff --git a/tests/co19/co19-co19.status b/tests/co19/co19-co19.status
index 7d0157f..cb09dc7 100644
--- a/tests/co19/co19-co19.status
+++ b/tests/co19/co19-co19.status
@@ -25,17 +25,7 @@
Language/Reference/Operator_Precedence/precedence_t05: Skip # Triple shift is not implemented yet
Language/Statements/Assert/*: Skip # Not migrated to NNBD
Language/Statements/Expression_Statements/syntax_t06: Skip # Type aliases are not fully implemented
-Language/Types/Dynamic_Type_System/*: Skip # Not migrated to NNBD
-Language/Types/Function_Types/*: Skip # Not migrated to NNBD
-Language/Types/Interface_Types/*: Skip # Not migrated to NNBD
-Language/Types/Parameterized_Types/*: Skip # Not migrated to NNBD
-Language/Types/Parameterized_Types/Actual_Type_of_Declaration/*: Skip # Not migrated to NNBD
-Language/Types/Static_Types/*: Skip # Not migrated to NNBD
-Language/Types/Type_Aliases/*: Skip # Not migrated to NNBD
-Language/Types/Type_Void/*: Skip # Not migrated to NNBD
-Language/Types/Type_dynamic/*: Skip # Not migrated to NNBD
-Language/Variables/*: Skip # Not migrated to NNBD
-Language/Variables/Evaluation_of_Implicit_Variable_Getters/*: Skip # Not migrated to NNBD
+Language/Types/Type_Aliases/built-in_types_t11: Skip # Triple shift is not implemented yet
LanguageFeatures/Constant-update-2018/*: Skip # Not migrated to NNBD
LanguageFeatures/Control-flow-collections/*: Skip # Not migrated to NNBD
LanguageFeatures/Extension-methods/*: Skip # Not migrated to NNBD
diff --git a/tests/corelib/cast_errors_test.dart b/tests/corelib/cast_errors_test.dart
index 0d75f28..9e2b8eb 100644
--- a/tests/corelib/cast_errors_test.dart
+++ b/tests/corelib/cast_errors_test.dart
@@ -17,7 +17,7 @@
var newC = new C();
dSet.add(newC);
// ^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'C' can't be assigned to the parameter type 'D?'.
}
@@ -27,7 +27,7 @@
dMap[c] = d;
// ^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'C' can't be assigned to a variable of type 'D?'.
dMap[d] = c;
// ^
diff --git a/tests/dart2js/18175_test.dart b/tests/dart2js/18175_test.dart
new file mode 100644
index 0000000..3ad422de
--- /dev/null
+++ b/tests/dart2js/18175_test.dart
@@ -0,0 +1,20 @@
+// 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.
+
+import 'package:expect/expect.dart';
+
+class A implements B<C> {}
+
+class B<E> {}
+
+class C {}
+
+main() {
+ Expect.isFalse(A() is B<bool>);
+ Expect.isFalse(A() is B<int>);
+ Expect.isFalse(A() is B<num>);
+ Expect.isFalse(A() is B<double>);
+ Expect.isFalse(A() is B<String>);
+ Expect.isFalse(A() is B<List>);
+}
diff --git a/tests/dart2js/41449c_test.dart b/tests/dart2js/41449c_test.dart
new file mode 100644
index 0000000..0831434
--- /dev/null
+++ b/tests/dart2js/41449c_test.dart
@@ -0,0 +1,57 @@
+// 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.
+//
+// dart2jsOptions=-O4
+
+// Regression test for passing type parameters through call-through stub.
+//
+// We use an abstract class with two implementations to avoid the optimizer
+// 'inlining' the call-through stub, so we are testing that the stub itself
+// passes through the type parameters.
+
+import 'package:expect/expect.dart';
+
+abstract class AAA {
+ dynamic get foo;
+}
+
+class B1 implements AAA {
+ final dynamic foo;
+ B1(this.foo);
+}
+
+class B2 implements AAA {
+ final dynamic _arr;
+ B2(foo) : _arr = [foo];
+ dynamic get foo => _arr.first;
+}
+
+class B3 implements AAA {
+ final dynamic __foo;
+ B3(this.__foo);
+ dynamic get _foo => __foo;
+ dynamic get foo => _foo;
+}
+
+@pragma('dart2js:noInline')
+test1<T>(AAA a, String expected) {
+ // call-through getter 'foo' with one type argument.
+ Expect.equals(expected, a.foo<T>());
+}
+
+@pragma('dart2js:noInline')
+test2<U, V>(AAA a, String expected) {
+ // call-through getter 'foo' with two type arguments.
+ Expect.equals(expected, a.foo<U, V>());
+}
+
+main() {
+ test1<int>(B1(<P>() => '$P'), 'int');
+ test1<num>(B2(<Q>() => '$Q'), 'num');
+ test1<double>(B3(<R>() => '$R'), 'double');
+
+ test2<int, num>(B1(<A, B>() => '$A $B'), 'int num');
+ test2<num, int>(B2(<X, Y>() => '$X $Y'), 'num int');
+ test2<double, String>(B3(<C, D>() => '$C $D'), 'double String');
+}
diff --git a/tests/dart2js_2/41449c_test.dart b/tests/dart2js_2/41449c_test.dart
new file mode 100644
index 0000000..3b0ee51
--- /dev/null
+++ b/tests/dart2js_2/41449c_test.dart
@@ -0,0 +1,59 @@
+// 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.
+//
+// dart2jsOptions=-O4
+
+// @dart = 2.7
+
+// Regression test for passing type parameters through call-through stub.
+//
+// We use an abstract class with two implementations to avoid the optimizer
+// 'inlining' the call-through stub, so we are testing that the stub itself
+// passes through the type parameters.
+
+import 'package:expect/expect.dart';
+
+abstract class AAA {
+ dynamic get foo;
+}
+
+class B1 implements AAA {
+ final dynamic foo;
+ B1(this.foo);
+}
+
+class B2 implements AAA {
+ final dynamic _arr;
+ B2(foo) : _arr = [foo];
+ dynamic get foo => _arr.first;
+}
+
+class B3 implements AAA {
+ final dynamic __foo;
+ B3(this.__foo);
+ dynamic get _foo => __foo;
+ dynamic get foo => _foo;
+}
+
+@pragma('dart2js:noInline')
+test1<T>(AAA a, String expected) {
+ // call-through getter 'foo' with one type argument.
+ Expect.equals(expected, a.foo<T>());
+}
+
+@pragma('dart2js:noInline')
+test2<U, V>(AAA a, String expected) {
+ // call-through getter 'foo' with two type arguments.
+ Expect.equals(expected, a.foo<U, V>());
+}
+
+main() {
+ test1<int>(B1(<P>() => '$P'), 'int');
+ test1<num>(B2(<Q>() => '$Q'), 'num');
+ test1<double>(B3(<R>() => '$R'), 'double');
+
+ test2<int, num>(B1(<A, B>() => '$A $B'), 'int num');
+ test2<num, int>(B2(<X, Y>() => '$X $Y'), 'num int');
+ test2<double, String>(B3(<C, D>() => '$C $D'), 'double String');
+}
diff --git a/tests/ffi/vmspecific_handle_dynamically_linked_test.dart b/tests/ffi/vmspecific_handle_dynamically_linked_test.dart
index e2237e8..6422958 100644
--- a/tests/ffi/vmspecific_handle_dynamically_linked_test.dart
+++ b/tests/ffi/vmspecific_handle_dynamically_linked_test.dart
@@ -17,7 +17,7 @@
void doDynamicLinking() {
Expect.isTrue(NativeApi.majorVersion == 1);
- Expect.isTrue(NativeApi.minorVersion >= 0);
+ Expect.isTrue(NativeApi.minorVersion >= 1);
final initializeApi = testLibrary.lookupFunction<
IntPtr Function(Pointer<Void>),
int Function(Pointer<Void>)>("InitDartApiDL");
diff --git a/tests/ffi_2/function_structs_test.dart b/tests/ffi_2/function_structs_test.dart
index 3738876..bf9ea5f 100644
--- a/tests/ffi_2/function_structs_test.dart
+++ b/tests/ffi_2/function_structs_test.dart
@@ -21,8 +21,8 @@
void main() {
testFunctionWithStruct();
- // testFunctionWithStructArray();
- // testFunctionWithVeryLargeStruct();
+ testFunctionWithStructArray();
+ testFunctionWithVeryLargeStruct();
}
DynamicLibrary ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
diff --git a/tests/ffi_2/vmspecific_handle_dynamically_linked_test.dart b/tests/ffi_2/vmspecific_handle_dynamically_linked_test.dart
index e2237e8..6422958 100644
--- a/tests/ffi_2/vmspecific_handle_dynamically_linked_test.dart
+++ b/tests/ffi_2/vmspecific_handle_dynamically_linked_test.dart
@@ -17,7 +17,7 @@
void doDynamicLinking() {
Expect.isTrue(NativeApi.majorVersion == 1);
- Expect.isTrue(NativeApi.minorVersion >= 0);
+ Expect.isTrue(NativeApi.minorVersion >= 1);
final initializeApi = testLibrary.lookupFunction<
IntPtr Function(Pointer<Void>),
int Function(Pointer<Void>)>("InitDartApiDL");
diff --git a/tests/language/abstract/exact_selector_test.dart b/tests/language/abstract/exact_selector_test.dart
index 4fea94c..0df1020 100644
--- a/tests/language/abstract/exact_selector_test.dart
+++ b/tests/language/abstract/exact_selector_test.dart
@@ -17,7 +17,7 @@
(() => 42)();
return new Foo();
// ^^^
- // [analyzer] STATIC_WARNING.INSTANTIATE_ABSTRACT_CLASS
+ // [analyzer] COMPILE_TIME_ERROR.INSTANTIATE_ABSTRACT_CLASS
// [cfe] The class 'Foo' is abstract and can't be instantiated.
}
diff --git a/tests/language/abstract/factory_constructor_test.dart b/tests/language/abstract/factory_constructor_test.dart
index bda6a23..810a3fa 100644
--- a/tests/language/abstract/factory_constructor_test.dart
+++ b/tests/language/abstract/factory_constructor_test.dart
@@ -26,7 +26,7 @@
// Intentionally abstract method.
method();
//^^^^^^^^^
-// [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
A2.make() {}
}
diff --git a/tests/language/abstract/getter_test.dart b/tests/language/abstract/getter_test.dart
index fe5acdf..74d51da 100644
--- a/tests/language/abstract/getter_test.dart
+++ b/tests/language/abstract/getter_test.dart
@@ -13,7 +13,7 @@
// Intentionally abstract:
get i;
//^^^^^^
-// [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
}
class Bar {}
diff --git a/tests/language/abstract/syntax_test.dart b/tests/language/abstract/syntax_test.dart
index 1b617fd..a51480b 100644
--- a/tests/language/abstract/syntax_test.dart
+++ b/tests/language/abstract/syntax_test.dart
@@ -14,7 +14,7 @@
// [cfe] The non-abstract class 'A' is missing implementations for these members:
foo();
//^^^^^^
-// [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
static bar();
// ^
// [analyzer] SYNTACTIC_ERROR.MISSING_FUNCTION_BODY
diff --git a/tests/language/argument/assignability_function_typed_test.dart b/tests/language/argument/assignability_function_typed_test.dart
index 5e1fb52..fe17a15 100644
--- a/tests/language/argument/assignability_function_typed_test.dart
+++ b/tests/language/argument/assignability_function_typed_test.dart
@@ -20,25 +20,25 @@
// Unrelated types (not assignable).
f(intToInt);
//^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'int Function(int)' can't be assigned to the parameter type 'num Function(num)'.
f(objectToObject);
//^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'Object Function(Object)' can't be assigned to the parameter type 'num Function(num)'.
// Downcasts.
f(intToObject);
//^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The top level function has type 'Object Function(int)' that isn't of expected type 'num Function(num)'.
f(intToNum);
//^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The top level function has type 'num Function(int)' that isn't of expected type 'num Function(num)'.
f(numToObject);
//^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The top level function has type 'Object Function(num)' that isn't of expected type 'num Function(num)'.
// Ok.
diff --git a/tests/language/assign/to_type_test.dart b/tests/language/assign/to_type_test.dart
index f6f8f29..44d4545 100644
--- a/tests/language/assign/to_type_test.dart
+++ b/tests/language/assign/to_type_test.dart
@@ -9,7 +9,7 @@
f() {
T = Null;
// ^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_TYPE
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_TYPE
// [cfe] Can't assign to a type literal.
}
}
@@ -24,14 +24,14 @@
new C<D>().f();
D = Null;
//^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_TYPE
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_TYPE
// [cfe] Can't assign to a type literal.
E = Null;
//^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_TYPE
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_TYPE
// [cfe] Can't assign to a type literal.
F = Null;
//^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_TYPE
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_TYPE
// [cfe] Can't assign to a type literal.
}
diff --git a/tests/language/call/constructor_on_unresolvable_class_test.dart b/tests/language/call/constructor_on_unresolvable_class_test.dart
index 3b32987..6db90ed 100644
--- a/tests/language/call/constructor_on_unresolvable_class_test.dart
+++ b/tests/language/call/constructor_on_unresolvable_class_test.dart
@@ -11,14 +11,14 @@
main() {
new A();
// ^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'A'.
new A.foo();
// ^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'A.foo'.
new lib.A();
// ^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'lib.A'.
}
diff --git a/tests/language/call/method_implicit_tear_off_nullable_test.dart b/tests/language/call/method_implicit_tear_off_nullable_test.dart
index da2fbce..c840804 100644
--- a/tests/language/call/method_implicit_tear_off_nullable_test.dart
+++ b/tests/language/call/method_implicit_tear_off_nullable_test.dart
@@ -19,6 +19,6 @@
// Nullable types cannot have their `.call` method implicitly torn off.
check(c);
// ^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
}
diff --git a/tests/language/call/nonexistent_constructor_test.dart b/tests/language/call/nonexistent_constructor_test.dart
index 4649f37..4c129d0 100644
--- a/tests/language/call/nonexistent_constructor_test.dart
+++ b/tests/language/call/nonexistent_constructor_test.dart
@@ -19,10 +19,10 @@
new A.foo(42);
new A.bar(foo());
// ^^^
- // [analyzer] STATIC_WARNING.NEW_WITH_UNDEFINED_CONSTRUCTOR
+ // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR
// [cfe] Method not found: 'A.bar'.
new A();
// ^
- // [analyzer] STATIC_WARNING.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT
+ // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT
// [cfe] Method not found: 'A'.
}
diff --git a/tests/language/class/keyword_test.dart b/tests/language/class/keyword_test.dart
index 891c4a7..5a89f2e 100644
--- a/tests/language/class/keyword_test.dart
+++ b/tests/language/class/keyword_test.dart
@@ -12,14 +12,14 @@
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
// [cfe] Expected ';' after this.
// ^^^^^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Expected an identifier, but got 'class'.
// ^^^^^
// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
// [cfe] Setter not found: 'class'.
print("$class");
// ^^^^^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Expected an identifier, but got 'class'.
// ^^^^^
// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
diff --git a/tests/language/compile_time_constant/p_test.dart b/tests/language/compile_time_constant/p_test.dart
index 5c41a46..031e929 100644
--- a/tests/language/compile_time_constant/p_test.dart
+++ b/tests/language/compile_time_constant/p_test.dart
@@ -8,7 +8,7 @@
const A(
this.x
// ^
- // [analyzer] STATIC_WARNING.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR
+ // [analyzer] COMPILE_TIME_ERROR.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR
// [cfe] 'x' is a final instance variable that has already been initialized.
// ^
// [cfe] Cannot invoke a non-'const' constructor where a const expression is expected.
diff --git a/tests/language/compile_time_constant/static2_test.dart b/tests/language/compile_time_constant/static2_test.dart
index 2155448..5de087a 100644
--- a/tests/language/compile_time_constant/static2_test.dart
+++ b/tests/language/compile_time_constant/static2_test.dart
@@ -9,7 +9,7 @@
// [analyzer] CHECKED_MODE_COMPILE_TIME_ERROR.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE
// [cfe] A value of type 'String' can't be assigned to a variable of type 'int'.
// ^^^^^
- // [analyzer] STATIC_WARNING.FIELD_INITIALIZER_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZER_NOT_ASSIGNABLE
const A.a2(this.x);
const A.a3([this.x = 'foo']);
// ^^^^^
@@ -17,9 +17,7 @@
// [cfe] A value of type 'String' can't be assigned to a variable of type 'int'.
const A.a4(String this.x);
// ^^^^^^^^^^^^^
- // [analyzer] COMPILE_TIME_ERROR.INVALID_PARAMETER_DECLARATION
- // ^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE
// ^
// [cfe] The type of parameter 'x', 'String' is not a subtype of the corresponding field's type, 'int'.
const A.a5(String x) : this.x = x;
@@ -27,7 +25,7 @@
// [analyzer] CHECKED_MODE_COMPILE_TIME_ERROR.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE
// [cfe] A value of type 'String' can't be assigned to a variable of type 'int'.
// ^
- // [analyzer] STATIC_WARNING.FIELD_INITIALIZER_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZER_NOT_ASSIGNABLE
const A.a6(int x) : this.x = x;
}
@@ -39,7 +37,7 @@
// [analyzer] CHECKED_MODE_COMPILE_TIME_ERROR.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
// [cfe] The argument type 'String' can't be assigned to the parameter type 'int'.
// ^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
const a3 = const A.a3();
// ^^^^^^^^^^^^
// [analyzer] CHECKED_MODE_COMPILE_TIME_ERROR.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
@@ -56,7 +54,7 @@
// [analyzer] CHECKED_MODE_COMPILE_TIME_ERROR.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
// [cfe] The argument type 'String' can't be assigned to the parameter type 'int'.
// ^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
main() {
print(a1);
diff --git a/tests/language/compile_time_constant/static3_test.dart b/tests/language/compile_time_constant/static3_test.dart
index 3deabbb..d6c508b 100644
--- a/tests/language/compile_time_constant/static3_test.dart
+++ b/tests/language/compile_time_constant/static3_test.dart
@@ -9,7 +9,7 @@
// [analyzer] CHECKED_MODE_COMPILE_TIME_ERROR.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE
// [cfe] A value of type 'String' can't be assigned to a variable of type 'int'.
// ^^^^^
- // [analyzer] STATIC_WARNING.FIELD_INITIALIZER_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZER_NOT_ASSIGNABLE
const A.a2(this.x);
const A.a3([this.x = 'foo']);
// ^^^^^
@@ -17,9 +17,7 @@
// [cfe] A value of type 'String' can't be assigned to a variable of type 'int'.
const A.a4(String this.x);
// ^^^^^^^^^^^^^
- // [analyzer] COMPILE_TIME_ERROR.INVALID_PARAMETER_DECLARATION
- // ^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE
// ^
// [cfe] The type of parameter 'x', 'String' is not a subtype of the corresponding field's type, 'int'.
const A.a5(String x) : this.x = x;
@@ -27,7 +25,7 @@
// [analyzer] CHECKED_MODE_COMPILE_TIME_ERROR.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE
// [cfe] A value of type 'String' can't be assigned to a variable of type 'int'.
// ^
- // [analyzer] STATIC_WARNING.FIELD_INITIALIZER_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZER_NOT_ASSIGNABLE
const A.a6(int x) : this.x = x;
}
@@ -39,7 +37,7 @@
// [analyzer] CHECKED_MODE_COMPILE_TIME_ERROR.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
// [cfe] The argument type 'String' can't be assigned to the parameter type 'int'.
// ^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
var a3 = const A.a3();
// ^^^^^^^^^^^^
// [analyzer] CHECKED_MODE_COMPILE_TIME_ERROR.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
@@ -56,7 +54,7 @@
// [analyzer] CHECKED_MODE_COMPILE_TIME_ERROR.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
// [cfe] The argument type 'String' can't be assigned to the parameter type 'int'.
// ^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
main() {
print(a1);
diff --git a/tests/language/const/constructor3_test.dart b/tests/language/const/constructor3_test.dart
index 54191d1..aa8aa0ff 100644
--- a/tests/language/const/constructor3_test.dart
+++ b/tests/language/const/constructor3_test.dart
@@ -18,7 +18,7 @@
// [analyzer] CHECKED_MODE_COMPILE_TIME_ERROR.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
// [cfe] The argument type 'int' can't be assigned to the parameter type 'double'.
// ^^^^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
const e = const D(0.0);
const f = const D(intValue);
// ^^^^^^^^^^^^^^^^^
diff --git a/tests/language/const/constructor_syntax_test.dart b/tests/language/const/constructor_syntax_test.dart
index 99a420e..d214271 100644
--- a/tests/language/const/constructor_syntax_test.dart
+++ b/tests/language/const/constructor_syntax_test.dart
@@ -49,7 +49,7 @@
const C3()
: field = new C0()
//^^^^^
- // [analyzer] STATIC_WARNING.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION
// ^
// [cfe] 'field' is a final instance variable that has already been initialized.
// ^
diff --git a/tests/language/const/syntax_test.dart b/tests/language/const/syntax_test.dart
index e9ccc4e..d9eb889 100644
--- a/tests/language/const/syntax_test.dart
+++ b/tests/language/const/syntax_test.dart
@@ -95,15 +95,11 @@
// ^^
// [analyzer] COMPILE_TIME_ERROR.RECURSIVE_COMPILE_TIME_CONSTANT
// [cfe] Can't infer the type of 'A2': circularity found during type inference.
-// ^^
-// [analyzer] COMPILE_TIME_ERROR.TOP_LEVEL_CYCLE
// ^
// [cfe] Constant evaluation error:
const A3 = A2 + 1;
// ^^
// [analyzer] COMPILE_TIME_ERROR.RECURSIVE_COMPILE_TIME_CONSTANT
-// ^^
-// [analyzer] COMPILE_TIME_ERROR.TOP_LEVEL_CYCLE
class C0 {
static const X = const C1();
@@ -115,7 +111,7 @@
const C1()
: x = C0.X
//^
- // [analyzer] STATIC_WARNING.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION
// ^
// [cfe] 'x' is a final instance variable that has already been initialized.
// ^
@@ -132,7 +128,7 @@
// ^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_EVAL_TYPE_NUM
// ^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'String' can't be assigned to a variable of type 'num'.
// Check identical.
diff --git a/tests/language/constructor/constructor9_test.dart b/tests/language/constructor/constructor9_test.dart
index 4c7b35d..607e164 100644
--- a/tests/language/constructor/constructor9_test.dart
+++ b/tests/language/constructor/constructor9_test.dart
@@ -8,7 +8,7 @@
class Klass {
Klass(var v) : field_ = v {}
//^^^^^
-// [analyzer] STATIC_WARNING.FINAL_NOT_INITIALIZED_CONSTRUCTOR
+// [analyzer] COMPILE_TIME_ERROR.FINAL_NOT_INITIALIZED_CONSTRUCTOR
final uninitializedFinalField_;
// ^
// [cfe] Final field 'uninitializedFinalField_' is not initialized.
diff --git a/tests/language/constructor/default_factory_test.dart b/tests/language/constructor/default_factory_test.dart
index 43a93e8..1b69325 100644
--- a/tests/language/constructor/default_factory_test.dart
+++ b/tests/language/constructor/default_factory_test.dart
@@ -9,7 +9,7 @@
abstract class Vehicle {
factory Vehicle() = GoogleOne.Vehicle;
// ^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.REDIRECT_TO_INVALID_RETURN_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_INVALID_RETURN_TYPE
// [cfe] The constructor function type 'GoogleOne Function()' isn't a subtype of 'Vehicle Function()'.
}
diff --git a/tests/language/constructor/named_constructor_test.dart b/tests/language/constructor/named_constructor_test.dart
index 12a58b1..d802b9a 100644
--- a/tests/language/constructor/named_constructor_test.dart
+++ b/tests/language/constructor/named_constructor_test.dart
@@ -36,13 +36,13 @@
// 'prefix' is not a type:
new prefix<int>.Class().value;
// ^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'prefix.Class'.
new prefix.Class<int>().value;
// 'prefix<int>.Class<int>' doesn't fit the grammar syntax T.id:
new prefix<int>.Class<int>().value;
// ^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'prefix.Class'.
// ^^^^^
// [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
@@ -52,7 +52,7 @@
// 'prefix<int>.Class.named' doesn't fit the grammar syntax T.id:
new prefix<int>.Class.named().value;
// ^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'prefix.Class'.
// ^^^^^
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
@@ -70,7 +70,7 @@
// 'prefix<int>.Class<int>' doesn't fit the grammar syntax T.id:
new prefix<int>.Class<int>.named().value;
// ^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'prefix.Class'.
// ^^^^^
// [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
@@ -80,7 +80,7 @@
// 'prefix<int>.Class.named<int>' doesn't fit the grammar syntax T.id:
new prefix<int>.Class.named<int>().value;
// ^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'prefix.Class'.
// ^^^^^
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
@@ -96,7 +96,7 @@
// 'prefix<int>.Class<int>.named<int>' doesn't fit the grammar syntax T.id:
new prefix<int>.Class<int>.named<int>().value;
// ^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'prefix.Class'.
// ^^^^^
// [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
diff --git a/tests/language/constructor/reference_test.dart b/tests/language/constructor/reference_test.dart
index 7aab1ff..c1ec04c 100644
--- a/tests/language/constructor/reference_test.dart
+++ b/tests/language/constructor/reference_test.dart
@@ -13,7 +13,7 @@
new Foo.bar();
new Foo.bar.baz();
// ^^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// ^
// [cfe] Method not found: 'Foo.bar.baz'.
new Foo<int>();
@@ -34,12 +34,12 @@
// ^
// [cfe] A constructor invocation can't have type arguments on the constructor name.
// ^^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// ^
// [cfe] Method not found: 'Foo.bar.baz'.
new Foo.bar.baz<int>();
// ^^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// ^^^
// [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
// [cfe] A constructor invocation can't have type arguments on the constructor name.
@@ -107,7 +107,7 @@
// ^
// [cfe] A constructor invocation can't have type arguments on the constructor name.
//^^^^^^^
-// [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+// [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// ^
// [cfe] Method not found: 'Foo.bar.baz'.
Foo.bar.baz<int>();
diff --git a/tests/language/constructor/unresolved_default_constructor_test.dart b/tests/language/constructor/unresolved_default_constructor_test.dart
index 07fdc72..b8b5338 100644
--- a/tests/language/constructor/unresolved_default_constructor_test.dart
+++ b/tests/language/constructor/unresolved_default_constructor_test.dart
@@ -15,6 +15,6 @@
A.method();
Expect.throws(() => new A());
// ^
- // [analyzer] STATIC_WARNING.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT
+ // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT
// [cfe] Method not found: 'A'.
}
diff --git a/tests/language/control_flow_collections/await_for_downcast_test.dart b/tests/language/control_flow_collections/await_for_downcast_test.dart
index be8aa65..613ebf4 100644
--- a/tests/language/control_flow_collections/await_for_downcast_test.dart
+++ b/tests/language/control_flow_collections/await_for_downcast_test.dart
@@ -33,7 +33,7 @@
var c = <int>[
await for (num n in numStream([1, 2, 3, 4])) n
// ^
- // [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'num' can't be assigned to a variable of type 'int'.
];
}
@@ -59,10 +59,10 @@
var c = <int, int>{
await for (num n in numStream([1, 2, 3, 4])) n: n
// ^
- // [analyzer] STATIC_WARNING.MAP_KEY_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.MAP_KEY_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'num' can't be assigned to a variable of type 'int'.
// ^
- // [analyzer] STATIC_WARNING.MAP_VALUE_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.MAP_VALUE_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'num' can't be assigned to a variable of type 'int'.
};
}
@@ -88,7 +88,7 @@
var c = <int>{
await for (num n in numStream([1, 2, 3, 4])) n
// ^
- // [analyzer] STATIC_WARNING.SET_ELEMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.SET_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'num' can't be assigned to a variable of type 'int'.
};
}
diff --git a/tests/language/control_flow_collections/await_for_null_test.dart b/tests/language/control_flow_collections/await_for_null_test.dart
index a8f4154..61fd04c 100644
--- a/tests/language/control_flow_collections/await_for_null_test.dart
+++ b/tests/language/control_flow_collections/await_for_null_test.dart
@@ -8,14 +8,14 @@
Stream<int>? nullStream;
var a = <int>[await for (var i in nullStream) 1];
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] The type 'Stream<int>?' used in the 'for' loop must implement 'Stream<dynamic>'.
var b = <int, int>{await for (var i in nullStream) 1: 1};
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] The type 'Stream<int>?' used in the 'for' loop must implement 'Stream<dynamic>'.
var c = <int>{await for (var i in nullStream) 1};
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] The type 'Stream<int>?' used in the 'for' loop must implement 'Stream<dynamic>'.
}
diff --git a/tests/language/control_flow_collections/for_downcast_test.dart b/tests/language/control_flow_collections/for_downcast_test.dart
index f857295..d88e3f6 100644
--- a/tests/language/control_flow_collections/for_downcast_test.dart
+++ b/tests/language/control_flow_collections/for_downcast_test.dart
@@ -31,7 +31,7 @@
var c = <int>[
for (num n in <num>[1, 2, 3, 4]) n
// ^
- // [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'num' can't be assigned to a variable of type 'int'.
];
@@ -64,10 +64,10 @@
var c = <int, int>{
for (num n in <num>[1, 2, 3, 4]) n: n
// ^
- // [analyzer] STATIC_WARNING.MAP_KEY_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.MAP_KEY_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'num' can't be assigned to a variable of type 'int'.
// ^
- // [analyzer] STATIC_WARNING.MAP_VALUE_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.MAP_VALUE_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'num' can't be assigned to a variable of type 'int'.
};
@@ -100,7 +100,7 @@
var c = <int>{
for (num n in <num>[1, 2, 3, 4]) n
// ^
- // [analyzer] STATIC_WARNING.SET_ELEMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.SET_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'num' can't be assigned to a variable of type 'int'.
};
@@ -117,14 +117,14 @@
Iterable<int>? nullIterable = null;
var a = <int>[for (var i in nullIterable) 1];
// ^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
var b = {for (var i in nullIterable) 1: 1};
// ^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
var c = <int>{for (var i in nullIterable) 1};
// ^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
}
diff --git a/tests/language/control_flow_collections/for_null_condition_test.dart b/tests/language/control_flow_collections/for_null_condition_test.dart
index 31b02b9..ebddf4c 100644
--- a/tests/language/control_flow_collections/for_null_condition_test.dart
+++ b/tests/language/control_flow_collections/for_null_condition_test.dart
@@ -9,14 +9,14 @@
bool? nullBool = null;
var a = <int>[for (; nullBool;) 1];
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] A value of type 'bool?' can't be assigned to a variable of type 'bool'.
var b = <int, int>{for (; nullBool;) 1: 1};
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] A value of type 'bool?' can't be assigned to a variable of type 'bool'.
var c = <int>{for (; nullBool;) 1};
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] A value of type 'bool?' can't be assigned to a variable of type 'bool'.
}
diff --git a/tests/language/control_flow_collections/if_null_condition_test.dart b/tests/language/control_flow_collections/if_null_condition_test.dart
index 667c6bd..bec649f 100644
--- a/tests/language/control_flow_collections/if_null_condition_test.dart
+++ b/tests/language/control_flow_collections/if_null_condition_test.dart
@@ -6,16 +6,16 @@
bool? nullBool;
var a = <int>[if (nullBool) 1];
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] A value of type 'bool?' can't be assigned to a variable of type 'bool'.
var b = <int, int>{if (nullBool) 1: 1};
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] A value of type 'bool?' can't be assigned to a variable of type 'bool'.
var c = <int>{if (nullBool) 1};
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] A value of type 'bool?' can't be assigned to a variable of type 'bool'.
}
diff --git a/tests/language/deferred/inheritance_constraints_test.dart b/tests/language/deferred/inheritance_constraints_test.dart
index 9dd18f2..2d9429b 100644
--- a/tests/language/deferred/inheritance_constraints_test.dart
+++ b/tests/language/deferred/inheritance_constraints_test.dart
@@ -27,7 +27,7 @@
D();
factory D.factory() = lib.Foo2;
// ^^^^^^^^
-// [analyzer] STATIC_WARNING.REDIRECT_TO_INVALID_RETURN_TYPE
+// [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_INVALID_RETURN_TYPE
// [cfe] The constructor function type 'Foo2 Function()' isn't a subtype of 'D Function()'.
}
diff --git a/tests/language/double/to_string_as_exponential2_test.dart b/tests/language/double/to_string_as_exponential2_test.dart
index fbe03c4..8bb750a 100644
--- a/tests/language/double/to_string_as_exponential2_test.dart
+++ b/tests/language/double/to_string_as_exponential2_test.dart
@@ -11,14 +11,14 @@
Expect.throwsRangeError(() => v.toStringAsExponential(21));
v.toStringAsExponential(1.5);
// ^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'double' can't be assigned to the parameter type 'int?'.
v.toStringAsExponential("string");
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'String' can't be assigned to the parameter type 'int?'.
v.toStringAsExponential("3");
// ^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'String' can't be assigned to the parameter type 'int?'.
}
diff --git a/tests/language/dynamic/field_test.dart b/tests/language/dynamic/field_test.dart
index ebe094e..23190e0 100644
--- a/tests/language/dynamic/field_test.dart
+++ b/tests/language/dynamic/field_test.dart
@@ -15,21 +15,21 @@
foo() {
print(a);
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'a' isn't defined for the class 'C'.
return a;
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'a' isn't defined for the class 'C'.
}
bar() {
print(b.a);
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'b' isn't defined for the class 'C'.
return b.a;
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'b' isn't defined for the class 'C'.
}
}
diff --git a/tests/language/extension_methods/static_extension_getter_setter_conflicts_test.dart b/tests/language/extension_methods/static_extension_getter_setter_conflicts_test.dart
index a2af316..bce34aa 100644
--- a/tests/language/extension_methods/static_extension_getter_setter_conflicts_test.dart
+++ b/tests/language/extension_methods/static_extension_getter_setter_conflicts_test.dart
@@ -23,7 +23,7 @@
c0.m1;
c0.m1 = 0;
// ^^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] The setter 'm1' isn't defined for the class 'C0'.
E0(c0).m1 = 0;
E0(c0).m1;
@@ -33,12 +33,12 @@
c0.m1 += 0;
// ^^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] The setter 'm1' isn't defined for the class 'C0'.
c0.m1++;
// ^^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] The setter 'm1' isn't defined for the class 'C0'.
c0.m2 = 0;
@@ -109,7 +109,7 @@
c1a.m1 = 0;
// ^^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_LOCAL
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_LOCAL
// [cfe] The setter 'm1' isn't defined for the class 'C1<int>'.
c1a.m2;
@@ -195,7 +195,7 @@
c1c.m1 = 0;
// ^^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_LOCAL
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_LOCAL
// [cfe] The setter 'm1' isn't defined for the class 'C1<Object>'.
c1c.m2;
@@ -224,7 +224,7 @@
this.m1;
this.m1 = 0;
// ^^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] The setter 'm1' isn't defined for the class 'C2'.
this.m2 = 0;
diff --git a/tests/language/extension_methods/static_extension_internal_basename_shadowing_error_test.dart b/tests/language/extension_methods/static_extension_internal_basename_shadowing_error_test.dart
index c7ce72e..f1a9254 100644
--- a/tests/language/extension_methods/static_extension_internal_basename_shadowing_error_test.dart
+++ b/tests/language/extension_methods/static_extension_internal_basename_shadowing_error_test.dart
@@ -23,29 +23,29 @@
// The instance getter shadows the global setter
topLevelSetter = topLevelSetter + 1;
// ^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelSetter'.
topLevelSetter++;
// ^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelSetter'.
topLevelSetter = 0;
// ^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelSetter'.
// The instance getter shadows the global field setter
topLevelField = topLevelField + 1;
// ^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelField'.
topLevelField++;
// ^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelField'.
topLevelField = 0;
// ^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelField'.
// The instance getter shadows the global method
@@ -115,29 +115,29 @@
// The static getter shadows the global setter
topLevelSetter = topLevelSetter + 1;
// ^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelSetter'.
topLevelSetter++;
// ^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelSetter'.
topLevelSetter = 0;
// ^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelSetter'.
// The static getter shadows the global field setter
topLevelField = topLevelField + 1;
// ^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelField'.
topLevelField++;
// ^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelField'.
topLevelField = 0;
// ^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelField'.
// The static getter shadows the global method
@@ -211,15 +211,15 @@
// The instance getter shadows the other extension's setter
extensionSetter = extensionSetter + 1;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'extensionSetter'.
extensionSetter++;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'extensionSetter'.
extensionSetter = 0;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'extensionSetter'.
// The instance getter shadows the other extensions method
@@ -242,15 +242,15 @@
// The instance getter shadows the other extension's setter
extensionSetter = extensionSetter + 1;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] The setter 'extensionSetter' isn't defined for the class 'A7'.
extensionSetter++;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] The setter 'extensionSetter' isn't defined for the class 'A7'.
extensionSetter = 0;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] The setter 'extensionSetter' isn't defined for the class 'A7'.
// The instance getter shadows the other extensions method
@@ -343,15 +343,15 @@
// The static getter shadows the other extension's setter
extensionSetter = extensionSetter + 1;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'extensionSetter'.
extensionSetter++;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'extensionSetter'.
extensionSetter = 0;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'extensionSetter'.
// The static field shadows the other extension's setter
@@ -389,15 +389,15 @@
// The static getter shadows the other extension's setter
extensionSetter = extensionSetter + 1;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'extensionSetter'.
extensionSetter++;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'extensionSetter'.
extensionSetter = 0;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'extensionSetter'.
// The static field shadows the other extension's setter
diff --git a/tests/language/extension_methods/static_extension_internal_resolution_4_error_test.dart b/tests/language/extension_methods/static_extension_internal_resolution_4_error_test.dart
index d1a4685..6f6944c 100644
--- a/tests/language/extension_methods/static_extension_internal_resolution_4_error_test.dart
+++ b/tests/language/extension_methods/static_extension_internal_resolution_4_error_test.dart
@@ -238,21 +238,21 @@
// [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
// [cfe] The property 'fieldInExtensionScope' is defined in multiple extensions for 'B' and neither is more specific.
// ^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
checkExtensionValue(t0);
bool t1 = getterInExtensionScope;
// ^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
// [cfe] The property 'getterInExtensionScope' is defined in multiple extensions for 'B' and neither is more specific.
// ^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
checkExtensionValue(t1);
setterInExtensionScope = extensionValue;
// ^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
// [cfe] The property 'setterInExtensionScope' is defined in multiple extensions for 'B' and neither is more specific.
// ^^^^^^^^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
bool t2 = methodInExtensionScope();
// ^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
diff --git a/tests/language/extension_methods/static_extension_setter_getter_assignability_error_test.dart b/tests/language/extension_methods/static_extension_setter_getter_assignability_error_test.dart
index e31cc30..e6e2b0b 100644
--- a/tests/language/extension_methods/static_extension_setter_getter_assignability_error_test.dart
+++ b/tests/language/extension_methods/static_extension_setter_getter_assignability_error_test.dart
@@ -10,7 +10,7 @@
// ^^
// [cfe] unspecified
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.GETTER_NOT_SUBTYPE_SETTER_TYPES
+ // [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_SUBTYPE_SETTER_TYPES
static void set property(String value) {}
// ^^
// [cfe] unspecified
@@ -18,7 +18,7 @@
// ^^
// [cfe] unspecified
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.GETTER_NOT_SUBTYPE_SETTER_TYPES
+ // [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_SUBTYPE_SETTER_TYPES
void set property2(String x) {}
// ^^
// [cfe] unspecified
diff --git a/tests/language/factory/factory4_test.dart b/tests/language/factory/factory4_test.dart
index 8aeb051..14e2b01 100644
--- a/tests/language/factory/factory4_test.dart
+++ b/tests/language/factory/factory4_test.dart
@@ -5,7 +5,7 @@
abstract class Link<T> {
factory Link.create() = LinkFactory.create;
// ^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.REDIRECT_TO_INVALID_RETURN_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_INVALID_RETURN_TYPE
// [cfe] The constructor function type 'LinkFactory<dynamic> Function()' isn't a subtype of 'Link<T> Function()'.
}
diff --git a/tests/language/factory/factory5_test.dart b/tests/language/factory/factory5_test.dart
index b06af33..aaf99e0 100644
--- a/tests/language/factory/factory5_test.dart
+++ b/tests/language/factory/factory5_test.dart
@@ -5,7 +5,7 @@
abstract class Link<T> {
factory Link.create() = LinkFactory<T>.create;
// ^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.REDIRECT_TO_INVALID_RETURN_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_INVALID_RETURN_TYPE
// [cfe] The constructor function type 'LinkFactory<T> Function()' isn't a subtype of 'Link<T> Function()'.
}
diff --git a/tests/language/factory/factory6_test.dart b/tests/language/factory/factory6_test.dart
index 7e36cb9..6084e82 100644
--- a/tests/language/factory/factory6_test.dart
+++ b/tests/language/factory/factory6_test.dart
@@ -7,7 +7,7 @@
abstract class Link<T> {
factory Link.Foo() = LinkFactory<T>.Foo;
// ^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.REDIRECT_TO_INVALID_RETURN_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_INVALID_RETURN_TYPE
// [cfe] The constructor function type 'LinkFactory<T> Function()' isn't a subtype of 'Link<T> Function()'.
}
diff --git a/tests/language/factory/factory_test.dart b/tests/language/factory/factory_test.dart
index 14a5983..b42c213 100644
--- a/tests/language/factory/factory_test.dart
+++ b/tests/language/factory/factory_test.dart
@@ -39,7 +39,7 @@
// [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS
// [cfe] Expected 0 type arguments.
// ^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.REDIRECT_TO_INVALID_RETURN_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_INVALID_RETURN_TYPE
}
class LinkFactory {
diff --git a/tests/language/factory/redirection3_cyclic_test.dart b/tests/language/factory/redirection3_cyclic_test.dart
index ed352be..13dc39b 100644
--- a/tests/language/factory/redirection3_cyclic_test.dart
+++ b/tests/language/factory/redirection3_cyclic_test.dart
@@ -28,7 +28,7 @@
// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
// [cfe] Expected an identifier, but got '('.
// ^^^
- // [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+ // [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
C();
}
diff --git a/tests/language/final/attempt_reinitialization_test.dart b/tests/language/final/attempt_reinitialization_test.dart
index 009998b..2db5efe 100644
--- a/tests/language/final/attempt_reinitialization_test.dart
+++ b/tests/language/final/attempt_reinitialization_test.dart
@@ -5,7 +5,7 @@
class Foo {
Foo(this.x);
// ^
- // [analyzer] STATIC_WARNING.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR
+ // [analyzer] COMPILE_TIME_ERROR.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR
// [cfe] 'x' is a final instance variable that has already been initialized.
final int x = 42;
}
@@ -15,7 +15,7 @@
CoffeeShop.name(String shopName)
: this.shopName = shopName;
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION
// ^
// [cfe] 'shopName' is a final instance variable that has already been initialized.
}
diff --git a/tests/language/final/variable_assignment_test.dart b/tests/language/final/variable_assignment_test.dart
index f001d40..840f0e6 100644
--- a/tests/language/final/variable_assignment_test.dart
+++ b/tests/language/final/variable_assignment_test.dart
@@ -8,18 +8,18 @@
final x = 30;
x = 0;
//^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_LOCAL
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_LOCAL
// [cfe] Can't assign to the final variable 'x'.
x += 1;
//^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_LOCAL
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_LOCAL
// [cfe] Can't assign to the final variable 'x'.
++x;
//^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_LOCAL
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_LOCAL
// [cfe] Can't assign to the final variable 'x'.
x++;
//^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_LOCAL
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_LOCAL
// [cfe] Can't assign to the final variable 'x'.
}
diff --git a/tests/language/generic/constructor_mixin2_test.dart b/tests/language/generic/constructor_mixin2_test.dart
index 6630e4e..88281e3 100644
--- a/tests/language/generic/constructor_mixin2_test.dart
+++ b/tests/language/generic/constructor_mixin2_test.dart
@@ -22,6 +22,6 @@
checkNoDynamicTypeError(() => new D<int>(v));
checkDynamicTypeError(() => new D<String>(v));
// ^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'int' can't be assigned to the parameter type 'String'.
}
diff --git a/tests/language/generic/constructor_mixin3_test.dart b/tests/language/generic/constructor_mixin3_test.dart
index 7a1a21a..04e86a1 100644
--- a/tests/language/generic/constructor_mixin3_test.dart
+++ b/tests/language/generic/constructor_mixin3_test.dart
@@ -21,6 +21,6 @@
checkNoDynamicTypeError(() => new C1(v));
checkDynamicTypeError(() => new C2(v));
// ^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'int' can't be assigned to the parameter type 'String'.
}
diff --git a/tests/language/generic/constructor_mixin_test.dart b/tests/language/generic/constructor_mixin_test.dart
index a2b828e..f79f865 100644
--- a/tests/language/generic/constructor_mixin_test.dart
+++ b/tests/language/generic/constructor_mixin_test.dart
@@ -20,6 +20,6 @@
checkNoDynamicTypeError(() => new C<int>(v));
checkDynamicTypeError(() => new C<String>(v));
// ^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'int' can't be assigned to the parameter type 'String'.
}
diff --git a/tests/language/generic/instantiate_type_variable_test.dart b/tests/language/generic/instantiate_type_variable_test.dart
index e03c49f..486a95b 100644
--- a/tests/language/generic/instantiate_type_variable_test.dart
+++ b/tests/language/generic/instantiate_type_variable_test.dart
@@ -9,7 +9,7 @@
dynamic make() {
return new T();
// ^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'T'.
}
}
diff --git a/tests/language/generic/reify_typevar_static_test.dart b/tests/language/generic/reify_typevar_static_test.dart
index b3c502b..c589aff 100644
--- a/tests/language/generic/reify_typevar_static_test.dart
+++ b/tests/language/generic/reify_typevar_static_test.dart
@@ -11,7 +11,7 @@
static staticFunction(bool b) =>
b ? T :
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
// [cfe] Type variables can't be used in static members.
null;
factory C.factoryConstructor(bool b) => new C(
diff --git a/tests/language/getter/no_setter2_test.dart b/tests/language/getter/no_setter2_test.dart
index 778ce8f..83d92c4 100644
--- a/tests/language/getter/no_setter2_test.dart
+++ b/tests/language/getter/no_setter2_test.dart
@@ -11,20 +11,20 @@
Example() {
nextVar++;
// ^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'nextVar'.
this.nextVar++;
// ^^^^^^^
- // [analyzer] STATIC_TYPE_WARNING.INSTANCE_ACCESS_TO_STATIC_MEMBER
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] The getter 'nextVar' isn't defined for the class 'Example'.
// ^^^^^^^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+ // [analyzer] STATIC_TYPE_WARNING.INSTANCE_ACCESS_TO_STATIC_MEMBER
// [cfe] The setter 'nextVar' isn't defined for the class 'Example'.
}
static test() {
nextVar++;
// ^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'nextVar'.
this.nextVar++;
// ^^^^
@@ -33,7 +33,7 @@
// ^^^^^^^
// [analyzer] STATIC_TYPE_WARNING.INSTANCE_ACCESS_TO_STATIC_MEMBER
// ^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
}
}
diff --git a/tests/language/getter/no_setter_test.dart b/tests/language/getter/no_setter_test.dart
index 8d84129..c403d32 100644
--- a/tests/language/getter/no_setter_test.dart
+++ b/tests/language/getter/no_setter_test.dart
@@ -11,19 +11,19 @@
Example() {
nextVar = 1;
// ^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'nextVar'.
this.nextVar = 1;
// ^^^^^^^
// [analyzer] STATIC_TYPE_WARNING.INSTANCE_ACCESS_TO_STATIC_MEMBER
// [cfe] The setter 'nextVar' isn't defined for the class 'Example'.
// ^^^^^^^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
}
static test() {
nextVar = 0;
// ^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'nextVar'.
this.nextVar = 0;
// ^^^^
@@ -32,7 +32,7 @@
// ^^^^^^^
// [analyzer] STATIC_TYPE_WARNING.INSTANCE_ACCESS_TO_STATIC_MEMBER
// ^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
}
}
diff --git a/tests/language/getter/setter2_test.dart b/tests/language/getter/setter2_test.dart
index 2e0a03c..a26bd49 100644
--- a/tests/language/getter/setter2_test.dart
+++ b/tests/language/getter/setter2_test.dart
@@ -24,7 +24,7 @@
late A getterField;
A get field {
// ^^^^^
- // [analyzer] STATIC_WARNING.GETTER_NOT_SUBTYPE_SETTER_TYPES
+ // [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_SUBTYPE_SETTER_TYPES
// [cfe] unspecified
return getterField;
}
@@ -39,7 +39,7 @@
late C setterField;
A get field {
// ^^^^^
- // [analyzer] STATIC_WARNING.GETTER_NOT_SUBTYPE_SETTER_TYPES
+ // [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_SUBTYPE_SETTER_TYPES
// [cfe] unspecified
return getterField;
}
diff --git a/tests/language/getter/setter_type_test.dart b/tests/language/getter/setter_type_test.dart
index b5b5299..f9579d5 100644
--- a/tests/language/getter/setter_type_test.dart
+++ b/tests/language/getter/setter_type_test.dart
@@ -8,7 +8,7 @@
int get foo => bar;
// ^^^
-// [analyzer] STATIC_WARNING.GETTER_NOT_SUBTYPE_SETTER_TYPES
+// [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_SUBTYPE_SETTER_TYPES
// [cfe] unspecified
void set foo(String str) {
diff --git a/tests/language/getter/syntax_get_set_syntax_test.dart b/tests/language/getter/syntax_get_set_syntax_test.dart
index 9dcaac2..dbeaa85 100644
--- a/tests/language/getter/syntax_get_set_syntax_test.dart
+++ b/tests/language/getter/syntax_get_set_syntax_test.dart
@@ -73,7 +73,7 @@
// [analyzer] SYNTACTIC_ERROR.VAR_RETURN_TYPE
// [cfe] The return type can't be 'var'.
// ^^^^^^
-// [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
var get b, c;
//^^^
// [analyzer] SYNTACTIC_ERROR.VAR_RETURN_TYPE
@@ -94,7 +94,7 @@
// [analyzer] SYNTACTIC_ERROR.VAR_RETURN_TYPE
// [cfe] The return type can't be 'var'.
// ^^^^^^
-// [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER
// [cfe] A method declaration needs an explicit list of parameters.
@@ -141,9 +141,9 @@
List? set;
List set d;
//^^^^
-// [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+// [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
//^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER
// [cfe] A method declaration needs an explicit list of parameters.
@@ -153,7 +153,7 @@
// [cfe] A setter should have exactly one formal parameter.
List? set e, f;
//^^^^^
-// [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+// [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER
// [cfe] A method declaration needs an explicit list of parameters.
@@ -189,9 +189,9 @@
List<int>? set;
List<int> set d;
//^^^^^^^^^
-// [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+// [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
//^^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER
// [cfe] A method declaration needs an explicit list of parameters.
@@ -201,7 +201,7 @@
// [cfe] A setter should have exactly one formal parameter.
List<int>? set e, f;
//^^^^^^^^^^
-// [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+// [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER
// [cfe] A method declaration needs an explicit list of parameters.
diff --git a/tests/language/identifier/known_prefix_error_test.dart b/tests/language/identifier/known_prefix_error_test.dart
index a104b53..fe1ea19 100644
--- a/tests/language/identifier/known_prefix_error_test.dart
+++ b/tests/language/identifier/known_prefix_error_test.dart
@@ -23,49 +23,49 @@
async<dynamic> _async = new async.A();
// [error line 24, column 1, length 5]
-// [analyzer] STATIC_WARNING.NOT_A_TYPE
+// [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
// [cfe] 'async' isn't a type.
// [error line 24, column 1]
// [cfe] Expected 0 type arguments.
await<dynamic> _await = new await.A();
// [error line 30, column 1, length 5]
-// [analyzer] STATIC_WARNING.NOT_A_TYPE
+// [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
// [cfe] 'await' isn't a type.
// [error line 30, column 1]
// [cfe] Expected 0 type arguments.
hide<dynamic> _hide = new hide.A();
// [error line 36, column 1, length 4]
-// [analyzer] STATIC_WARNING.NOT_A_TYPE
+// [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
// [cfe] 'hide' isn't a type.
// [error line 36, column 1]
// [cfe] Expected 0 type arguments.
of<dynamic> _of = new of.A();
// [error line 42, column 1, length 2]
-// [analyzer] STATIC_WARNING.NOT_A_TYPE
+// [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
// [cfe] 'of' isn't a type.
// [error line 42, column 1]
// [cfe] Expected 0 type arguments.
on<dynamic> _on = new on.A();
// [error line 48, column 1, length 2]
-// [analyzer] STATIC_WARNING.NOT_A_TYPE
+// [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
// [cfe] 'on' isn't a type.
// [error line 48, column 1]
// [cfe] Expected 0 type arguments.
show<dynamic> _show = new show.A();
// [error line 54, column 1, length 4]
-// [analyzer] STATIC_WARNING.NOT_A_TYPE
+// [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
// [cfe] 'show' isn't a type.
// [error line 54, column 1]
// [cfe] Expected 0 type arguments.
sync<dynamic> _sync = new sync.A();
// [error line 60, column 1, length 4]
-// [analyzer] STATIC_WARNING.NOT_A_TYPE
+// [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
// [cfe] 'sync' isn't a type.
// [error line 60, column 1]
// [cfe] Expected 0 type arguments.
yield<dynamic> _yield = new yield.A();
// [error line 66, column 1, length 5]
-// [analyzer] STATIC_WARNING.NOT_A_TYPE
+// [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
// [cfe] 'yield' isn't a type.
// [error line 66, column 1]
// [cfe] Expected 0 type arguments.
diff --git a/tests/language/if_null/assignment_behavior_test.dart b/tests/language/if_null/assignment_behavior_test.dart
index 6cdccc7..12da870 100644
--- a/tests/language/if_null/assignment_behavior_test.dart
+++ b/tests/language/if_null/assignment_behavior_test.dart
@@ -122,7 +122,7 @@
yGetValue = 1; check(1, () => v ??= y, ['$s.v', 'y', '$s.v=1']);
finalOne ??= null;
// ^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL
// [cfe] The setter 'finalOne' isn't defined for the class 'C'.
// ^^^^
// [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT
@@ -169,7 +169,7 @@
{ var l; yGetValue = 1; check(1, () => l ??= y, ['y']); Expect.equals(1, l); }
{ final l = 1; l ??= null; }
// ^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_LOCAL
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_LOCAL
// [cfe] Can't assign to the final variable 'l'.
// ^^^^
// [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT
@@ -177,7 +177,7 @@
// [analyzer] STATIC_WARNING.DEAD_NULL_AWARE_EXPRESSION
C ??= null;
//^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_TYPE
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_TYPE
// [cfe] Can't assign to a type literal.
// ^^^^
// [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT
diff --git a/tests/language/implicit_downcast_during/combiner_test.dart b/tests/language/implicit_downcast_during/combiner_test.dart
index 840d2e8..f497779 100644
--- a/tests/language/implicit_downcast_during/combiner_test.dart
+++ b/tests/language/implicit_downcast_during/combiner_test.dart
@@ -15,6 +15,6 @@
A a = new B();
c += a;
// ^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'A' can't be assigned to a variable of type 'B'.
}
diff --git a/tests/language/implicit_downcast_during/constructor_initializer_test.dart b/tests/language/implicit_downcast_during/constructor_initializer_test.dart
index 2013e9f..05501f5 100644
--- a/tests/language/implicit_downcast_during/constructor_initializer_test.dart
+++ b/tests/language/implicit_downcast_during/constructor_initializer_test.dart
@@ -10,7 +10,7 @@
B b;
C(A a) : b = a;
// ^
- // [analyzer] STATIC_WARNING.FIELD_INITIALIZER_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZER_NOT_ASSIGNABLE
// [cfe] A value of type 'A' can't be assigned to a variable of type 'B'.
}
diff --git a/tests/language/implicit_downcast_during/constructor_invocation_test.dart b/tests/language/implicit_downcast_during/constructor_invocation_test.dart
index 97de4ce..f1714be 100644
--- a/tests/language/implicit_downcast_during/constructor_invocation_test.dart
+++ b/tests/language/implicit_downcast_during/constructor_invocation_test.dart
@@ -14,6 +14,6 @@
A a = new B();
new C(a);
// ^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'A' can't be assigned to the parameter type 'B'.
}
diff --git a/tests/language/implicit_downcast_during/factory_constructor_invocation_test.dart b/tests/language/implicit_downcast_during/factory_constructor_invocation_test.dart
index 8e889a2..569c40c 100644
--- a/tests/language/implicit_downcast_during/factory_constructor_invocation_test.dart
+++ b/tests/language/implicit_downcast_during/factory_constructor_invocation_test.dart
@@ -15,6 +15,6 @@
A a = new B();
new C(a);
// ^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'A' can't be assigned to the parameter type 'B'.
}
diff --git a/tests/language/implicit_downcast_during/indexed_assignment_test.dart b/tests/language/implicit_downcast_during/indexed_assignment_test.dart
index 3f5ce05..65ae6a4 100644
--- a/tests/language/implicit_downcast_during/indexed_assignment_test.dart
+++ b/tests/language/implicit_downcast_during/indexed_assignment_test.dart
@@ -15,7 +15,7 @@
C c = new C();
c[a] = a;
//^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'A' can't be assigned to a variable of type 'B'.
// ^
// [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT
diff --git a/tests/language/implicit_downcast_during/indexed_compound_assignment_test.dart b/tests/language/implicit_downcast_during/indexed_compound_assignment_test.dart
index bf7a60b..b5c397c 100644
--- a/tests/language/implicit_downcast_during/indexed_compound_assignment_test.dart
+++ b/tests/language/implicit_downcast_during/indexed_compound_assignment_test.dart
@@ -22,10 +22,10 @@
D d = new D();
c[a] += 1;
//^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'A' can't be assigned to a variable of type 'B'.
d[a] += 1;
//^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'A' can't be assigned to a variable of type 'B'.
}
diff --git a/tests/language/implicit_downcast_during/indexed_get_test.dart b/tests/language/implicit_downcast_during/indexed_get_test.dart
index 790cbd4..ffeab4c 100644
--- a/tests/language/implicit_downcast_during/indexed_get_test.dart
+++ b/tests/language/implicit_downcast_during/indexed_get_test.dart
@@ -15,6 +15,6 @@
C c = new C();
c[a];
//^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'A' can't be assigned to a variable of type 'B'.
}
diff --git a/tests/language/implicit_downcast_during/indexed_if_null_assignment_test.dart b/tests/language/implicit_downcast_during/indexed_if_null_assignment_test.dart
index 5b7d5f1..2f439e8 100644
--- a/tests/language/implicit_downcast_during/indexed_if_null_assignment_test.dart
+++ b/tests/language/implicit_downcast_during/indexed_if_null_assignment_test.dart
@@ -28,18 +28,18 @@
E e = new E();
c[a] ??= 1;
//^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'A' can't be assigned to a variable of type 'B'.
d[a] ??= 1;
//^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'A' can't be assigned to a variable of type 'B'.
e[a] ??= 1;
//^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'A' can't be assigned to a variable of type 'B'.
c[a] ??= 1;
//^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'A' can't be assigned to a variable of type 'B'.
}
diff --git a/tests/language/implicit_downcast_during/invocation_test.dart b/tests/language/implicit_downcast_during/invocation_test.dart
index ed265bc..ecff881 100644
--- a/tests/language/implicit_downcast_during/invocation_test.dart
+++ b/tests/language/implicit_downcast_during/invocation_test.dart
@@ -12,6 +12,6 @@
A a = new B();
f(a);
//^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'A' can't be assigned to the parameter type 'B'.
}
diff --git a/tests/language/implicit_downcast_during/list_literal_test.dart b/tests/language/implicit_downcast_during/list_literal_test.dart
index 1edcd58..75d990d 100644
--- a/tests/language/implicit_downcast_during/list_literal_test.dart
+++ b/tests/language/implicit_downcast_during/list_literal_test.dart
@@ -10,6 +10,6 @@
A a = new B();
<B>[a];
// ^
- // [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'A' can't be assigned to a variable of type 'B'.
}
diff --git a/tests/language/implicit_downcast_during/map_literal_test.dart b/tests/language/implicit_downcast_during/map_literal_test.dart
index e86fae3..01ae141 100644
--- a/tests/language/implicit_downcast_during/map_literal_test.dart
+++ b/tests/language/implicit_downcast_during/map_literal_test.dart
@@ -10,10 +10,10 @@
A a = new B();
<B, Object>{a: 1};
// ^
- // [analyzer] STATIC_WARNING.MAP_KEY_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.MAP_KEY_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'A' can't be assigned to a variable of type 'B'.
<Object, B>{1: a};
// ^
- // [analyzer] STATIC_WARNING.MAP_VALUE_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.MAP_VALUE_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'A' can't be assigned to a variable of type 'B'.
}
diff --git a/tests/language/implicit_downcast_during/method_invocation_test.dart b/tests/language/implicit_downcast_during/method_invocation_test.dart
index 47e66ce..635da52 100644
--- a/tests/language/implicit_downcast_during/method_invocation_test.dart
+++ b/tests/language/implicit_downcast_during/method_invocation_test.dart
@@ -15,6 +15,6 @@
A a = new B();
c.f(a);
// ^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'A' can't be assigned to the parameter type 'B'.
}
diff --git a/tests/language/implicit_downcast_during/null_aware_method_invocation_test.dart b/tests/language/implicit_downcast_during/null_aware_method_invocation_test.dart
index 0b1d404..535c7db 100644
--- a/tests/language/implicit_downcast_during/null_aware_method_invocation_test.dart
+++ b/tests/language/implicit_downcast_during/null_aware_method_invocation_test.dart
@@ -15,6 +15,6 @@
A a = new B();
c?.f(a);
// ^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'A' can't be assigned to the parameter type 'B'.
}
diff --git a/tests/language/implicit_downcast_during/redirecting_initializer_test.dart b/tests/language/implicit_downcast_during/redirecting_initializer_test.dart
index bc6f7b3..595d51f 100644
--- a/tests/language/implicit_downcast_during/redirecting_initializer_test.dart
+++ b/tests/language/implicit_downcast_during/redirecting_initializer_test.dart
@@ -9,7 +9,7 @@
class C {
C(A a) : this._(a);
// ^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'A' can't be assigned to the parameter type 'B'.
C._(B b);
}
diff --git a/tests/language/implicit_downcast_during/static_method_invocation_test.dart b/tests/language/implicit_downcast_during/static_method_invocation_test.dart
index 4b6570c..62e6c2e 100644
--- a/tests/language/implicit_downcast_during/static_method_invocation_test.dart
+++ b/tests/language/implicit_downcast_during/static_method_invocation_test.dart
@@ -14,6 +14,6 @@
A a = new B();
C.f(a);
// ^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'A' can't be assigned to the parameter type 'B'.
}
diff --git a/tests/language/implicit_downcast_during/super_initializer_test.dart b/tests/language/implicit_downcast_during/super_initializer_test.dart
index 8931361..2cb7037 100644
--- a/tests/language/implicit_downcast_during/super_initializer_test.dart
+++ b/tests/language/implicit_downcast_during/super_initializer_test.dart
@@ -13,7 +13,7 @@
class C extends Base {
C(A a) : super(a);
// ^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'A' can't be assigned to the parameter type 'B'.
}
diff --git a/tests/language/implicit_downcast_during/super_method_invocation_test.dart b/tests/language/implicit_downcast_during/super_method_invocation_test.dart
index fe16df1..014422d 100644
--- a/tests/language/implicit_downcast_during/super_method_invocation_test.dart
+++ b/tests/language/implicit_downcast_during/super_method_invocation_test.dart
@@ -14,7 +14,7 @@
void f(A a) {
g(a);
//^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'A' can't be assigned to the parameter type 'B'.
}
}
diff --git a/tests/language/import/combinators2_test.dart b/tests/language/import/combinators2_test.dart
index 47a2db0..c1ee2fb 100644
--- a/tests/language/import/combinators2_test.dart
+++ b/tests/language/import/combinators2_test.dart
@@ -14,6 +14,6 @@
// Ugly is hidden.
print(ugly);
// ^^^^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'ugly'.
}
diff --git a/tests/language/initializing_formal/type_annotation_test.dart b/tests/language/initializing_formal/type_annotation_test.dart
index b15ad9a..6ca6548 100644
--- a/tests/language/initializing_formal/type_annotation_test.dart
+++ b/tests/language/initializing_formal/type_annotation_test.dart
@@ -10,14 +10,12 @@
C.subType(int this.a);
C.superType(dynamic this.a);
// ^^^^^^^^^^^^^^
- // [analyzer] COMPILE_TIME_ERROR.INVALID_PARAMETER_DECLARATION
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE
// ^
// [cfe] The type of parameter 'a', 'dynamic' is not a subtype of the corresponding field's type, 'num'.
C.unrelatedType(String this.a);
// ^^^^^^^^^^^^^
- // [analyzer] COMPILE_TIME_ERROR.INVALID_PARAMETER_DECLARATION
- // ^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE
// ^
// [cfe] The type of parameter 'a', 'String' is not a subtype of the corresponding field's type, 'num'.
}
diff --git a/tests/language/interface/static_method_test.dart b/tests/language/interface/static_method_test.dart
index b07e7b9..63783ef 100644
--- a/tests/language/interface/static_method_test.dart
+++ b/tests/language/interface/static_method_test.dart
@@ -12,6 +12,6 @@
main() {
A();
//^
-// [analyzer] STATIC_WARNING.INSTANTIATE_ABSTRACT_CLASS
+// [analyzer] COMPILE_TIME_ERROR.INSTANTIATE_ABSTRACT_CLASS
// [cfe] The class 'A' is abstract and can't be instantiated.
}
diff --git a/tests/language/is/isnot_malformed_type_test.dart b/tests/language/is/isnot_malformed_type_test.dart
index 11715e2..c81c644 100644
--- a/tests/language/is/isnot_malformed_type_test.dart
+++ b/tests/language/is/isnot_malformed_type_test.dart
@@ -8,7 +8,7 @@
// 'Baz' is not loaded, throws a type error on test.
return (obj is! Baz);
// ^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_UNDEFINED_NAME
// [cfe] 'Baz' isn't a type.
}
diff --git a/tests/language/is/malformed_type_test.dart b/tests/language/is/malformed_type_test.dart
index d54d4de..9628aa8 100644
--- a/tests/language/is/malformed_type_test.dart
+++ b/tests/language/is/malformed_type_test.dart
@@ -14,7 +14,7 @@
// malformed type.
if (e is Undefined) Expect.fail("unreachable");
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_UNDEFINED_NAME
// [cfe] 'Undefined' isn't a type.
}
@@ -23,7 +23,7 @@
// malformed type.
if (e as Undefined) Expect.fail("unreachable");
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CAST_TO_NON_TYPE
// [cfe] 'Undefined' isn't a type.
}
@@ -33,7 +33,7 @@
// Regression test for issue 16985.
if (e is Undefined && testEval(e)) Expect.fail("unreachable");
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_UNDEFINED_NAME
// [cfe] 'Undefined' isn't a type.
}
@@ -43,7 +43,7 @@
// Regression test for issue 16985.
if (e as Undefined && testEval(e)) Expect.fail("unreachable");
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CAST_TO_NON_TYPE
// [cfe] 'Undefined' isn't a type.
}
@@ -52,7 +52,7 @@
// runtime error is thrown.
if (testEval(e) is Undefined) Expect.fail("unreachable");
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_UNDEFINED_NAME
// [cfe] 'Undefined' isn't a type.
}
@@ -61,7 +61,7 @@
// runtime error is thrown.
if (testEval(e) as Undefined) Expect.fail("unreachable");
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CAST_TO_NON_TYPE
// [cfe] 'Undefined' isn't a type.
}
diff --git a/tests/language/is/not_class1_test.dart b/tests/language/is/not_class1_test.dart
index 6de8f8b..bb9a756 100644
--- a/tests/language/is/not_class1_test.dart
+++ b/tests/language/is/not_class1_test.dart
@@ -9,7 +9,7 @@
var a = A();
if (a is "A") return 0;
// [error line 10, column 12, length 0]
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_UNDEFINED_NAME
// [cfe] Expected ')' before this.
// ^^^
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
diff --git a/tests/language/is/not_class2_test.dart b/tests/language/is/not_class2_test.dart
index 9073117..9e82ec1 100644
--- a/tests/language/is/not_class2_test.dart
+++ b/tests/language/is/not_class2_test.dart
@@ -18,7 +18,7 @@
if (a is aa) {
// ^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_NON_TYPE
// [cfe] 'aa' isn't a type.
return 0;
}
diff --git a/tests/language/label/label8_test.dart b/tests/language/label/label8_test.dart
index e17e3b1..89c6efb6 100644
--- a/tests/language/label/label8_test.dart
+++ b/tests/language/label/label8_test.dart
@@ -13,7 +13,7 @@
{
case 111:
// ^^^^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Expected ';' after this.
// ^^^^
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
diff --git a/tests/language/list/literal1_test.dart b/tests/language/list/literal1_test.dart
index f8db7b2..cd54906 100644
--- a/tests/language/list/literal1_test.dart
+++ b/tests/language/list/literal1_test.dart
@@ -9,9 +9,9 @@
<String>
[0, 1];
// ^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'int' can't be assigned to a variable of type 'String'.
// ^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'int' can't be assigned to a variable of type 'String'.
}
diff --git a/tests/language/malformed/malformed_test.dart b/tests/language/malformed/malformed_test.dart
index 54b6a7c..b8345e5 100644
--- a/tests/language/malformed/malformed_test.dart
+++ b/tests/language/malformed/malformed_test.dart
@@ -8,20 +8,20 @@
checkIsUnresolved(var v) {
v is Unresolved;
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_UNDEFINED_NAME
// [cfe] 'Unresolved' isn't a type.
v is Unresolved<int>;
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_UNDEFINED_NAME
// [cfe] 'Unresolved' isn't a type.
v is prefix.Unresolved;
// ^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_UNDEFINED_NAME
// ^
// [cfe] 'Unresolved' isn't a type.
v is prefix.Unresolved<int>;
// ^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_UNDEFINED_NAME
// ^
// [cfe] 'Unresolved' isn't a type.
}
@@ -54,20 +54,20 @@
checkAsUnresolved(var v) {
v as Unresolved;
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CAST_TO_NON_TYPE
// [cfe] 'Unresolved' isn't a type.
v as Unresolved<int>;
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CAST_TO_NON_TYPE
// [cfe] 'Unresolved' isn't a type.
v as prefix.Unresolved;
// ^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CAST_TO_NON_TYPE
// ^
// [cfe] 'Unresolved' isn't a type.
v as prefix.Unresolved<int>;
// ^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CAST_TO_NON_TYPE
// ^
// [cfe] 'Unresolved' isn't a type.
}
@@ -105,11 +105,11 @@
new undeclared_prefix.Unresolved();
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'undeclared_prefix.Unresolved'.
new undeclared_prefix.Unresolved<int>();
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'undeclared_prefix.Unresolved'.
try {
@@ -117,7 +117,7 @@
}
on Unresolved
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.NON_TYPE_IN_CATCH_CLAUSE
+ // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_IN_CATCH_CLAUSE
// [cfe] 'Unresolved' isn't a type.
catch (e) {
}
@@ -127,7 +127,7 @@
}
on Unresolved<int>
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.NON_TYPE_IN_CATCH_CLAUSE
+ // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_IN_CATCH_CLAUSE
// [cfe] 'Unresolved' isn't a type.
catch (e) {
}
@@ -137,7 +137,7 @@
}
on prefix.Unresolved
// ^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.NON_TYPE_IN_CATCH_CLAUSE
+ // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_IN_CATCH_CLAUSE
// ^
// [cfe] 'Unresolved' isn't a type.
catch (e) {
@@ -148,7 +148,7 @@
}
on prefix.Unresolved<int>
// ^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.NON_TYPE_IN_CATCH_CLAUSE
+ // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_IN_CATCH_CLAUSE
// ^
// [cfe] 'Unresolved' isn't a type.
catch (e) {
@@ -159,7 +159,7 @@
}
on undeclared_prefix.Unresolved<int>
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.NON_TYPE_IN_CATCH_CLAUSE
+ // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_IN_CATCH_CLAUSE
// [cfe] 'undeclared_prefix.Unresolved' can't be used as a type because 'undeclared_prefix' isn't defined.
catch (e) {
}
diff --git a/tests/language/map/literal1_test.dart b/tests/language/map/literal1_test.dart
index 71c4e8e..49aa5fa 100644
--- a/tests/language/map/literal1_test.dart
+++ b/tests/language/map/literal1_test.dart
@@ -9,6 +9,6 @@
<String, String>
{"a": 0};
// ^
- // [analyzer] STATIC_WARNING.MAP_VALUE_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.MAP_VALUE_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'int' can't be assigned to a variable of type 'String'.
}
diff --git a/tests/language/method/not_found_test.dart b/tests/language/method/not_found_test.dart
index 4755cba..883cd6f 100644
--- a/tests/language/method/not_found_test.dart
+++ b/tests/language/method/not_found_test.dart
@@ -7,7 +7,7 @@
// [cfe] The non-abstract class 'A' is missing implementations for these members:
B();
//^^^^
-// [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
static const field = const B();
// ^
// [analyzer] COMPILE_TIME_ERROR.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER
diff --git a/tests/language/mixin/illegal_constructor_test.dart b/tests/language/mixin/illegal_constructor_test.dart
index bf84e07..864889f 100644
--- a/tests/language/mixin/illegal_constructor_test.dart
+++ b/tests/language/mixin/illegal_constructor_test.dart
@@ -102,7 +102,7 @@
// [cfe] Too many positional arguments: 0 allowed, but 3 found.
new C0.named();
// ^^^^^
- // [analyzer] STATIC_WARNING.NEW_WITH_UNDEFINED_CONSTRUCTOR
+ // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR
// [cfe] Method not found: 'C0.named'.
new D0(1,2,3);
// ^^^^^^^
@@ -110,6 +110,6 @@
// [cfe] Too many positional arguments: 0 allowed, but 3 found.
new D0.named();
// ^^^^^
- // [analyzer] STATIC_WARNING.NEW_WITH_UNDEFINED_CONSTRUCTOR
+ // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR
// [cfe] Method not found: 'D0.named'.
}
diff --git a/tests/language/mixin/method_override_test.dart b/tests/language/mixin/method_override_test.dart
index 01428b6..166599e 100644
--- a/tests/language/mixin/method_override_test.dart
+++ b/tests/language/mixin/method_override_test.dart
@@ -302,7 +302,7 @@
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
class G5 = GTTnum with CII;
// ^^
-// [analyzer] STATIC_WARNING.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
// [cfe] The mixin application class 'G5' introduces an erroneous override of 'id'.
// ^
// [cfe] The non-abstract class 'G5' is missing implementations for these members:
diff --git a/tests/language/new/create_unresolved_type_test.dart b/tests/language/new/create_unresolved_type_test.dart
index 6d215ab..16fb7a6 100644
--- a/tests/language/new/create_unresolved_type_test.dart
+++ b/tests/language/new/create_unresolved_type_test.dart
@@ -5,6 +5,6 @@
main() {
new F<int>();
// ^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'F'.
}
diff --git a/tests/language/new/expression_type_args_test.dart b/tests/language/new/expression_type_args_test.dart
index b32f0e1..da303e3 100644
--- a/tests/language/new/expression_type_args_test.dart
+++ b/tests/language/new/expression_type_args_test.dart
@@ -7,20 +7,20 @@
// Can't instantiate type parameter (within static or instance method).
m1() => new T();
// ^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'T'.
static m2() => new T();
// ^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'T'.
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
// OK when used within instance method, but not in static method.
m3() => new A<T>();
static m4() => new A<T>();
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
// [cfe] Type variables can't be used in static members.
}
diff --git a/tests/language/new/prefix_test.dart b/tests/language/new/prefix_test.dart
index bef0d69..8e5c7bc 100644
--- a/tests/language/new/prefix_test.dart
+++ b/tests/language/new/prefix_test.dart
@@ -7,6 +7,6 @@
main() {
return new prefix();
// ^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'prefix'.
}
diff --git a/tests/language/nnbd/mixed_inheritance/legacy_resolves_conflict_3_error_test.dart b/tests/language/nnbd/mixed_inheritance/legacy_resolves_conflict_3_error_test.dart
index bda8280..e429b2f 100644
--- a/tests/language/nnbd/mixed_inheritance/legacy_resolves_conflict_3_error_test.dart
+++ b/tests/language/nnbd/mixed_inheritance/legacy_resolves_conflict_3_error_test.dart
@@ -232,62 +232,62 @@
List<List<int? Function(int?)>> xsBq = [
DwB0().a,
// ^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
DiBO0().a,
// ^^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
DwB1().a,
// ^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
DiBO1().a,
// ^^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
DwB2().a,
// ^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
DiBO2().a,
// ^^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
DwB3().a,
// ^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
DiBO3().a,
// ^^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
DwB4().a,
// ^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
DiBO4().a,
// ^^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
DwB5().a,
// ^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
DiBO5().a,
// ^^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
];
@@ -295,62 +295,62 @@
List<List<int Function(int)>> xsB = [
DwBq0().a,
// ^^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
DiBqOq0().a,
// ^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
DwBq1().a,
// ^^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
DiBqOq1().a,
// ^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
DwBq2().a,
// ^^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
DiBqOq2().a,
// ^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
DwBq3().a,
// ^^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
DiBqOq3().a,
// ^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
DwBq4().a,
// ^^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
DiBqOq4().a,
// ^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
DwBq5().a,
// ^^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
DiBqOq5().a,
// ^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
];
}
diff --git a/tests/language/nnbd/never/never_null_assignability_error_test.dart b/tests/language/nnbd/never/never_null_assignability_error_test.dart
index 5c745a6..a598dfd 100644
--- a/tests/language/nnbd/never/never_null_assignability_error_test.dart
+++ b/tests/language/nnbd/never/never_null_assignability_error_test.dart
@@ -27,7 +27,7 @@
{
takesNever(nil);
// ^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'Null' can't be assigned to the parameter type 'Never'.
takesNever(never);
takesNever(3 as dynamic);
@@ -39,7 +39,7 @@
takesInt(3);
takesInt(nil);
// ^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'Null' can't be assigned to the parameter type 'int'.
takesInt(nil as dynamic);
(takesInt as dynamic)(nil);
@@ -51,7 +51,7 @@
takesObject(3);
takesObject(nil);
// ^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'Null' can't be assigned to the parameter type 'Object'.
takesObject(nil as dynamic);
(takesObject as dynamic)(nil);
@@ -73,17 +73,17 @@
applyTakesNull(takesNull, nil);
applyTakesNull(takesNever, nil);
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'void Function(Never)' can't be assigned to the parameter type 'void Function(Null)'.
applyTakesNull(takesAny, nil);
applyTakesNull(takesInt, nil);
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'void Function(int)' can't be assigned to the parameter type 'void Function(Null)'.
applyTakesNull(takesObject, nil);
// ^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'void Function(Object)' can't be assigned to the parameter type 'void Function(Null)'.
}
@@ -94,15 +94,15 @@
applyTakesNull(takesNull, 3);
applyTakesNull(takesNever, 3);
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'void Function(Never)' can't be assigned to the parameter type 'void Function(Null)'.
applyTakesNull(takesInt, 3);
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'void Function(int)' can't be assigned to the parameter type 'void Function(Null)'.
applyTakesNull(takesObject, 3);
// ^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'void Function(Object)' can't be assigned to the parameter type 'void Function(Null)'.
applyTakesNull(takesAny, 3);
}
@@ -138,16 +138,16 @@
applyTakesNullDynamically(takesNull, nil);
applyTakesNullDynamically(takesNever, nil);
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'void Function(Never)' can't be assigned to the parameter type 'void Function(Null)'.
applyTakesNullDynamically(takesAny, nil);
applyTakesNullDynamically(takesInt, nil);
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'void Function(int)' can't be assigned to the parameter type 'void Function(Null)'.
applyTakesNullDynamically(takesObject, nil);
// ^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'void Function(Object)' can't be assigned to the parameter type 'void Function(Null)'.
}
@@ -158,19 +158,19 @@
applyTakesNullDynamically(takesNull, 3);
applyTakesNullDynamically(takesNever, 3);
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'void Function(Never)' can't be assigned to the parameter type 'void Function(Null)'.
applyTakesNullDynamically(takesInt, 3);
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'void Function(int)' can't be assigned to the parameter type 'void Function(Null)'.
applyTakesNullDynamically(takesInt, "hello");
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'void Function(int)' can't be assigned to the parameter type 'void Function(Null)'.
applyTakesNullDynamically(takesObject, 3);
// ^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'void Function(Object)' can't be assigned to the parameter type 'void Function(Null)'.
applyTakesNullDynamically(takesAny, 3);
}
diff --git a/tests/language/nnbd/resolution/null_aware_subscript_produces_nullable_type_test.dart b/tests/language/nnbd/resolution/null_aware_subscript_produces_nullable_type_test.dart
index 43472fd..e7bf5b2 100644
--- a/tests/language/nnbd/resolution/null_aware_subscript_produces_nullable_type_test.dart
+++ b/tests/language/nnbd/resolution/null_aware_subscript_produces_nullable_type_test.dart
@@ -19,41 +19,41 @@
void f2(NotGeneric? x) {
x?[0] + 1;
//^^^^^
-// [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] unspecified
x?[0] = 1;
useNonNullable(x?[0] = 1);
// ^^^^^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
x?[0] += 1;
useNonNullable(x?[0] += 1);
// ^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
x?[0]++;
useNonNullable(x?[0]++);
// ^^^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
++x?[0];
useNonNullable(++x?[0]);
// ^^^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
}
void f3<T extends num>(Generic<T>? x) {
x?[0] + 1;
//^^^^^
-// [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] unspecified
}
void f4<T extends num>(Generic<T?> x) {
x[0] + 1;
//^^^^
-// [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] unspecified
}
diff --git a/tests/language/nnbd/resolution/question_question_lub_test.dart b/tests/language/nnbd/resolution/question_question_lub_test.dart
index 830c848..73dab4a 100644
--- a/tests/language/nnbd/resolution/question_question_lub_test.dart
+++ b/tests/language/nnbd/resolution/question_question_lub_test.dart
@@ -16,13 +16,13 @@
(nullableInt ?? nonNullInt) + 1;
(nullableInt ?? nullableInt) + 1;
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] unspecified
(nonNullInt ?? nullableInt) + 1;
// ^^^^^^^^^^^
// [analyzer] STATIC_WARNING.DEAD_NULL_AWARE_EXPRESSION
//^^^^^^^^^^^^^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] unspecified
(nonNullInt ?? nonNullInt) + 1;
// ^^^^^^^^^^
diff --git a/tests/language/nnbd/static_errors/super_equals_disallows_non_matching_type_error_test.dart b/tests/language/nnbd/static_errors/super_equals_disallows_non_matching_type_error_test.dart
index d0e52ea..4366065 100644
--- a/tests/language/nnbd/static_errors/super_equals_disallows_non_matching_type_error_test.dart
+++ b/tests/language/nnbd/static_errors/super_equals_disallows_non_matching_type_error_test.dart
@@ -27,11 +27,11 @@
String? stringQuestion = 'foo';
super == string;
// ^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'String' can't be assigned to the parameter type 'num?'.
super == stringQuestion;
// ^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'String?' can't be assigned to the parameter type 'num?'.
}
}
diff --git a/tests/language/null_aware/assignment_test.dart b/tests/language/null_aware/assignment_test.dart
index 4b5f5de..3627427 100644
--- a/tests/language/null_aware/assignment_test.dart
+++ b/tests/language/null_aware/assignment_test.dart
@@ -125,7 +125,7 @@
// ^^
// [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
// ^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'C?' can't be assigned to a variable of type 'int'.
{ D d = new D(new E()); H? h = (d?.v += 1); }
// ^^^^^^^^^^^
@@ -136,11 +136,11 @@
// [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
{ D.staticE = new E(); F? f = (D?.staticE += nullC()); }
// ^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'C?' can't be assigned to a variable of type 'int'.
{ h.D.staticE = new h.E(); h.F? f = (h.D?.staticE += h.nullC()); }
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'C?' can't be assigned to a variable of type 'int'.
{ D.staticE = new E(); H? h = (D?.staticE += 1); }
// ^^^^^^^^^^^^^^^^^
diff --git a/tests/language/null_aware/invocation_test.dart b/tests/language/null_aware/invocation_test.dart
index 4131cdf..58f788b 100644
--- a/tests/language/null_aware/invocation_test.dart
+++ b/tests/language/null_aware/invocation_test.dart
@@ -72,7 +72,7 @@
// [cfe] The method 'f' isn't defined for the class 'B'.
{ int? i = 1; Expect.equals(null, nullC()?.f(i)); }
// ^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'int?' can't be assigned to the parameter type 'dynamic Function()?'.
// '?.' can't be used to access toplevel functions in libraries imported via
diff --git a/tests/language/number/identifier_test.dart b/tests/language/number/identifier_test.dart
index ce91927..7b575c5 100644
--- a/tests/language/number/identifier_test.dart
+++ b/tests/language/number/identifier_test.dart
@@ -10,32 +10,32 @@
// ^^^
// [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
// ^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_NON_TYPE
Expect.equals(2, 2 as int);
// ^^^
// [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
// ^^^
- // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CAST_TO_NON_TYPE
Expect.isTrue(-2 is int);
// ^^^
// [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
// ^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_NON_TYPE
Expect.equals(-2, -2 as int);
// ^^^
// [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
// ^^^
- // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CAST_TO_NON_TYPE
Expect.isTrue(0x10 is int);
// ^^^
// [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
// ^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_NON_TYPE
Expect.isTrue(-0x10 is int);
// ^^^
// [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
// ^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_NON_TYPE
// "a" will be part of hex literal, the following "s" is an error.
0x10as int;
@@ -75,14 +75,14 @@
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
// [cfe] Expected ';' after this.
// ^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'd'.
1D;
//^
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
// [cfe] Expected ';' after this.
// ^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'D'.
Expect.throwsNoSuchMethodError(() => 1.d+2);
// ^
@@ -97,14 +97,14 @@
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
// [cfe] Expected ';' after this.
// ^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'd'.
1.1D;
//^^^
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
// [cfe] Expected ';' after this.
// ^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'D'.
1e;
//^
@@ -116,6 +116,6 @@
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
// [cfe] Expected ';' after this.
// ^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'x'.
}
diff --git a/tests/language/operator/equality_static_test.dart b/tests/language/operator/equality_static_test.dart
index e1508b6..d2de3fb 100644
--- a/tests/language/operator/equality_static_test.dart
+++ b/tests/language/operator/equality_static_test.dart
@@ -56,7 +56,7 @@
null == voidListVar;
null == voidVar;
// ^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
true == null;
@@ -73,7 +73,7 @@
true == voidListVar;
true == voidVar;
// ^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
<int>{} == null;
@@ -90,7 +90,7 @@
<int>{} == voidListVar;
<int>{} == voidVar;
// ^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
numVar == null;
@@ -107,7 +107,7 @@
numVar == voidListVar;
numVar == voidVar;
// ^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
aVar == null;
@@ -124,51 +124,51 @@
aVar == voidListVar;
aVar == voidVar;
// ^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
covar1Var == null;
covar1Var == true;
// ^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1Var == <int>{};
// ^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1Var == numVar;
// ^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1Var == aVar;
// ^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1Var == covar1Var;
covar1Var == aNullableVar;
// ^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1Var == covar1NullableVar;
covar1Var == futureOrNullableIntVar;
// ^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1Var == futureOrCovar1Var;
// ^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1Var == const AbstractCovar2();
// ^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1Var == voidListVar;
// ^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1Var == voidVar;
// ^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
aNullableVar == null;
@@ -185,51 +185,51 @@
aNullableVar == voidListVar;
aNullableVar == voidVar;
// ^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
covar1NullableVar == null;
covar1NullableVar == true;
// ^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1NullableVar == <int>{};
// ^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1NullableVar == numVar;
// ^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1NullableVar == aVar;
// ^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1NullableVar == covar1Var;
covar1NullableVar == aNullableVar;
// ^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1NullableVar == covar1NullableVar;
covar1NullableVar == futureOrNullableIntVar;
// ^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1NullableVar == futureOrCovar1Var;
// ^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1NullableVar == const AbstractCovar2();
// ^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1NullableVar == voidListVar;
// ^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1NullableVar == voidVar;
// ^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
futureOrNullableIntVar == null;
@@ -246,7 +246,7 @@
futureOrNullableIntVar == voidListVar;
futureOrNullableIntVar == voidVar;
// ^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
futureOrCovar1Var == null;
@@ -263,54 +263,54 @@
futureOrCovar1Var == voidListVar;
futureOrCovar1Var == voidVar;
// ^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
const AbstractCovar2() == null;
const AbstractCovar2() == true;
// ^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
const AbstractCovar2() == <int>{};
// ^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
const AbstractCovar2() == numVar;
// ^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
const AbstractCovar2() == aVar;
// ^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
const AbstractCovar2() == covar1Var;
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
const AbstractCovar2() == aNullableVar;
// ^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
const AbstractCovar2() == covar1NullableVar;
// ^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
const AbstractCovar2() == futureOrNullableIntVar;
// ^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
const AbstractCovar2() == futureOrCovar1Var;
// ^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
const AbstractCovar2() == const AbstractCovar2();
const AbstractCovar2() == voidListVar;
// ^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
const AbstractCovar2() == voidVar;
// ^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
voidListVar == null;
@@ -327,59 +327,59 @@
voidListVar == voidListVar;
voidListVar == voidVar;
// ^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
voidVar == null;
//^^^^^^^
-// [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+// [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] unspecified
voidVar == true;
//^^^^^^^
-// [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+// [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] unspecified
voidVar == <int>{};
//^^^^^^^
-// [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+// [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] unspecified
voidVar == numVar;
//^^^^^^^
-// [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+// [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] unspecified
voidVar == aVar;
//^^^^^^^
-// [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+// [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] unspecified
voidVar == covar1Var;
//^^^^^^^
-// [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+// [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] unspecified
voidVar == aNullableVar;
//^^^^^^^
-// [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+// [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] unspecified
voidVar == covar1NullableVar;
//^^^^^^^
-// [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+// [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] unspecified
voidVar == futureOrNullableIntVar;
//^^^^^^^
-// [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+// [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] unspecified
voidVar == futureOrCovar1Var;
//^^^^^^^
-// [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+// [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] unspecified
voidVar == voidListVar;
//^^^^^^^
-// [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+// [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] unspecified
voidVar == voidVar;
//^^^^^^^
-// [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+// [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
// ^^^^^^^
-// [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+// [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
void fun<X extends Covar1, Y extends Covar1?, Z extends FutureOr<Covar1>>(
@@ -387,89 +387,89 @@
covar1Var == null;
covar1Var == true;
// ^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1Var == <int>{};
// ^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1Var == numVar;
// ^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1Var == aVar;
// ^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1Var == covar1Var;
covar1Var == aNullableVar;
// ^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1Var == covar1NullableVar;
covar1Var == futureOrNullableIntVar;
// ^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1Var == futureOrCovar1Var;
// ^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1Var == const AbstractCovar2();
// ^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1Var == voidListVar;
// ^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1Var == voidVar;
// ^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
covar1NullableVar == null;
covar1NullableVar == true;
// ^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1NullableVar == <int>{};
// ^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1NullableVar == numVar;
// ^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1NullableVar == aVar;
// ^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1NullableVar == covar1Var;
covar1NullableVar == aNullableVar;
// ^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1NullableVar == covar1NullableVar;
covar1NullableVar == futureOrNullableIntVar;
// ^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1NullableVar == futureOrCovar1Var;
// ^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1NullableVar == const AbstractCovar2();
// ^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1NullableVar == voidListVar;
// ^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] unspecified
covar1NullableVar == voidVar;
// ^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
futureOrCovar1Var == null;
@@ -486,7 +486,7 @@
futureOrCovar1Var == voidListVar;
futureOrCovar1Var == voidVar;
// ^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
}
}
diff --git a/tests/language/operator/invalid_assignment_to_postfix_increment_test.dart b/tests/language/operator/invalid_assignment_to_postfix_increment_test.dart
index b26b284..751c947 100644
--- a/tests/language/operator/invalid_assignment_to_postfix_increment_test.dart
+++ b/tests/language/operator/invalid_assignment_to_postfix_increment_test.dart
@@ -19,7 +19,7 @@
// [cfe] Illegal assignment to non-assignable expression.
z++ ??= y;
//^
-// [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+// [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
//^^^
// [analyzer] SYNTACTIC_ERROR.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE
//^^^
diff --git a/tests/language/operator/invalid_operators_test.dart b/tests/language/operator/invalid_operators_test.dart
index 1a3b359..52eae80 100644
--- a/tests/language/operator/invalid_operators_test.dart
+++ b/tests/language/operator/invalid_operators_test.dart
@@ -674,7 +674,7 @@
class Operators8 {
/*space*/ int operator []=(a, b) => 1;
// ^^^
- // [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_OPERATOR
+ // [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_OPERATOR
// [cfe] unspecified
}
diff --git a/tests/language/operator/number_operator_error_test.dart b/tests/language/operator/number_operator_error_test.dart
index 7c57fc0..fd2ea6e 100644
--- a/tests/language/operator/number_operator_error_test.dart
+++ b/tests/language/operator/number_operator_error_test.dart
@@ -30,7 +30,7 @@
/* indent */ i + "string";
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'String' can't be assigned to a variable of type 'num'.
i += d;
@@ -193,19 +193,19 @@
context<D>(i + td); // Type of expression is `double`, not `D`.
// ^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// ^
// [cfe] A value of type 'double' can't be assigned to a variable of type 'D'.
context<D>(n + td); // Type of expression is `double`, not `D`.
// ^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// ^
// [cfe] A value of type 'double' can't be assigned to a variable of type 'D'.
context<D>(1.0 + td); // Type of expression is `double`, not `D`.
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// ^
// [cfe] The argument type 'double' can't be assigned to the parameter type 'D'.
diff --git a/tests/language/optimize/inferrer_constructor5_test.dart b/tests/language/optimize/inferrer_constructor5_test.dart
index 7221fea..186b3c9 100644
--- a/tests/language/optimize/inferrer_constructor5_test.dart
+++ b/tests/language/optimize/inferrer_constructor5_test.dart
@@ -8,7 +8,7 @@
A() {
print(field + 42);
// ^^^^^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'field' isn't defined for the class 'A'.
}
}
diff --git a/tests/language/override/inheritance_abstract_test.dart b/tests/language/override/inheritance_abstract_test.dart
index 9218fab..5808673 100644
--- a/tests/language/override/inheritance_abstract_test.dart
+++ b/tests/language/override/inheritance_abstract_test.dart
@@ -46,18 +46,18 @@
class Class extends A implements I, J {
// ^^^^^
-// [analyzer] STATIC_WARNING.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
// [cfe] The non-abstract class 'Class' is missing implementations for these members:
method1() {}
method2();
//^^^^^^^^^^
-// [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
get getter3;
//^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
set setter4(_);
//^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
method5() {}
method6([a]) {}
set field13(_) {}
diff --git a/tests/language/parameter/named_type_test.dart b/tests/language/parameter/named_type_test.dart
index f246025..8ae1f6c 100644
--- a/tests/language/parameter/named_type_test.dart
+++ b/tests/language/parameter/named_type_test.dart
@@ -23,14 +23,14 @@
acceptFunNumOptBool(funNumOptBool);
acceptFunNumOptBool(funNum);
// ^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'void Function(num)' can't be assigned to the parameter type 'void Function(num, {bool b})'.
acceptFunNumOptBool(funNumBool);
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'void Function(num, bool)' can't be assigned to the parameter type 'void Function(num, {bool b})'.
acceptFunNumOptBool(funNumOptBoolX);
// ^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'void Function(num, {bool x})' can't be assigned to the parameter type 'void Function(num, {bool b})'.
}
diff --git a/tests/language/parameter/positional_type_test.dart b/tests/language/parameter/positional_type_test.dart
index 5920e68..d43cd41 100644
--- a/tests/language/parameter/positional_type_test.dart
+++ b/tests/language/parameter/positional_type_test.dart
@@ -20,10 +20,10 @@
acceptFunNumOptBool(funNumOptBoolX);
acceptFunNumOptBool(funNum);
// ^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'void Function(num)' can't be assigned to the parameter type 'void Function(num, [bool])'.
acceptFunNumOptBool(funNumBool);
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'void Function(num, bool)' can't be assigned to the parameter type 'void Function(num, [bool])'.
}
diff --git a/tests/language/prefix/import_collision_test.dart b/tests/language/prefix/import_collision_test.dart
index 6ad50cb..0f561f8 100644
--- a/tests/language/prefix/import_collision_test.dart
+++ b/tests/language/prefix/import_collision_test.dart
@@ -11,6 +11,6 @@
main() {
lib2.foo = 1;
// ^^^
- // [analyzer] STATIC_WARNING.AMBIGUOUS_IMPORT
+ // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_IMPORT
// [cfe] Setter not found: 'foo'.
}
diff --git a/tests/language/prefix/transitive_import_prefix_test.dart b/tests/language/prefix/transitive_import_prefix_test.dart
index 34c3020..3365f2f 100644
--- a/tests/language/prefix/transitive_import_prefix_test.dart
+++ b/tests/language/prefix/transitive_import_prefix_test.dart
@@ -7,14 +7,14 @@
// Library prefixes in the imported libraries should not be visible here.
new lib11.Library11(1);
// ^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'lib11.Library11'.
lib11.Library11.static_func();
//^^^^^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'lib11'.
lib11.Library11.static_fld;
//^^^^^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'lib11'.
}
diff --git a/tests/language/prefix/transitive_import_test.dart b/tests/language/prefix/transitive_import_test.dart
index 256894c..582b3e2 100644
--- a/tests/language/prefix/transitive_import_test.dart
+++ b/tests/language/prefix/transitive_import_test.dart
@@ -10,7 +10,7 @@
// Class should not be visible.
new lib12.Library11(1);
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'Library11'.
// Variable should not be visible.
diff --git a/tests/language/private/access_test.dart b/tests/language/private/access_test.dart
index 016e4dc..cbfef18 100644
--- a/tests/language/private/access_test.dart
+++ b/tests/language/private/access_test.dart
@@ -19,7 +19,7 @@
// [analyzer] STATIC_TYPE_WARNING.UNDEFINED_FUNCTION
new _Class();
// ^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: '_Class'.
private._Class();
//^
@@ -28,10 +28,10 @@
// [analyzer] STATIC_TYPE_WARNING.UNDEFINED_FUNCTION
new Class._constructor();
// ^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.NEW_WITH_UNDEFINED_CONSTRUCTOR
+ // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR
// [cfe] Method not found: 'Class._constructor'.
new private.Class._constructor();
// ^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.NEW_WITH_UNDEFINED_CONSTRUCTOR
+ // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR
// [cfe] Method not found: 'Class._constructor'.
}
diff --git a/tests/language/private/member1_test.dart b/tests/language/private/member1_test.dart
index a542e48..415bd25 100644
--- a/tests/language/private/member1_test.dart
+++ b/tests/language/private/member1_test.dart
@@ -10,7 +10,7 @@
test() {
_instanceField = true;
// ^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The setter '_instanceField' isn't defined for the class 'Test'.
}
}
diff --git a/tests/language/private/member2_test.dart b/tests/language/private/member2_test.dart
index 7c86d12..6851ad7 100644
--- a/tests/language/private/member2_test.dart
+++ b/tests/language/private/member2_test.dart
@@ -10,7 +10,7 @@
test() {
_staticField = true;
// ^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The setter '_staticField' isn't defined for the class 'Test'.
}
}
diff --git a/tests/language/redirecting/factory_default_values_test.dart b/tests/language/redirecting/factory_default_values_test.dart
index 0b24876..84a7d17 100644
--- a/tests/language/redirecting/factory_default_values_test.dart
+++ b/tests/language/redirecting/factory_default_values_test.dart
@@ -20,7 +20,7 @@
// ^
// [cfe] Can't have a default value here because any default values of 'A' would be used instead.
// ^
- // [analyzer] STATIC_WARNING.REDIRECT_TO_INVALID_FUNCTION_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_INVALID_FUNCTION_TYPE
// [cfe] The constructor function type 'A Function(int, [int])' isn't a subtype of 'A Function(int, {int b})'.
int a;
diff --git a/tests/language/redirecting/factory_incompatible_signature_test.dart b/tests/language/redirecting/factory_incompatible_signature_test.dart
index 7a77f18..7c0253a 100644
--- a/tests/language/redirecting/factory_incompatible_signature_test.dart
+++ b/tests/language/redirecting/factory_incompatible_signature_test.dart
@@ -11,7 +11,7 @@
A(a, b);
factory A.f() = A;
// ^
- // [analyzer] STATIC_WARNING.REDIRECT_TO_INVALID_FUNCTION_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_INVALID_FUNCTION_TYPE
// [cfe] The constructor function type 'A Function(dynamic, dynamic)' isn't a subtype of 'A Function()'.
}
diff --git a/tests/language/regress/regress15606_test.dart b/tests/language/regress/regress15606_test.dart
index 3891202..f367e9e 100644
--- a/tests/language/regress/regress15606_test.dart
+++ b/tests/language/regress/regress15606_test.dart
@@ -15,7 +15,7 @@
var foo =
Unresolved.
// ^^^^^^^^^^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'Unresolved'.
bar(
// Make dart2js generate a call to setRuntimeTypeInfo.
diff --git a/tests/language/regress/regress21793_test.dart b/tests/language/regress/regress21793_test.dart
index 26d9ff6d..e4fec2e 100644
--- a/tests/language/regress/regress21793_test.dart
+++ b/tests/language/regress/regress21793_test.dart
@@ -15,6 +15,6 @@
main() {
print(new A()(499));
// ^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'A'.
}
diff --git a/tests/language/regress/regress23408a_test.dart b/tests/language/regress/regress23408a_test.dart
index b8fd7a4..453d161 100644
--- a/tests/language/regress/regress23408a_test.dart
+++ b/tests/language/regress/regress23408a_test.dart
@@ -16,7 +16,7 @@
C();
factory C.l() = A<lib.K>;
// ^^^^^
- // [analyzer] STATIC_WARNING.TYPE_ANNOTATION_DEFERRED_CLASS
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_ANNOTATION_DEFERRED_CLASS
// [cfe] unspecified
get t => null;
}
diff --git a/tests/language/regress/regress31596_super_test.dart b/tests/language/regress/regress31596_super_test.dart
index 636ef98..75a8105 100644
--- a/tests/language/regress/regress31596_super_test.dart
+++ b/tests/language/regress/regress31596_super_test.dart
@@ -39,7 +39,7 @@
// not ok since B2 is not assignable to B
super.f(b2);
// ^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'B2?' can't be assigned to the parameter type 'B?'.
var superF = super.f; // Inferred static type: void Function(B)
@@ -50,7 +50,7 @@
// not ok since B2 is not assignable to B
superF(b2);
// ^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'B2?' can't be assigned to the parameter type 'B?'.
// Should pass since superF's runtime type is void Function(Object)
diff --git a/tests/language/regress/regress31596_test.dart b/tests/language/regress/regress31596_test.dart
index 44b8c8c..e7b9ee0 100644
--- a/tests/language/regress/regress31596_test.dart
+++ b/tests/language/regress/regress31596_test.dart
@@ -36,7 +36,7 @@
B2? b2 = null;
d.f(b2, b);
// ^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'B2?' can't be assigned to the parameter type 'B?'.
i.f(b2, b); // Ok since B2 assignable to A
void Function(Object, B) g = d.f as dynamic; // Ok; D.f reified as (Object, B) -> void
diff --git a/tests/language/regress/regress34488_test.dart b/tests/language/regress/regress34488_test.dart
index ca3ac7b..d41f9407 100644
--- a/tests/language/regress/regress34488_test.dart
+++ b/tests/language/regress/regress34488_test.dart
@@ -25,27 +25,27 @@
var d = new Derived();
d.f('bad');
// ^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'String' can't be assigned to the parameter type 'int'.
d.g('bad');
// ^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'String' can't be assigned to the parameter type 'int'.
d.h(i: 'bad');
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// ^
// [cfe] The argument type 'String' can't be assigned to the parameter type 'int'.
Object x = d.f(1);
// ^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
Object y = d.g(1);
// ^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
Object z = d.h(i: 1);
// ^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
}
diff --git a/tests/language/regress/regress34495_test.dart b/tests/language/regress/regress34495_test.dart
index f33f4c5..41e58bf 100644
--- a/tests/language/regress/regress34495_test.dart
+++ b/tests/language/regress/regress34495_test.dart
@@ -4,7 +4,7 @@
final foo = A<B>.foo();
// ^
-// [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+// [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'A'.
// ^
// [analyzer] STATIC_TYPE_WARNING.NON_TYPE_AS_TYPE_ARGUMENT
diff --git a/tests/language/regress/regress35258_test.dart b/tests/language/regress/regress35258_test.dart
index f28bada..d36f45f 100644
--- a/tests/language/regress/regress35258_test.dart
+++ b/tests/language/regress/regress35258_test.dart
@@ -17,7 +17,7 @@
C() {}
//^
-// [analyzer] STATIC_WARNING.FINAL_NOT_INITIALIZED_CONSTRUCTOR
+// [analyzer] COMPILE_TIME_ERROR.FINAL_NOT_INITIALIZED_CONSTRUCTOR
C(this.d) {}
//^
// [analyzer] COMPILE_TIME_ERROR.DUPLICATE_CONSTRUCTOR
diff --git a/tests/language/rewrite/implicit_this_test.dart b/tests/language/rewrite/implicit_this_test.dart
index e0e4c41..078dcd2 100644
--- a/tests/language/rewrite/implicit_this_test.dart
+++ b/tests/language/rewrite/implicit_this_test.dart
@@ -12,7 +12,7 @@
easy(z) {
return x + y + z;
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'y' isn't defined for the class 'Foo'.
}
@@ -69,7 +69,7 @@
shadow_x_parameter(x) {
return this.x + y + x;
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'y' isn't defined for the class 'Foo'.
}
@@ -77,7 +77,7 @@
var x = z;
return this.x + y + x;
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'y' isn't defined for the class 'Foo'.
}
@@ -86,7 +86,7 @@
foo() {
return this.x + y + x;
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'y' isn't defined for the class 'Foo'.
}
return foo();
@@ -96,7 +96,7 @@
foo(x) {
return this.x + y + x;
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'y' isn't defined for the class 'Foo'.
}
return foo(z);
@@ -107,7 +107,7 @@
var x = z;
return this.x + y + x;
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'y' isn't defined for the class 'Foo'.
}
diff --git a/tests/language/setter/declaration_test.dart b/tests/language/setter/declaration_test.dart
index 7a597eb..617fc2c 100644
--- a/tests/language/setter/declaration_test.dart
+++ b/tests/language/setter/declaration_test.dart
@@ -20,119 +20,119 @@
/*space*/ int? set wrongReturnType1(_) => 1;
// ^^^^
-// [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+// [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// [cfe] unspecified
/*space*/ FutureOr<void> set wrongReturnType2(_) {}
// ^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+// [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// [cfe] unspecified
/*space*/ Never set wrongReturnType3(_) => throw 1;
// ^^^^^
-// [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+// [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// [cfe] unspecified
int get nonSubtypes1 => 1;
// ^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.GETTER_NOT_SUBTYPE_SETTER_TYPES
+// [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_SUBTYPE_SETTER_TYPES
// [cfe] unspecified
set nonSubtypes1(String _) {}
int? get nonSubtypes2 => 1;
// ^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.GETTER_NOT_SUBTYPE_SETTER_TYPES
+// [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_SUBTYPE_SETTER_TYPES
// [cfe] unspecified
set nonSubtypes2(int _) {}
FutureOr<int> get nonSubtypes3 => 1;
// ^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.GETTER_NOT_SUBTYPE_SETTER_TYPES
+// [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_SUBTYPE_SETTER_TYPES
// [cfe] unspecified
set nonSubtypes3(int _) {}
dynamic get nonSubtypes4 => 1;
// ^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.GETTER_NOT_SUBTYPE_SETTER_TYPES
+// [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_SUBTYPE_SETTER_TYPES
// [cfe] unspecified
set nonSubtypes4(int _) {}
class C {
static int? set staticWrongReturnType1(_) => 1;
// ^^^^
- // [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+ // [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// [cfe] unspecified
static FutureOr<void> set staticWrongReturnType2(_) {}
// ^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+ // [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// [cfe] unspecified
static Never set staticWrongReturnType3(_) => throw 1;
// ^^^^^
- // [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+ // [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// [cfe] unspecified
/*space*/ int? set wrongReturnType1(_) => 1;
// ^^^^
- // [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+ // [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// [cfe] unspecified
/*space*/ FutureOr<void> set wrongReturnType2(_) {}
// ^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+ // [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// [cfe] unspecified
/*space*/ Never set wrongReturnType3(_) => throw 1;
// ^^^^^
- // [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+ // [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// [cfe] unspecified
static int get staticNonSubtypes1 => 1;
// ^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.GETTER_NOT_SUBTYPE_SETTER_TYPES
+ // [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_SUBTYPE_SETTER_TYPES
// [cfe] unspecified
static set staticNonSubtypes1(String _) {}
static int? get staticNonSubtypes2 => 1;
// ^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.GETTER_NOT_SUBTYPE_SETTER_TYPES
+ // [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_SUBTYPE_SETTER_TYPES
// [cfe] unspecified
static set staticNonSubtypes2(int _) {}
static FutureOr<int> get staticNonSubtypes3 => 1;
// ^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.GETTER_NOT_SUBTYPE_SETTER_TYPES
+ // [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_SUBTYPE_SETTER_TYPES
// [cfe] unspecified
static set staticNonSubtypes3(int _) {}
static dynamic get staticNonSubtypes4 => 1;
// ^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.GETTER_NOT_SUBTYPE_SETTER_TYPES
+ // [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_SUBTYPE_SETTER_TYPES
// [cfe] unspecified
static set staticNonSubtypes4(int _) {}
int get nonSubtypes1 => 1;
// ^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.GETTER_NOT_SUBTYPE_SETTER_TYPES
+ // [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_SUBTYPE_SETTER_TYPES
// [cfe] unspecified
set nonSubtypes1(String _) {}
int? get nonSubtypes2 => 1;
// ^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.GETTER_NOT_SUBTYPE_SETTER_TYPES
+ // [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_SUBTYPE_SETTER_TYPES
// [cfe] unspecified
set nonSubtypes2(int _) {}
FutureOr<int> get nonSubtypes3 => 1;
// ^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.GETTER_NOT_SUBTYPE_SETTER_TYPES
+ // [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_SUBTYPE_SETTER_TYPES
// [cfe] unspecified
set nonSubtypes3(int _) {}
dynamic get nonSubtypes4 => 1;
// ^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.GETTER_NOT_SUBTYPE_SETTER_TYPES
+ // [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_SUBTYPE_SETTER_TYPES
// [cfe] unspecified
set nonSubtypes4(int _) {}
}
diff --git a/tests/language/setter/setter3_test.dart b/tests/language/setter/setter3_test.dart
index bd71750..3dedec6 100644
--- a/tests/language/setter/setter3_test.dart
+++ b/tests/language/setter/setter3_test.dart
@@ -11,10 +11,10 @@
void set bar(x) {}
dynamic set baz(x) {}
//^^^^^^^
-// [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+// [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
bool set bob(x) {}
//^^^^
-// [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+// [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// ^^^
// [analyzer] COMPILE_TIME_ERROR.BODY_MIGHT_COMPLETE_NORMALLY
// [cfe] A non-null value must be returned since the return type 'bool' doesn't allow null.
diff --git a/tests/language/spread_collections/null_spread_test.dart b/tests/language/spread_collections/null_spread_test.dart
index 062cb9f..777378d 100644
--- a/tests/language/spread_collections/null_spread_test.dart
+++ b/tests/language/spread_collections/null_spread_test.dart
@@ -18,19 +18,25 @@
List<Never> l1b = l1;
var l2 = [...myNever];
List<Never> l2b = l2;
- var l3 = [...?myNever]; // Warning, but possible.
+ var l3 = [...?myNever];
+ // ^^^^
+ // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
List<Never> l3b = l3;
var s1 = {...?x, if (false) throw 1};
Set<Never> s1b = s1;
var s2 = {...myNever, if (false) throw 1};
Set<Never> s2b = s2;
- var s3 = {...?myNever, if (false) throw 1}; // Warning.
+ var s3 = {...?myNever, if (false) throw 1};
+ // ^^^^
+ // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
Set<Never> s3b = s3;
var m1 = {...?x, if (false) throw 1: throw 1};
Map<Never, Never> m1b = m1;
var m2 = {...myNever, if (false) throw 1: throw 1};
Map<Never, Never> m2b = m2;
- var m3 = {...?myNever, if (false) throw 1: throw 1}; // Warning.
+ var m3 = {...?myNever, if (false) throw 1: throw 1};
+ // ^^^^
+ // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
Map<Never, Never> m3b = m3;
// Test non-empty collection of `Never` and `int`.
@@ -38,19 +44,25 @@
List<int> li1b = li1;
var li2 = [...myNever, 1];
List<int> li2b = li2;
- var li3 = [...?myNever, 1]; // Warning.
+ var li3 = [...?myNever, 1];
+ // ^^^^
+ // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
List<int> li3b = li3;
var si1 = {1, ...?x};
Set<int> si1b = si1;
var si2 = {1, ...myNever};
Set<int> si2b = si2;
- var si3 = {1, ...?myNever}; // Warning.
+ var si3 = {1, ...?myNever};
+ // ^^^^
+ // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
Set<int> si3b = si3;
var mi1 = {1: 1, ...?x};
Map<int, int> mi1b = mi1;
var mi2 = {1: 1, ...myNever};
Map<int, int> mi2b = mi2;
- var mi3 = {1: 1, ...?myNever}; // Warning.
+ var mi3 = {1: 1, ...?myNever};
+ // ^^^^
+ // [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
Map<int, int> mi3b = mi3;
}
diff --git a/tests/language/static/field3_test.dart b/tests/language/static/field3_test.dart
index 7436df1..0498f48 100644
--- a/tests/language/static/field3_test.dart
+++ b/tests/language/static/field3_test.dart
@@ -13,11 +13,11 @@
if (false) {
var x = Foo.x;
// ^
- // [analyzer] STATIC_WARNING.STATIC_ACCESS_TO_INSTANCE_MEMBER
+ // [analyzer] COMPILE_TIME_ERROR.STATIC_ACCESS_TO_INSTANCE_MEMBER
// [cfe] Getter not found: 'x'.
var m = Foo.m;
// ^
- // [analyzer] STATIC_WARNING.STATIC_ACCESS_TO_INSTANCE_MEMBER
+ // [analyzer] COMPILE_TIME_ERROR.STATIC_ACCESS_TO_INSTANCE_MEMBER
// [cfe] Getter not found: 'm'.
Foo.m = 1;
// ^
@@ -25,7 +25,7 @@
// [cfe] Setter not found: 'm'.
Foo.x = 1;
// ^
- // [analyzer] STATIC_WARNING.STATIC_ACCESS_TO_INSTANCE_MEMBER
+ // [analyzer] COMPILE_TIME_ERROR.STATIC_ACCESS_TO_INSTANCE_MEMBER
// [cfe] Setter not found: 'x'.
}
}
diff --git a/tests/language/static/final_field2_test.dart b/tests/language/static/final_field2_test.dart
index 0755461..6430471 100644
--- a/tests/language/static/final_field2_test.dart
+++ b/tests/language/static/final_field2_test.dart
@@ -20,7 +20,7 @@
main() {
A.x = 2;
//^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_CONST
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_CONST
// ^
// [cfe] Setter not found: 'x'.
new B();
diff --git a/tests/language/static/getter_no_setter1_test.dart b/tests/language/static/getter_no_setter1_test.dart
index a173b2f..dd307ec 100644
--- a/tests/language/static/getter_no_setter1_test.dart
+++ b/tests/language/static/getter_no_setter1_test.dart
@@ -10,7 +10,7 @@
method() {
getter++;
// ^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'getter'.
}
}
diff --git a/tests/language/static/getter_no_setter2_test.dart b/tests/language/static/getter_no_setter2_test.dart
index d10cedb..e84b2b8 100644
--- a/tests/language/static/getter_no_setter2_test.dart
+++ b/tests/language/static/getter_no_setter2_test.dart
@@ -10,7 +10,7 @@
method() {
getter++;
// ^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'getter'.
}
diff --git a/tests/language/static/setter_get_test.dart b/tests/language/static/setter_get_test.dart
index 44796cc..0a16b53 100644
--- a/tests/language/static/setter_get_test.dart
+++ b/tests/language/static/setter_get_test.dart
@@ -8,7 +8,7 @@
static set o(_) {}
m() => o;
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'o'.
noSuchMethod(_) => 42;
}
diff --git a/tests/language/string/interpolate1_test.dart b/tests/language/string/interpolate1_test.dart
index 1bc80c0..12bf4af 100644
--- a/tests/language/string/interpolate1_test.dart
+++ b/tests/language/string/interpolate1_test.dart
@@ -11,6 +11,6 @@
// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
// [cfe] A '$' has special meaning inside a string, and must be followed by an identifier or an expression in curly braces ({}).
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'x'.
}
diff --git a/tests/language/string/multiline_newline_test.dart b/tests/language/string/multiline_newline_test.dart
index 37ef0c7..75bf78c 100644
--- a/tests/language/string/multiline_newline_test.dart
+++ b/tests/language/string/multiline_newline_test.dart
@@ -68,37 +68,37 @@
const c4 = c1 ? 1 : 2;
// ^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] A value of type 'bool?' can't be assigned to a variable of type 'bool'.
Expect.equals(1, c4);
const c5 = c2 ? 2 : 3;
// ^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] A value of type 'bool?' can't be assigned to a variable of type 'bool'.
Expect.equals(2, c5);
const c6 = c3 ? 3 : 4;
// ^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] A value of type 'bool?' can't be assigned to a variable of type 'bool'.
Expect.equals(3, c6);
const c4r = c1r ? 1 : 2;
// ^^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] A value of type 'bool?' can't be assigned to a variable of type 'bool'.
Expect.equals(1, c4r);
const c5r = c2r ? 2 : 3;
// ^^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] A value of type 'bool?' can't be assigned to a variable of type 'bool'.
Expect.equals(2, c5r);
const c6r = c3r ? 3 : 4;
// ^^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
// [cfe] A value of type 'bool?' can't be assigned to a variable of type 'bool'.
Expect.equals(3, c6r);
@@ -138,36 +138,36 @@
// [analyzer] COMPILE_TIME_ERROR.CONST_EVAL_TYPE_BOOL
// [cfe] A value of type 'bool?' can't be assigned to a variable of type 'bool'.
// ^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
const c11 = c8 ? 2 : 3;
// ^^
// [analyzer] COMPILE_TIME_ERROR.CONST_EVAL_TYPE_BOOL
// [cfe] A value of type 'bool?' can't be assigned to a variable of type 'bool'.
// ^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
const c12 = c9 ? 3 : 4;
// ^^
// [analyzer] COMPILE_TIME_ERROR.CONST_EVAL_TYPE_BOOL
// [cfe] A value of type 'bool?' can't be assigned to a variable of type 'bool'.
// ^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
const c10r = c7r ? 1 : 2;
// ^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_EVAL_TYPE_BOOL
// [cfe] A value of type 'bool?' can't be assigned to a variable of type 'bool'.
// ^^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
const c11r = c8r ? 2 : 3;
// ^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_EVAL_TYPE_BOOL
// [cfe] A value of type 'bool?' can't be assigned to a variable of type 'bool'.
// ^^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
const c12r = c9r ? 3 : 4;
// ^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_EVAL_TYPE_BOOL
// [cfe] A value of type 'bool?' can't be assigned to a variable of type 'bool'.
// ^^^
- // [analyzer] STATIC_WARNING.UNCHECKED_USE_OF_NULLABLE_VALUE
+ // [analyzer] COMPILE_TIME_ERROR.UNCHECKED_USE_OF_NULLABLE_VALUE
}
diff --git a/tests/language/string/no_operator_test.dart b/tests/language/string/no_operator_test.dart
index e6da249..d5d013c 100644
--- a/tests/language/string/no_operator_test.dart
+++ b/tests/language/string/no_operator_test.dart
@@ -29,7 +29,7 @@
// [cfe] The operator '-' isn't defined for the class 'String'.
Expect.throws(() => x * y);
// ^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'String' can't be assigned to a variable of type 'int'.
Expect.throws(() => x / y);
// ^
diff --git a/tests/language/string/substring_test.dart b/tests/language/string/substring_test.dart
index bf2ce99..6f33829 100644
--- a/tests/language/string/substring_test.dart
+++ b/tests/language/string/substring_test.dart
@@ -9,10 +9,10 @@
try {
print("abcdef".substring(1.5, 3.5));
// ^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'double' can't be assigned to the parameter type 'int'.
// ^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'double' can't be assigned to the parameter type 'int'.
Expect.fail("Should have thrown an exception");
} on TypeError catch (e) {
diff --git a/tests/language/super/conditional_operator_test.dart b/tests/language/super/conditional_operator_test.dart
index 7f09c55..c15182d 100644
--- a/tests/language/super/conditional_operator_test.dart
+++ b/tests/language/super/conditional_operator_test.dart
@@ -50,7 +50,7 @@
// [analyzer] SYNTACTIC_ERROR.INVALID_OPERATOR_QUESTIONMARK_PERIOD_FOR_SUPER
1 * super?.field;
// ^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// ^^
// [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
// [cfe] The operator '?.' cannot be used with 'super' because 'super' cannot be null.
diff --git a/tests/language/switch/case_expression_with_assignment_test.dart b/tests/language/switch/case_expression_with_assignment_test.dart
index 115cb94..5ab2dbd 100644
--- a/tests/language/switch/case_expression_with_assignment_test.dart
+++ b/tests/language/switch/case_expression_with_assignment_test.dart
@@ -15,7 +15,7 @@
return "ERROR_A";
case ERROR_B = 1:
// ^^^^^^^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_CONST
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_CONST
// ^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.NON_CONSTANT_CASE_EXPRESSION
// ^
diff --git a/tests/language/this/implicit_this_test.dart b/tests/language/this/implicit_this_test.dart
index 3500c9a..0cbcfa8 100644
--- a/tests/language/this/implicit_this_test.dart
+++ b/tests/language/this/implicit_this_test.dart
@@ -17,7 +17,7 @@
// abstract.
class SubAbstract1 extends Abstract {}
// ^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
// [cfe] The non-abstract class 'SubAbstract1' is missing implementations for these members:
// This class does not implement "x", but is itself abstract, so that's OK.
@@ -29,7 +29,7 @@
// abstract.
class SubSubAbstract2 extends SubAbstract2 {}
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
// [cfe] The non-abstract class 'SubSubAbstract2' is missing implementations for these members:
class Concrete extends Abstract {
@@ -44,7 +44,7 @@
void main() {
new Abstract();
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.INSTANTIATE_ABSTRACT_CLASS
+ // [analyzer] COMPILE_TIME_ERROR.INSTANTIATE_ABSTRACT_CLASS
// [cfe] The class 'Abstract' is abstract and can't be instantiated.
Expect.equals('7', new Concrete().toString());
Expect.equals('42', new SubConcrete(42).toString());
diff --git a/tests/language/type/checks_in_factory_method_test.dart b/tests/language/type/checks_in_factory_method_test.dart
index cae8f04..3be4613 100644
--- a/tests/language/type/checks_in_factory_method_test.dart
+++ b/tests/language/type/checks_in_factory_method_test.dart
@@ -22,7 +22,7 @@
func("Hello World!");
// ^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'String' can't be assigned to the parameter type 'T'.
return new Bar<T>();
}
diff --git a/tests/language/type_object/first_class_types_literals_test.dart b/tests/language/type_object/first_class_types_literals_test.dart
index aa02a4d..e8fdca5 100644
--- a/tests/language/type_object/first_class_types_literals_test.dart
+++ b/tests/language/type_object/first_class_types_literals_test.dart
@@ -51,13 +51,13 @@
// Test that operator calls on class literals go to Type.
Expect.throwsNoSuchMethodError(() => C = 1);
// ^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_TYPE
// [cfe] Can't assign to a type literal.
// ^
// [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT
Expect.throwsNoSuchMethodError(() => C++);
// ^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_TYPE
// [cfe] Can't assign to a type literal.
// ^^
// [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
diff --git a/tests/language/type_promotion/functions_test.dart b/tests/language/type_promotion/functions_test.dart
index 1e0b4ae..94aee2f 100644
--- a/tests/language/type_promotion/functions_test.dart
+++ b/tests/language/type_promotion/functions_test.dart
@@ -43,7 +43,7 @@
b = funcAtoDyn(new B());
c = funcAtoDyn(new C());
// ^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// ^
// [cfe] The argument type 'C' can't be assigned to the parameter type 'A'.
@@ -76,7 +76,7 @@
// Returned value has type `void`, usage is restricted.
Object o = funcDynToDyn(null);
// ^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// ^
// [cfe] This expression has type 'void' and can't be used.
}
@@ -97,17 +97,17 @@
FuncDynToVoid funcDynToVoid = func;
a = funcDynToVoid(new A());
// ^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// ^
// [cfe] This expression has type 'void' and can't be used.
b = funcDynToVoid(new B());
// ^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// ^
// [cfe] This expression has type 'void' and can't be used.
c = funcDynToVoid(new C());
// ^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// ^
// [cfe] This expression has type 'void' and can't be used.
diff --git a/tests/language/type_variable/conflict2_test.dart b/tests/language/type_variable/conflict2_test.dart
index 4a03e01..8b8439d 100644
--- a/tests/language/type_variable/conflict2_test.dart
+++ b/tests/language/type_variable/conflict2_test.dart
@@ -23,7 +23,7 @@
// [analyzer] STATIC_TYPE_WARNING.INVOCATION_OF_NON_FUNCTION
// [cfe] Method not found: 'T'.
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
// X is not in scope. NoSuchMethodError.
static baz() => X();
@@ -49,7 +49,7 @@
// ^^^
// [analyzer] STATIC_TYPE_WARNING.INVOCATION_OF_NON_FUNCTION_EXPRESSION
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
// [cfe] Type variables can't be used in static members.
// ^
// [cfe] The method 'call' isn't defined for the class 'Type'.
@@ -63,7 +63,7 @@
// Runtime type T not accessible from static context. Compile-time error.
static garply() => T[0];
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
// [cfe] Type variables can't be used in static members.
// ^^^
// [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
@@ -78,7 +78,7 @@
// Runtime type T not accessible from static context. Compile-time error.
static fred() => T.m;
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
// [cfe] Type variables can't be used in static members.
// ^
// [analyzer] STATIC_TYPE_WARNING.UNDEFINED_GETTER
diff --git a/tests/language/type_variable/scope_test.dart b/tests/language/type_variable/scope_test.dart
index 9930d68..86361f2 100644
--- a/tests/language/type_variable/scope_test.dart
+++ b/tests/language/type_variable/scope_test.dart
@@ -10,18 +10,18 @@
static
Foo<T>
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
m(
// ^
// [cfe] Can only use type variables in instance methods.
Foo<T>
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
// [cfe] Type variables can't be used in static members.
f) {
Foo<T> x = new Foo<String>();
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
// [cfe] Type variables can't be used in static members.
// ^^^^^^^^^^^^^^^^^
// [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT
@@ -39,7 +39,7 @@
// T is not in scope for a static field.
static late Foo<T> f1;
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
// [cfe] Type variables can't be used in static members.
// ^
// [cfe] Verification of the generated program failed:
@@ -47,7 +47,7 @@
static
Foo<T>
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
get f {
// ^
// [cfe] Can only use type variables in instance methods.
@@ -61,7 +61,7 @@
// [cfe] Can only use type variables in instance methods.
Foo<T>
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
// [cfe] Type variables can't be used in static members.
value) {}
}
@@ -73,7 +73,7 @@
main() {
Foo.m(new Foo<String>());
// ^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
new I(new Foo<String>());
Foo.f1 = new Foo<String>();
// ^^^^^^^^^^^^^^^^^
diff --git a/tests/language/unsorted/external_test.dart b/tests/language/unsorted/external_test.dart
index b1008e1..cd9c0e1 100644
--- a/tests/language/unsorted/external_test.dart
+++ b/tests/language/unsorted/external_test.dart
@@ -41,7 +41,7 @@
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
// [cfe] Expected ';' after this.
// ^^^^^^
- // [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+ // [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
external Foo.n21(val) : x = 1;
// ^
@@ -65,7 +65,7 @@
// [analyzer] SYNTACTIC_ERROR.EXTERNAL_FACTORY_REDIRECTION
// [cfe] A redirecting factory can't be external.
// ^^^
- // [analyzer] STATIC_WARNING.REDIRECT_TO_INVALID_RETURN_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_INVALID_RETURN_TYPE
// [cfe] The constructor function type 'Bar Function(dynamic)' isn't a subtype of 'Foo Function(dynamic)'.
}
diff --git a/tests/language/variance/syntax/variance_type_parameter_error_syntax_test.dart b/tests/language/variance/syntax/variance_type_parameter_error_syntax_test.dart
index 28c1add..71e14caa 100644
--- a/tests/language/variance/syntax/variance_type_parameter_error_syntax_test.dart
+++ b/tests/language/variance/syntax/variance_type_parameter_error_syntax_test.dart
@@ -20,7 +20,7 @@
// [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
// [cfe] The operator '<' isn't defined for the class 'Type'.
// ^^^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Expected ';' after this.
// ^^^
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
@@ -29,7 +29,7 @@
// [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
// [cfe] The operator '>' isn't defined for the class 'Type'.
// ^^^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'bar'.
}
diff --git a/tests/language/variance/variance_in_inference_error_test.dart b/tests/language/variance/variance_in_inference_error_test.dart
index 2c220ab..1d50ff2 100644
--- a/tests/language/variance/variance_in_inference_error_test.dart
+++ b/tests/language/variance/variance_in_inference_error_test.dart
@@ -48,7 +48,7 @@
//^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.COULD_NOT_INFER
// ^^^^^^^^^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'Contravariant<String>' can't be assigned to the parameter type 'Contravariant<int>'.
// String <: T <: int is not a valid constraint.
@@ -56,7 +56,7 @@
//^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.COULD_NOT_INFER
// ^^^^^^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'Contravariant<int>' can't be assigned to the parameter type 'Contravariant<String>'.
// Middle <: T <: Lower is not a valid constraint
diff --git a/tests/language/variance/variance_in_subtyping_error_test.dart b/tests/language/variance/variance_in_subtyping_error_test.dart
index d5697c7..9779d33 100644
--- a/tests/language/variance/variance_in_subtyping_error_test.dart
+++ b/tests/language/variance/variance_in_subtyping_error_test.dart
@@ -75,6 +75,6 @@
testCall(listLower);
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'List<Contravariant<Lower>>' can't be assigned to the parameter type 'Iterable<Contravariant<Middle>>'.
}
diff --git a/tests/language/variance/variance_inout_inference_error_test.dart b/tests/language/variance/variance_inout_inference_error_test.dart
index 76326580..8bf485f 100644
--- a/tests/language/variance/variance_inout_inference_error_test.dart
+++ b/tests/language/variance/variance_inout_inference_error_test.dart
@@ -24,22 +24,22 @@
// Middle <: T <: Middle and int <: T <: int are not valid constraints.
inferInvInv(Invariant<Middle>(), Invariant<int>());
// ^^^^^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'Invariant<Middle>' can't be assigned to the parameter type 'Invariant<Object>'.
// ^^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'Invariant<int>' can't be assigned to the parameter type 'Invariant<Object>'.
// Middle <: T <: Middle and Upper <: T <: Upper are not valid constraints.
inferInvInv(Invariant<Middle>(), Invariant<Upper>());
// ^^^^^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'Invariant<Middle>' can't be assigned to the parameter type 'Invariant<Upper>'.
// Middle <: T <: Middle and Lower <: T <: Lower are not valid constraints.
inferInvInv(Invariant<Middle>(), Invariant<Lower>());
// ^^^^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'Invariant<Lower>' can't be assigned to the parameter type 'Invariant<Middle>'.
// Upper <: T
@@ -47,7 +47,7 @@
// Upper <: T <: Middle is not a valid constraint.
inferInvCov(Invariant<Middle>(), Covariant<Upper>());
// ^^^^^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'Invariant<Middle>' can't be assigned to the parameter type 'Invariant<Upper>'.
// T <: Lower
@@ -55,6 +55,6 @@
// Middle <: T <: Lower is not a valid constraint
inferInvContra(Invariant<Middle>(), Contravariant<Lower>());
// ^^^^^^^^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'Contravariant<Lower>' can't be assigned to the parameter type 'Contravariant<Middle>'.
}
diff --git a/tests/language/variance/variance_inout_subtyping_error_test.dart b/tests/language/variance/variance_inout_subtyping_error_test.dart
index d06f336..3bcec37 100644
--- a/tests/language/variance/variance_inout_subtyping_error_test.dart
+++ b/tests/language/variance/variance_inout_subtyping_error_test.dart
@@ -120,11 +120,11 @@
testCall<Lower>(listMiddle);
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'List<Invariant<Middle>>' can't be assigned to the parameter type 'Iterable<Invariant<Lower>>'.
testCall<Middle>(listLower);
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'List<Invariant<Lower>>' can't be assigned to the parameter type 'Iterable<Invariant<Middle>>'.
}
diff --git a/tests/language/variance/variance_out_subtyping_error_test.dart b/tests/language/variance/variance_out_subtyping_error_test.dart
index a85f4cb..dd925e2 100644
--- a/tests/language/variance/variance_out_subtyping_error_test.dart
+++ b/tests/language/variance/variance_out_subtyping_error_test.dart
@@ -75,6 +75,6 @@
testCall(listMiddle);
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'List<Covariant<Middle>>' can't be assigned to the parameter type 'Iterable<Covariant<Lower>>'.
}
diff --git a/tests/language_2/abstract/exact_selector_test.dart b/tests/language_2/abstract/exact_selector_test.dart
index b40ccb8..222da8a 100644
--- a/tests/language_2/abstract/exact_selector_test.dart
+++ b/tests/language_2/abstract/exact_selector_test.dart
@@ -18,7 +18,7 @@
(() => 42)();
return new Foo();
// ^^^
- // [analyzer] STATIC_WARNING.INSTANTIATE_ABSTRACT_CLASS
+ // [analyzer] COMPILE_TIME_ERROR.INSTANTIATE_ABSTRACT_CLASS
// [cfe] The class 'Foo' is abstract and can't be instantiated.
}
diff --git a/tests/language_2/abstract/factory_constructor_test.dart b/tests/language_2/abstract/factory_constructor_test.dart
index bda6a23..810a3fa 100644
--- a/tests/language_2/abstract/factory_constructor_test.dart
+++ b/tests/language_2/abstract/factory_constructor_test.dart
@@ -26,7 +26,7 @@
// Intentionally abstract method.
method();
//^^^^^^^^^
-// [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
A2.make() {}
}
diff --git a/tests/language_2/abstract/getter_test.dart b/tests/language_2/abstract/getter_test.dart
index fe5acdf..74d51da 100644
--- a/tests/language_2/abstract/getter_test.dart
+++ b/tests/language_2/abstract/getter_test.dart
@@ -13,7 +13,7 @@
// Intentionally abstract:
get i;
//^^^^^^
-// [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
}
class Bar {}
diff --git a/tests/language_2/abstract/syntax_test.dart b/tests/language_2/abstract/syntax_test.dart
index 1b617fd..a51480b 100644
--- a/tests/language_2/abstract/syntax_test.dart
+++ b/tests/language_2/abstract/syntax_test.dart
@@ -14,7 +14,7 @@
// [cfe] The non-abstract class 'A' is missing implementations for these members:
foo();
//^^^^^^
-// [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
static bar();
// ^
// [analyzer] SYNTACTIC_ERROR.MISSING_FUNCTION_BODY
diff --git a/tests/language_2/argument/assignability_function_typed_test.dart b/tests/language_2/argument/assignability_function_typed_test.dart
index 7e17271..de2ebff 100644
--- a/tests/language_2/argument/assignability_function_typed_test.dart
+++ b/tests/language_2/argument/assignability_function_typed_test.dart
@@ -20,11 +20,11 @@
// Unrelated types (not assignable)
f(intToInt);
//^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'int Function(int)' can't be assigned to the parameter type 'num Function(num)'.
f(objectToObject);
//^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'Object Function(Object)' can't be assigned to the parameter type 'num Function(num)'.
// Assignable but fails at runtime.
diff --git a/tests/language_2/assign/to_type_test.dart b/tests/language_2/assign/to_type_test.dart
index 0fc076a..277012a 100644
--- a/tests/language_2/assign/to_type_test.dart
+++ b/tests/language_2/assign/to_type_test.dart
@@ -9,7 +9,7 @@
f() {
T = null;
// ^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_TYPE
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_TYPE
// [cfe] Can't assign to a type literal.
}
}
@@ -24,14 +24,14 @@
new C<D>().f();
D = null;
//^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_TYPE
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_TYPE
// [cfe] Can't assign to a type literal.
E = null;
//^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_TYPE
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_TYPE
// [cfe] Can't assign to a type literal.
F = null;
//^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_TYPE
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_TYPE
// [cfe] Can't assign to a type literal.
}
diff --git a/tests/language_2/call/constructor_on_unresolvable_class_test.dart b/tests/language_2/call/constructor_on_unresolvable_class_test.dart
index 3b32987..6db90ed 100644
--- a/tests/language_2/call/constructor_on_unresolvable_class_test.dart
+++ b/tests/language_2/call/constructor_on_unresolvable_class_test.dart
@@ -11,14 +11,14 @@
main() {
new A();
// ^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'A'.
new A.foo();
// ^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'A.foo'.
new lib.A();
// ^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'lib.A'.
}
diff --git a/tests/language_2/call/nonexistent_constructor_test.dart b/tests/language_2/call/nonexistent_constructor_test.dart
index 4649f37..4c129d0 100644
--- a/tests/language_2/call/nonexistent_constructor_test.dart
+++ b/tests/language_2/call/nonexistent_constructor_test.dart
@@ -19,10 +19,10 @@
new A.foo(42);
new A.bar(foo());
// ^^^
- // [analyzer] STATIC_WARNING.NEW_WITH_UNDEFINED_CONSTRUCTOR
+ // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR
// [cfe] Method not found: 'A.bar'.
new A();
// ^
- // [analyzer] STATIC_WARNING.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT
+ // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT
// [cfe] Method not found: 'A'.
}
diff --git a/tests/language_2/class/keyword_test.dart b/tests/language_2/class/keyword_test.dart
index 891c4a7..5a89f2e 100644
--- a/tests/language_2/class/keyword_test.dart
+++ b/tests/language_2/class/keyword_test.dart
@@ -12,14 +12,14 @@
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
// [cfe] Expected ';' after this.
// ^^^^^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Expected an identifier, but got 'class'.
// ^^^^^
// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
// [cfe] Setter not found: 'class'.
print("$class");
// ^^^^^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Expected an identifier, but got 'class'.
// ^^^^^
// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
diff --git a/tests/language_2/compile_time_constant/p_test.dart b/tests/language_2/compile_time_constant/p_test.dart
index 5c41a46..031e929 100644
--- a/tests/language_2/compile_time_constant/p_test.dart
+++ b/tests/language_2/compile_time_constant/p_test.dart
@@ -8,7 +8,7 @@
const A(
this.x
// ^
- // [analyzer] STATIC_WARNING.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR
+ // [analyzer] COMPILE_TIME_ERROR.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR
// [cfe] 'x' is a final instance variable that has already been initialized.
// ^
// [cfe] Cannot invoke a non-'const' constructor where a const expression is expected.
diff --git a/tests/language_2/compile_time_constant/static2_test.dart b/tests/language_2/compile_time_constant/static2_test.dart
index 2155448..5de087a 100644
--- a/tests/language_2/compile_time_constant/static2_test.dart
+++ b/tests/language_2/compile_time_constant/static2_test.dart
@@ -9,7 +9,7 @@
// [analyzer] CHECKED_MODE_COMPILE_TIME_ERROR.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE
// [cfe] A value of type 'String' can't be assigned to a variable of type 'int'.
// ^^^^^
- // [analyzer] STATIC_WARNING.FIELD_INITIALIZER_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZER_NOT_ASSIGNABLE
const A.a2(this.x);
const A.a3([this.x = 'foo']);
// ^^^^^
@@ -17,9 +17,7 @@
// [cfe] A value of type 'String' can't be assigned to a variable of type 'int'.
const A.a4(String this.x);
// ^^^^^^^^^^^^^
- // [analyzer] COMPILE_TIME_ERROR.INVALID_PARAMETER_DECLARATION
- // ^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE
// ^
// [cfe] The type of parameter 'x', 'String' is not a subtype of the corresponding field's type, 'int'.
const A.a5(String x) : this.x = x;
@@ -27,7 +25,7 @@
// [analyzer] CHECKED_MODE_COMPILE_TIME_ERROR.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE
// [cfe] A value of type 'String' can't be assigned to a variable of type 'int'.
// ^
- // [analyzer] STATIC_WARNING.FIELD_INITIALIZER_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZER_NOT_ASSIGNABLE
const A.a6(int x) : this.x = x;
}
@@ -39,7 +37,7 @@
// [analyzer] CHECKED_MODE_COMPILE_TIME_ERROR.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
// [cfe] The argument type 'String' can't be assigned to the parameter type 'int'.
// ^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
const a3 = const A.a3();
// ^^^^^^^^^^^^
// [analyzer] CHECKED_MODE_COMPILE_TIME_ERROR.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
@@ -56,7 +54,7 @@
// [analyzer] CHECKED_MODE_COMPILE_TIME_ERROR.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
// [cfe] The argument type 'String' can't be assigned to the parameter type 'int'.
// ^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
main() {
print(a1);
diff --git a/tests/language_2/compile_time_constant/static3_test.dart b/tests/language_2/compile_time_constant/static3_test.dart
index 3deabbb..d6c508b 100644
--- a/tests/language_2/compile_time_constant/static3_test.dart
+++ b/tests/language_2/compile_time_constant/static3_test.dart
@@ -9,7 +9,7 @@
// [analyzer] CHECKED_MODE_COMPILE_TIME_ERROR.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE
// [cfe] A value of type 'String' can't be assigned to a variable of type 'int'.
// ^^^^^
- // [analyzer] STATIC_WARNING.FIELD_INITIALIZER_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZER_NOT_ASSIGNABLE
const A.a2(this.x);
const A.a3([this.x = 'foo']);
// ^^^^^
@@ -17,9 +17,7 @@
// [cfe] A value of type 'String' can't be assigned to a variable of type 'int'.
const A.a4(String this.x);
// ^^^^^^^^^^^^^
- // [analyzer] COMPILE_TIME_ERROR.INVALID_PARAMETER_DECLARATION
- // ^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE
// ^
// [cfe] The type of parameter 'x', 'String' is not a subtype of the corresponding field's type, 'int'.
const A.a5(String x) : this.x = x;
@@ -27,7 +25,7 @@
// [analyzer] CHECKED_MODE_COMPILE_TIME_ERROR.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE
// [cfe] A value of type 'String' can't be assigned to a variable of type 'int'.
// ^
- // [analyzer] STATIC_WARNING.FIELD_INITIALIZER_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZER_NOT_ASSIGNABLE
const A.a6(int x) : this.x = x;
}
@@ -39,7 +37,7 @@
// [analyzer] CHECKED_MODE_COMPILE_TIME_ERROR.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
// [cfe] The argument type 'String' can't be assigned to the parameter type 'int'.
// ^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
var a3 = const A.a3();
// ^^^^^^^^^^^^
// [analyzer] CHECKED_MODE_COMPILE_TIME_ERROR.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
@@ -56,7 +54,7 @@
// [analyzer] CHECKED_MODE_COMPILE_TIME_ERROR.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
// [cfe] The argument type 'String' can't be assigned to the parameter type 'int'.
// ^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
main() {
print(a1);
diff --git a/tests/language_2/const/constructor3_test.dart b/tests/language_2/const/constructor3_test.dart
index 54191d1..aa8aa0ff 100644
--- a/tests/language_2/const/constructor3_test.dart
+++ b/tests/language_2/const/constructor3_test.dart
@@ -18,7 +18,7 @@
// [analyzer] CHECKED_MODE_COMPILE_TIME_ERROR.CONST_CONSTRUCTOR_PARAM_TYPE_MISMATCH
// [cfe] The argument type 'int' can't be assigned to the parameter type 'double'.
// ^^^^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
const e = const D(0.0);
const f = const D(intValue);
// ^^^^^^^^^^^^^^^^^
diff --git a/tests/language_2/const/constructor_syntax_test.dart b/tests/language_2/const/constructor_syntax_test.dart
index 99a420e..d214271 100644
--- a/tests/language_2/const/constructor_syntax_test.dart
+++ b/tests/language_2/const/constructor_syntax_test.dart
@@ -49,7 +49,7 @@
const C3()
: field = new C0()
//^^^^^
- // [analyzer] STATIC_WARNING.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION
// ^
// [cfe] 'field' is a final instance variable that has already been initialized.
// ^
diff --git a/tests/language_2/const/switch2_test.dart b/tests/language_2/const/switch2_test.dart
index ce1dea9..f1daf0c 100644
--- a/tests/language_2/const/switch2_test.dart
+++ b/tests/language_2/const/switch2_test.dart
@@ -8,7 +8,7 @@
var a = [1, 2, 3][2];
switch (a) {
// ^
- // [analyzer] STATIC_WARNING.SWITCH_EXPRESSION_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.SWITCH_EXPRESSION_NOT_ASSIGNABLE
case 0.0:
// ^
// [cfe] Type 'int' of the switch expression isn't assignable to the type 'double' of this case expression.
diff --git a/tests/language_2/const/syntax_test.dart b/tests/language_2/const/syntax_test.dart
index 0bb8881..375fb6a 100644
--- a/tests/language_2/const/syntax_test.dart
+++ b/tests/language_2/const/syntax_test.dart
@@ -92,15 +92,11 @@
// ^^
// [analyzer] COMPILE_TIME_ERROR.RECURSIVE_COMPILE_TIME_CONSTANT
// [cfe] Can't infer the type of 'A2': circularity found during type inference.
-// ^^
-// [analyzer] COMPILE_TIME_ERROR.TOP_LEVEL_CYCLE
// ^
// [cfe] Constant evaluation error:
const A3 = A2 + 1;
// ^^
// [analyzer] COMPILE_TIME_ERROR.RECURSIVE_COMPILE_TIME_CONSTANT
-// ^^
-// [analyzer] COMPILE_TIME_ERROR.TOP_LEVEL_CYCLE
class C0 {
static const X = const C1();
@@ -112,7 +108,7 @@
const C1()
: x = C0.X
//^
- // [analyzer] STATIC_WARNING.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION
// ^
// [cfe] 'x' is a final instance variable that has already been initialized.
// ^
@@ -129,7 +125,7 @@
// ^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.CONST_EVAL_TYPE_NUM
// ^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'String' can't be assigned to a variable of type 'num'.
// Check identical.
diff --git a/tests/language_2/constructor/constructor9_test.dart b/tests/language_2/constructor/constructor9_test.dart
index 4c7b35d..607e164 100644
--- a/tests/language_2/constructor/constructor9_test.dart
+++ b/tests/language_2/constructor/constructor9_test.dart
@@ -8,7 +8,7 @@
class Klass {
Klass(var v) : field_ = v {}
//^^^^^
-// [analyzer] STATIC_WARNING.FINAL_NOT_INITIALIZED_CONSTRUCTOR
+// [analyzer] COMPILE_TIME_ERROR.FINAL_NOT_INITIALIZED_CONSTRUCTOR
final uninitializedFinalField_;
// ^
// [cfe] Final field 'uninitializedFinalField_' is not initialized.
diff --git a/tests/language_2/constructor/default_factory_test.dart b/tests/language_2/constructor/default_factory_test.dart
index 43a93e8..1b69325 100644
--- a/tests/language_2/constructor/default_factory_test.dart
+++ b/tests/language_2/constructor/default_factory_test.dart
@@ -9,7 +9,7 @@
abstract class Vehicle {
factory Vehicle() = GoogleOne.Vehicle;
// ^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.REDIRECT_TO_INVALID_RETURN_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_INVALID_RETURN_TYPE
// [cfe] The constructor function type 'GoogleOne Function()' isn't a subtype of 'Vehicle Function()'.
}
diff --git a/tests/language_2/constructor/named_constructor_test.dart b/tests/language_2/constructor/named_constructor_test.dart
index 12a58b1..d802b9a 100644
--- a/tests/language_2/constructor/named_constructor_test.dart
+++ b/tests/language_2/constructor/named_constructor_test.dart
@@ -36,13 +36,13 @@
// 'prefix' is not a type:
new prefix<int>.Class().value;
// ^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'prefix.Class'.
new prefix.Class<int>().value;
// 'prefix<int>.Class<int>' doesn't fit the grammar syntax T.id:
new prefix<int>.Class<int>().value;
// ^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'prefix.Class'.
// ^^^^^
// [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
@@ -52,7 +52,7 @@
// 'prefix<int>.Class.named' doesn't fit the grammar syntax T.id:
new prefix<int>.Class.named().value;
// ^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'prefix.Class'.
// ^^^^^
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
@@ -70,7 +70,7 @@
// 'prefix<int>.Class<int>' doesn't fit the grammar syntax T.id:
new prefix<int>.Class<int>.named().value;
// ^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'prefix.Class'.
// ^^^^^
// [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
@@ -80,7 +80,7 @@
// 'prefix<int>.Class.named<int>' doesn't fit the grammar syntax T.id:
new prefix<int>.Class.named<int>().value;
// ^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'prefix.Class'.
// ^^^^^
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
@@ -96,7 +96,7 @@
// 'prefix<int>.Class<int>.named<int>' doesn't fit the grammar syntax T.id:
new prefix<int>.Class<int>.named<int>().value;
// ^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'prefix.Class'.
// ^^^^^
// [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
diff --git a/tests/language_2/constructor/reference_test.dart b/tests/language_2/constructor/reference_test.dart
index 7aab1ff..c1ec04c 100644
--- a/tests/language_2/constructor/reference_test.dart
+++ b/tests/language_2/constructor/reference_test.dart
@@ -13,7 +13,7 @@
new Foo.bar();
new Foo.bar.baz();
// ^^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// ^
// [cfe] Method not found: 'Foo.bar.baz'.
new Foo<int>();
@@ -34,12 +34,12 @@
// ^
// [cfe] A constructor invocation can't have type arguments on the constructor name.
// ^^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// ^
// [cfe] Method not found: 'Foo.bar.baz'.
new Foo.bar.baz<int>();
// ^^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// ^^^
// [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS_CONSTRUCTOR
// [cfe] A constructor invocation can't have type arguments on the constructor name.
@@ -107,7 +107,7 @@
// ^
// [cfe] A constructor invocation can't have type arguments on the constructor name.
//^^^^^^^
-// [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+// [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// ^
// [cfe] Method not found: 'Foo.bar.baz'.
Foo.bar.baz<int>();
diff --git a/tests/language_2/constructor/unresolved_default_constructor_test.dart b/tests/language_2/constructor/unresolved_default_constructor_test.dart
index 07fdc72..b8b5338 100644
--- a/tests/language_2/constructor/unresolved_default_constructor_test.dart
+++ b/tests/language_2/constructor/unresolved_default_constructor_test.dart
@@ -15,6 +15,6 @@
A.method();
Expect.throws(() => new A());
// ^
- // [analyzer] STATIC_WARNING.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT
+ // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT
// [cfe] Method not found: 'A'.
}
diff --git a/tests/language_2/deferred/inheritance_constraints_test.dart b/tests/language_2/deferred/inheritance_constraints_test.dart
index 9dd18f2..2d9429b 100644
--- a/tests/language_2/deferred/inheritance_constraints_test.dart
+++ b/tests/language_2/deferred/inheritance_constraints_test.dart
@@ -27,7 +27,7 @@
D();
factory D.factory() = lib.Foo2;
// ^^^^^^^^
-// [analyzer] STATIC_WARNING.REDIRECT_TO_INVALID_RETURN_TYPE
+// [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_INVALID_RETURN_TYPE
// [cfe] The constructor function type 'Foo2 Function()' isn't a subtype of 'D Function()'.
}
diff --git a/tests/language_2/double/to_string_as_exponential2_test.dart b/tests/language_2/double/to_string_as_exponential2_test.dart
index 13e461b..6fa5cc2 100644
--- a/tests/language_2/double/to_string_as_exponential2_test.dart
+++ b/tests/language_2/double/to_string_as_exponential2_test.dart
@@ -11,14 +11,14 @@
Expect.throwsRangeError(() => v.toStringAsExponential(21));
v.toStringAsExponential(1.5);
// ^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'double' can't be assigned to the parameter type 'int'.
v.toStringAsExponential("string");
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'String' can't be assigned to the parameter type 'int'.
v.toStringAsExponential("3");
// ^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'String' can't be assigned to the parameter type 'int'.
}
diff --git a/tests/language_2/double/to_string_as_fixed2_test.dart b/tests/language_2/double/to_string_as_fixed2_test.dart
index 3040a30..885d9fc 100644
--- a/tests/language_2/double/to_string_as_fixed2_test.dart
+++ b/tests/language_2/double/to_string_as_fixed2_test.dart
@@ -16,14 +16,14 @@
Expect.throwsArgumentError(() => v.toStringAsFixed(null));
v.toStringAsFixed(1.5);
// ^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'double' can't be assigned to the parameter type 'int'.
v.toStringAsFixed("string");
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'String' can't be assigned to the parameter type 'int'.
v.toStringAsFixed("3");
// ^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'String' can't be assigned to the parameter type 'int'.
}
diff --git a/tests/language_2/double/to_string_as_precision2_test.dart b/tests/language_2/double/to_string_as_precision2_test.dart
index 4ce0c34..6df4222 100644
--- a/tests/language_2/double/to_string_as_precision2_test.dart
+++ b/tests/language_2/double/to_string_as_precision2_test.dart
@@ -16,14 +16,14 @@
Expect.throwsArgumentError(() => v.toStringAsPrecision(null));
v.toStringAsPrecision(1.5);
// ^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'double' can't be assigned to the parameter type 'int'.
v.toStringAsPrecision("string");
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'String' can't be assigned to the parameter type 'int'.
v.toStringAsPrecision("3");
// ^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'String' can't be assigned to the parameter type 'int'.
}
diff --git a/tests/language_2/dynamic/field_test.dart b/tests/language_2/dynamic/field_test.dart
index ebe094e..23190e0 100644
--- a/tests/language_2/dynamic/field_test.dart
+++ b/tests/language_2/dynamic/field_test.dart
@@ -15,21 +15,21 @@
foo() {
print(a);
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'a' isn't defined for the class 'C'.
return a;
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'a' isn't defined for the class 'C'.
}
bar() {
print(b.a);
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'b' isn't defined for the class 'C'.
return b.a;
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'b' isn't defined for the class 'C'.
}
}
diff --git a/tests/language_2/extension_methods/static_extension_getter_setter_conflicts_test.dart b/tests/language_2/extension_methods/static_extension_getter_setter_conflicts_test.dart
index 1d4b4db..8493792 100644
--- a/tests/language_2/extension_methods/static_extension_getter_setter_conflicts_test.dart
+++ b/tests/language_2/extension_methods/static_extension_getter_setter_conflicts_test.dart
@@ -23,7 +23,7 @@
c0.m1;
c0.m1 = 0;
// ^^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] The setter 'm1' isn't defined for the class 'C0'.
E0(c0).m1 = 0;
E0(c0).m1;
@@ -33,12 +33,12 @@
c0.m1 += 0;
// ^^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] The setter 'm1' isn't defined for the class 'C0'.
c0.m1++;
// ^^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] The setter 'm1' isn't defined for the class 'C0'.
c0.m2 = 0;
@@ -109,7 +109,7 @@
c1a.m1 = 0;
// ^^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_LOCAL
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_LOCAL
// [cfe] The setter 'm1' isn't defined for the class 'C1<int>'.
c1a.m2;
@@ -212,7 +212,7 @@
this.m1;
this.m1 = 0;
// ^^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] The setter 'm1' isn't defined for the class 'C2'.
this.m2 = 0;
diff --git a/tests/language_2/extension_methods/static_extension_internal_basename_shadowing_error_test.dart b/tests/language_2/extension_methods/static_extension_internal_basename_shadowing_error_test.dart
index c7ce72e..f1a9254 100644
--- a/tests/language_2/extension_methods/static_extension_internal_basename_shadowing_error_test.dart
+++ b/tests/language_2/extension_methods/static_extension_internal_basename_shadowing_error_test.dart
@@ -23,29 +23,29 @@
// The instance getter shadows the global setter
topLevelSetter = topLevelSetter + 1;
// ^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelSetter'.
topLevelSetter++;
// ^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelSetter'.
topLevelSetter = 0;
// ^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelSetter'.
// The instance getter shadows the global field setter
topLevelField = topLevelField + 1;
// ^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelField'.
topLevelField++;
// ^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelField'.
topLevelField = 0;
// ^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelField'.
// The instance getter shadows the global method
@@ -115,29 +115,29 @@
// The static getter shadows the global setter
topLevelSetter = topLevelSetter + 1;
// ^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelSetter'.
topLevelSetter++;
// ^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelSetter'.
topLevelSetter = 0;
// ^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelSetter'.
// The static getter shadows the global field setter
topLevelField = topLevelField + 1;
// ^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelField'.
topLevelField++;
// ^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelField'.
topLevelField = 0;
// ^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'topLevelField'.
// The static getter shadows the global method
@@ -211,15 +211,15 @@
// The instance getter shadows the other extension's setter
extensionSetter = extensionSetter + 1;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'extensionSetter'.
extensionSetter++;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'extensionSetter'.
extensionSetter = 0;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'extensionSetter'.
// The instance getter shadows the other extensions method
@@ -242,15 +242,15 @@
// The instance getter shadows the other extension's setter
extensionSetter = extensionSetter + 1;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] The setter 'extensionSetter' isn't defined for the class 'A7'.
extensionSetter++;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] The setter 'extensionSetter' isn't defined for the class 'A7'.
extensionSetter = 0;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] The setter 'extensionSetter' isn't defined for the class 'A7'.
// The instance getter shadows the other extensions method
@@ -343,15 +343,15 @@
// The static getter shadows the other extension's setter
extensionSetter = extensionSetter + 1;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'extensionSetter'.
extensionSetter++;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'extensionSetter'.
extensionSetter = 0;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'extensionSetter'.
// The static field shadows the other extension's setter
@@ -389,15 +389,15 @@
// The static getter shadows the other extension's setter
extensionSetter = extensionSetter + 1;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'extensionSetter'.
extensionSetter++;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'extensionSetter'.
extensionSetter = 0;
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'extensionSetter'.
// The static field shadows the other extension's setter
diff --git a/tests/language_2/extension_methods/static_extension_internal_resolution_4_error_test.dart b/tests/language_2/extension_methods/static_extension_internal_resolution_4_error_test.dart
index d1a4685..6f6944c 100644
--- a/tests/language_2/extension_methods/static_extension_internal_resolution_4_error_test.dart
+++ b/tests/language_2/extension_methods/static_extension_internal_resolution_4_error_test.dart
@@ -238,21 +238,21 @@
// [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
// [cfe] The property 'fieldInExtensionScope' is defined in multiple extensions for 'B' and neither is more specific.
// ^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
checkExtensionValue(t0);
bool t1 = getterInExtensionScope;
// ^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
// [cfe] The property 'getterInExtensionScope' is defined in multiple extensions for 'B' and neither is more specific.
// ^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
checkExtensionValue(t1);
setterInExtensionScope = extensionValue;
// ^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
// [cfe] The property 'setterInExtensionScope' is defined in multiple extensions for 'B' and neither is more specific.
// ^^^^^^^^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
bool t2 = methodInExtensionScope();
// ^^^^^^^^^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
diff --git a/tests/language_2/extension_methods/static_extension_setter_getter_assignability_error_test.dart b/tests/language_2/extension_methods/static_extension_setter_getter_assignability_error_test.dart
index 8784f92..8b05ada 100644
--- a/tests/language_2/extension_methods/static_extension_setter_getter_assignability_error_test.dart
+++ b/tests/language_2/extension_methods/static_extension_setter_getter_assignability_error_test.dart
@@ -10,7 +10,7 @@
// ^^
// [cfe] unspecified
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.GETTER_NOT_ASSIGNABLE_SETTER_TYPES
+ // [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_ASSIGNABLE_SETTER_TYPES
static void set property(String value) {}
// ^^
// [cfe] unspecified
@@ -18,7 +18,7 @@
// ^^
// [cfe] unspecified
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.GETTER_NOT_ASSIGNABLE_SETTER_TYPES
+ // [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_ASSIGNABLE_SETTER_TYPES
void set property2(String x) {}
// ^^
// [cfe] unspecified
diff --git a/tests/language_2/factory/factory4_test.dart b/tests/language_2/factory/factory4_test.dart
index 660b103..ad2dd27 100644
--- a/tests/language_2/factory/factory4_test.dart
+++ b/tests/language_2/factory/factory4_test.dart
@@ -5,7 +5,7 @@
abstract class Link<T> {
factory Link.create() = LinkFactory.create;
// ^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.REDIRECT_TO_INVALID_RETURN_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_INVALID_RETURN_TYPE
// [cfe] The constructor function type 'LinkFactory<dynamic> Function()' isn't a subtype of 'Link<T> Function()'.
}
diff --git a/tests/language_2/factory/factory5_test.dart b/tests/language_2/factory/factory5_test.dart
index c1b5028..ee187a5 100644
--- a/tests/language_2/factory/factory5_test.dart
+++ b/tests/language_2/factory/factory5_test.dart
@@ -5,7 +5,7 @@
abstract class Link<T> {
factory Link.create() = LinkFactory<T>.create;
// ^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.REDIRECT_TO_INVALID_RETURN_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_INVALID_RETURN_TYPE
// [cfe] The constructor function type 'LinkFactory<T> Function()' isn't a subtype of 'Link<T> Function()'.
}
diff --git a/tests/language_2/factory/factory6_test.dart b/tests/language_2/factory/factory6_test.dart
index 7e36cb9..6084e82 100644
--- a/tests/language_2/factory/factory6_test.dart
+++ b/tests/language_2/factory/factory6_test.dart
@@ -7,7 +7,7 @@
abstract class Link<T> {
factory Link.Foo() = LinkFactory<T>.Foo;
// ^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.REDIRECT_TO_INVALID_RETURN_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_INVALID_RETURN_TYPE
// [cfe] The constructor function type 'LinkFactory<T> Function()' isn't a subtype of 'Link<T> Function()'.
}
diff --git a/tests/language_2/factory/factory_test.dart b/tests/language_2/factory/factory_test.dart
index 9d4301c..d7b5c2d 100644
--- a/tests/language_2/factory/factory_test.dart
+++ b/tests/language_2/factory/factory_test.dart
@@ -39,7 +39,7 @@
// [analyzer] STATIC_TYPE_WARNING.WRONG_NUMBER_OF_TYPE_ARGUMENTS
// [cfe] Expected 0 type arguments.
// ^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.REDIRECT_TO_INVALID_RETURN_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_INVALID_RETURN_TYPE
}
class LinkFactory {
diff --git a/tests/language_2/factory/redirection3_cyclic_test.dart b/tests/language_2/factory/redirection3_cyclic_test.dart
index ed352be..13dc39b 100644
--- a/tests/language_2/factory/redirection3_cyclic_test.dart
+++ b/tests/language_2/factory/redirection3_cyclic_test.dart
@@ -28,7 +28,7 @@
// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
// [cfe] Expected an identifier, but got '('.
// ^^^
- // [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+ // [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
C();
}
diff --git a/tests/language_2/final/attempt_reinitialization_test.dart b/tests/language_2/final/attempt_reinitialization_test.dart
index 009998b..2db5efe 100644
--- a/tests/language_2/final/attempt_reinitialization_test.dart
+++ b/tests/language_2/final/attempt_reinitialization_test.dart
@@ -5,7 +5,7 @@
class Foo {
Foo(this.x);
// ^
- // [analyzer] STATIC_WARNING.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR
+ // [analyzer] COMPILE_TIME_ERROR.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR
// [cfe] 'x' is a final instance variable that has already been initialized.
final int x = 42;
}
@@ -15,7 +15,7 @@
CoffeeShop.name(String shopName)
: this.shopName = shopName;
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION
// ^
// [cfe] 'shopName' is a final instance variable that has already been initialized.
}
diff --git a/tests/language_2/final/variable_assignment_test.dart b/tests/language_2/final/variable_assignment_test.dart
index f001d40..840f0e6 100644
--- a/tests/language_2/final/variable_assignment_test.dart
+++ b/tests/language_2/final/variable_assignment_test.dart
@@ -8,18 +8,18 @@
final x = 30;
x = 0;
//^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_LOCAL
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_LOCAL
// [cfe] Can't assign to the final variable 'x'.
x += 1;
//^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_LOCAL
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_LOCAL
// [cfe] Can't assign to the final variable 'x'.
++x;
//^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_LOCAL
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_LOCAL
// [cfe] Can't assign to the final variable 'x'.
x++;
//^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_LOCAL
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_LOCAL
// [cfe] Can't assign to the final variable 'x'.
}
diff --git a/tests/language_2/generic/constructor_mixin2_test.dart b/tests/language_2/generic/constructor_mixin2_test.dart
index 6630e4e..88281e3 100644
--- a/tests/language_2/generic/constructor_mixin2_test.dart
+++ b/tests/language_2/generic/constructor_mixin2_test.dart
@@ -22,6 +22,6 @@
checkNoDynamicTypeError(() => new D<int>(v));
checkDynamicTypeError(() => new D<String>(v));
// ^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'int' can't be assigned to the parameter type 'String'.
}
diff --git a/tests/language_2/generic/constructor_mixin3_test.dart b/tests/language_2/generic/constructor_mixin3_test.dart
index 7a1a21a..04e86a1 100644
--- a/tests/language_2/generic/constructor_mixin3_test.dart
+++ b/tests/language_2/generic/constructor_mixin3_test.dart
@@ -21,6 +21,6 @@
checkNoDynamicTypeError(() => new C1(v));
checkDynamicTypeError(() => new C2(v));
// ^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'int' can't be assigned to the parameter type 'String'.
}
diff --git a/tests/language_2/generic/constructor_mixin_test.dart b/tests/language_2/generic/constructor_mixin_test.dart
index a2b828e..f79f865 100644
--- a/tests/language_2/generic/constructor_mixin_test.dart
+++ b/tests/language_2/generic/constructor_mixin_test.dart
@@ -20,6 +20,6 @@
checkNoDynamicTypeError(() => new C<int>(v));
checkDynamicTypeError(() => new C<String>(v));
// ^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'int' can't be assigned to the parameter type 'String'.
}
diff --git a/tests/language_2/generic/instantiate_type_variable_test.dart b/tests/language_2/generic/instantiate_type_variable_test.dart
index 7fb503d..8eb9c7a 100644
--- a/tests/language_2/generic/instantiate_type_variable_test.dart
+++ b/tests/language_2/generic/instantiate_type_variable_test.dart
@@ -11,7 +11,7 @@
// ^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.INVALID_CAST_NEW_EXPR
// ^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'T'.
}
}
diff --git a/tests/language_2/generic/reify_typevar_static_test.dart b/tests/language_2/generic/reify_typevar_static_test.dart
index b3c502b..c589aff 100644
--- a/tests/language_2/generic/reify_typevar_static_test.dart
+++ b/tests/language_2/generic/reify_typevar_static_test.dart
@@ -11,7 +11,7 @@
static staticFunction(bool b) =>
b ? T :
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
// [cfe] Type variables can't be used in static members.
null;
factory C.factoryConstructor(bool b) => new C(
diff --git a/tests/language_2/getter/no_setter2_test.dart b/tests/language_2/getter/no_setter2_test.dart
index 778ce8f..83d92c4 100644
--- a/tests/language_2/getter/no_setter2_test.dart
+++ b/tests/language_2/getter/no_setter2_test.dart
@@ -11,20 +11,20 @@
Example() {
nextVar++;
// ^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'nextVar'.
this.nextVar++;
// ^^^^^^^
- // [analyzer] STATIC_TYPE_WARNING.INSTANCE_ACCESS_TO_STATIC_MEMBER
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] The getter 'nextVar' isn't defined for the class 'Example'.
// ^^^^^^^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+ // [analyzer] STATIC_TYPE_WARNING.INSTANCE_ACCESS_TO_STATIC_MEMBER
// [cfe] The setter 'nextVar' isn't defined for the class 'Example'.
}
static test() {
nextVar++;
// ^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'nextVar'.
this.nextVar++;
// ^^^^
@@ -33,7 +33,7 @@
// ^^^^^^^
// [analyzer] STATIC_TYPE_WARNING.INSTANCE_ACCESS_TO_STATIC_MEMBER
// ^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
}
}
diff --git a/tests/language_2/getter/no_setter_test.dart b/tests/language_2/getter/no_setter_test.dart
index 8d84129..c403d32 100644
--- a/tests/language_2/getter/no_setter_test.dart
+++ b/tests/language_2/getter/no_setter_test.dart
@@ -11,19 +11,19 @@
Example() {
nextVar = 1;
// ^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'nextVar'.
this.nextVar = 1;
// ^^^^^^^
// [analyzer] STATIC_TYPE_WARNING.INSTANCE_ACCESS_TO_STATIC_MEMBER
// [cfe] The setter 'nextVar' isn't defined for the class 'Example'.
// ^^^^^^^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
}
static test() {
nextVar = 0;
// ^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'nextVar'.
this.nextVar = 0;
// ^^^^
@@ -32,7 +32,7 @@
// ^^^^^^^
// [analyzer] STATIC_TYPE_WARNING.INSTANCE_ACCESS_TO_STATIC_MEMBER
// ^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
}
}
diff --git a/tests/language_2/getter/setter2_test.dart b/tests/language_2/getter/setter2_test.dart
index de9bc28..ab9ba5a 100644
--- a/tests/language_2/getter/setter2_test.dart
+++ b/tests/language_2/getter/setter2_test.dart
@@ -37,7 +37,7 @@
C setterField;
A get field {
// ^^^^^
- // [analyzer] STATIC_WARNING.GETTER_NOT_ASSIGNABLE_SETTER_TYPES
+ // [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_ASSIGNABLE_SETTER_TYPES
return getterField;
}
diff --git a/tests/language_2/getter/setter_type_test.dart b/tests/language_2/getter/setter_type_test.dart
index e108848..a7caee4 100644
--- a/tests/language_2/getter/setter_type_test.dart
+++ b/tests/language_2/getter/setter_type_test.dart
@@ -10,7 +10,7 @@
int get foo => bar;
// ^^^
-// [analyzer] STATIC_WARNING.GETTER_NOT_ASSIGNABLE_SETTER_TYPES
+// [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_ASSIGNABLE_SETTER_TYPES
void set foo(String str) {
bar = str.length;
diff --git a/tests/language_2/getter/syntax_get_set_syntax_test.dart b/tests/language_2/getter/syntax_get_set_syntax_test.dart
index e9789c6..9ccbab1 100644
--- a/tests/language_2/getter/syntax_get_set_syntax_test.dart
+++ b/tests/language_2/getter/syntax_get_set_syntax_test.dart
@@ -73,7 +73,7 @@
// [analyzer] SYNTACTIC_ERROR.VAR_RETURN_TYPE
// [cfe] The return type can't be 'var'.
// ^^^^^^
-// [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
var get b, c;
//^^^
// [analyzer] SYNTACTIC_ERROR.VAR_RETURN_TYPE
@@ -94,7 +94,7 @@
// [analyzer] SYNTACTIC_ERROR.VAR_RETURN_TYPE
// [cfe] The return type can't be 'var'.
// ^^^^^^
-// [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER
// [cfe] A method declaration needs an explicit list of parameters.
@@ -141,9 +141,9 @@
List set;
List set d;
//^^^^
-// [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+// [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
//^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER
// [cfe] A method declaration needs an explicit list of parameters.
@@ -153,7 +153,7 @@
// [cfe] A setter should have exactly one formal parameter.
List set e, f;
//^^^^
-// [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+// [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER
// [cfe] A method declaration needs an explicit list of parameters.
@@ -189,9 +189,9 @@
List<int> set;
List<int> set d;
//^^^^^^^^^
-// [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+// [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
//^^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER
// [cfe] A method declaration needs an explicit list of parameters.
@@ -201,7 +201,7 @@
// [cfe] A setter should have exactly one formal parameter.
List<int> set e, f;
//^^^^^^^^^
-// [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+// [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// ^
// [analyzer] COMPILE_TIME_ERROR.WRONG_NUMBER_OF_PARAMETERS_FOR_SETTER
// [cfe] A method declaration needs an explicit list of parameters.
diff --git a/tests/language_2/identifier/known_prefix_error_test.dart b/tests/language_2/identifier/known_prefix_error_test.dart
index a104b53..fe1ea19 100644
--- a/tests/language_2/identifier/known_prefix_error_test.dart
+++ b/tests/language_2/identifier/known_prefix_error_test.dart
@@ -23,49 +23,49 @@
async<dynamic> _async = new async.A();
// [error line 24, column 1, length 5]
-// [analyzer] STATIC_WARNING.NOT_A_TYPE
+// [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
// [cfe] 'async' isn't a type.
// [error line 24, column 1]
// [cfe] Expected 0 type arguments.
await<dynamic> _await = new await.A();
// [error line 30, column 1, length 5]
-// [analyzer] STATIC_WARNING.NOT_A_TYPE
+// [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
// [cfe] 'await' isn't a type.
// [error line 30, column 1]
// [cfe] Expected 0 type arguments.
hide<dynamic> _hide = new hide.A();
// [error line 36, column 1, length 4]
-// [analyzer] STATIC_WARNING.NOT_A_TYPE
+// [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
// [cfe] 'hide' isn't a type.
// [error line 36, column 1]
// [cfe] Expected 0 type arguments.
of<dynamic> _of = new of.A();
// [error line 42, column 1, length 2]
-// [analyzer] STATIC_WARNING.NOT_A_TYPE
+// [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
// [cfe] 'of' isn't a type.
// [error line 42, column 1]
// [cfe] Expected 0 type arguments.
on<dynamic> _on = new on.A();
// [error line 48, column 1, length 2]
-// [analyzer] STATIC_WARNING.NOT_A_TYPE
+// [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
// [cfe] 'on' isn't a type.
// [error line 48, column 1]
// [cfe] Expected 0 type arguments.
show<dynamic> _show = new show.A();
// [error line 54, column 1, length 4]
-// [analyzer] STATIC_WARNING.NOT_A_TYPE
+// [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
// [cfe] 'show' isn't a type.
// [error line 54, column 1]
// [cfe] Expected 0 type arguments.
sync<dynamic> _sync = new sync.A();
// [error line 60, column 1, length 4]
-// [analyzer] STATIC_WARNING.NOT_A_TYPE
+// [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
// [cfe] 'sync' isn't a type.
// [error line 60, column 1]
// [cfe] Expected 0 type arguments.
yield<dynamic> _yield = new yield.A();
// [error line 66, column 1, length 5]
-// [analyzer] STATIC_WARNING.NOT_A_TYPE
+// [analyzer] COMPILE_TIME_ERROR.NOT_A_TYPE
// [cfe] 'yield' isn't a type.
// [error line 66, column 1]
// [cfe] Expected 0 type arguments.
diff --git a/tests/language_2/if_null/assignment_behavior_test.dart b/tests/language_2/if_null/assignment_behavior_test.dart
index a95aa57..99811f2 100644
--- a/tests/language_2/if_null/assignment_behavior_test.dart
+++ b/tests/language_2/if_null/assignment_behavior_test.dart
@@ -122,7 +122,7 @@
yGetValue = 1; check(1, () => v ??= y, ['$s.v', 'y', '$s.v=1']);
finalOne ??= null;
// ^^^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL
// [cfe] The setter 'finalOne' isn't defined for the class 'C'.
yGetValue = 1;
}
@@ -163,11 +163,11 @@
{ var l; yGetValue = 1; check(1, () => l ??= y, ['y']); Expect.equals(1, l); }
{ final l = 1; l ??= null; }
// ^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_LOCAL
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_LOCAL
// [cfe] Can't assign to the final variable 'l'.
C ??= null;
//^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_TYPE
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_TYPE
// [cfe] Can't assign to a type literal.
h ??= null;
//^
diff --git a/tests/language_2/import/combinators2_test.dart b/tests/language_2/import/combinators2_test.dart
index 47a2db0..c1ee2fb 100644
--- a/tests/language_2/import/combinators2_test.dart
+++ b/tests/language_2/import/combinators2_test.dart
@@ -14,6 +14,6 @@
// Ugly is hidden.
print(ugly);
// ^^^^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'ugly'.
}
diff --git a/tests/language_2/initializing_formal/type_annotation_test.dart b/tests/language_2/initializing_formal/type_annotation_test.dart
index b15ad9a..6ca6548 100644
--- a/tests/language_2/initializing_formal/type_annotation_test.dart
+++ b/tests/language_2/initializing_formal/type_annotation_test.dart
@@ -10,14 +10,12 @@
C.subType(int this.a);
C.superType(dynamic this.a);
// ^^^^^^^^^^^^^^
- // [analyzer] COMPILE_TIME_ERROR.INVALID_PARAMETER_DECLARATION
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE
// ^
// [cfe] The type of parameter 'a', 'dynamic' is not a subtype of the corresponding field's type, 'num'.
C.unrelatedType(String this.a);
// ^^^^^^^^^^^^^
- // [analyzer] COMPILE_TIME_ERROR.INVALID_PARAMETER_DECLARATION
- // ^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE
// ^
// [cfe] The type of parameter 'a', 'String' is not a subtype of the corresponding field's type, 'num'.
}
diff --git a/tests/language_2/interface/static_method_test.dart b/tests/language_2/interface/static_method_test.dart
index b07e7b9..63783ef 100644
--- a/tests/language_2/interface/static_method_test.dart
+++ b/tests/language_2/interface/static_method_test.dart
@@ -12,6 +12,6 @@
main() {
A();
//^
-// [analyzer] STATIC_WARNING.INSTANTIATE_ABSTRACT_CLASS
+// [analyzer] COMPILE_TIME_ERROR.INSTANTIATE_ABSTRACT_CLASS
// [cfe] The class 'A' is abstract and can't be instantiated.
}
diff --git a/tests/language_2/is/isnot_malformed_type_test.dart b/tests/language_2/is/isnot_malformed_type_test.dart
index 11715e2..c81c644 100644
--- a/tests/language_2/is/isnot_malformed_type_test.dart
+++ b/tests/language_2/is/isnot_malformed_type_test.dart
@@ -8,7 +8,7 @@
// 'Baz' is not loaded, throws a type error on test.
return (obj is! Baz);
// ^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_UNDEFINED_NAME
// [cfe] 'Baz' isn't a type.
}
diff --git a/tests/language_2/is/malformed_type_test.dart b/tests/language_2/is/malformed_type_test.dart
index d54d4de..9628aa8 100644
--- a/tests/language_2/is/malformed_type_test.dart
+++ b/tests/language_2/is/malformed_type_test.dart
@@ -14,7 +14,7 @@
// malformed type.
if (e is Undefined) Expect.fail("unreachable");
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_UNDEFINED_NAME
// [cfe] 'Undefined' isn't a type.
}
@@ -23,7 +23,7 @@
// malformed type.
if (e as Undefined) Expect.fail("unreachable");
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CAST_TO_NON_TYPE
// [cfe] 'Undefined' isn't a type.
}
@@ -33,7 +33,7 @@
// Regression test for issue 16985.
if (e is Undefined && testEval(e)) Expect.fail("unreachable");
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_UNDEFINED_NAME
// [cfe] 'Undefined' isn't a type.
}
@@ -43,7 +43,7 @@
// Regression test for issue 16985.
if (e as Undefined && testEval(e)) Expect.fail("unreachable");
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CAST_TO_NON_TYPE
// [cfe] 'Undefined' isn't a type.
}
@@ -52,7 +52,7 @@
// runtime error is thrown.
if (testEval(e) is Undefined) Expect.fail("unreachable");
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_UNDEFINED_NAME
// [cfe] 'Undefined' isn't a type.
}
@@ -61,7 +61,7 @@
// runtime error is thrown.
if (testEval(e) as Undefined) Expect.fail("unreachable");
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CAST_TO_NON_TYPE
// [cfe] 'Undefined' isn't a type.
}
diff --git a/tests/language_2/is/not_class1_test.dart b/tests/language_2/is/not_class1_test.dart
index 6de8f8b..bb9a756 100644
--- a/tests/language_2/is/not_class1_test.dart
+++ b/tests/language_2/is/not_class1_test.dart
@@ -9,7 +9,7 @@
var a = A();
if (a is "A") return 0;
// [error line 10, column 12, length 0]
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_UNDEFINED_NAME
// [cfe] Expected ')' before this.
// ^^^
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
diff --git a/tests/language_2/is/not_class2_test.dart b/tests/language_2/is/not_class2_test.dart
index 9073117..9e82ec1 100644
--- a/tests/language_2/is/not_class2_test.dart
+++ b/tests/language_2/is/not_class2_test.dart
@@ -18,7 +18,7 @@
if (a is aa) {
// ^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_NON_TYPE
// [cfe] 'aa' isn't a type.
return 0;
}
diff --git a/tests/language_2/label/label8_test.dart b/tests/language_2/label/label8_test.dart
index df4f1b8..a40c1b7 100644
--- a/tests/language_2/label/label8_test.dart
+++ b/tests/language_2/label/label8_test.dart
@@ -13,7 +13,7 @@
{
case 111:
// ^^^^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Expected ';' after this.
// ^^^^
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
diff --git a/tests/language_2/list/literal1_test.dart b/tests/language_2/list/literal1_test.dart
index f8db7b2..cd54906 100644
--- a/tests/language_2/list/literal1_test.dart
+++ b/tests/language_2/list/literal1_test.dart
@@ -9,9 +9,9 @@
<String>
[0, 1];
// ^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'int' can't be assigned to a variable of type 'String'.
// ^
-// [analyzer] STATIC_WARNING.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'int' can't be assigned to a variable of type 'String'.
}
diff --git a/tests/language_2/malformed/malformed_test.dart b/tests/language_2/malformed/malformed_test.dart
index 119001c..d825460 100644
--- a/tests/language_2/malformed/malformed_test.dart
+++ b/tests/language_2/malformed/malformed_test.dart
@@ -8,20 +8,20 @@
checkIsUnresolved(var v) {
v is Unresolved;
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_UNDEFINED_NAME
// [cfe] 'Unresolved' isn't a type.
v is Unresolved<int>;
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_UNDEFINED_NAME
// [cfe] 'Unresolved' isn't a type.
v is prefix.Unresolved;
// ^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_UNDEFINED_NAME
// ^
// [cfe] 'Unresolved' isn't a type.
v is prefix.Unresolved<int>;
// ^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_UNDEFINED_NAME
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_UNDEFINED_NAME
// ^
// [cfe] 'Unresolved' isn't a type.
}
@@ -54,20 +54,20 @@
checkAsUnresolved(var v) {
v as Unresolved;
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CAST_TO_NON_TYPE
// [cfe] 'Unresolved' isn't a type.
v as Unresolved<int>;
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CAST_TO_NON_TYPE
// [cfe] 'Unresolved' isn't a type.
v as prefix.Unresolved;
// ^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CAST_TO_NON_TYPE
// ^
// [cfe] 'Unresolved' isn't a type.
v as prefix.Unresolved<int>;
// ^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CAST_TO_NON_TYPE
// ^
// [cfe] 'Unresolved' isn't a type.
}
@@ -105,11 +105,11 @@
new undeclared_prefix.Unresolved();
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'undeclared_prefix.Unresolved'.
new undeclared_prefix.Unresolved<int>();
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'undeclared_prefix.Unresolved'.
try {
@@ -117,7 +117,7 @@
}
on Unresolved
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.NON_TYPE_IN_CATCH_CLAUSE
+ // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_IN_CATCH_CLAUSE
// [cfe] 'Unresolved' isn't a type.
catch (e) {
}
@@ -127,7 +127,7 @@
}
on Unresolved<int>
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.NON_TYPE_IN_CATCH_CLAUSE
+ // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_IN_CATCH_CLAUSE
// [cfe] 'Unresolved' isn't a type.
catch (e) {
}
@@ -137,7 +137,7 @@
}
on prefix.Unresolved
// ^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.NON_TYPE_IN_CATCH_CLAUSE
+ // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_IN_CATCH_CLAUSE
// ^
// [cfe] 'Unresolved' isn't a type.
catch (e) {
@@ -148,7 +148,7 @@
}
on prefix.Unresolved<int>
// ^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.NON_TYPE_IN_CATCH_CLAUSE
+ // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_IN_CATCH_CLAUSE
// ^
// [cfe] 'Unresolved' isn't a type.
catch (e) {
@@ -159,7 +159,7 @@
}
on undeclared_prefix.Unresolved<int>
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.NON_TYPE_IN_CATCH_CLAUSE
+ // [analyzer] COMPILE_TIME_ERROR.NON_TYPE_IN_CATCH_CLAUSE
// [cfe] 'undeclared_prefix.Unresolved' can't be used as a type because 'undeclared_prefix' isn't defined.
catch (e) {
}
diff --git a/tests/language_2/map/literal1_test.dart b/tests/language_2/map/literal1_test.dart
index 71c4e8e..49aa5fa 100644
--- a/tests/language_2/map/literal1_test.dart
+++ b/tests/language_2/map/literal1_test.dart
@@ -9,6 +9,6 @@
<String, String>
{"a": 0};
// ^
- // [analyzer] STATIC_WARNING.MAP_VALUE_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.MAP_VALUE_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'int' can't be assigned to a variable of type 'String'.
}
diff --git a/tests/language_2/method/not_found_test.dart b/tests/language_2/method/not_found_test.dart
index 4755cba..883cd6f 100644
--- a/tests/language_2/method/not_found_test.dart
+++ b/tests/language_2/method/not_found_test.dart
@@ -7,7 +7,7 @@
// [cfe] The non-abstract class 'A' is missing implementations for these members:
B();
//^^^^
-// [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
static const field = const B();
// ^
// [analyzer] COMPILE_TIME_ERROR.IMPLICIT_THIS_REFERENCE_IN_INITIALIZER
diff --git a/tests/language_2/mixin/illegal_constructor_test.dart b/tests/language_2/mixin/illegal_constructor_test.dart
index b6df547..b70f764 100644
--- a/tests/language_2/mixin/illegal_constructor_test.dart
+++ b/tests/language_2/mixin/illegal_constructor_test.dart
@@ -102,7 +102,7 @@
// [cfe] Too many positional arguments: 0 allowed, but 3 found.
new C0.named();
// ^^^^^
- // [analyzer] STATIC_WARNING.NEW_WITH_UNDEFINED_CONSTRUCTOR
+ // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR
// [cfe] Method not found: 'C0.named'.
new D0(1,2,3);
// ^^^^^^^
@@ -110,6 +110,6 @@
// [cfe] Too many positional arguments: 0 allowed, but 3 found.
new D0.named();
// ^^^^^
- // [analyzer] STATIC_WARNING.NEW_WITH_UNDEFINED_CONSTRUCTOR
+ // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR
// [cfe] Method not found: 'D0.named'.
}
diff --git a/tests/language_2/mixin/method_override_test.dart b/tests/language_2/mixin/method_override_test.dart
index 3987455..137156e 100644
--- a/tests/language_2/mixin/method_override_test.dart
+++ b/tests/language_2/mixin/method_override_test.dart
@@ -302,7 +302,7 @@
// [analyzer] COMPILE_TIME_ERROR.INVALID_OVERRIDE
class G5 = GTTnum with CII;
// ^^
-// [analyzer] STATIC_WARNING.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
// [cfe] The mixin application class 'G5' introduces an erroneous override of 'id'.
// ^
// [cfe] The non-abstract class 'G5' is missing implementations for these members:
diff --git a/tests/language_2/new/create_unresolved_type_test.dart b/tests/language_2/new/create_unresolved_type_test.dart
index 6d215ab..16fb7a6 100644
--- a/tests/language_2/new/create_unresolved_type_test.dart
+++ b/tests/language_2/new/create_unresolved_type_test.dart
@@ -5,6 +5,6 @@
main() {
new F<int>();
// ^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'F'.
}
diff --git a/tests/language_2/new/expression_type_args_test.dart b/tests/language_2/new/expression_type_args_test.dart
index b32f0e1..da303e3 100644
--- a/tests/language_2/new/expression_type_args_test.dart
+++ b/tests/language_2/new/expression_type_args_test.dart
@@ -7,20 +7,20 @@
// Can't instantiate type parameter (within static or instance method).
m1() => new T();
// ^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'T'.
static m2() => new T();
// ^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'T'.
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
// OK when used within instance method, but not in static method.
m3() => new A<T>();
static m4() => new A<T>();
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
// [cfe] Type variables can't be used in static members.
}
diff --git a/tests/language_2/new/prefix_test.dart b/tests/language_2/new/prefix_test.dart
index bef0d69..8e5c7bc 100644
--- a/tests/language_2/new/prefix_test.dart
+++ b/tests/language_2/new/prefix_test.dart
@@ -7,6 +7,6 @@
main() {
return new prefix();
// ^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'prefix'.
}
diff --git a/tests/language_2/null_aware/assignment_test.dart b/tests/language_2/null_aware/assignment_test.dart
index adbe290..0b97167 100644
--- a/tests/language_2/null_aware/assignment_test.dart
+++ b/tests/language_2/null_aware/assignment_test.dart
@@ -112,7 +112,7 @@
// [cfe] The setter 'v' isn't defined for the class 'B'.
{ D d = new D(new E()); F f = (d?.v += nullC()); }
// ^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'C' can't be assigned to a variable of type 'int'.
{ D d = new D(new E()); H h = (d?.v += 1); }
// ^^^^^^^^^^^
@@ -121,11 +121,11 @@
// [cfe] A value of type 'G' can't be assigned to a variable of type 'H'.
{ D.staticE = new E(); F f = (D?.staticE += nullC()); }
// ^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'C' can't be assigned to a variable of type 'int'.
{ h.D.staticE = new h.E(); h.F f = (h.D?.staticE += h.nullC()); }
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'C' can't be assigned to a variable of type 'int'.
{ D.staticE = new E(); H h = (D?.staticE += 1); }
// ^^^^^^^^^^^^^^^^^
diff --git a/tests/language_2/null_aware/invocation_test.dart b/tests/language_2/null_aware/invocation_test.dart
index 1d729d7..03c3ddb 100644
--- a/tests/language_2/null_aware/invocation_test.dart
+++ b/tests/language_2/null_aware/invocation_test.dart
@@ -70,7 +70,7 @@
// [cfe] The method 'f' isn't defined for the class 'B'.
{ int i = 1; Expect.equals(null, nullC()?.f(i)); }
// ^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'int' can't be assigned to the parameter type 'dynamic Function()'.
// '?.' can't be used to access toplevel functions in libraries imported via
diff --git a/tests/language_2/number/identifier_test.dart b/tests/language_2/number/identifier_test.dart
index ce91927..7b575c5 100644
--- a/tests/language_2/number/identifier_test.dart
+++ b/tests/language_2/number/identifier_test.dart
@@ -10,32 +10,32 @@
// ^^^
// [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
// ^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_NON_TYPE
Expect.equals(2, 2 as int);
// ^^^
// [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
// ^^^
- // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CAST_TO_NON_TYPE
Expect.isTrue(-2 is int);
// ^^^
// [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
// ^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_NON_TYPE
Expect.equals(-2, -2 as int);
// ^^^
// [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
// ^^^
- // [analyzer] STATIC_WARNING.CAST_TO_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CAST_TO_NON_TYPE
Expect.isTrue(0x10 is int);
// ^^^
// [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
// ^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_NON_TYPE
Expect.isTrue(-0x10 is int);
// ^^^
// [analyzer] COMPILE_TIME_ERROR.REFERENCED_BEFORE_DECLARATION
// ^^^
- // [analyzer] STATIC_WARNING.TYPE_TEST_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_TEST_WITH_NON_TYPE
// "a" will be part of hex literal, the following "s" is an error.
0x10as int;
@@ -75,14 +75,14 @@
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
// [cfe] Expected ';' after this.
// ^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'd'.
1D;
//^
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
// [cfe] Expected ';' after this.
// ^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'D'.
Expect.throwsNoSuchMethodError(() => 1.d+2);
// ^
@@ -97,14 +97,14 @@
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
// [cfe] Expected ';' after this.
// ^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'd'.
1.1D;
//^^^
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
// [cfe] Expected ';' after this.
// ^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'D'.
1e;
//^
@@ -116,6 +116,6 @@
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
// [cfe] Expected ';' after this.
// ^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'x'.
}
diff --git a/tests/language_2/operator/invalid_operators_test.dart b/tests/language_2/operator/invalid_operators_test.dart
index a02ad70..f8acc82 100644
--- a/tests/language_2/operator/invalid_operators_test.dart
+++ b/tests/language_2/operator/invalid_operators_test.dart
@@ -673,7 +673,7 @@
class Operators8 {
/*space*/ int operator []=(a, b) {}
// ^^^
- // [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_OPERATOR
+ // [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_OPERATOR
// [cfe] unspecified
}
diff --git a/tests/language_2/optimize/inferrer_constructor5_test.dart b/tests/language_2/optimize/inferrer_constructor5_test.dart
index 7221fea..186b3c9 100644
--- a/tests/language_2/optimize/inferrer_constructor5_test.dart
+++ b/tests/language_2/optimize/inferrer_constructor5_test.dart
@@ -8,7 +8,7 @@
A() {
print(field + 42);
// ^^^^^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'field' isn't defined for the class 'A'.
}
}
diff --git a/tests/language_2/override/inheritance_abstract_test.dart b/tests/language_2/override/inheritance_abstract_test.dart
index 9218fab..5808673 100644
--- a/tests/language_2/override/inheritance_abstract_test.dart
+++ b/tests/language_2/override/inheritance_abstract_test.dart
@@ -46,18 +46,18 @@
class Class extends A implements I, J {
// ^^^^^
-// [analyzer] STATIC_WARNING.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
// [cfe] The non-abstract class 'Class' is missing implementations for these members:
method1() {}
method2();
//^^^^^^^^^^
-// [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
get getter3;
//^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
set setter4(_);
//^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
method5() {}
method6([a]) {}
set field13(_) {}
diff --git a/tests/language_2/parameter/named_type_test.dart b/tests/language_2/parameter/named_type_test.dart
index 0f82274..7cb2cdf 100644
--- a/tests/language_2/parameter/named_type_test.dart
+++ b/tests/language_2/parameter/named_type_test.dart
@@ -27,10 +27,10 @@
// [cfe] The local function has type 'void Function(num)' that isn't of expected type 'void Function(num, {bool b})'.
acceptFunNumOptBool(funNumBool);
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'void Function(num, bool)' can't be assigned to the parameter type 'void Function(num, {bool b})'.
acceptFunNumOptBool(funNumOptBoolX);
// ^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'void Function(num, {bool x})' can't be assigned to the parameter type 'void Function(num, {bool b})'.
}
diff --git a/tests/language_2/prefix/import_collision_test.dart b/tests/language_2/prefix/import_collision_test.dart
index 6ad50cb..0f561f8 100644
--- a/tests/language_2/prefix/import_collision_test.dart
+++ b/tests/language_2/prefix/import_collision_test.dart
@@ -11,6 +11,6 @@
main() {
lib2.foo = 1;
// ^^^
- // [analyzer] STATIC_WARNING.AMBIGUOUS_IMPORT
+ // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_IMPORT
// [cfe] Setter not found: 'foo'.
}
diff --git a/tests/language_2/prefix/transitive_import_prefix_test.dart b/tests/language_2/prefix/transitive_import_prefix_test.dart
index 34c3020..3365f2f 100644
--- a/tests/language_2/prefix/transitive_import_prefix_test.dart
+++ b/tests/language_2/prefix/transitive_import_prefix_test.dart
@@ -7,14 +7,14 @@
// Library prefixes in the imported libraries should not be visible here.
new lib11.Library11(1);
// ^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'lib11.Library11'.
lib11.Library11.static_func();
//^^^^^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'lib11'.
lib11.Library11.static_fld;
//^^^^^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'lib11'.
}
diff --git a/tests/language_2/prefix/transitive_import_test.dart b/tests/language_2/prefix/transitive_import_test.dart
index 256894c..582b3e2 100644
--- a/tests/language_2/prefix/transitive_import_test.dart
+++ b/tests/language_2/prefix/transitive_import_test.dart
@@ -10,7 +10,7 @@
// Class should not be visible.
new lib12.Library11(1);
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'Library11'.
// Variable should not be visible.
diff --git a/tests/language_2/private/access_test.dart b/tests/language_2/private/access_test.dart
index 016e4dc..cbfef18 100644
--- a/tests/language_2/private/access_test.dart
+++ b/tests/language_2/private/access_test.dart
@@ -19,7 +19,7 @@
// [analyzer] STATIC_TYPE_WARNING.UNDEFINED_FUNCTION
new _Class();
// ^^^^^^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: '_Class'.
private._Class();
//^
@@ -28,10 +28,10 @@
// [analyzer] STATIC_TYPE_WARNING.UNDEFINED_FUNCTION
new Class._constructor();
// ^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.NEW_WITH_UNDEFINED_CONSTRUCTOR
+ // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR
// [cfe] Method not found: 'Class._constructor'.
new private.Class._constructor();
// ^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.NEW_WITH_UNDEFINED_CONSTRUCTOR
+ // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR
// [cfe] Method not found: 'Class._constructor'.
}
diff --git a/tests/language_2/private/member1_test.dart b/tests/language_2/private/member1_test.dart
index a542e48..415bd25 100644
--- a/tests/language_2/private/member1_test.dart
+++ b/tests/language_2/private/member1_test.dart
@@ -10,7 +10,7 @@
test() {
_instanceField = true;
// ^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The setter '_instanceField' isn't defined for the class 'Test'.
}
}
diff --git a/tests/language_2/private/member2_test.dart b/tests/language_2/private/member2_test.dart
index 7c86d12..6851ad7 100644
--- a/tests/language_2/private/member2_test.dart
+++ b/tests/language_2/private/member2_test.dart
@@ -10,7 +10,7 @@
test() {
_staticField = true;
// ^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The setter '_staticField' isn't defined for the class 'Test'.
}
}
diff --git a/tests/language_2/redirecting/factory_default_values_test.dart b/tests/language_2/redirecting/factory_default_values_test.dart
index 0b24876..84a7d17 100644
--- a/tests/language_2/redirecting/factory_default_values_test.dart
+++ b/tests/language_2/redirecting/factory_default_values_test.dart
@@ -20,7 +20,7 @@
// ^
// [cfe] Can't have a default value here because any default values of 'A' would be used instead.
// ^
- // [analyzer] STATIC_WARNING.REDIRECT_TO_INVALID_FUNCTION_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_INVALID_FUNCTION_TYPE
// [cfe] The constructor function type 'A Function(int, [int])' isn't a subtype of 'A Function(int, {int b})'.
int a;
diff --git a/tests/language_2/redirecting/factory_incompatible_signature_test.dart b/tests/language_2/redirecting/factory_incompatible_signature_test.dart
index 7a77f18..7c0253a 100644
--- a/tests/language_2/redirecting/factory_incompatible_signature_test.dart
+++ b/tests/language_2/redirecting/factory_incompatible_signature_test.dart
@@ -11,7 +11,7 @@
A(a, b);
factory A.f() = A;
// ^
- // [analyzer] STATIC_WARNING.REDIRECT_TO_INVALID_FUNCTION_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_INVALID_FUNCTION_TYPE
// [cfe] The constructor function type 'A Function(dynamic, dynamic)' isn't a subtype of 'A Function()'.
}
diff --git a/tests/language_2/regress/regress15606_test.dart b/tests/language_2/regress/regress15606_test.dart
index 3891202..f367e9e 100644
--- a/tests/language_2/regress/regress15606_test.dart
+++ b/tests/language_2/regress/regress15606_test.dart
@@ -15,7 +15,7 @@
var foo =
Unresolved.
// ^^^^^^^^^^
-// [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'Unresolved'.
bar(
// Make dart2js generate a call to setRuntimeTypeInfo.
diff --git a/tests/language_2/regress/regress21793_test.dart b/tests/language_2/regress/regress21793_test.dart
index 26d9ff6d..e4fec2e 100644
--- a/tests/language_2/regress/regress21793_test.dart
+++ b/tests/language_2/regress/regress21793_test.dart
@@ -15,6 +15,6 @@
main() {
print(new A()(499));
// ^
- // [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'A'.
}
diff --git a/tests/language_2/regress/regress23408a_test.dart b/tests/language_2/regress/regress23408a_test.dart
index b8fd7a4..453d161 100644
--- a/tests/language_2/regress/regress23408a_test.dart
+++ b/tests/language_2/regress/regress23408a_test.dart
@@ -16,7 +16,7 @@
C();
factory C.l() = A<lib.K>;
// ^^^^^
- // [analyzer] STATIC_WARNING.TYPE_ANNOTATION_DEFERRED_CLASS
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_ANNOTATION_DEFERRED_CLASS
// [cfe] unspecified
get t => null;
}
diff --git a/tests/language_2/regress/regress31596_super_test.dart b/tests/language_2/regress/regress31596_super_test.dart
index 657bace..edf7e93 100644
--- a/tests/language_2/regress/regress31596_super_test.dart
+++ b/tests/language_2/regress/regress31596_super_test.dart
@@ -40,7 +40,7 @@
// not ok since B2 is not assignable to B
super.f(b2);
// ^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'B2' can't be assigned to the parameter type 'B'.
var superF = super.f; // Inferred static type: void Function(B)
@@ -52,7 +52,7 @@
// not ok since B2 is not assignable to B
superF(b2);
// ^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'B2' can't be assigned to the parameter type 'B'.
// Should pass since superF's runtime type is void Function(Object)
diff --git a/tests/language_2/regress/regress31596_test.dart b/tests/language_2/regress/regress31596_test.dart
index d65dee2..b70f62a 100644
--- a/tests/language_2/regress/regress31596_test.dart
+++ b/tests/language_2/regress/regress31596_test.dart
@@ -36,7 +36,7 @@
B2 b2 = null;
d.f(b2, b);
// ^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'B2' can't be assigned to the parameter type 'B'.
i.f(b2, b); // Ok since B2 assignable to A
// TODO: Downcast will be a compile-time error with NNBD. Consider using
diff --git a/tests/language_2/regress/regress34488_test.dart b/tests/language_2/regress/regress34488_test.dart
index 3375997..0930f68 100644
--- a/tests/language_2/regress/regress34488_test.dart
+++ b/tests/language_2/regress/regress34488_test.dart
@@ -25,27 +25,27 @@
var d = new Derived();
d.f('bad');
// ^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'String' can't be assigned to the parameter type 'int'.
d.g('bad');
// ^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'String' can't be assigned to the parameter type 'int'.
d.h(i: 'bad');
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// ^
// [cfe] The argument type 'String' can't be assigned to the parameter type 'int'.
Object x = d.f(1);
// ^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
Object y = d.g(1);
// ^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
Object z = d.h(i: 1);
// ^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// [cfe] This expression has type 'void' and can't be used.
}
diff --git a/tests/language_2/regress/regress34495_test.dart b/tests/language_2/regress/regress34495_test.dart
index f33f4c5..41e58bf 100644
--- a/tests/language_2/regress/regress34495_test.dart
+++ b/tests/language_2/regress/regress34495_test.dart
@@ -4,7 +4,7 @@
final foo = A<B>.foo();
// ^
-// [analyzer] STATIC_WARNING.CREATION_WITH_NON_TYPE
+// [analyzer] COMPILE_TIME_ERROR.CREATION_WITH_NON_TYPE
// [cfe] Method not found: 'A'.
// ^
// [analyzer] STATIC_TYPE_WARNING.NON_TYPE_AS_TYPE_ARGUMENT
diff --git a/tests/language_2/regress/regress35258_test.dart b/tests/language_2/regress/regress35258_test.dart
index f28bada..d36f45f 100644
--- a/tests/language_2/regress/regress35258_test.dart
+++ b/tests/language_2/regress/regress35258_test.dart
@@ -17,7 +17,7 @@
C() {}
//^
-// [analyzer] STATIC_WARNING.FINAL_NOT_INITIALIZED_CONSTRUCTOR
+// [analyzer] COMPILE_TIME_ERROR.FINAL_NOT_INITIALIZED_CONSTRUCTOR
C(this.d) {}
//^
// [analyzer] COMPILE_TIME_ERROR.DUPLICATE_CONSTRUCTOR
diff --git a/tests/language_2/rewrite/implicit_this_test.dart b/tests/language_2/rewrite/implicit_this_test.dart
index e0e4c41..078dcd2 100644
--- a/tests/language_2/rewrite/implicit_this_test.dart
+++ b/tests/language_2/rewrite/implicit_this_test.dart
@@ -12,7 +12,7 @@
easy(z) {
return x + y + z;
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'y' isn't defined for the class 'Foo'.
}
@@ -69,7 +69,7 @@
shadow_x_parameter(x) {
return this.x + y + x;
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'y' isn't defined for the class 'Foo'.
}
@@ -77,7 +77,7 @@
var x = z;
return this.x + y + x;
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'y' isn't defined for the class 'Foo'.
}
@@ -86,7 +86,7 @@
foo() {
return this.x + y + x;
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'y' isn't defined for the class 'Foo'.
}
return foo();
@@ -96,7 +96,7 @@
foo(x) {
return this.x + y + x;
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'y' isn't defined for the class 'Foo'.
}
return foo(z);
@@ -107,7 +107,7 @@
var x = z;
return this.x + y + x;
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] The getter 'y' isn't defined for the class 'Foo'.
}
diff --git a/tests/language_2/setter/declaration_test.dart b/tests/language_2/setter/declaration_test.dart
index b1ef548..84893b0 100644
--- a/tests/language_2/setter/declaration_test.dart
+++ b/tests/language_2/setter/declaration_test.dart
@@ -20,53 +20,53 @@
/*space*/ int set wrongReturnType1(_) {}
// ^^^
-// [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+// [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// [cfe] unspecified
/*space*/ FutureOr<void> set wrongReturnType2(_) {}
// ^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+// [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// [cfe] unspecified
/*space*/ Never set wrongReturnType3(_) {}
// ^^^^^
-// [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+// [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// [cfe] unspecified
class C {
static int set staticWrongReturnType1(_) => 1;
// ^^^
- // [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+ // [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// [cfe] unspecified
static FutureOr<void> set staticWrongReturnType2(_) {}
// ^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+ // [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// [cfe] unspecified
static Never set staticWrongReturnType3(_) => throw 1;
// ^^^^^
- // [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+ // [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// [cfe] unspecified
/*space*/ int set wrongReturnType1(_) {}
// ^^^
- // [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+ // [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// [cfe] unspecified
/*space*/ FutureOr<void> set wrongReturnType2(_) {}
// ^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+ // [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// [cfe] unspecified
/*space*/ Never set wrongReturnType3(_) => throw 1;
// ^^^^^
- // [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+ // [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
// [cfe] unspecified
static int get staticNonAssignableTypes1 => 1;
// ^^^^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.GETTER_NOT_ASSIGNABLE_SETTER_TYPES
+ // [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_ASSIGNABLE_SETTER_TYPES
// [cfe] unspecified
static set staticNonAssignableTypes1(String _) {}
@@ -81,7 +81,7 @@
int get nonAssignableTypes1 => 1;
// ^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.GETTER_NOT_ASSIGNABLE_SETTER_TYPES
+ // [analyzer] COMPILE_TIME_ERROR.GETTER_NOT_ASSIGNABLE_SETTER_TYPES
// [cfe] unspecified
set nonAssignableTypes1(String _) {}
diff --git a/tests/language_2/setter/setter3_test.dart b/tests/language_2/setter/setter3_test.dart
index 916a807..194ae1c 100644
--- a/tests/language_2/setter/setter3_test.dart
+++ b/tests/language_2/setter/setter3_test.dart
@@ -11,10 +11,10 @@
void set bar(x) {}
dynamic set baz(x) {}
//^^^^^^^
-// [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+// [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
bool set bob(x) {}
//^^^^
-// [analyzer] STATIC_WARNING.NON_VOID_RETURN_FOR_SETTER
+// [analyzer] COMPILE_TIME_ERROR.NON_VOID_RETURN_FOR_SETTER
}
main() {
diff --git a/tests/language_2/static/field3_test.dart b/tests/language_2/static/field3_test.dart
index 7436df1..0498f48 100644
--- a/tests/language_2/static/field3_test.dart
+++ b/tests/language_2/static/field3_test.dart
@@ -13,11 +13,11 @@
if (false) {
var x = Foo.x;
// ^
- // [analyzer] STATIC_WARNING.STATIC_ACCESS_TO_INSTANCE_MEMBER
+ // [analyzer] COMPILE_TIME_ERROR.STATIC_ACCESS_TO_INSTANCE_MEMBER
// [cfe] Getter not found: 'x'.
var m = Foo.m;
// ^
- // [analyzer] STATIC_WARNING.STATIC_ACCESS_TO_INSTANCE_MEMBER
+ // [analyzer] COMPILE_TIME_ERROR.STATIC_ACCESS_TO_INSTANCE_MEMBER
// [cfe] Getter not found: 'm'.
Foo.m = 1;
// ^
@@ -25,7 +25,7 @@
// [cfe] Setter not found: 'm'.
Foo.x = 1;
// ^
- // [analyzer] STATIC_WARNING.STATIC_ACCESS_TO_INSTANCE_MEMBER
+ // [analyzer] COMPILE_TIME_ERROR.STATIC_ACCESS_TO_INSTANCE_MEMBER
// [cfe] Setter not found: 'x'.
}
}
diff --git a/tests/language_2/static/final_field2_test.dart b/tests/language_2/static/final_field2_test.dart
index 0755461..6430471 100644
--- a/tests/language_2/static/final_field2_test.dart
+++ b/tests/language_2/static/final_field2_test.dart
@@ -20,7 +20,7 @@
main() {
A.x = 2;
//^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_CONST
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_CONST
// ^
// [cfe] Setter not found: 'x'.
new B();
diff --git a/tests/language_2/static/getter_no_setter1_test.dart b/tests/language_2/static/getter_no_setter1_test.dart
index a173b2f..dd307ec 100644
--- a/tests/language_2/static/getter_no_setter1_test.dart
+++ b/tests/language_2/static/getter_no_setter1_test.dart
@@ -10,7 +10,7 @@
method() {
getter++;
// ^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'getter'.
}
}
diff --git a/tests/language_2/static/getter_no_setter2_test.dart b/tests/language_2/static/getter_no_setter2_test.dart
index d10cedb..e84b2b8 100644
--- a/tests/language_2/static/getter_no_setter2_test.dart
+++ b/tests/language_2/static/getter_no_setter2_test.dart
@@ -10,7 +10,7 @@
method() {
getter++;
// ^^^^^^
-// [analyzer] STATIC_WARNING.ASSIGNMENT_TO_FINAL_NO_SETTER
+// [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_FINAL_NO_SETTER
// [cfe] Setter not found: 'getter'.
}
diff --git a/tests/language_2/static/setter_get_test.dart b/tests/language_2/static/setter_get_test.dart
index 44796cc..0a16b53 100644
--- a/tests/language_2/static/setter_get_test.dart
+++ b/tests/language_2/static/setter_get_test.dart
@@ -8,7 +8,7 @@
static set o(_) {}
m() => o;
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'o'.
noSuchMethod(_) => 42;
}
diff --git a/tests/language_2/string/interpolate1_test.dart b/tests/language_2/string/interpolate1_test.dart
index 1bc80c0..12bf4af 100644
--- a/tests/language_2/string/interpolate1_test.dart
+++ b/tests/language_2/string/interpolate1_test.dart
@@ -11,6 +11,6 @@
// [analyzer] SYNTACTIC_ERROR.MISSING_IDENTIFIER
// [cfe] A '$' has special meaning inside a string, and must be followed by an identifier or an expression in curly braces ({}).
// ^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'x'.
}
diff --git a/tests/language_2/string/no_operator_test.dart b/tests/language_2/string/no_operator_test.dart
index e6da249..d5d013c 100644
--- a/tests/language_2/string/no_operator_test.dart
+++ b/tests/language_2/string/no_operator_test.dart
@@ -29,7 +29,7 @@
// [cfe] The operator '-' isn't defined for the class 'String'.
Expect.throws(() => x * y);
// ^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] A value of type 'String' can't be assigned to a variable of type 'int'.
Expect.throws(() => x / y);
// ^
diff --git a/tests/language_2/string/substring_test.dart b/tests/language_2/string/substring_test.dart
index bf2ce99..6f33829 100644
--- a/tests/language_2/string/substring_test.dart
+++ b/tests/language_2/string/substring_test.dart
@@ -9,10 +9,10 @@
try {
print("abcdef".substring(1.5, 3.5));
// ^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'double' can't be assigned to the parameter type 'int'.
// ^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'double' can't be assigned to the parameter type 'int'.
Expect.fail("Should have thrown an exception");
} on TypeError catch (e) {
diff --git a/tests/language_2/switch/case_expression_with_assignment_test.dart b/tests/language_2/switch/case_expression_with_assignment_test.dart
index 115cb94..5ab2dbd 100644
--- a/tests/language_2/switch/case_expression_with_assignment_test.dart
+++ b/tests/language_2/switch/case_expression_with_assignment_test.dart
@@ -15,7 +15,7 @@
return "ERROR_A";
case ERROR_B = 1:
// ^^^^^^^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_CONST
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_CONST
// ^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.NON_CONSTANT_CASE_EXPRESSION
// ^
diff --git a/tests/language_2/switch/fallthru_test.dart b/tests/language_2/switch/fallthru_test.dart
index aabb2ca..16e23fe 100644
--- a/tests/language_2/switch/fallthru_test.dart
+++ b/tests/language_2/switch/fallthru_test.dart
@@ -13,7 +13,7 @@
break;
case 1:
// ^^^^
-// [analyzer] STATIC_WARNING.CASE_BLOCK_NOT_TERMINATED
+// [analyzer] COMPILE_TIME_ERROR.CASE_BLOCK_NOT_TERMINATED
// [cfe] Switch case may fall through to the next case.
result = "one";
// fall-through, error if case is non-empty
diff --git a/tests/language_2/this/implicit_this_test.dart b/tests/language_2/this/implicit_this_test.dart
index 3500c9a..0cbcfa8 100644
--- a/tests/language_2/this/implicit_this_test.dart
+++ b/tests/language_2/this/implicit_this_test.dart
@@ -17,7 +17,7 @@
// abstract.
class SubAbstract1 extends Abstract {}
// ^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
// [cfe] The non-abstract class 'SubAbstract1' is missing implementations for these members:
// This class does not implement "x", but is itself abstract, so that's OK.
@@ -29,7 +29,7 @@
// abstract.
class SubSubAbstract2 extends SubAbstract2 {}
// ^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
+// [analyzer] COMPILE_TIME_ERROR.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
// [cfe] The non-abstract class 'SubSubAbstract2' is missing implementations for these members:
class Concrete extends Abstract {
@@ -44,7 +44,7 @@
void main() {
new Abstract();
// ^^^^^^^^
- // [analyzer] STATIC_WARNING.INSTANTIATE_ABSTRACT_CLASS
+ // [analyzer] COMPILE_TIME_ERROR.INSTANTIATE_ABSTRACT_CLASS
// [cfe] The class 'Abstract' is abstract and can't be instantiated.
Expect.equals('7', new Concrete().toString());
Expect.equals('42', new SubConcrete(42).toString());
diff --git a/tests/language_2/type/checks_in_factory_method_test.dart b/tests/language_2/type/checks_in_factory_method_test.dart
index cae8f04..3be4613 100644
--- a/tests/language_2/type/checks_in_factory_method_test.dart
+++ b/tests/language_2/type/checks_in_factory_method_test.dart
@@ -22,7 +22,7 @@
func("Hello World!");
// ^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'String' can't be assigned to the parameter type 'T'.
return new Bar<T>();
}
diff --git a/tests/language_2/type_object/first_class_types_literals_test.dart b/tests/language_2/type_object/first_class_types_literals_test.dart
index aa02a4d..e8fdca5 100644
--- a/tests/language_2/type_object/first_class_types_literals_test.dart
+++ b/tests/language_2/type_object/first_class_types_literals_test.dart
@@ -51,13 +51,13 @@
// Test that operator calls on class literals go to Type.
Expect.throwsNoSuchMethodError(() => C = 1);
// ^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_TYPE
// [cfe] Can't assign to a type literal.
// ^
// [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT
Expect.throwsNoSuchMethodError(() => C++);
// ^
- // [analyzer] STATIC_WARNING.ASSIGNMENT_TO_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.ASSIGNMENT_TO_TYPE
// [cfe] Can't assign to a type literal.
// ^^
// [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
diff --git a/tests/language_2/type_promotion/functions_test.dart b/tests/language_2/type_promotion/functions_test.dart
index ab78d11..590f1cc 100644
--- a/tests/language_2/type_promotion/functions_test.dart
+++ b/tests/language_2/type_promotion/functions_test.dart
@@ -43,7 +43,7 @@
b = funcAtoDyn(new B());
c = funcAtoDyn(new C());
// ^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// ^
// [cfe] The argument type 'C' can't be assigned to the parameter type 'A'.
@@ -76,7 +76,7 @@
// Returned value has type `void`, usage is restricted.
Object o = funcDynToDyn(null);
// ^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// ^
// [cfe] This expression has type 'void' and can't be used.
}
@@ -97,17 +97,17 @@
FuncDynToVoid funcDynToVoid = func;
a = funcDynToVoid(new A());
// ^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// ^
// [cfe] This expression has type 'void' and can't be used.
b = funcDynToVoid(new B());
// ^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// ^
// [cfe] This expression has type 'void' and can't be used.
c = funcDynToVoid(new C());
// ^^^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.USE_OF_VOID_RESULT
+ // [analyzer] COMPILE_TIME_ERROR.USE_OF_VOID_RESULT
// ^
// [cfe] This expression has type 'void' and can't be used.
diff --git a/tests/language_2/type_variable/conflict2_test.dart b/tests/language_2/type_variable/conflict2_test.dart
index 4a03e01..8b8439d 100644
--- a/tests/language_2/type_variable/conflict2_test.dart
+++ b/tests/language_2/type_variable/conflict2_test.dart
@@ -23,7 +23,7 @@
// [analyzer] STATIC_TYPE_WARNING.INVOCATION_OF_NON_FUNCTION
// [cfe] Method not found: 'T'.
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
// X is not in scope. NoSuchMethodError.
static baz() => X();
@@ -49,7 +49,7 @@
// ^^^
// [analyzer] STATIC_TYPE_WARNING.INVOCATION_OF_NON_FUNCTION_EXPRESSION
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
// [cfe] Type variables can't be used in static members.
// ^
// [cfe] The method 'call' isn't defined for the class 'Type'.
@@ -63,7 +63,7 @@
// Runtime type T not accessible from static context. Compile-time error.
static garply() => T[0];
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
// [cfe] Type variables can't be used in static members.
// ^^^
// [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
@@ -78,7 +78,7 @@
// Runtime type T not accessible from static context. Compile-time error.
static fred() => T.m;
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
// [cfe] Type variables can't be used in static members.
// ^
// [analyzer] STATIC_TYPE_WARNING.UNDEFINED_GETTER
diff --git a/tests/language_2/type_variable/scope_test.dart b/tests/language_2/type_variable/scope_test.dart
index 10051d0..1b5cbb7 100644
--- a/tests/language_2/type_variable/scope_test.dart
+++ b/tests/language_2/type_variable/scope_test.dart
@@ -10,18 +10,18 @@
static
Foo<T>
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
m(
// ^
// [cfe] Can only use type variables in instance methods.
Foo<T>
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
// [cfe] Type variables can't be used in static members.
f) {
Foo<T> x = new Foo<String>();
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
// [cfe] Type variables can't be used in static members.
// ^^^^^^^^^^^^^^^^^
// [analyzer] STATIC_TYPE_WARNING.INVALID_ASSIGNMENT
@@ -38,7 +38,7 @@
// T is not in scope for a static field.
static Foo<T> f1;
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
// [cfe] Type variables can't be used in static members.
// ^
// [cfe] Verification of the generated program failed:
@@ -46,7 +46,7 @@
static
Foo<T>
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
get f {
// ^
// [cfe] Can only use type variables in instance methods.
@@ -60,7 +60,7 @@
// [cfe] Can only use type variables in instance methods.
Foo<T>
// ^
- // [analyzer] STATIC_WARNING.TYPE_PARAMETER_REFERENCED_BY_STATIC
+ // [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
// [cfe] Type variables can't be used in static members.
value) {}
}
@@ -72,7 +72,7 @@
main() {
Foo.m(new Foo<String>());
// ^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
new I(new Foo<String>());
Foo.f1 = new Foo<String>();
// ^^^^^^^^^^^^^^^^^
diff --git a/tests/language_2/unsorted/external_test.dart b/tests/language_2/unsorted/external_test.dart
index 1f71b6d..7d2f2af 100644
--- a/tests/language_2/unsorted/external_test.dart
+++ b/tests/language_2/unsorted/external_test.dart
@@ -43,7 +43,7 @@
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
// [cfe] Expected ';' after this.
// ^^^^^^
- // [analyzer] STATIC_WARNING.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
+ // [analyzer] COMPILE_TIME_ERROR.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER
external Foo.n21(val) : x = 1;
// ^
@@ -67,7 +67,7 @@
// [analyzer] SYNTACTIC_ERROR.EXTERNAL_FACTORY_REDIRECTION
// [cfe] A redirecting factory can't be external.
// ^^^
- // [analyzer] STATIC_WARNING.REDIRECT_TO_INVALID_RETURN_TYPE
+ // [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_INVALID_RETURN_TYPE
// [cfe] The constructor function type 'Bar Function(dynamic)' isn't a subtype of 'Foo Function(dynamic)'.
}
diff --git a/tests/language_2/variance/syntax/variance_type_parameter_error_syntax_test.dart b/tests/language_2/variance/syntax/variance_type_parameter_error_syntax_test.dart
index 28c1add..71e14caa 100644
--- a/tests/language_2/variance/syntax/variance_type_parameter_error_syntax_test.dart
+++ b/tests/language_2/variance/syntax/variance_type_parameter_error_syntax_test.dart
@@ -20,7 +20,7 @@
// [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
// [cfe] The operator '<' isn't defined for the class 'Type'.
// ^^^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Expected ';' after this.
// ^^^
// [analyzer] SYNTACTIC_ERROR.EXPECTED_TOKEN
@@ -29,7 +29,7 @@
// [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
// [cfe] The operator '>' isn't defined for the class 'Type'.
// ^^^
- // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
+ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER
// [cfe] Getter not found: 'bar'.
}
diff --git a/tests/language_2/variance/variance_in_inference_error_test.dart b/tests/language_2/variance/variance_in_inference_error_test.dart
index b481d4dd..4e79966 100644
--- a/tests/language_2/variance/variance_in_inference_error_test.dart
+++ b/tests/language_2/variance/variance_in_inference_error_test.dart
@@ -48,7 +48,7 @@
//^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.COULD_NOT_INFER
// ^^^^^^^^^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'Contravariant<String>' can't be assigned to the parameter type 'Contravariant<int>'.
// String <: T <: int is not a valid constraint.
@@ -56,7 +56,7 @@
//^^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.COULD_NOT_INFER
// ^^^^^^^^^^^^^^^^^^^^
-// [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+// [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'Contravariant<int>' can't be assigned to the parameter type 'Contravariant<String>'.
// Middle <: T <: Lower is not a valid constraint
diff --git a/tests/language_2/variance/variance_in_subtyping_error_test.dart b/tests/language_2/variance/variance_in_subtyping_error_test.dart
index d5697c7..9779d33 100644
--- a/tests/language_2/variance/variance_in_subtyping_error_test.dart
+++ b/tests/language_2/variance/variance_in_subtyping_error_test.dart
@@ -75,6 +75,6 @@
testCall(listLower);
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'List<Contravariant<Lower>>' can't be assigned to the parameter type 'Iterable<Contravariant<Middle>>'.
}
diff --git a/tests/language_2/variance/variance_inout_inference_error_test.dart b/tests/language_2/variance/variance_inout_inference_error_test.dart
index ce4109f..4aab0b7 100644
--- a/tests/language_2/variance/variance_inout_inference_error_test.dart
+++ b/tests/language_2/variance/variance_inout_inference_error_test.dart
@@ -26,10 +26,10 @@
//^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.COULD_NOT_INFER
// ^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'Invariant<Middle>' can't be assigned to the parameter type 'Invariant<Object>'.
// ^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'Invariant<int>' can't be assigned to the parameter type 'Invariant<Object>'.
// Middle <: T <: Middle and Upper <: T <: Upper are not valid constraints.
@@ -37,7 +37,7 @@
//^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.COULD_NOT_INFER
// ^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'Invariant<Middle>' can't be assigned to the parameter type 'Invariant<Upper>'.
// Middle <: T <: Middle and Lower <: T <: Lower are not valid constraints.
@@ -45,7 +45,7 @@
//^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.COULD_NOT_INFER
// ^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'Invariant<Lower>' can't be assigned to the parameter type 'Invariant<Middle>'.
// Upper <: T
@@ -55,7 +55,7 @@
//^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.COULD_NOT_INFER
// ^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'Invariant<Middle>' can't be assigned to the parameter type 'Invariant<Upper>'.
// T <: Lower
diff --git a/tests/language_2/variance/variance_inout_subtyping_error_test.dart b/tests/language_2/variance/variance_inout_subtyping_error_test.dart
index d06f336..3bcec37 100644
--- a/tests/language_2/variance/variance_inout_subtyping_error_test.dart
+++ b/tests/language_2/variance/variance_inout_subtyping_error_test.dart
@@ -120,11 +120,11 @@
testCall<Lower>(listMiddle);
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'List<Invariant<Middle>>' can't be assigned to the parameter type 'Iterable<Invariant<Lower>>'.
testCall<Middle>(listLower);
// ^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'List<Invariant<Lower>>' can't be assigned to the parameter type 'Iterable<Invariant<Middle>>'.
}
diff --git a/tests/language_2/variance/variance_out_subtyping_error_test.dart b/tests/language_2/variance/variance_out_subtyping_error_test.dart
index a85f4cb..dd925e2 100644
--- a/tests/language_2/variance/variance_out_subtyping_error_test.dart
+++ b/tests/language_2/variance/variance_out_subtyping_error_test.dart
@@ -75,6 +75,6 @@
testCall(listMiddle);
// ^^^^^^^^^^
- // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
+ // [analyzer] COMPILE_TIME_ERROR.ARGUMENT_TYPE_NOT_ASSIGNABLE
// [cfe] The argument type 'List<Covariant<Middle>>' can't be assigned to the parameter type 'Iterable<Covariant<Lower>>'.
}
diff --git a/tests/lib/html/custom/element_upgrade_failure_test.dart b/tests/lib/html/custom/element_upgrade_failure_test.dart
index 947af1c..16469cf 100644
--- a/tests/lib/html/custom/element_upgrade_failure_test.dart
+++ b/tests/lib/html/custom/element_upgrade_failure_test.dart
@@ -41,13 +41,13 @@
expect(() {
upgrader.upgrade(new HtmlElementInterface());
// ^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT
+ // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT
}, throws);
});
}
class HtmlElementInterface implements HtmlElement {
// ^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
+ // [analyzer] COMPILE_TIME_ERROR.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
HtmlElementInterface.created();
}
diff --git a/tests/standalone/io/bytes_builder_test.dart b/tests/lib/typed_data/bytes_builder_test.dart
similarity index 98%
rename from tests/standalone/io/bytes_builder_test.dart
rename to tests/lib/typed_data/bytes_builder_test.dart
index 5b6a6b9..5c1dd69 100644
--- a/tests/standalone/io/bytes_builder_test.dart
+++ b/tests/lib/typed_data/bytes_builder_test.dart
@@ -2,7 +2,6 @@
// 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 "dart:io";
import "dart:typed_data";
import "package:expect/expect.dart";
diff --git a/tests/lib_2/html/custom/element_upgrade_failure_test.dart b/tests/lib_2/html/custom/element_upgrade_failure_test.dart
index 28248ca..db46df5 100644
--- a/tests/lib_2/html/custom/element_upgrade_failure_test.dart
+++ b/tests/lib_2/html/custom/element_upgrade_failure_test.dart
@@ -43,14 +43,14 @@
expect(() {
upgrader.upgrade(new HtmlElementInterface());
// ^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT
+ // [analyzer] COMPILE_TIME_ERROR.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT
}, throws);
});
}
class HtmlElementInterface implements HtmlElement {
// ^^^^^^^^^^^^^^^^^^^^
- // [analyzer] STATIC_WARNING.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
+ // [analyzer] COMPILE_TIME_ERROR.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER
HtmlElementInterface.created();
}
diff --git a/tests/standalone/io/bytes_builder_test.dart b/tests/lib_2/typed_data/bytes_builder_test.dart
similarity index 98%
copy from tests/standalone/io/bytes_builder_test.dart
copy to tests/lib_2/typed_data/bytes_builder_test.dart
index 5b6a6b9..5c1dd69 100644
--- a/tests/standalone/io/bytes_builder_test.dart
+++ b/tests/lib_2/typed_data/bytes_builder_test.dart
@@ -2,7 +2,6 @@
// 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 "dart:io";
import "dart:typed_data";
import "package:expect/expect.dart";
diff --git a/tests/standalone/io/file_test.dart b/tests/standalone/io/file_test.dart
index 1ba41eb..38fd51b 100644
--- a/tests/standalone/io/file_test.dart
+++ b/tests/standalone/io/file_test.dart
@@ -1602,6 +1602,53 @@
}
}
+ static void testAbsolute() {
+ var currentDirectory = Directory.current;
+ Directory.current = tempDirectory;
+ var file = File("temp.txt");
+ Expect.isFalse(file.isAbsolute);
+ file.writeAsStringSync("content");
+
+ var absFile = file.absolute;
+ Expect.isTrue(absFile.isAbsolute);
+ Expect.isTrue(absFile.path.startsWith(tempDirectory.path));
+
+ Expect.equals("content", absFile.readAsStringSync());
+
+ if (Platform.isWindows &&
+ tempDirectory.path.startsWith(RegExp(r"^[a-zA-Z]:"))) {
+ var driveRelativeFile = File(absFile.path.substring(2));
+ Expect.isFalse(driveRelativeFile.isAbsolute);
+ Expect.equals("content", driveRelativeFile.readAsStringSync());
+
+ var absFile3 = driveRelativeFile.absolute;
+ Expect.isTrue(absFile3.isAbsolute);
+ Expect.equals(absFile.path, absFile3.path);
+ Expect.equals("content", absFile3.readAsStringSync());
+
+ // Convert CWD from X:\path to \\localhost\X$\path.
+ var uncPath = r"\\localhost\" +
+ tempDirectory.path[0] +
+ r"$" +
+ tempDirectory.path.substring(2);
+ Directory.current = uncPath;
+ Expect.equals("content", file.readAsStringSync());
+
+ var absFile4 = file.absolute;
+ Expect.isTrue(absFile4.isAbsolute);
+ Expect.equals("content", absFile4.readAsStringSync());
+
+ Expect.equals("content", driveRelativeFile.readAsStringSync());
+
+ var absFile5 = driveRelativeFile.absolute;
+ Expect.isTrue(absFile5.isAbsolute);
+ Expect.isTrue(absFile5.path.startsWith(uncPath));
+ Expect.equals("content", absFile5.readAsStringSync());
+ }
+ file.deleteSync();
+ Directory.current = currentDirectory;
+ }
+
static String getFilename(String path) {
return Platform.script.resolve(path).toFilePath();
}
@@ -1677,6 +1724,7 @@
testSetLastAccessedSync();
testSetLastAccessedSyncDirectory();
testDoubleAsyncOperation();
+ testAbsolute();
asyncEnd();
});
}
diff --git a/tests/standalone/io/http_linklocal_ipv6_test.dart b/tests/standalone/io/http_linklocal_ipv6_test.dart
index ea4e54d..e99162b 100644
--- a/tests/standalone/io/http_linklocal_ipv6_test.dart
+++ b/tests/standalone/io/http_linklocal_ipv6_test.dart
@@ -16,8 +16,13 @@
// ip address show
asyncStart();
try {
- // Make sure the address here is the same as what it shows in "ip address show"
- var ipv6 = 'fe80:1::10%tap0';
+ // Make sure the address here is the same as what it shows in
+ // "ip address show"
+ var ipv6 = 'fe80:1::1%tap0';
+
+ // Parses a Link-local address on Linux and Windows will throw an exception.
+ InternetAddress(ipv6);
+
HttpServer.bind(ipv6, 0).then((server) {
server.listen((request) {
var timer = new Timer.periodic(const Duration(milliseconds: 0), (_) {
diff --git a/tests/standalone_2/io/bytes_builder_test.dart b/tests/standalone_2/io/bytes_builder_test.dart
deleted file mode 100644
index 5b6a6b9..0000000
--- a/tests/standalone_2/io/bytes_builder_test.dart
+++ /dev/null
@@ -1,64 +0,0 @@
-// Copyright (c) 2016, 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.
-
-import "dart:io";
-import "dart:typed_data";
-import "package:expect/expect.dart";
-
-main() {
- for (var copying in [true, false]) {
- var b;
- testLength(n) {
- Expect.equals(n, b.length);
- if (n == 0) {
- Expect.isTrue(b.isEmpty, "isEmpty: #${b.length}");
- Expect.isFalse(b.isNotEmpty, "isNotEmpty: #${b.length}");
- } else {
- Expect.isTrue(b.isNotEmpty, "isNotEmpty: #${b.length}");
- Expect.isFalse(b.isEmpty, "isEmpty: #${b.length}");
- }
- }
-
- b = new BytesBuilder(copy: copying);
- testLength(0);
-
- b.addByte(0);
- testLength(1);
-
- b.add([1, 2, 3]);
- testLength(4);
-
- b.add(<int>[4, 5, 6]);
- testLength(7);
-
- b.add(new Uint8List.fromList([7, 8, 9]));
- testLength(10);
-
- b.add(new Uint16List.fromList([10, 11, 12]));
- testLength(13);
-
- var bytes = b.toBytes();
- Expect.isTrue(bytes is Uint8List);
- Expect.listEquals([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], bytes);
- testLength(13);
-
- b.add("\x0d\x0e\x0f".codeUnits);
- testLength(16);
-
- bytes = b.takeBytes();
- testLength(0);
- Expect.isTrue(bytes is Uint8List);
- Expect.listEquals(
- [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15], bytes);
-
- b.addByte(0);
- testLength(1);
-
- b.clear();
- testLength(0);
-
- b.addByte(0);
- testLength(1);
- }
-}
diff --git a/tests/standalone_2/io/file_test.dart b/tests/standalone_2/io/file_test.dart
index 3b0901d..0d73ef9 100644
--- a/tests/standalone_2/io/file_test.dart
+++ b/tests/standalone_2/io/file_test.dart
@@ -1601,6 +1601,53 @@
}
}
+ static void testAbsolute() {
+ var currentDirectory = Directory.current;
+ Directory.current = tempDirectory;
+ var file = File("temp.txt");
+ Expect.isFalse(file.isAbsolute);
+ file.writeAsStringSync("content");
+
+ var absFile = file.absolute;
+ Expect.isTrue(absFile.isAbsolute);
+ Expect.isTrue(absFile.path.startsWith(tempDirectory.path));
+
+ Expect.equals("content", absFile.readAsStringSync());
+
+ if (Platform.isWindows &&
+ tempDirectory.path.startsWith(RegExp(r"^[a-zA-Z]:"))) {
+ var driveRelativeFile = File(absFile.path.substring(2));
+ Expect.isFalse(driveRelativeFile.isAbsolute);
+ Expect.equals("content", driveRelativeFile.readAsStringSync());
+
+ var absFile3 = driveRelativeFile.absolute;
+ Expect.isTrue(absFile3.isAbsolute);
+ Expect.equals(absFile.path, absFile3.path);
+ Expect.equals("content", absFile3.readAsStringSync());
+
+ // Convert CWD from X:\path to \\localhost\X$\path.
+ var uncPath = r"\\localhost\" +
+ tempDirectory.path[0] +
+ r"$" +
+ tempDirectory.path.substring(2);
+ Directory.current = uncPath;
+ Expect.equals("content", file.readAsStringSync());
+
+ var absFile4 = file.absolute;
+ Expect.isTrue(absFile4.isAbsolute);
+ Expect.equals("content", absFile4.readAsStringSync());
+
+ Expect.equals("content", driveRelativeFile.readAsStringSync());
+
+ var absFile5 = driveRelativeFile.absolute;
+ Expect.isTrue(absFile5.isAbsolute);
+ Expect.isTrue(absFile5.path.startsWith(uncPath));
+ Expect.equals("content", absFile5.readAsStringSync());
+ }
+ file.deleteSync();
+ Directory.current = currentDirectory;
+ }
+
static String getFilename(String path) {
return Platform.script.resolve(path).toFilePath();
}
@@ -1676,6 +1723,7 @@
testSetLastAccessedSync();
testSetLastAccessedSyncDirectory();
testDoubleAsyncOperation();
+ testAbsolute();
asyncEnd();
});
}
diff --git a/tests/standalone_2/io/http_linklocal_ipv6_test.dart b/tests/standalone_2/io/http_linklocal_ipv6_test.dart
index ea4e54d..e99162b 100644
--- a/tests/standalone_2/io/http_linklocal_ipv6_test.dart
+++ b/tests/standalone_2/io/http_linklocal_ipv6_test.dart
@@ -16,8 +16,13 @@
// ip address show
asyncStart();
try {
- // Make sure the address here is the same as what it shows in "ip address show"
- var ipv6 = 'fe80:1::10%tap0';
+ // Make sure the address here is the same as what it shows in
+ // "ip address show"
+ var ipv6 = 'fe80:1::1%tap0';
+
+ // Parses a Link-local address on Linux and Windows will throw an exception.
+ InternetAddress(ipv6);
+
HttpServer.bind(ipv6, 0).then((server) {
server.listen((request) {
var timer = new Timer.periodic(const Duration(milliseconds: 0), (_) {
diff --git a/tools/VERSION b/tools/VERSION
index b03de39..0944177 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -33,7 +33,7 @@
MAJOR 2
MINOR 10
PATCH 0
-PRERELEASE 0
+PRERELEASE 1
PRERELEASE_PATCH 0
ABI_VERSION 39
OLDEST_SUPPORTED_ABI_VERSION 39
diff --git a/tools/bots/compare_results.dart b/tools/bots/compare_results.dart
index b6f0ce4..4b64057 100755
--- a/tools/bots/compare_results.dart
+++ b/tools/bots/compare_results.dart
@@ -11,8 +11,7 @@
import 'dart:io';
import 'package:args/args.dart';
-
-import 'results.dart';
+import 'package:test_runner/bot_results.dart';
class Result {
final String configuration;
diff --git a/tools/bots/extend_results.dart b/tools/bots/extend_results.dart
index f8ba5c1..859c02b 100644
--- a/tools/bots/extend_results.dart
+++ b/tools/bots/extend_results.dart
@@ -8,7 +8,7 @@
import 'dart:convert';
import 'dart:io';
-import 'results.dart';
+import 'package:test_runner/bot_results.dart';
const skipped = 'skipped';
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 5ed6cd3..5cc65e9 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -3321,7 +3321,8 @@
"runtime",
"gen_snapshot",
"dart_precompiled_runtime",
- "kernel-service.dart.snapshot"
+ "kernel-service.dart.snapshot",
+ "dartdevc_test"
]
},
{
diff --git a/tools/bots/try_benchmarks.sh b/tools/bots/try_benchmarks.sh
index 09d4229..7241cb5 100755
--- a/tools/bots/try_benchmarks.sh
+++ b/tools/bots/try_benchmarks.sh
@@ -75,9 +75,7 @@
rm -f linux-x64_profile.tar.gz
elif [ "$command" = linux-ia32-build ]; then
# NOTE: These are duplicated in tools/bots/test_matrix.json, keep in sync.
- ./tools/build.py --mode=release --arch=ia32 create_sdk
- ./tools/build.py --mode=release --arch=ia32 runtime
- ./tools/build.py --mode=release --arch=ia32 kernel-service.dart.snapshot
+ ./tools/build.py --mode=release --arch=ia32 create_sdk runtime kernel-service.dart.snapshot
elif [ "$command" = linux-ia32-archive ]; then
strip -w \
-K 'kDartVmSnapshotData' \
@@ -204,11 +202,7 @@
rm -rf tmp
elif [ "$command" = linux-x64-build ]; then
# NOTE: These are duplicated in tools/bots/test_matrix.json, keep in sync.
- ./tools/build.py --mode=release --arch=x64 create_sdk
- ./tools/build.py --mode=release --arch=x64 runtime
- ./tools/build.py --mode=release --arch=x64 gen_snapshot
- ./tools/build.py --mode=release --arch=x64 dart_precompiled_runtime
- ./tools/build.py --mode=release --arch=x64 kernel-service.dart.snapshot
+ ./tools/build.py --mode=release --arch=x64 create_sdk runtime gen_snapshot dart_precompiled_runtime kernel-service.dart.snapshot dartdevc_test
elif [ "$command" = linux-x64-archive ]; then
strip -w \
-K 'kDartVmSnapshotData' \
@@ -306,6 +300,10 @@
third_party/d8/linux/x64 \
third_party/firefox_jsshell/linux/ \
out/ReleaseX64/dart_precompiled_runtime \
+ out/ReleaseX64/gen/utils/dartdevc/kernel/ \
+ out/ReleaseX64/ddc_outline.dill \
+ out/ReleaseX64/gen/utils/dartdevc/sound/ \
+ out/ReleaseX64/ddc_outline_sound.dill \
sdk \
samples-dev/swarm \
third_party/pkg \
@@ -350,6 +348,8 @@
third_party/d8/linux/x64/d8 --stack_size=1024 sdk/lib/_internal/js_runtime/lib/preambles/d8.js out.js
out/ReleaseX64/dart-sdk/bin/dart pkg/dev_compiler/tool/ddb -r d8 -b third_party/d8/linux/x64/d8 hello.dart
out/ReleaseX64/dart-sdk/bin/dart pkg/dev_compiler/tool/ddb -r d8 -b third_party/d8/linux/x64/d8 --mode=compile --compile-vm-options=--print-metrics --packages=.packages --out out.js hello.dart
+ out/ReleaseX64/dart-sdk/bin/dart pkg/dev_compiler/tool/ddb -r d8 -b third_party/d8/linux/x64/d8 --enable-experiment=non-nullable --sound-null-safety --debug hello.dart
+ out/ReleaseX64/dart-sdk/bin/dart pkg/dev_compiler/tool/ddb -r d8 -b third_party/d8/linux/x64/d8 --enable-experiment=non-nullable --sound-null-safety --debug --mode=compile --compile-vm-options=--print-metrics --packages=.packages --out out.js hello.dart
out/ReleaseX64/dart pkg/front_end/tool/perf.dart parse hello.dart
out/ReleaseX64/dart pkg/front_end/tool/perf.dart scan hello.dart
out/ReleaseX64/dart pkg/front_end/tool/fasta_perf.dart kernel_gen_e2e hello.dart
diff --git a/tools/bots/update_flakiness.dart b/tools/bots/update_flakiness.dart
index abf1aa8..71bf402 100755
--- a/tools/bots/update_flakiness.dart
+++ b/tools/bots/update_flakiness.dart
@@ -10,7 +10,7 @@
import 'package:args/args.dart';
-import 'results.dart';
+import 'package:test_runner/bot_results.dart';
main(List<String> args) async {
final parser = new ArgParser();
diff --git a/tools/test.dart b/tools/test.dart
index dfcbf5d..000a4ccc5 100755
--- a/tools/test.dart
+++ b/tools/test.dart
@@ -1,592 +1,10 @@
#!/usr/bin/env dart
+
// Copyright (c) 2018, 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.
+import 'package:test_runner/test_runner.dart';
-// Run tests like on the given builder and/or named configuration.
-
-import 'dart:async';
-import 'dart:convert';
-import 'dart:io';
-
-import 'package:args/args.dart';
-import 'package:smith/smith.dart';
-
-import 'bots/results.dart';
-
-const int deflakingCount = 5;
-
-/// Quotes a string in shell single quote mode. This function produces a single
-/// shell argument that evaluates to the exact string provided, handling any
-/// special characters in the input string. Shell single quote mode works uses
-/// the single quote character as the delimiter and uses the characters
-/// in-between verbatim without any special processing. To insert the single
-/// quote character itself, escape single quote mode, insert an escaped single
-/// quote, and then return to single quote mode.
-///
-/// Examples:
-/// foo becomes 'foo'
-/// foo bar becomes 'foo bar'
-/// foo\ bar becomes 'foo\ bar'
-/// foo's bar becomes 'foo '\''s bar'
-/// foo "b"ar becomes 'foo "b"'
-/// foo
-/// bar becomes 'foo
-/// bar'
-String shellSingleQuote(String string) {
- return "'${string.replaceAll("'", "'\\''")}'";
-}
-
-/// Like [shellSingleQuote], but if the string only contains safe ASCII
-/// characters, don't quote it. Note that it's not always safe to omit the
-/// quotes even if the string only has safe characters, as doing so might match
-/// a shell keyword or a shell builtin in the first argument in a command. It
-/// should be safe to use this for the second argument onwards in a command.
-String simpleShellSingleQuote(String string) {
- return new RegExp(r"^[a-zA-Z0-9%+,./:_-]*$").hasMatch(string)
- ? string
- : shellSingleQuote(string);
-}
-
-/// Runs a process and exits likewise if the process exits non-zero.
-Future<ProcessResult> runProcess(String executable, List<String> arguments,
- {bool runInShell = false}) async {
- final processResult =
- await Process.run(executable, arguments, runInShell: runInShell);
- if (processResult.exitCode != 0) {
- final command =
- [executable, ...arguments].map(simpleShellSingleQuote).join(" ");
- throw new Exception("Command exited ${processResult.exitCode}: $command\n"
- "${processResult.stdout}\n${processResult.stderr}");
- }
- return processResult;
-}
-
-/// Runs a process and exits likewise if the process exits non-zero, but let the
-/// child process inherit out stdio handles.
-Future<ProcessResult> runProcessInheritStdio(
- String executable, List<String> arguments,
- {bool runInShell = false}) async {
- final process = await Process.start(executable, arguments,
- mode: ProcessStartMode.inheritStdio, runInShell: runInShell);
- final exitCode = await process.exitCode;
- final processResult = new ProcessResult(process.pid, exitCode, "", "");
- if (processResult.exitCode != 0) {
- final command =
- [executable, ...arguments].map(simpleShellSingleQuote).join(" ");
- throw new Exception("Command exited ${processResult.exitCode}: $command");
- }
- return processResult;
-}
-
-/// Finds the branch of a builder given the list of branches.
-String branchOfBuilder(String builder, List<String> branches) {
- return branches.where((branch) => branch != "master").firstWhere(
- (branch) => builder.endsWith("-$branch"),
- orElse: () => "master");
-}
-
-/// Finds the named configuration to test according to the test matrix
-/// information and the command line options.
-Map<String, Set<Builder>> resolveNamedConfigurations(
- TestMatrix testMatrix,
- String requestedBranch,
- List<String> requestedNamedConfigurations,
- String requestedBuilder) {
- assert(requestedBranch != null);
- final testedConfigurations = <String, Set<Builder>>{};
- var foundBuilder = false;
- for (final builder in testMatrix.builders) {
- if (requestedBuilder != null && builder.name != requestedBuilder) {
- continue;
- }
- final branch = branchOfBuilder(builder.name, testMatrix.branches);
- if (branch != requestedBranch) {
- if (requestedBuilder == null) {
- continue;
- }
- stderr.writeln("error: Builder $requestedBuilder is on branch $branch "
- "rather than $requestedBranch");
- stderr.writeln("error: To compare with that branch, use: -B $branch");
- return null;
- }
- foundBuilder = true;
- for (final step in builder.steps.where((step) => step.isTestStep)) {
- final testedConfiguration = step.testedConfiguration;
- if (testedConfiguration == null) {
- // This test step does not use a configuration; for example,
- // because it is a simple script that does not produce results.
- continue;
- }
- final namedConfiguration = testedConfiguration.name;
- if (requestedNamedConfigurations.isEmpty ||
- requestedNamedConfigurations.contains(namedConfiguration)) {
- testedConfigurations
- .putIfAbsent(namedConfiguration, () => {})
- .add(builder);
- }
- }
- }
- if (requestedBuilder != null && !foundBuilder) {
- stderr.writeln("error: Builder $requestedBuilder doesn't exist");
- return null;
- }
- if (requestedBuilder != null &&
- requestedNamedConfigurations.isEmpty &&
- testedConfigurations.isEmpty) {
- stderr.writeln("error: Builder $requestedBuilder isn't testing any named "
- "configurations");
- return null;
- }
- if (requestedNamedConfigurations.isNotEmpty) {
- var hasUntestedConfiguration = false;
- for (final requestedConfiguration in requestedNamedConfigurations) {
- if (!testedConfigurations.containsKey(requestedConfiguration)) {
- final builder = requestedBuilder != null
- ? "builder $requestedBuilder"
- : "any builder";
- stderr.writeln("error: The named configuration "
- "$requestedConfiguration isn't tested on $builder");
- hasUntestedConfiguration = true;
- }
- }
- if (hasUntestedConfiguration) {
- return null;
- }
- }
-
- return testedConfigurations;
-}
-
-/// Locates the merge base between head and the [branch] on the given [remote].
-Future<String> findMergeBase(String remote, String branch) async {
- final arguments = ["merge-base", "$remote/$branch", "HEAD"];
- final result =
- await Process.run("git", arguments, runInShell: Platform.isWindows);
- if (result.exitCode != 0) {
- throw new Exception("Failed to run: git ${arguments.join(' ')}\n"
- "stdout:\n${result.stdout}\n"
- "stderr:\n${result.stderr}\n");
- }
- return LineSplitter.split(result.stdout).first;
-}
-
-/// Exception thrown when looking up the build for a commit failed.
-class CommitNotBuiltException implements Exception {
- final String reason;
-
- CommitNotBuiltException(this.reason);
-
- String toString() => reason;
-}
-
-/// The result after searching for a build of a commit.
-class BuildSearchResult {
- final int build;
- final String commit;
-
- BuildSearchResult(this.build, this.commit);
-}
-
-/// Locates the build number of the [commit] on the [builder], or throws an
-/// exception if the builder hasn't built the commit.
-Future<BuildSearchResult> searchForBuild(String builder, String commit) async {
- final requestUrl = Uri.parse(
- "https://cr-buildbucket.appspot.com/_ah/api/buildbucket/v1/search"
- "?bucket=luci.dart.ci.sandbox"
- "&tag=builder%3A$builder"
- "&tag=buildset%3Acommit%2Fgit%2F$commit"
- "&fields=builds(status%2Ctags%2Curl)");
- final client = new HttpClient();
- final request = await client.getUrl(requestUrl);
- final response = await request.close();
- final Map<String, dynamic> object = await response
- .cast<List<int>>()
- .transform(new Utf8Decoder())
- .transform(new JsonDecoder())
- .first;
- client.close();
- final builds = object["builds"];
- if (builds == null || builds.isEmpty) {
- throw new CommitNotBuiltException(
- "Builder $builder hasn't built commit $commit");
- }
- final build = builds.last;
- final tags = (build["tags"] as List).cast<String>();
- final buildAddressTag =
- tags.firstWhere((tag) => tag.startsWith("build_address:"));
- final buildAddress = buildAddressTag.substring("build_address:".length);
- if (build["status"] != "COMPLETED") {
- throw new CommitNotBuiltException(
- "Build $buildAddress isn't completed yet");
- }
- return new BuildSearchResult(int.parse(buildAddress.split("/").last), commit);
-}
-
-Future<BuildSearchResult> searchForApproximateBuild(
- String builder, String commit) async {
- try {
- return await searchForBuild(builder, commit);
- } on CommitNotBuiltException catch (e) {
- print("Warning: $e, searching for an inexact previous build...");
- final int limit = 25;
- final arguments = [
- "rev-list",
- "$commit~$limit..$commit~1",
- "--first-parent",
- "--topo-order"
- ];
- final processResult = await Process.run("git", arguments, runInShell: true);
- if (processResult.exitCode != 0) {
- throw new Exception("Failed to list potential commits: git $arguments\n"
- "exitCode: ${processResult.exitCode}\n"
- "stdout: ${processResult.stdout}\n"
- "stdout: ${processResult.stderr}\n");
- }
- for (final fallbackCommit in LineSplitter.split(processResult.stdout)) {
- try {
- return await searchForBuild(builder, fallbackCommit);
- } catch (e) {
- print(
- "Warning: Searching for inexact baseline build: $e, continuing...");
- }
- }
- throw new CommitNotBuiltException(
- "Failed to locate approximate baseline results for "
- "$commit in past $limit commits");
- }
-}
-
-void overrideConfiguration(Map<String, Map<String, dynamic>> results,
- String configuration, String newConfiguration) {
- results.forEach((String key, Map<String, dynamic> result) {
- if (result["configuration"] == configuration) {
- result["configuration"] = newConfiguration;
- }
- });
-}
-
-void printUsage(ArgParser parser, {String error, bool printOptions: false}) {
- if (error != null) {
- print("$error\n");
- exitCode = 1;
- }
- print("""
-Usage: test.dart -b [BUILDER] -n [CONFIGURATION] [OPTION]... [--]
- [TEST.PY OPTION]... [SELECTOR]...
-
-Run tests and compare with the results on the given builder. Either the -n or
-the -b option, or both, must be used. Any options following -- and non-option
-arguments will be forwarded to test.py invocations. The specified named
-configuration's results will be downloaded from the specified builder. If only a
-named configuration is specified, the results are downloaded from the
-appropriate builders. If only a builder is specified, the default named
-configuration is used if the builder only has a single named configuration.
-Otherwise the available named configurations are listed.
-
-See the documentation at https://goto.google.com/dart-status-file-free-workflow
-""");
- if (printOptions) {
- print(parser.usage);
- } else {
- print("Run test.dart --help to see all options.");
- }
-}
-
-void main(List<String> args) async {
- final parser = new ArgParser();
- parser.addOption("builder",
- abbr: "b", help: "Run tests like on the given builder");
- parser.addOption("branch",
- abbr: "B",
- help: "Select the builders building this branch",
- defaultsTo: "master");
- parser.addOption("commit", abbr: "C", help: "Compare with this commit");
- parser.addFlag("deflake",
- help: "Re-run failing newly tests $deflakingCount times.");
- parser.addFlag("report-flakes",
- help: "Report test failures for tests known to be flaky.\n"
- "This ignores all flakiness data from CI but flakes\n"
- "detected by --deflake will remain hidden");
- parser.addFlag("list-configurations",
- help: "Output list of configurations.", negatable: false);
- parser.addMultiOption("named-configuration",
- abbr: "n",
- help: "The named test configuration(s) that supplies the\nvalues for all "
- "test options, specifying how tests\nshould be run.");
- parser.addOption("local-configuration",
- abbr: "N",
- help: "Use a different named configuration for local\ntesting than the "
- "named configuration the baseline\nresults were downloaded for. The "
- "results may be\ninexact if the baseline configuration is "
- "different.");
- parser.addOption("remote",
- abbr: "R",
- help: "Compare with this remote and git branch",
- defaultsTo: "origin");
- parser.addFlag("help", help: "Show the program usage.", negatable: false);
-
- ArgResults options;
- try {
- options = parser.parse(args);
- } on FormatException catch (exception) {
- printUsage(parser, error: exception.message);
- return;
- }
-
- if (options["help"]) {
- printUsage(parser, printOptions: true);
- return;
- }
-
- if (options["list-configurations"]) {
- final process = await Process.start(
- "python", ["tools/test.py", "--list-configurations"],
- mode: ProcessStartMode.inheritStdio, runInShell: Platform.isWindows);
- exitCode = await process.exitCode;
- return;
- }
-
- final requestedBuilder = options["builder"];
- final requestedNamedConfigurations =
- (options["named-configuration"] as List).cast<String>();
- final localConfiguration = options["local-configuration"] as String;
-
- if (requestedBuilder == null && requestedNamedConfigurations.isEmpty) {
- printUsage(parser,
- error: "Please specify either a configuration (-n) or "
- "a builder (-b)");
- return;
- }
-
- if (localConfiguration != null && requestedNamedConfigurations.length > 1) {
- printUsage(parser,
- error: "Local configuration (-N) can only be used with a"
- " single named configuration (-n)");
- return;
- }
-
- // Locate gsutil.py.
- gsutilPy =
- Platform.script.resolve("../third_party/gsutil/gsutil.py").toFilePath();
-
- // Load the test matrix.
- final testMatrixPath = Platform.script.resolve("bots/test_matrix.json");
- final testMatrix = TestMatrix.fromPath(testMatrixPath.toFilePath());
- // Determine what named configuration to run and which builders to download
- // existing results from.
- final testedConfigurations = resolveNamedConfigurations(testMatrix,
- options["branch"], requestedNamedConfigurations, requestedBuilder);
- if (testedConfigurations == null) {
- // No valid configuration could be found. The error has already been
- // reported by [resolveConfigurations].
- exitCode = 1;
- return;
- }
- final namedConfigurations = testedConfigurations.keys.toSet();
- final builders =
- testedConfigurations.values.expand((builders) => builders).toSet();
- // Print information about the resolved builders to compare with.
- for (final namedConfiguration in namedConfigurations) {
- final testedBuilders = testedConfigurations[namedConfiguration];
- final onWhichBuilders = testedBuilders.length == 1
- ? "builder ${testedBuilders.single.name}"
- : "builders${testedBuilders.map((b) => "\n ${b.name}").join()}";
- if (localConfiguration != null) {
- print("Testing named configuration $localConfiguration "
- "compared with configuration ${namedConfiguration} "
- "on $onWhichBuilders");
- } else {
- print("Testing named configuration $namedConfiguration "
- "compared with $onWhichBuilders");
- }
- }
- // Use given commit or find out where the current HEAD branched.
- final commit = options["commit"] ??
- await findMergeBase(options["remote"], options["branch"]);
- print("Base commit is $commit");
- // Store the downloaded results and our test results in a temporary directory.
- final outDirectory = await Directory.systemTemp.createTemp("test.dart.");
- try {
- final tasks = <Future>[];
- bool needsConfigurationOverride = localConfiguration != null &&
- localConfiguration != namedConfigurations.single;
- bool needsMerge = builders.length > 1;
- final inexactBuilds = <String, String>{};
- var previousFileName = "previous.json";
- var flakyFileName = "flaky.json";
- var downloadNumber = 0;
- // Download the previous results and flakiness info from cloud storage.
- for (final builder in builders) {
- final builderName = builder.name;
- if (needsMerge) {
- previousFileName = "previous-$downloadNumber.json";
- flakyFileName = "flaky-$downloadNumber.json";
- downloadNumber++;
- }
- print("Finding build on builder $builderName to compare with...");
- // Use the buildbucket API to search for builds of the right commit.
- final buildSearchResult =
- await searchForApproximateBuild(builderName, commit);
- if (buildSearchResult.commit != commit) {
- print("Warning: Using commit ${buildSearchResult.commit} "
- "as baseline instead of $commit for $builderName");
- inexactBuilds[builderName] = buildSearchResult.commit;
- }
- final buildNumber = buildSearchResult.build.toString();
- print("Downloading results from builder $builderName "
- "build $buildNumber...");
- tasks.add(cpGsutil(
- buildFileCloudPath(builderName, buildNumber, "results.json"),
- "${outDirectory.path}/$previousFileName"));
- if (!options["report-flakes"]) {
- tasks.add(cpGsutil(
- buildFileCloudPath(builderName, buildNumber, "flaky.json"),
- "${outDirectory.path}/$flakyFileName"));
- }
- }
- // Run the tests.
- final configurationsToRun = localConfiguration != null
- ? <String>[localConfiguration]
- : namedConfigurations;
- print("".padLeft(80, "="));
- print("Running tests");
- print("".padLeft(80, "="));
- await runProcessInheritStdio(
- "python",
- [
- "tools/test.py",
- "--named-configuration=${configurationsToRun.join(",")}",
- "--output-directory=${outDirectory.path}",
- "--clean-exit",
- "--silent-failures",
- "--write-results",
- "--write-logs",
- ...options.rest,
- ],
- runInShell: Platform.isWindows);
- // Wait for the downloads and the test run to complete.
- await Future.wait(tasks);
- // Merge the results and flaky data downloaded from the builders.
- final mergedResults = <String, Map<String, dynamic>>{};
- final mergedFlaky = <String, Map<String, dynamic>>{};
- if (needsMerge || needsConfigurationOverride) {
- for (int i = 0; i < downloadNumber; ++i) {
- previousFileName = needsMerge ? "previous-$i.json" : "previous.json";
- var results =
- await loadResultsMap("${outDirectory.path}/$previousFileName");
- if (needsConfigurationOverride) {
- overrideConfiguration(
- results, namedConfigurations.single, localConfiguration);
- }
- mergedResults.addAll(results);
- if (!options["report-flakes"]) {
- flakyFileName = needsMerge ? "flaky-$i.json" : "flaky.json";
- var flakyTests =
- await loadResultsMap("${outDirectory.path}/$flakyFileName");
- if (needsConfigurationOverride) {
- overrideConfiguration(
- flakyTests, namedConfigurations.single, localConfiguration);
- }
- mergedFlaky.addAll(flakyTests);
- }
- }
- }
- // Write out the merged results for the builders.
- if (needsMerge || needsConfigurationOverride) {
- await new File("${outDirectory.path}/previous.json").writeAsString(
- mergedResults.values.map((data) => jsonEncode(data) + "\n").join(""));
- }
- // Ensure that there is a flaky.json even if it wasn't downloaded.
- if (needsMerge || needsConfigurationOverride || options["report-flakes"]) {
- await new File("${outDirectory.path}/flaky.json").writeAsString(
- mergedFlaky.values.map((data) => jsonEncode(data) + "\n").join(""));
- }
- // Deflake results of the tests if required.
- if (options["deflake"]) {
- await deflake(outDirectory, configurationsToRun, options.rest);
- }
- // Write out the final comparison.
- print("".padLeft(80, "="));
- print("Test Results");
- print("".padLeft(80, "="));
- final compareOutput = await runProcess(Platform.resolvedExecutable, [
- "tools/bots/compare_results.dart",
- "--human",
- "--verbose",
- "--changed",
- "--failing",
- "--passing",
- "--flakiness-data=${outDirectory.path}/flaky.json",
- "--logs=${outDirectory.path}/logs.json",
- "${outDirectory.path}/previous.json",
- "${outDirectory.path}/results.json",
- ]);
- if (compareOutput.stdout == "") {
- print("There were no test failures.");
- } else {
- stdout.write(compareOutput.stdout);
- }
- if (inexactBuilds.isNotEmpty) {
- print("");
- final builders = inexactBuilds.keys.toList()..sort();
- for (var builder in builders) {
- final inexactCommit = inexactBuilds[builder];
- print("Warning: Results may be inexact because commit ${inexactCommit} "
- "was used as the baseline for $builder instead of $commit");
- }
- }
- } finally {
- await outDirectory.delete(recursive: true);
- }
-}
-
-void deflake(Directory outDirectory, List<String> configurations,
- List<String> testPyArgs) async {
- // Find the list of tests to deflake.
- final deflakeListOutput = await runProcess(Platform.resolvedExecutable, [
- "tools/bots/compare_results.dart",
- "--changed",
- "--failing",
- "--passing",
- "--flakiness-data=${outDirectory.path}/flaky.json",
- "${outDirectory.path}/previous.json",
- "${outDirectory.path}/results.json",
- ]);
- final deflakeListPath = "${outDirectory.path}/deflake.list";
- final deflakeListFile = new File(deflakeListPath);
- await deflakeListFile.writeAsString(deflakeListOutput.stdout);
-
- // Deflake the changed tests.
- final deflakingResultsPaths = <String>[];
- for (int i = 1; deflakeListOutput.stdout != "" && i <= deflakingCount; i++) {
- print("".padLeft(80, "="));
- print("Running deflaking iteration $i");
- print("".padLeft(80, "="));
- final deflakeDirectory = new Directory("${outDirectory.path}/$i");
- await deflakeDirectory.create();
- final deflakeArguments = <String>[
- "--named-configuration=${configurations.join(",")}",
- "--output-directory=${deflakeDirectory.path}",
- "--clean-exit",
- "--silent-failures",
- "--write-results",
- "--test-list=$deflakeListPath",
- ...testPyArgs,
- ];
- await runProcessInheritStdio(
- "python", ["tools/test.py", ...deflakeArguments],
- runInShell: Platform.isWindows);
- deflakingResultsPaths.add("${deflakeDirectory.path}/results.json");
- }
-
- // Update the flakiness information based on what we've learned.
- print("Updating flakiness information...");
- await runProcess(Platform.resolvedExecutable, [
- "tools/bots/update_flakiness.dart",
- "--input=${outDirectory.path}/flaky.json",
- "--output=${outDirectory.path}/flaky.json",
- "${outDirectory.path}/results.json",
- ...deflakingResultsPaths,
- ]);
+void main(List<String> args) {
+ runTests(args);
}
diff --git a/utils/dartdevc/BUILD.gn b/utils/dartdevc/BUILD.gn
index 6116446f..8c5406f 100644
--- a/utils/dartdevc/BUILD.gn
+++ b/utils/dartdevc/BUILD.gn
@@ -204,7 +204,7 @@
# named `${name}_js` must exist.
# * args: additional args to pass to dartdevc
- dart_action(target_name) {
+ prebuilt_dart_action(target_name) {
script = "../../pkg/dev_compiler/bin/dartdevc.dart"
module = invoker.package
out_dir = rebase_path("$js_gen_dir")