Try no implicit casts in pkg/analyzer_cli.
Change-Id: Ied093d1d988e944b497121e654956e93e61ee52d
Reviewed-on: https://dart-review.googlesource.com/69002
Commit-Queue: Devon Carew <devoncarew@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Mike Fairhurst <mfairhurst@google.com>
diff --git a/pkg/analyzer_cli/analysis_options.yaml b/pkg/analyzer_cli/analysis_options.yaml
index b8b8389..4341996 100644
--- a/pkg/analyzer_cli/analysis_options.yaml
+++ b/pkg/analyzer_cli/analysis_options.yaml
@@ -1,4 +1,6 @@
analyzer:
+ strong-mode:
+ implicit-casts: false
exclude:
- test/data/**
linter:
diff --git a/pkg/analyzer_cli/lib/src/context_cache.dart b/pkg/analyzer_cli/lib/src/context_cache.dart
index ed0e892..9354f84 100644
--- a/pkg/analyzer_cli/lib/src/context_cache.dart
+++ b/pkg/analyzer_cli/lib/src/context_cache.dart
@@ -85,7 +85,7 @@
/// The actual calculation to get the [AnalysisOptionsImpl], with no caching.
/// This should not be used except behind the getter which caches this result
/// automatically.
- AnalysisOptions _getAnalysisOptions() {
+ AnalysisOptionsImpl _getAnalysisOptions() {
AnalysisOptionsImpl contextOptions = builder.getAnalysisOptions(
requestedSourceDirectory,
verbosePrint: clOptions.verbose ? verbosePrint : null);
diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart
index bc1731a..bf39031 100644
--- a/pkg/analyzer_cli/lib/src/driver.dart
+++ b/pkg/analyzer_cli/lib/src/driver.dart
@@ -655,7 +655,7 @@
/// Return whether [a] and [b] options are equal for the purpose of
/// command line analysis.
- bool _equalAnalysisOptions(AnalysisOptionsImpl a, AnalysisOptions b) {
+ bool _equalAnalysisOptions(AnalysisOptions a, AnalysisOptions b) {
return a.enableLazyAssignmentOperators == b.enableLazyAssignmentOperators &&
a.enableSuperMixins == b.enableSuperMixins &&
a.enableTiming == b.enableTiming &&
diff --git a/pkg/analyzer_cli/lib/src/options.dart b/pkg/analyzer_cli/lib/src/options.dart
index 9f3ffd2..b95df0d 100644
--- a/pkg/analyzer_cli/lib/src/options.dart
+++ b/pkg/analyzer_cli/lib/src/options.dart
@@ -160,49 +160,50 @@
/// Initialize options from the given parsed [args].
CommandLineOptions._fromArgs(ArgResults args)
- : buildAnalysisOutput = args['build-analysis-output'],
- buildMode = args['build-mode'],
- buildModePersistentWorker = args['persistent_worker'],
+ : buildAnalysisOutput = cast(args['build-analysis-output']),
+ buildMode = cast(args['build-mode']),
+ buildModePersistentWorker = cast(args['persistent_worker']),
buildSummaryInputs =
(args['build-summary-input'] as List).cast<String>(),
buildSummaryUnlinkedInputs =
(args['build-summary-unlinked-input'] as List).cast<String>(),
- buildSummaryOnly = args['build-summary-only'],
- buildSummaryOnlyUnlinked = args['build-summary-only-unlinked'],
- buildSummaryOutput = args['build-summary-output'],
- buildSummaryOutputSemantic = args['build-summary-output-semantic'],
- buildSuppressExitCode = args['build-suppress-exit-code'],
+ buildSummaryOnly = cast(args['build-summary-only']),
+ buildSummaryOnlyUnlinked = cast(args['build-summary-only-unlinked']),
+ buildSummaryOutput = cast(args['build-summary-output']),
+ buildSummaryOutputSemantic =
+ cast(args['build-summary-output-semantic']),
+ buildSuppressExitCode = cast(args['build-suppress-exit-code']),
contextBuilderOptions = createContextBuilderOptions(args),
- dartSdkPath = args['dart-sdk'],
- dartSdkSummaryPath = args['dart-sdk-summary'],
+ dartSdkPath = cast(args['dart-sdk']),
+ dartSdkSummaryPath = cast(args['dart-sdk-summary']),
declarationCasts = args.wasParsed(declarationCastsFlag)
- ? args[declarationCastsFlag]
- : args[implicitCastsFlag],
- disableCacheFlushing = args['disable-cache-flushing'],
- disableHints = args['no-hints'],
- displayVersion = args['version'],
- ignoreUnrecognizedFlags = args['ignore-unrecognized-flags'],
- lints = args[lintsFlag],
- log = args['log'],
+ ? cast(args[declarationCastsFlag])
+ : cast(args[implicitCastsFlag]),
+ disableCacheFlushing = cast(args['disable-cache-flushing']),
+ disableHints = cast(args['no-hints']),
+ displayVersion = cast(args['version']),
+ ignoreUnrecognizedFlags = cast(args['ignore-unrecognized-flags']),
+ lints = cast(args[lintsFlag]),
+ log = cast(args['log']),
machineFormat = args['format'] == 'machine',
- perfReport = args['x-perf-report'],
- useCFE = args['use-cfe'],
- useFastaParser = args['use-fasta-parser'],
- previewDart2 = args['preview-dart-2'],
- batchMode = args['batch'],
- showPackageWarnings = args['show-package-warnings'] ||
- args['package-warnings'] ||
+ perfReport = cast(args['x-perf-report']),
+ useCFE = cast(args['use-cfe']),
+ useFastaParser = cast(args['use-fasta-parser']),
+ previewDart2 = cast(args['preview-dart-2']),
+ batchMode = cast(args['batch']),
+ showPackageWarnings = cast(args['show-package-warnings']) ||
+ cast(args['package-warnings']) ||
args['x-package-warnings-prefix'] != null,
- showPackageWarningsPrefix = args['x-package-warnings-prefix'],
- showSdkWarnings = args['sdk-warnings'],
+ showPackageWarningsPrefix = cast(args['x-package-warnings-prefix']),
+ showSdkWarnings = cast(args['sdk-warnings']),
_sourceFiles = args.rest,
- infosAreFatal = args['fatal-infos'] || args['fatal-hints'],
- warningsAreFatal = args['fatal-warnings'],
- lintsAreFatal = args['fatal-lints'],
- implicitCasts = args[implicitCastsFlag],
- implicitDynamic = !args['no-implicit-dynamic'],
- verbose = args['verbose'],
- color = args['color'];
+ infosAreFatal = cast(args['fatal-infos']) || cast(args['fatal-hints']),
+ warningsAreFatal = cast(args['fatal-warnings']),
+ lintsAreFatal = cast(args['fatal-lints']),
+ implicitCasts = cast(args[implicitCastsFlag]),
+ implicitDynamic = !cast<bool>(args['no-implicit-dynamic']),
+ verbose = cast(args['verbose']),
+ color = cast(args['color']);
/// The path to an analysis options file
String get analysisOptionsFile =>
@@ -541,7 +542,7 @@
}
// Help requests.
- if (results['help']) {
+ if (cast(results['help'])) {
_showUsage(parser, analytics, fromHelp: true);
exitHandler(0);
return null; // Only reachable in testing.
@@ -550,7 +551,7 @@
// Enable / disable analytics.
if (telemetry.SHOW_ANALYTICS_UI) {
if (results.wasParsed('analytics')) {
- analytics.enabled = results['analytics'];
+ analytics.enabled = cast(results['analytics']);
outSink.writeln(
telemetry.createAnalyticsStatusMessage(analytics.enabled));
exitHandler(0);
@@ -559,14 +560,14 @@
}
// Batch mode and input files.
- if (results['batch']) {
+ if (cast(results['batch'])) {
if (results.rest.isNotEmpty) {
errorSink.writeln('No source files expected in the batch mode.');
_showUsage(parser, analytics);
exitHandler(15);
return null; // Only reachable in testing.
}
- } else if (results['persistent_worker']) {
+ } else if (cast(results['persistent_worker'])) {
if (results.rest.isNotEmpty) {
errorSink.writeln(
'No source files expected in the persistent worker mode.');
@@ -574,12 +575,12 @@
exitHandler(15);
return null; // Only reachable in testing.
}
- } else if (results['version']) {
+ } else if (cast(results['version'])) {
outSink.writeln('$_binaryName version ${_getVersion()}');
exitHandler(0);
return null; // Only reachable in testing.
} else {
- if (results.rest.isEmpty && !results['build-mode']) {
+ if (results.rest.isEmpty && !cast<bool>(results['build-mode'])) {
_showUsage(parser, analytics, fromHelp: true);
exitHandler(15);
return null; // Only reachable in testing.
@@ -642,3 +643,5 @@
For more information, see https://www.dartlang.org/tools/analyzer.\n''');
}
}
+
+T cast<T>(dynamic value) => value as T;
diff --git a/pkg/analyzer_cli/lib/src/perf_report.dart b/pkg/analyzer_cli/lib/src/perf_report.dart
index 110fa0f..e9227a9 100644
--- a/pkg/analyzer_cli/lib/src/perf_report.dart
+++ b/pkg/analyzer_cli/lib/src/perf_report.dart
@@ -13,17 +13,6 @@
const _JSON = const JsonEncoder.withIndent(" ");
-bool _isCheckedMode = () {
- bool x = true;
- try {
- // Trigger an exception if we're in checked mode.
- x = "" as dynamic;
- return x != ""; // return false; suppress unused variable warning
- } catch (e) {
- return true;
- }
-}();
-
String _osType = () {
if (Platform.isLinux) {
return "linux";
@@ -46,7 +35,6 @@
var platformJson = <String, dynamic>{
'osType': _osType,
'dartSdkVersion': Platform.version,
- 'checkedMode': _isCheckedMode,
};
var optionsJson = <String, dynamic>{
diff --git a/pkg/analyzer_cli/test/embedder_test.dart b/pkg/analyzer_cli/test/embedder_test.dart
index 95285ba..a5d5f04 100644
--- a/pkg/analyzer_cli/test/embedder_test.dart
+++ b/pkg/analyzer_cli/test/embedder_test.dart
@@ -60,7 +60,7 @@
}
/// Wrap a function call to dump stdout and stderr in case of an exception.
-Function wrap(Function f) {
+dynamic Function() wrap(dynamic Function() f) {
return () async {
try {
await f();
diff --git a/pkg/analyzer_cli/test/utils.dart b/pkg/analyzer_cli/test/utils.dart
index cff2486..fd431a2 100644
--- a/pkg/analyzer_cli/test/utils.dart
+++ b/pkg/analyzer_cli/test/utils.dart
@@ -58,7 +58,7 @@
/// completes, the temporary directory and all its contents will be deleted.
///
/// Returns the return value of [fn].
-dynamic withTempDir(fn(String path)) {
+T withTempDir<T>(T fn(String path)) {
var tempDir = Directory.systemTemp.createTempSync('analyzer_').path;
try {
return fn(tempDir);