Revert "Revert "Add many more global analyses. (#47875)" (#48080)" (#48081)
This reverts commit 04ea3183ce67c62def5852a5c2615e38188195ca.
diff --git a/dev/automated_tests/pubspec.yaml b/dev/automated_tests/pubspec.yaml
index 7c7633b..bb1caa7 100644
--- a/dev/automated_tests/pubspec.yaml
+++ b/dev/automated_tests/pubspec.yaml
@@ -19,13 +19,13 @@
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
image: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -74,4 +74,4 @@
assets:
- icon/
-# PUBSPEC CHECKSUM: ebc8
+# PUBSPEC CHECKSUM: b1cb
diff --git a/dev/benchmarks/complex_layout/fuchsia/meta/complex_layout.cmx b/dev/benchmarks/complex_layout/fuchsia/meta/complex_layout.cmx
index 878780c..bbe88bf 100644
--- a/dev/benchmarks/complex_layout/fuchsia/meta/complex_layout.cmx
+++ b/dev/benchmarks/complex_layout/fuchsia/meta/complex_layout.cmx
@@ -20,4 +20,3 @@
]
}
}
-
diff --git a/dev/benchmarks/complex_layout/pubspec.yaml b/dev/benchmarks/complex_layout/pubspec.yaml
index b34f3fc..9dd898f 100644
--- a/dev/benchmarks/complex_layout/pubspec.yaml
+++ b/dev/benchmarks/complex_layout/pubspec.yaml
@@ -46,12 +46,12 @@
archive: 2.0.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
image: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -91,4 +91,4 @@
- packages/flutter_gallery_assets/people/square/ali.png
- packages/flutter_gallery_assets/places/india_chettinad_silk_maker.png
-# PUBSPEC CHECKSUM: 4cef
+# PUBSPEC CHECKSUM: 06f2
diff --git a/dev/benchmarks/macrobenchmarks/pubspec.yaml b/dev/benchmarks/macrobenchmarks/pubspec.yaml
index 471d22c..8ee0c19 100644
--- a/dev/benchmarks/macrobenchmarks/pubspec.yaml
+++ b/dev/benchmarks/macrobenchmarks/pubspec.yaml
@@ -46,12 +46,12 @@
archive: 2.0.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
image: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -92,4 +92,4 @@
- packages/flutter_gallery_assets/food/cherry_pie.png
- assets/999x1000.png
-# PUBSPEC CHECKSUM: 4cef
+# PUBSPEC CHECKSUM: 06f2
diff --git a/dev/benchmarks/microbenchmarks/pubspec.yaml b/dev/benchmarks/microbenchmarks/pubspec.yaml
index ed952cf..cc322ea 100644
--- a/dev/benchmarks/microbenchmarks/pubspec.yaml
+++ b/dev/benchmarks/microbenchmarks/pubspec.yaml
@@ -23,14 +23,14 @@
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
dart_style: 1.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
image: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -79,4 +79,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: e51f
+# PUBSPEC CHECKSUM: 1d22
diff --git a/dev/bots/README.md b/dev/bots/README.md
index f17ba96..683741b 100644
--- a/dev/bots/README.md
+++ b/dev/bots/README.md
@@ -91,8 +91,8 @@
existing expected output to match the new output. Verify completely new test
cases by altering the `GenTests` method of the recipe. The recipe is required
to have 100% test coverage.
-3. Run `led get-builder 'luci.flutter.prod:BUILDER_NAME' | led edit -p 'revision="GIT_HASH"' | led edit-recipe-bundle | led launch`, where `BUILDER_NAME` is the builder name (e.g. `Linux Engine`), and
- `GIT_HASH` is the hash to build (which is important for the engine but not
+3. Run `led get-builder 'luci.flutter.prod:BUILDER_NAME' | led edit -p 'revision="GIT_HASH"' | led edit-recipe-bundle | led launch`, where `BUILDER_NAME` is the builder name (e.g. `Linux Engine`), and
+ `GIT_HASH` is the hash to build (which is important for the engine but not
for the framework).
4. To submit a CL, you need a local branch first (`git checkout -b [some branch name]`).
5. Upload the patch (`git commit`, `git cl upload`) and send it to someone in
diff --git a/dev/bots/analyze.dart b/dev/bots/analyze.dart
index 7bc1e87..1da0458 100644
--- a/dev/bots/analyze.dart
+++ b/dev/bots/analyze.dart
@@ -4,15 +4,16 @@
import 'dart:async';
import 'dart:convert';
-import 'dart:core' as core_internals show print;
import 'dart:core' hide print;
-import 'dart:io' as io_internals show exit;
import 'dart:io' hide exit;
+import 'dart:typed_data';
-import 'package:path/path.dart' as path;
+import 'package:crypto/crypto.dart';
import 'package:meta/meta.dart';
+import 'package:path/path.dart' as path;
import 'run_command.dart';
+import 'utils.dart';
final String flutterRoot = path.dirname(path.dirname(path.dirname(path.fromUri(Platform.script))));
final String flutter = path.join(flutterRoot, 'bin', Platform.isWindows ? 'flutter.bat' : 'flutter');
@@ -20,28 +21,6 @@
final String pub = path.join(flutterRoot, 'bin', 'cache', 'dart-sdk', 'bin', Platform.isWindows ? 'pub.bat' : 'pub');
final String pubCache = path.join(flutterRoot, '.pub-cache');
-class ExitException implements Exception {
- ExitException(this.exitCode);
-
- final int exitCode;
-
- void apply() {
- io_internals.exit(exitCode);
- }
-}
-
-// We actually reimplement exit() so that it uses exceptions rather
-// than truly immediately terminating the application, so that we can
-// test the exit code in unit tests (see test/analyze_test.dart).
-void exit(int exitCode) {
- throw ExitException(exitCode);
-}
-
-typedef PrintCallback = void Function(Object line);
-
-// Allow print() to be overridden, for tests.
-PrintCallback print = core_internals.print;
-
/// When you call this, you can pass additional arguments to pass custom
/// arguments to flutter analyze. For example, you might want to call this
/// script with the parameter --dart-sdk to use custom dart sdk.
@@ -55,17 +34,22 @@
} on ExitException catch (error) {
error.apply();
}
- print('${bold}DONE: Analysis successful.$reset');
+ print('$clock ${bold}Analysis successful.$reset');
}
Future<void> run(List<String> arguments) async {
bool assertsEnabled = false;
assert(() { assertsEnabled = true; return true; }());
if (!assertsEnabled) {
- print('The analyze.dart script must be run with --enable-asserts.');
- exit(1);
+ exitWithError(<String>['The analyze.dart script must be run with --enable-asserts.']);
}
+ print('$clock Unexpected binaries...');
+ await verifyNoBinaries(flutterRoot);
+
+ print('$clock Trailing spaces...');
+ await verifyNoTrailingSpaces(flutterRoot); // assumes no unexpected binaries, so should be after verifyNoBinaries
+
print('$clock Deprecations...');
await verifyDeprecations(flutterRoot);
@@ -90,22 +74,12 @@
print('$clock Internationalization...');
await verifyInternationalizations();
- print('$clock Trailing spaces...');
- await verifyNoTrailingSpaces();
-
// Ensure that all package dependencies are in sync.
print('$clock Package dependencies...');
await runCommand(flutter, <String>['update-packages', '--verify-only'],
workingDirectory: flutterRoot,
);
- // Analyze all the sample code in the repo
- print('$clock Sample code...');
- await runCommand(dart,
- <String>[path.join(flutterRoot, 'dev', 'bots', 'analyze-sample-code.dart')],
- workingDirectory: flutterRoot,
- );
-
// Analyze all the Dart code in the repo.
print('$clock Dart analysis...');
await _runFlutterAnalyze(flutterRoot, options: <String>[
@@ -123,6 +97,13 @@
...arguments,
]);
+ // Analyze all the sample code in the repo
+ print('$clock Sample code...');
+ await runCommand(dart,
+ <String>[path.join(flutterRoot, 'dev', 'bots', 'analyze-sample-code.dart')],
+ workingDirectory: flutterRoot,
+ );
+
// Try analysis against a big version of the gallery; generate into a temporary directory.
print('$clock Dart analysis (mega gallery)...');
final Directory outDir = Directory.systemTemp.createTempSync('flutter_mega_gallery.');
@@ -164,9 +145,9 @@
/// Some deprecation notices are grand-fathered in for now. They must have an issue listed.
final RegExp _grandfatheredDeprecation = RegExp(r' // ignore: flutter_deprecation_syntax, https://github.com/flutter/flutter/issues/[0-9]+$');
-Future<void> verifyDeprecations(String workingDirectory) async {
+Future<void> verifyDeprecations(String workingDirectory, { int minimumMatches = 2000 }) async {
final List<String> errors = <String>[];
- for (File file in _allFiles(workingDirectory, 'dart')) {
+ for (File file in _allFiles(workingDirectory, 'dart', minimumMatches: minimumMatches)) {
int lineNumber = 0;
final List<String> lines = file.readAsLinesSync();
final List<int> linesWithDeprecations = <int>[];
@@ -224,11 +205,10 @@
}
// Fail if any errors
if (errors.isNotEmpty) {
- print('$redLine');
- print(errors.join('\n'));
- print('${bold}See: https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes$reset\n');
- print('$redLine\n');
- exit(1);
+ exitWithError(<String>[
+ ...errors,
+ '${bold}See: https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes$reset',
+ ]);
}
}
@@ -239,26 +219,27 @@
'${prefix}found in the LICENSE file.';
}
-Future<void> verifyNoMissingLicense(String workingDirectory) async {
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'dart', _generateLicense('// '));
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'java', _generateLicense('// '));
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'h', _generateLicense('// '));
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'm', _generateLicense('// '));
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'swift', _generateLicense('// '));
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'gradle', _generateLicense('// '));
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'gn', _generateLicense('# '));
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'sh', '#!/usr/bin/env bash\n' + _generateLicense('# '));
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'bat', '@ECHO off\n' + _generateLicense('REM '));
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'ps1', _generateLicense('# '));
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'html', '<!DOCTYPE HTML>\n<!-- ${_generateLicense('')} -->', trailingBlank: false);
- await _verifyNoMissingLicenseForExtension(workingDirectory, 'xml', '<!-- ${_generateLicense('')} -->');
+Future<void> verifyNoMissingLicense(String workingDirectory, { bool checkMinimums = true }) async {
+ final int overrideMinimumMatches = checkMinimums ? null : 0;
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'dart', overrideMinimumMatches ?? 2000, _generateLicense('// '));
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'java', overrideMinimumMatches ?? 40, _generateLicense('// '));
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'h', overrideMinimumMatches ?? 30, _generateLicense('// '));
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'm', overrideMinimumMatches ?? 30, _generateLicense('// '));
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'swift', overrideMinimumMatches ?? 10, _generateLicense('// '));
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'gradle', overrideMinimumMatches ?? 100, _generateLicense('// '));
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'gn', overrideMinimumMatches ?? 0, _generateLicense('# '));
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'sh', overrideMinimumMatches ?? 1, '#!/usr/bin/env bash\n' + _generateLicense('# '));
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'bat', overrideMinimumMatches ?? 1, '@ECHO off\n' + _generateLicense('REM '));
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'ps1', overrideMinimumMatches ?? 1, _generateLicense('# '));
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'html', overrideMinimumMatches ?? 1, '<!DOCTYPE HTML>\n<!-- ${_generateLicense('')} -->', trailingBlank: false);
+ await _verifyNoMissingLicenseForExtension(workingDirectory, 'xml', overrideMinimumMatches ?? 1, '<!-- ${_generateLicense('')} -->');
}
-Future<void> _verifyNoMissingLicenseForExtension(String workingDirectory, String extension, String license, { bool trailingBlank = true }) async {
+Future<void> _verifyNoMissingLicenseForExtension(String workingDirectory, String extension, int minimumMatches, String license, { bool trailingBlank = true }) async {
assert(!license.endsWith('\n'));
final String licensePattern = license + '\n' + (trailingBlank ? '\n' : '');
final List<String> errors = <String>[];
- for (File file in _allFiles(workingDirectory, extension)) {
+ for (File file in _allFiles(workingDirectory, extension, minimumMatches: minimumMatches)) {
final String contents = file.readAsStringSync().replaceAll('\r\n', '\n');
if (contents.isEmpty)
continue; // let's not go down the /bin/true rabbit hole
@@ -267,16 +248,14 @@
}
// Fail if any errors
if (errors.isNotEmpty) {
- print('$redLine');
final String s = errors.length == 1 ? ' does' : 's do';
- print('${bold}The following ${errors.length} file$s not have the right license header:$reset\n');
- print(errors.join('\n'));
- print('$redLine\n');
- print('The expected license header is:');
- print('$license');
- if (trailingBlank)
- print('...followed by a blank line.');
- exit(1);
+ exitWithError(<String>[
+ '${bold}The following ${errors.length} file$s not have the right license header:$reset',
+ ...errors,
+ 'The expected license header is:',
+ license,
+ if (trailingBlank) '...followed by a blank line.',
+ ]);
}
}
@@ -290,10 +269,7 @@
Future<void> verifyNoTestImports(String workingDirectory) async {
final List<String> errors = <String>[];
assert("// foo\nimport 'binding_test.dart' as binding;\n'".contains(_testImportPattern));
- final Iterable<File> dartFiles = Directory(path.join(workingDirectory, 'packages'))
- .listSync(recursive: true)
- .whereType<File>()
- .where((File file) => path.extension(file.path) == '.dart');
+ final List<File> dartFiles = _allFiles(path.join(workingDirectory, 'packages'), 'dart', minimumMatches: 1500).toList();
for (File file in dartFiles) {
for (String line in file.readAsLinesSync()) {
final Match match = _testImportPattern.firstMatch(line);
@@ -303,22 +279,18 @@
}
// Fail if any errors
if (errors.isNotEmpty) {
- print('$redLine');
final String s = errors.length == 1 ? '' : 's';
- print('${bold}The following file$s import a test directly. Test utilities should be in their own file.$reset\n');
- print(errors.join('\n'));
- print('$redLine\n');
- exit(1);
+ exitWithError(<String>[
+ '${bold}The following file$s import a test directly. Test utilities should be in their own file.$reset',
+ ...errors,
+ ]);
}
}
Future<void> verifyNoTestPackageImports(String workingDirectory) async {
// TODO(ianh): Remove this whole test once https://github.com/dart-lang/matcher/issues/98 is fixed.
final List<String> shims = <String>[];
- final List<String> errors = Directory(workingDirectory)
- .listSync(recursive: true)
- .whereType<File>()
- .where((File file) => file.path.endsWith('.dart'))
+ final List<String> errors = _allFiles(workingDirectory, 'dart', minimumMatches: 2000)
.map<String>((File file) {
final String name = Uri.file(path.relative(file.path,
from: workingDirectory)).toFilePath(windows: false);
@@ -376,16 +348,15 @@
// Fail if any errors
if (errors.isNotEmpty) {
- print('$redLine');
final String s1 = errors.length == 1 ? 's' : '';
final String s2 = errors.length == 1 ? '' : 's';
- print('${bold}The following file$s2 use$s1 \'package:test\' incorrectly:$reset');
- print(errors.join('\n'));
- print('Rather than depending on \'package:test\' directly, use one of the shims:');
- print(shims.join('\n'));
- print('This insulates us from breaking changes in \'package:test\'.');
- print('$redLine\n');
- exit(1);
+ exitWithError(<String>[
+ '${bold}The following file$s2 use$s1 \'package:test\' incorrectly:$reset',
+ ...errors,
+ 'Rather than depending on \'package:test\' directly, use one of the shims:',
+ ...shims,
+ 'This insulates us from breaking changes in \'package:test\'.'
+ ]);
}
}
@@ -419,14 +390,11 @@
}
if (outOfDate.isNotEmpty) {
- print('$redLine');
- print('${bold}The following GeneratedPluginRegistrants are out of date:$reset');
- for (String registrant in outOfDate) {
- print(' - $registrant');
- }
- print('\nRun "flutter inject-plugins" in the package that\'s out of date.');
- print('$redLine');
- exit(1);
+ exitWithError(<String>[
+ '${bold}The following GeneratedPluginRegistrants are out of date:$reset',
+ for (String registrant in outOfDate) ' - $registrant',
+ '\nRun "flutter inject-plugins" in the package that\'s out of date.',
+ ]);
}
}
@@ -478,24 +446,19 @@
}
// Fail if any errors
if (errors.isNotEmpty) {
- print('$redLine');
- if (errors.length == 1) {
- print('${bold}An error was detected when looking at import dependencies within the Flutter package:$reset\n');
- } else {
- print('${bold}Multiple errors were detected when looking at import dependencies within the Flutter package:$reset\n');
- }
- print(errors.join('\n\n'));
- print('$redLine\n');
- exit(1);
+ exitWithError(<String>[
+ if (errors.length == 1)
+ '${bold}An error was detected when looking at import dependencies within the Flutter package:$reset'
+ else
+ '${bold}Multiple errors were detected when looking at import dependencies within the Flutter package:$reset',
+ ...errors,
+ ]);
}
}
Future<void> verifyNoBadImportsInFlutterTools(String workingDirectory) async {
final List<String> errors = <String>[];
- final Iterable<File> files = Directory(path.join(workingDirectory, 'packages', 'flutter_tools', 'lib'))
- .listSync(recursive: true)
- .whereType<File>()
- .where((File file) => path.extension(file.path) == '.dart');
+ final List<File> files = _allFiles(path.join(workingDirectory, 'packages', 'flutter_tools', 'lib'), 'dart', minimumMatches: 200).toList();
for (File file in files) {
if (file.readAsStringSync().contains('package:flutter_tools/')) {
errors.add('$yellow${file.path}$reset imports flutter_tools.');
@@ -503,15 +466,13 @@
}
// Fail if any errors
if (errors.isNotEmpty) {
- print('$redLine');
- if (errors.length == 1) {
- print('${bold}An error was detected when looking at import dependencies within the flutter_tools package:$reset\n');
- } else {
- print('${bold}Multiple errors were detected when looking at import dependencies within the flutter_tools package:$reset\n');
- }
- print(errors.join('\n\n'));
- print('$redLine\n');
- exit(1);
+ exitWithError(<String>[
+ if (errors.length == 1)
+ '${bold}An error was detected when looking at import dependencies within the flutter_tools package:$reset'
+ else
+ '${bold}Multiple errors were detected when looking at import dependencies within the flutter_tools package:$reset',
+ ...errors.map((String paragraph) => '$paragraph\n'),
+ ]);
}
}
@@ -539,65 +500,533 @@
final String expectedCupertinoResult = await File(cupertinoLocalizationsFile).readAsString();
if (materialGenResult.stdout.trim() != expectedMaterialResult.trim()) {
- stderr
- ..writeln('<<<<<<< $materialLocalizationsFile')
- ..writeln(expectedMaterialResult.trim())
- ..writeln('=======')
- ..writeln(materialGenResult.stdout.trim())
- ..writeln('>>>>>>> gen_localizations')
- ..writeln('The contents of $materialLocalizationsFile are different from that produced by gen_localizations.')
- ..writeln()
- ..writeln('Did you forget to run gen_localizations.dart after updating a .arb file?');
- exit(1);
+ exitWithError(<String>[
+ '<<<<<<< $materialLocalizationsFile',
+ expectedMaterialResult.trim(),
+ '=======',
+ materialGenResult.stdout.trim(),
+ '>>>>>>> gen_localizations',
+ 'The contents of $materialLocalizationsFile are different from that produced by gen_localizations.',
+ '',
+ 'Did you forget to run gen_localizations.dart after updating a .arb file?',
+ ]);
}
if (cupertinoGenResult.stdout.trim() != expectedCupertinoResult.trim()) {
- stderr
- ..writeln('<<<<<<< $cupertinoLocalizationsFile')
- ..writeln(expectedCupertinoResult.trim())
- ..writeln('=======')
- ..writeln(cupertinoGenResult.stdout.trim())
- ..writeln('>>>>>>> gen_localizations')
- ..writeln('The contents of $cupertinoLocalizationsFile are different from that produced by gen_localizations.')
- ..writeln()
- ..writeln('Did you forget to run gen_localizations.dart after updating a .arb file?');
- exit(1);
+ exitWithError(<String>[
+ '<<<<<<< $cupertinoLocalizationsFile',
+ expectedCupertinoResult.trim(),
+ '=======',
+ cupertinoGenResult.stdout.trim(),
+ '>>>>>>> gen_localizations',
+ 'The contents of $cupertinoLocalizationsFile are different from that produced by gen_localizations.',
+ '',
+ 'Did you forget to run gen_localizations.dart after updating a .arb file?',
+ ]);
}
}
-Future<void> verifyNoTrailingSpaces() async {
- if (!Platform.isWindows) {
- final String commitRange = Platform.environment.containsKey('TEST_COMMIT_RANGE')
- ? Platform.environment['TEST_COMMIT_RANGE']
- : await _getCommitRange();
- final List<String> fileTypes = <String>[
- '*.dart', '*.cxx', '*.cpp', '*.cc', '*.c', '*.C', '*.h', '*.java', '*.mm', '*.m', '*.yml',
- ];
- final EvalResult changedFilesResult = await _evalCommand(
- 'git', <String>['diff', '-U0', '--no-color', '--name-only', commitRange, '--', ...fileTypes],
- workingDirectory: flutterRoot,
- );
- if (changedFilesResult.stdout == null || changedFilesResult.stdout.trim().isEmpty) {
- print('No files found that need to be checked for trailing whitespace.');
- return;
+Future<void> verifyNoTrailingSpaces(String workingDirectory, { int minimumMatches = 4000 }) async {
+ final List<File> files = _allFiles(workingDirectory, null, minimumMatches: minimumMatches)
+ .where((File file) => path.basename(file.path) != 'serviceaccount.enc')
+ .where((File file) => path.basename(file.path) != 'Ahem.ttf')
+ .where((File file) => path.extension(file.path) != '.snapshot')
+ .where((File file) => path.extension(file.path) != '.png')
+ .where((File file) => path.extension(file.path) != '.jpg')
+ .where((File file) => path.extension(file.path) != '.jar')
+ .toList();
+ final List<String> problems = <String>[];
+ for (File file in files) {
+ final List<String> lines = file.readAsLinesSync();
+ for (int index = 0; index < lines.length; index += 1) {
+ if (lines[index].endsWith(' ')) {
+ problems.add('${file.path}:${index + 1}: trailing U+0020 space character');
+ } else if (lines[index].endsWith('\t')) {
+ problems.add('${file.path}:${index + 1}: trailing U+0009 tab character');
+ }
}
- // Only include files that actually exist, so that we don't try and grep for
- // nonexistent files, which can occur when files are deleted or moved.
- final List<String> changedFiles = changedFilesResult.stdout.split('\n').where((String filename) {
- return File(filename).existsSync();
- }).toList();
- if (changedFiles.isNotEmpty) {
- await runCommand('grep',
- <String>[
- '--line-number',
- '--extended-regexp',
- r'[[:blank:]]$',
- ...changedFiles,
- ],
- workingDirectory: flutterRoot,
- failureMessage: '${red}Detected trailing whitespace in the file[s] listed above.$reset\nPlease remove them from the offending line[s].',
- expectNonZeroExit: true, // Just means a non-zero exit code is expected.
- expectedExitCode: 1, // Indicates that zero lines were found.
- );
+ if (lines.isNotEmpty && lines.last == '')
+ problems.add('${file.path}:${lines.length}: trailing blank line');
+ }
+ if (problems.isNotEmpty)
+ exitWithError(problems);
+}
+
+class Hash256 {
+ Hash256(this.a, this.b, this.c, this.d);
+
+ factory Hash256.fromDigest(Digest digest) {
+ assert(digest.bytes.length == 32);
+ return Hash256(
+ digest.bytes[ 0] << 56 |
+ digest.bytes[ 1] << 48 |
+ digest.bytes[ 2] << 40 |
+ digest.bytes[ 3] << 32 |
+ digest.bytes[ 4] << 24 |
+ digest.bytes[ 5] << 16 |
+ digest.bytes[ 6] << 8 |
+ digest.bytes[ 7] << 0,
+ digest.bytes[ 8] << 56 |
+ digest.bytes[ 9] << 48 |
+ digest.bytes[10] << 40 |
+ digest.bytes[11] << 32 |
+ digest.bytes[12] << 24 |
+ digest.bytes[13] << 16 |
+ digest.bytes[14] << 8 |
+ digest.bytes[15] << 0,
+ digest.bytes[16] << 56 |
+ digest.bytes[17] << 48 |
+ digest.bytes[18] << 40 |
+ digest.bytes[19] << 32 |
+ digest.bytes[20] << 24 |
+ digest.bytes[21] << 16 |
+ digest.bytes[22] << 8 |
+ digest.bytes[23] << 0,
+ digest.bytes[24] << 56 |
+ digest.bytes[25] << 48 |
+ digest.bytes[26] << 40 |
+ digest.bytes[27] << 32 |
+ digest.bytes[28] << 24 |
+ digest.bytes[29] << 16 |
+ digest.bytes[30] << 8 |
+ digest.bytes[31] << 0,
+ );
+ }
+
+ final int a;
+ final int b;
+ final int c;
+ final int d;
+
+ @override
+ bool operator ==(Object other) {
+ if (other.runtimeType != runtimeType)
+ return false;
+ return other is Hash256
+ && other.a == a
+ && other.b == b
+ && other.c == c
+ && other.d == d;
+ }
+
+ @override
+ int get hashCode => a ^ b ^ c ^ d;
+}
+
+// DO NOT ADD ANY ENTRIES TO THIS LIST.
+// We have a policy of not checking in binaries into this repository.
+// If you have binaries to add, please consult Hixie for advice.
+final Set<Hash256> _grandfatheredBinaries = <Hash256>{
+ // DEFAULT ICON IMAGES
+
+ // packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/mipmap-hdpi/ic_launcher.png
+ // packages/flutter_tools/templates/module/android/host_app_common/app.tmpl/src/main/res/mipmap-hdpi/ic_launcher.png
+ // (also used by many examples)
+ Hash256(0x6A7C8F0D703E3682, 0x108F9662F8133022, 0x36240D3F8F638BB3, 0x91E32BFB96055FEF),
+
+ // packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/mipmap-mdpi/ic_launcher.png
+ // (also used by many examples)
+ Hash256(0xC7C0C0189145E4E3, 0x2A401C61C9BDC615, 0x754B0264E7AFAE24, 0xE834BB81049EAF81),
+
+ // packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/mipmap-xhdpi/ic_launcher.png
+ // (also used by many examples)
+ Hash256(0xE14AA40904929BF3, 0x13FDED22CF7E7FFC, 0xBF1D1AAC4263B5EF, 0x1BE8BFCE650397AA),
+
+ // packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
+ // (also used by many examples)
+ Hash256(0x4D470BF22D5C17D8, 0x4EDC5F82516D1BA8, 0xA1C09559CD761CEF, 0xB792F86D9F52B540),
+
+ // packages/flutter_tools/templates/app/android.tmpl/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
+ // (also used by many examples)
+ Hash256(0x3C34E1F298D0C9EA, 0x3455D46DB6B7759C, 0x8211A49E9EC6E44B, 0x635FC5C87DFB4180),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
+ // (also used by a few examples)
+ Hash256(0x7770183009E91411, 0x2DE7D8EF1D235A6A, 0x30C5834424858E0D, 0x2F8253F6B8D31926),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
+ // (also used by many examples)
+ Hash256(0x5925DAB509451F9E, 0xCBB12CE8A625F9D4, 0xC104718EE20CAFF8, 0xB1B51032D1CD8946),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
+ // (also used by many examples)
+ Hash256(0xC4D9A284C12301D0, 0xF50E248EC53ED51A, 0x19A10147B774B233, 0x08399250B0D44C55),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
+ // (also used by many examples)
+ Hash256(0xBF97F9D3233F33E1, 0x389B09F7B8ADD537, 0x41300CB834D6C7A5, 0xCA32CBED363A4FB2),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
+ // (also used by many examples)
+ Hash256(0x285442F69A06B45D, 0x9D79DF80321815B5, 0x46473548A37B7881, 0x9B68959C7B8ED237),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
+ // (also used by many examples)
+ Hash256(0x2AB64AF8AC727EA9, 0x9C6AB9EAFF847F46, 0xFBF2A9A0A78A0ABC, 0xBF3180F3851645B4),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
+ // (also used by many examples)
+ Hash256(0x9DCA09F4E5ED5684, 0xD3C4DFF41F4E8B7C, 0xB864B438172D72BE, 0x069315FA362930F9),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
+ // (also used by many examples)
+ Hash256(0xD5AD04DE321EF37C, 0xACC5A7B960AFCCE7, 0x1BDCB96FA020C482, 0x49C1545DD1A0F497),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
+ // (also used by many examples)
+ Hash256(0x809ABFE75C440770, 0xC13C4E2E46D09603, 0xC22053E9D4E0E227, 0x5DCB9C1DCFBB2C75),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
+ // (also used by many examples)
+ Hash256(0x3DB08CB79E7B01B9, 0xE81F956E3A0AE101, 0x48D0FAFDE3EA7AA7, 0x0048DF905AA52CFD),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
+ // (also used by many examples)
+ Hash256(0x23C13D463F5DCA5C, 0x1F14A14934003601, 0xC29F1218FD461016, 0xD8A22CEF579A665F),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
+ // (also used by many examples)
+ Hash256(0x6DB7726530D71D3F, 0x52CB59793EB69131, 0x3BAA04796E129E1E, 0x043C0A58A1BFFD2F),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
+ // (also used by many examples)
+ Hash256(0xCEE565F5E6211656, 0x9B64980B209FD5CA, 0x4B3D3739011F5343, 0x250B33A1A2C6EB65),
+
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
+ // packages/flutter_tools/templates/app/ios.tmpl/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
+ // packages/flutter_tools/templates/module/ios/host_app_ephemeral/Runner.tmpl/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
+ // (also used by many examples)
+ Hash256(0x93AE7D494FAD0FB3, 0x0CBF3AE746A39C4B, 0xC7A0F8BBF87FBB58, 0x7A3F3C01F3C5CE20),
+
+ // packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png
+ // (also used by a few examples)
+ Hash256(0xB18BEBAAD1AD6724, 0xE48BCDF699BA3927, 0xDF3F258FEBE646A3, 0xAB5C62767C6BAB40),
+
+ // packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png
+ // (also used by a few examples)
+ Hash256(0xF90D839A289ECADB, 0xF2B0B3400DA43EB8, 0x08B84908335AE4A0, 0x07457C4D5A56A57C),
+
+ // packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png
+ // (also used by a few examples)
+ Hash256(0x592C2ABF84ADB2D3, 0x91AED8B634D3233E, 0x2C65369F06018DCD, 0x8A4B27BA755EDCBE),
+
+ // packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png
+ // (also used by a few examples)
+ Hash256(0x75D9A0C034113CA8, 0xA1EC11C24B81F208, 0x6630A5A5C65C7D26, 0xA5DC03A1C0A4478C),
+
+ // packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png
+ // (also used by a few examples)
+ Hash256(0xA896E65745557732, 0xC72BD4EE3A10782F, 0xE2AA95590B5AF659, 0x869E5808DB9C01C1),
+
+ // packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png
+ // (also used by a few examples)
+ Hash256(0x3A69A8A1AAC5D9A8, 0x374492AF4B6D07A4, 0xCE637659EB24A784, 0x9C4DFB261D75C6A3),
+
+ // packages/flutter_tools/templates/app/macos.tmpl/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png
+ // (also used by a few examples)
+ Hash256(0xD29D4E0AF9256DC9, 0x2D0A8F8810608A5E, 0x64A132AD8B397CA2, 0xC4DDC0B1C26A68C3),
+
+
+ // GALLERY ICONS
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-hdpi/ic_background.png
+ Hash256(0x03CFDE53C249475C, 0x277E8B8E90AC8A13, 0xE5FC13C358A94CCB, 0x67CA866C9862A0DD),
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-hdpi/ic_foreground.png
+ Hash256(0x86A83E23A505EFCC, 0x39C358B699EDE12F, 0xC088EE516A1D0C73, 0xF3B5D74DDAD164B1),
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
+ Hash256(0xD813B1A77320355E, 0xB68C485CD47D0F0F, 0x3C7E1910DCD46F08, 0x60A6401B8DC13647),
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-xhdpi/ic_background.png
+ Hash256(0x35AFA76BD5D6053F, 0xEE927436C78A8794, 0xA8BA5F5D9FC9653B, 0xE5B96567BB7215ED),
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-xhdpi/ic_foreground.png
+ Hash256(0x263CE9B4F1F69B43, 0xEBB08AE9FE8F80E7, 0x95647A59EF2C040B, 0xA8AEB246861A7DFF),
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
+ Hash256(0x5E1A93C3653BAAFF, 0x1AAC6BCEB8DCBC2F, 0x2AE7D68ECB07E507, 0xCB1FA8354B28313A),
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-xxhdpi/ic_background.png
+ Hash256(0xA5C77499151DDEC6, 0xDB40D0AC7321FD74, 0x0646C0C0F786743F, 0x8F3C3C408CAC5E8C),
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-xxhdpi/ic_foreground.png
+ Hash256(0x33DE450980A2A16B, 0x1982AC7CDC1E7B01, 0x919E07E0289C2139, 0x65F85BCED8895FEF),
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
+ Hash256(0xC3B8577F4A89BA03, 0x830944FB06C3566B, 0x4C99140A2CA52958, 0x089BFDC3079C59B7),
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-xxxhdpi/ic_background.png
+ Hash256(0xDEBC241D6F9C5767, 0x8980FDD46FA7ED0C, 0x5B8ACD26BCC5E1BC, 0x473C89B432D467AD),
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-xxxhdpi/ic_foreground.png
+ Hash256(0xBEFE5F7E82BF8B64, 0x148D869E3742004B, 0xF821A9F5A1BCDC00, 0x357D246DCC659DC2),
+
+ // examples/flutter_gallery/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
+ Hash256(0xC385404341FF9EDD, 0x30FBE76F0EC99155, 0x8EA4F4AFE8CC0C60, 0x1CA3EDEF177E1DA8),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-1024.png
+ Hash256(0x6BE5751A29F57A80, 0x36A4B31CC542C749, 0x984E49B22BD65CAA, 0x75AE8B2440848719),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-120.png
+ Hash256(0x9972A2264BFA8F8D, 0x964AFE799EADC1FA, 0x2247FB31097F994A, 0x1495DC32DF071793),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-152.png
+ Hash256(0x4C7CC9B09BEEDA24, 0x45F57D6967753910, 0x57D68E1A6B883D2C, 0x8C52701A74F1400F),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-167.png
+ Hash256(0x66DACAC1CFE4D349, 0xDBE994CB9125FFD7, 0x2D795CFC9CF9F739, 0xEDBB06CE25082E9C),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-180.png
+ Hash256(0x5188621015EBC327, 0xC9EF63AD76E60ECE, 0xE82BDC3E4ABF09E2, 0xEE0139FA7C0A2BE5),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-20.png
+ Hash256(0x27D2752D04EE9A6B, 0x78410E208F74A6CD, 0xC90D9E03B73B8C60, 0xD05F7D623E790487),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-29.png
+ Hash256(0xBB20556B2826CF85, 0xD5BAC73AA69C2AC3, 0x8E71DAD64F15B855, 0xB30CB73E0AF89307),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-40.png
+ Hash256(0x623820FA45CDB0AC, 0x808403E34AD6A53E, 0xA3E9FDAE83EE0931, 0xB020A3A4EF2CDDE7),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-58.png
+ Hash256(0xC6D631D1E107215E, 0xD4A58FEC5F3AA4B5, 0x0AE9724E07114C0C, 0x453E5D87C2CAD3B3),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-60.png
+ Hash256(0x4B6F58D1EB8723C6, 0xE717A0D09FEC8806, 0x90C6D1EF4F71836E, 0x618672827979B1A2),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-76.png
+ Hash256(0x0A1744CC7634D508, 0xE85DD793331F0C8A, 0x0B7C6DDFE0975D8F, 0x29E91C905BBB1BED),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-80.png
+ Hash256(0x24032FBD1E6519D6, 0x0BA93C0D5C189554, 0xF50EAE23756518A2, 0x3FABACF4BD5DAF08),
+
+ // examples/flutter_gallery/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-87.png
+ Hash256(0xC17BAE6DF6BB234A, 0xE0AF4BEB0B805F12, 0x14E74EB7AA9A30F1, 0x5763689165DA7DDF),
+
+
+ // STOCKS ICONS
+
+ // examples/stocks/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
+ Hash256(0x74052AB5241D4418, 0x7085180608BC3114, 0xD12493C50CD8BBC7, 0x56DED186C37ACE84),
+
+ // examples/stocks/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
+ Hash256(0xE37947332E3491CB, 0x82920EE86A086FEA, 0xE1E0A70B3700A7DA, 0xDCAFBDD8F40E2E19),
+
+ // examples/stocks/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
+ Hash256(0xE608CDFC0C8579FB, 0xE38873BAAF7BC944, 0x9C9D2EE3685A4FAE, 0x671EF0C8BC41D17C),
+
+ // examples/stocks/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
+ Hash256(0xBD53D86977DF9C54, 0xF605743C5ABA114C, 0x9D51D1A8BB917E1A, 0x14CAA26C335CAEBD),
+
+ // examples/stocks/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
+ Hash256(0x64E4D02262C4F3D0, 0xBB4FDC21CD0A816C, 0x4CD2A0194E00FB0F, 0x1C3AE4142FAC0D15),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png
+ Hash256(0x5BA3283A76918FC0, 0xEE127D0F22D7A0B6, 0xDF03DAED61669427, 0x93D89DDD87A08117),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png
+ Hash256(0xCD7F26ED31DEA42A, 0x535D155EC6261499, 0x34E6738255FDB2C4, 0xBD8D4BDDE9A99B05),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-76.png
+ Hash256(0x3FA1225FC9A96A7E, 0xCD071BC42881AB0E, 0x7747EB72FFB72459, 0xA37971BBAD27EE24),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png
+ Hash256(0xCD867001ACD7BBDB, 0x25CDFD452AE89FA2, 0x8C2DC980CAF55F48, 0x0B16C246CFB389BC),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png
+ Hash256(0x848E9736E5C4915A, 0x7945BCF6B32FD56B, 0x1F1E7CDDD914352E, 0xC9681D38EF2A70DA),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Notification.png
+ Hash256(0x654BA7D6C4E05CA0, 0x7799878884EF8F11, 0xA383E1F24CEF5568, 0x3C47604A966983C8),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Notification@2x.png
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small-40.png
+ Hash256(0x743056FE7D83FE42, 0xA2990825B6AD0415, 0x1AF73D0D43B227AA, 0x07EBEA9B767381D9),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Notification@3x.png
+ Hash256(0xA7E1570812D119CF, 0xEF4B602EF28DD0A4, 0x100D066E66F5B9B9, 0x881765DC9303343B),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png
+ Hash256(0xB4102839A1E41671, 0x62DACBDEFA471953, 0xB1EE89A0AB7594BE, 0x1D9AC1E67DC2B2CE),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small.png
+ Hash256(0x70AC6571B593A967, 0xF1CBAEC9BC02D02D, 0x93AD766D8290ADE6, 0x840139BF9F219019),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png
+ Hash256(0x5D87A78386DA2C43, 0xDDA8FEF2CA51438C, 0xE5A276FE28C6CF0A, 0xEBE89085B56665B6),
+
+ // examples/stocks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png
+ Hash256(0x4D9F5E81F668DA44, 0xB20A77F8BF7BA2E1, 0xF384533B5AD58F07, 0xB3A2F93F8635CD96),
+
+
+ // LEGACY ICONS
+
+ // dev/benchmarks/complex_layout/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png
+ // dev/benchmarks/microbenchmarks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png
+ // examples/flutter_view/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@3x.png
+ // (not really sure where this came from, or why neither the template nor most examples use them)
+ Hash256(0x6E645DC9ED913AAD, 0xB50ED29EEB16830D, 0xB32CA12F39121DB9, 0xB7BC1449DDDBF8B8),
+
+ // dev/benchmarks/macrobenchmarks/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
+ // dev/integration_tests/codegen/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
+ // dev/integration_tests/ios_add2app/ios_add2app/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
+ // dev/integration_tests/release_smoke_test/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
+ Hash256(0xDEFAC77E08EC71EC, 0xA04CCA3C95D1FC33, 0xB9F26E1CB15CB051, 0x47DEFC79CDD7C158),
+
+ // examples/flutter_view/ios/Runner/ic_add.png
+ // examples/platform_view/ios/Runner/ic_add.png
+ Hash256(0x3CCE7450334675E2, 0xE3AABCA20B028993, 0x127BE82FE0EB3DFF, 0x8B027B3BAF052F2F),
+
+ // examples/image_list/images/coast.jpg
+ Hash256(0xDA957FD30C51B8D2, 0x7D74C2C918692DC4, 0xD3C5C99BB00F0D6B, 0x5EBB30395A6EDE82),
+
+ // examples/image_list/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
+ Hash256(0xB5792CA06F48A431, 0xD4379ABA2160BD5D, 0xE92339FC64C6A0D3, 0x417AA359634CD905),
+
+
+ // TEST ASSETS
+
+ // dev/benchmarks/macrobenchmarks/assets/999x1000.png
+ Hash256(0x553E9C36DFF3E610, 0x6A608BDE822A0019, 0xDE4F1769B6FBDB97, 0xBC3C20E26B839F59),
+
+ // dev/bots/test/analyze-test-input/root/packages/foo/serviceaccount.enc
+ Hash256(0xA8100AE6AA1940D0, 0xB663BB31CD466142, 0xEBBDBD5187131B92, 0xD93818987832EB89),
+
+ // dev/automated_tests/icon/test.png
+ Hash256(0xE214B4A0FEEEC6FA, 0x8E7AA8CC9BFBEC40, 0xBCDAC2F2DEBC950F, 0x75AF8EBF02BCE459),
+
+ // dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/android/app/src/main/res/drawable-land-xxhdpi/flutter_splash_screen.png
+ // dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/android/app/src/main/res/mipmap-land-xxhdpi/flutter_splash_screen.png
+ Hash256(0x2D4F8D7A3DFEF9D3, 0xA0C66938E169AB58, 0x8C6BBBBD1973E34E, 0x03C428416D010182),
+
+ // dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/android/app/src/main/res/drawable-xxhdpi/flutter_splash_screen.png
+ // dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/android/app/src/main/res/mipmap-xxhdpi/flutter_splash_screen.png
+ Hash256(0xCD46C01BAFA3B243, 0xA6AA1645EEDDE481, 0x143AC8ABAB1A0996, 0x22CAA9D41F74649A),
+
+ // dev/integration_tests/flutter_driver_screenshot_test/assets/red_square.png
+ Hash256(0x40054377E1E084F4, 0x4F4410CE8F44C210, 0xABA945DFC55ED0EF, 0x23BDF9469E32F8D3),
+
+ // dev/integration_tests/flutter_driver_screenshot_test/test_driver/goldens/red_square_image/iPhone7,2.png
+ Hash256(0x7F9D27C7BC418284, 0x01214E21CA886B2F, 0x40D9DA2B31AE7754, 0x71D68375F9C8A824),
+
+ // examples/flutter_view/assets/flutter-mark-square-64.png
+ // examples/platform_view/assets/flutter-mark-square-64.png
+ Hash256(0xF416B0D8AC552EC8, 0x819D1F492D1AB5E6, 0xD4F20CF45DB47C22, 0x7BB431FEFB5B67B2),
+
+ // packages/flutter_tools/test/data/intellij/plugins/Dart/lib/Dart.jar
+ Hash256(0x576E489D788A13DB, 0xBF40E4A39A3DAB37, 0x15CCF0002032E79C, 0xD260C69B29E06646),
+
+ // packages/flutter_tools/test/data/intellij/plugins/flutter-intellij.jar
+ Hash256(0x4C67221E25626CB2, 0x3F94E1F49D34E4CF, 0x3A9787A514924FC5, 0x9EF1E143E5BC5690),
+
+
+ // HISTORICAL DEVICE LAB IMAGES
+
+ // dev/devicelab/images/agent-statuses.png
+ Hash256(0x0A43016C84095771, 0x1C610E1C01B1C3B2, 0x681DA0B2062C02AA, 0x31CC7FB3FDC298FD),
+
+ // dev/devicelab/images/broken-test.png
+ Hash256(0x319459F42967A888, 0x90B20063544D6707, 0x849E1E3447CC56A5, 0xE226C47DE34F13AD),
+
+ // dev/devicelab/images/legend.png
+ Hash256(0x92A98975AF5F076C, 0xE7BFAB86B0DD7A3D, 0xC45287B706D10456, 0x4E512BA3C41B2749),
+
+
+ // MISCELLANEOUS
+
+ // dev/bots/serviceaccount.enc
+ Hash256(0x1F19ADB4D80AFE8C, 0xE61899BA776B1A8D, 0xCA398C75F5F7050D, 0xFB0E72D7FBBBA69B),
+
+ // dev/docs/favicon.ico
+ Hash256(0x67368CA1733E933A, 0xCA3BC56EF0695012, 0xE862C371AD4412F0, 0x3EC396039C609965),
+
+ // dev/snippets/assets/code_sample.png
+ Hash256(0xAB2211A47BDA001D, 0x173A52FD9C75EBC7, 0xE158942FFA8243AD, 0x2A148871990D4297),
+
+ // dev/snippets/assets/code_snippet.png
+ Hash256(0xDEC70574DA46DFBB, 0xFA657A771F3E1FBD, 0xB265CFC6B2AA5FE3, 0x93BA4F325D1520BA),
+
+ // packages/flutter_tools/static/Ahem.ttf
+ Hash256(0x63D2ABD0041C3E3B, 0x4B52AD8D382353B5, 0x3C51C6785E76CE56, 0xED9DACAD2D2E31C4),
+};
+
+Future<void> verifyNoBinaries(String workingDirectory, { Set<Hash256> grandfatheredBinaries }) async {
+ // Please do not add anything to the _grandfatheredBinaries set above.
+ // We have a policy of not checking in binaries into this repository.
+ // If you have binaries to add, please consult Hixie for advice.
+ assert(
+ _grandfatheredBinaries
+ .expand<int>((Hash256 hash) => <int>[hash.a, hash.b, hash.c, hash.d])
+ .reduce((int value, int element) => value ^ element) == 0x39A050CD69434936 // Please do not modify this line.
+ );
+ grandfatheredBinaries ??= _grandfatheredBinaries;
+ if (!Platform.isWindows) { // TODO(ianh): Port this to Windows
+ final EvalResult evalResult = await _evalCommand(
+ 'git', <String>['ls-files', '-z'],
+ workingDirectory: workingDirectory,
+ );
+ if (evalResult.exitCode != 0) {
+ exitWithError(<String>[
+ 'git ls-filese failed with exit code ${evalResult.exitCode}',
+ '${bold}stdout:$reset',
+ evalResult.stdout,
+ '${bold}stderr:$reset',
+ evalResult.stderr,
+ ]);
+ }
+ final List<String> filenames = evalResult
+ .stdout
+ .split('\x00');
+ assert(filenames.last.isEmpty); // git ls-files gives a trailing blank 0x00
+ filenames.removeLast();
+ final List<File> files = filenames
+ .map<File>((String filename) => File(path.join(workingDirectory, filename)))
+ .toList();
+ final List<String> problems = <String>[];
+ for (File file in files) {
+ final Uint8List bytes = file.readAsBytesSync();
+ try {
+ utf8.decode(bytes);
+ } on FormatException catch (error) {
+ if (error.message.startsWith('Bad UTF-8 encoding ')) {
+ final Digest digest = sha256.convert(bytes);
+ if (!grandfatheredBinaries.contains(Hash256.fromDigest(digest)))
+ problems.add('${file.path}:${error.offset}: file is not valid UTF-8');
+ } else {
+ rethrow;
+ }
+ }
+ }
+ if (problems.isNotEmpty) {
+ exitWithError(<String>[
+ ...problems,
+ 'All files in this repository must be UTF-8. In particular, images and other binaries',
+ 'must not be checked into this repository. This is because we are very sensitive to the',
+ 'size of the repository as it is distributed to all our developers. If you have a binary',
+ 'to which you need access, you should consider how to fetch it from another repository;',
+ 'for example, the "assets-for-api-docs" repository is used for images in API docs.',
+ ]);
}
}
}
@@ -617,8 +1046,10 @@
return true;
}
-Iterable<File> _allFiles(String workingDirectory, String extension) sync* {
+Iterable<File> _allFiles(String workingDirectory, String extension, { @required int minimumMatches }) sync* {
+ assert(extension == null || !extension.startsWith('.'), 'Extension argument should not start with a period.');
final Set<FileSystemEntity> pending = <FileSystemEntity>{ Directory(workingDirectory) };
+ int matches = 0;
while (pending.isNotEmpty) {
final FileSystemEntity entity = pending.first;
pending.remove(entity);
@@ -631,13 +1062,17 @@
continue;
if (path.basename(entity.path) == 'gradlew.bat')
continue;
- if (path.extension(entity.path) == '.$extension')
+ if (extension == null || path.extension(entity.path) == '.$extension') {
+ matches += 1;
yield entity;
+ }
} else if (entity is Directory) {
if (File(path.join(entity.path, '.dartignore')).existsSync())
continue;
if (path.basename(entity.path) == '.git')
continue;
+ if (path.basename(entity.path) == '.gradle')
+ continue;
if (path.basename(entity.path) == '.dart_tool')
continue;
if (path.basename(entity.path) == 'build')
@@ -645,28 +1080,7 @@
pending.addAll(entity.listSync());
}
}
-}
-
-Future<String> _getCommitRange() async {
- // Using --fork-point is more conservative, and will result in the correct
- // fork point, but when running locally, it may return nothing. Git is
- // guaranteed to return a (reasonable, but maybe not optimal) result when not
- // using --fork-point, so we fall back to that if we can't get a definitive
- // fork point. See "git merge-base" documentation for more info.
- EvalResult result = await _evalCommand(
- 'git',
- <String>['merge-base', '--fork-point', 'FETCH_HEAD', 'HEAD'],
- workingDirectory: flutterRoot,
- allowNonZeroExit: true,
- );
- if (result.exitCode != 0) {
- result = await _evalCommand(
- 'git',
- <String>['merge-base', 'FETCH_HEAD', 'HEAD'],
- workingDirectory: flutterRoot,
- );
- }
- return result.stdout.trim();
+ assert(matches >= minimumMatches, 'Expected to find at least $minimumMatches files with extension ".$extension" in "$workingDirectory", but only found $matches.');
}
class EvalResult {
@@ -681,6 +1095,7 @@
final int exitCode;
}
+// TODO(ianh): Refactor this to reuse the code in run_command.dart
Future<EvalResult> _evalCommand(String executable, List<String> arguments, {
@required String workingDirectory,
Map<String, String> environment,
@@ -714,14 +1129,11 @@
if (exitCode != 0 && !allowNonZeroExit) {
stderr.write(result.stderr);
- print(
- '$redLine\n'
- '${bold}ERROR:$red Last command exited with $exitCode.$reset\n'
- '${bold}Command:$red $commandDescription$reset\n'
- '${bold}Relative working directory:$red $relativeWorkingDir$reset\n'
- '$redLine'
- );
- exit(1);
+ exitWithError(<String>[
+ '${bold}ERROR:$red Last command exited with $exitCode.$reset',
+ '${bold}Command:$red $commandDescription$reset',
+ '${bold}Relative working directory:$red $relativeWorkingDir$reset',
+ ]);
}
return result;
@@ -729,8 +1141,8 @@
Future<void> _runFlutterAnalyze(String workingDirectory, {
List<String> options = const <String>[],
-}) {
- return runCommand(
+}) async {
+ return await runCommand(
flutter,
<String>['analyze', '--dartdocs', ...options],
workingDirectory: workingDirectory,
@@ -741,10 +1153,7 @@
final RegExp _importMetaPattern = RegExp(r'''^\s*import (['"])package:meta/meta\.dart\1''');
Set<String> _findFlutterDependencies(String srcPath, List<String> errors, { bool checkForMeta = false }) {
- return Directory(srcPath)
- .listSync(recursive: true)
- .whereType<File>()
- .where((File file) => path.extension(file.path) == '.dart')
+ return _allFiles(srcPath, 'dart', minimumMatches: 1)
.map<Set<String>>((File file) {
final Set<String> result = <String>{};
for (String line in file.readAsLinesSync()) {
diff --git a/dev/bots/docs.sh b/dev/bots/docs.sh
index 44b326f..d9e2924 100755
--- a/dev/bots/docs.sh
+++ b/dev/bots/docs.sh
@@ -149,4 +149,3 @@
deploy 5 docs-flutter-dev
fi
fi
-
diff --git a/dev/bots/download_android_sdk.sh b/dev/bots/download_android_sdk.sh
index 84817f4..e909f4d 100755
--- a/dev/bots/download_android_sdk.sh
+++ b/dev/bots/download_android_sdk.sh
@@ -26,5 +26,3 @@
"build-tools;27.0.3" \
"extras;google;m2repository" \
"extras;android;m2repository"
-
-
diff --git a/dev/bots/pubspec.yaml b/dev/bots/pubspec.yaml
index 4665457..f8b379e 100644
--- a/dev/bots/pubspec.yaml
+++ b/dev/bots/pubspec.yaml
@@ -6,16 +6,17 @@
sdk: ">=2.2.2 <3.0.0"
dependencies:
- path: 1.6.4
args: 1.5.2
- meta: 1.1.8
- process: 3.0.12
- platform: 2.2.1
- http: 0.12.0+2
- http_parser: 3.1.3
- test: 1.9.4
+ crypto: 2.1.3
googleapis: 0.54.0
googleapis_auth: 0.2.11
+ http: 0.12.0+3
+ http_parser: 3.1.3
+ meta: 1.1.8
+ path: 1.6.4
+ platform: 2.2.1
+ process: 3.0.12
+ test: 1.9.4
_discoveryapis_commons: 0.1.9 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
analyzer: 0.38.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -24,8 +25,7 @@
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -70,4 +70,4 @@
mockito: 4.1.1
test_api: 0.2.11
-# PUBSPEC CHECKSUM: 2235
+# PUBSPEC CHECKSUM: 5e38
diff --git a/dev/bots/run_command.dart b/dev/bots/run_command.dart
index 352865f..1407067 100644
--- a/dev/bots/run_command.dart
+++ b/dev/bots/run_command.dart
@@ -4,44 +4,14 @@
import 'dart:async';
import 'dart:convert';
-import 'dart:io';
+import 'dart:core' hide print;
+import 'dart:io' hide exit;
import 'package:path/path.dart' as path;
-final bool hasColor = stdout.supportsAnsiEscapes;
+import 'utils.dart';
-final String bold = hasColor ? '\x1B[1m' : ''; // used for shard titles
-final String red = hasColor ? '\x1B[31m' : ''; // used for errors
-final String green = hasColor ? '\x1B[32m' : ''; // used for section titles, commands
-final String yellow = hasColor ? '\x1B[33m' : ''; // unused
-final String cyan = hasColor ? '\x1B[36m' : ''; // used for paths
-final String reverse = hasColor ? '\x1B[7m' : ''; // used for clocks
-final String reset = hasColor ? '\x1B[0m' : '';
-final String redLine = '$red━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━$reset';
-
-String get clock {
- final DateTime now = DateTime.now();
- return '$reverse▌'
- '${now.hour.toString().padLeft(2, "0")}:'
- '${now.minute.toString().padLeft(2, "0")}:'
- '${now.second.toString().padLeft(2, "0")}'
- '▐$reset';
-}
-
-String prettyPrintDuration(Duration duration) {
- String result = '';
- final int minutes = duration.inMinutes;
- if (minutes > 0)
- result += '${minutes}min ';
- final int seconds = duration.inSeconds - minutes * 60;
- final int milliseconds = duration.inMilliseconds - (seconds * 1000 + minutes * 60 * 1000);
- result += '$seconds.${milliseconds.toString().padLeft(3, "0")}s';
- return result;
-}
-
-void printProgress(String action, String workingDir, String command) {
- print('$clock $action: cd $cyan$workingDir$reset; $green$command$reset');
-}
+// TODO(ianh): These two functions should be refactored into something that avoids all this code duplication.
Stream<String> runAndGetStdout(String executable, List<String> arguments, {
String workingDirectory,
@@ -49,11 +19,14 @@
bool expectNonZeroExit = false,
int expectedExitCode,
String failureMessage,
- Function beforeExit,
+ bool skip = false,
}) async* {
final String commandDescription = '${path.relative(executable, from: workingDirectory)} ${arguments.join(' ')}';
final String relativeWorkingDir = path.relative(workingDirectory);
-
+ if (skip) {
+ printProgress('SKIPPING', relativeWorkingDir, commandDescription);
+ return;
+ }
printProgress('RUNNING', relativeWorkingDir, commandDescription);
final Stopwatch time = Stopwatch()..start();
@@ -64,26 +37,21 @@
stderr.addStream(process.stderr);
final Stream<String> lines = process.stdout.transform(utf8.decoder).transform(const LineSplitter());
- await for (String line in lines) {
+ await for (String line in lines)
yield line;
- }
final int exitCode = await process.exitCode;
- print('$clock ELAPSED TIME: ${prettyPrintDuration(time.elapsed)} for $green$commandDescription$reset in $cyan$relativeWorkingDir$reset');
if ((exitCode == 0) == expectNonZeroExit || (expectedExitCode != null && exitCode != expectedExitCode)) {
- if (failureMessage != null) {
- print(failureMessage);
- }
- print(
- '$redLine\n'
- '${bold}ERROR: ${red}Last command exited with $exitCode (expected: ${expectNonZeroExit ? (expectedExitCode ?? 'non-zero') : 'zero'}).$reset\n'
- '${bold}Command: $green$commandDescription$reset\n'
- '${bold}Relative working directory: $cyan$relativeWorkingDir$reset\n'
- '$redLine'
- );
- beforeExit?.call();
- exit(1);
+ exitWithError(<String>[
+ if (failureMessage != null)
+ failureMessage
+ else
+ '${bold}ERROR: ${red}Last command exited with $exitCode (expected: ${expectNonZeroExit ? (expectedExitCode ?? 'non-zero') : 'zero'}).$reset',
+ '${bold}Command: $green$commandDescription$reset',
+ '${bold}Relative working directory: $cyan$relativeWorkingDir$reset',
+ ]);
}
+ print('$clock ELAPSED TIME: ${prettyPrintDuration(time.elapsed)} for $green$commandDescription$reset in $cyan$relativeWorkingDir$reset');
}
Future<void> runCommand(String executable, List<String> arguments, {
@@ -97,9 +65,10 @@
bool skip = false,
bool Function(String) removeLine,
}) async {
- assert((outputMode == OutputMode.capture) == (output != null),
- 'The output parameter must be non-null with and only with '
- 'OutputMode.capture');
+ assert(
+ (outputMode == OutputMode.capture) == (output != null),
+ 'The output parameter must be non-null with and only with OutputMode.capture',
+ );
final String commandDescription = '${path.relative(executable, from: workingDirectory)} ${arguments.join(' ')}';
final String relativeWorkingDir = path.relative(workingDirectory);
@@ -137,18 +106,12 @@
}
final int exitCode = await process.exitCode;
- print('$clock ELAPSED TIME: ${prettyPrintDuration(time.elapsed)} for $green$commandDescription$reset in $cyan$relativeWorkingDir$reset');
-
if (output != null) {
output.stdout = _flattenToString(await savedStdout);
output.stderr = _flattenToString(await savedStderr);
}
if ((exitCode == 0) == expectNonZeroExit || (expectedExitCode != null && exitCode != expectedExitCode)) {
- if (failureMessage != null) {
- print(failureMessage);
- }
-
// Print the output when we get unexpected results (unless output was
// printed already).
switch (outputMode) {
@@ -160,15 +123,16 @@
stderr.writeln(_flattenToString(await savedStderr));
break;
}
- print(
- '$redLine\n'
- '${bold}ERROR: ${red}Last command exited with $exitCode (expected: ${expectNonZeroExit ? (expectedExitCode ?? 'non-zero') : 'zero'}).$reset\n'
- '${bold}Command: $green$commandDescription$reset\n'
- '${bold}Relative working directory: $cyan$relativeWorkingDir$reset\n'
- '$redLine'
- );
- exit(1);
+ exitWithError(<String>[
+ if (failureMessage != null)
+ failureMessage
+ else
+ '${bold}ERROR: ${red}Last command exited with $exitCode (expected: ${expectNonZeroExit ? (expectedExitCode ?? 'non-zero') : 'zero'}).$reset',
+ '${bold}Command: $green$commandDescription$reset',
+ '${bold}Relative working directory: $cyan$relativeWorkingDir$reset',
+ ]);
}
+ print('$clock ELAPSED TIME: ${prettyPrintDuration(time.elapsed)} for $green$commandDescription$reset in $cyan$relativeWorkingDir$reset');
}
/// Flattens a nested list of UTF-8 code units into a single string.
diff --git a/dev/bots/test.dart b/dev/bots/test.dart
index d183330..f756d70 100644
--- a/dev/bots/test.dart
+++ b/dev/bots/test.dart
@@ -13,6 +13,7 @@
import 'flutter_compact_formatter.dart';
import 'run_command.dart';
+import 'utils.dart';
typedef ShardRunner = Future<void> Function();
@@ -98,22 +99,28 @@
/// SHARD=tool_tests bin/cache/dart-sdk/bin/dart dev/bots/test.dart
/// bin/cache/dart-sdk/bin/dart dev/bots/test.dart --local-engine=host_debug_unopt
Future<void> main(List<String> args) async {
- flutterTestArgs.addAll(args);
- if (Platform.environment.containsKey(CIRRUS_TASK_NAME))
- print('Running task: ${Platform.environment[CIRRUS_TASK_NAME]}');
- print('═' * 80);
- await _runSmokeTests();
- print('═' * 80);
- await selectShard(const <String, ShardRunner>{
- 'add_to_app_tests': _runAddToAppTests,
- 'build_tests': _runBuildTests,
- 'framework_coverage': _runFrameworkCoverage,
- 'framework_tests': _runFrameworkTests,
- 'hostonly_devicelab_tests': _runHostOnlyDeviceLabTests,
- 'tool_coverage': _runToolCoverage,
- 'tool_tests': _runToolTests,
- 'web_tests': _runWebTests,
- });
+ print('$clock STARTING ANALYSIS');
+ try {
+ flutterTestArgs.addAll(args);
+ if (Platform.environment.containsKey(CIRRUS_TASK_NAME))
+ print('Running task: ${Platform.environment[CIRRUS_TASK_NAME]}');
+ print('═' * 80);
+ await _runSmokeTests();
+ print('═' * 80);
+ await selectShard(const <String, ShardRunner>{
+ 'add_to_app_tests': _runAddToAppTests,
+ 'build_tests': _runBuildTests,
+ 'framework_coverage': _runFrameworkCoverage,
+ 'framework_tests': _runFrameworkTests,
+ 'hostonly_devicelab_tests': _runHostOnlyDeviceLabTests,
+ 'tool_coverage': _runToolCoverage,
+ 'tool_tests': _runToolTests,
+ 'web_tests': _runWebTests,
+ });
+ } on ExitException catch (error) {
+ error.apply();
+ }
+ print('$clock ${bold}Test successful.$reset');
}
Future<void> _runSmokeTests() async {
@@ -195,12 +202,8 @@
// Verify that we correctly generated the version file.
final String versionError = await verifyVersion(File(path.join(flutterRoot, 'version')));
- if (versionError != null) {
- print(redLine);
- print(versionError);
- print(redLine);
- exit(1);
- }
+ if (versionError != null)
+ exitWithError(<String>[versionError]);
}
Future<bq.BigqueryApi> _getBigqueryApi() async {
@@ -624,13 +627,17 @@
}
if (useFlutterTestFormatter) {
final FlutterCompactFormatter formatter = FlutterCompactFormatter();
- final Stream<String> testOutput = runAndGetStdout(
- pub,
- args,
- workingDirectory: workingDirectory,
- environment: pubEnvironment,
- beforeExit: formatter.finish,
- );
+ Stream<String> testOutput;
+ try {
+ testOutput = runAndGetStdout(
+ pub,
+ args,
+ workingDirectory: workingDirectory,
+ environment: pubEnvironment,
+ );
+ } finally {
+ formatter.finish();
+ }
await _processTestOutput(formatter, testOutput, tableData);
} else {
await runCommand(
@@ -707,26 +714,26 @@
if (outputChecker != null) {
final String message = outputChecker(output);
- if (message != null) {
- print('$redLine');
- print(message);
- print('$redLine');
- exit(1);
- }
+ if (message != null)
+ exitWithError(<String>[message]);
}
return;
}
if (useFlutterTestFormatter) {
final FlutterCompactFormatter formatter = FlutterCompactFormatter();
- final Stream<String> testOutput = runAndGetStdout(
- flutter,
- args,
- workingDirectory: workingDirectory,
- expectNonZeroExit: expectFailure,
- beforeExit: formatter.finish,
- environment: environment,
- );
+ Stream<String> testOutput;
+ try {
+ testOutput = runAndGetStdout(
+ flutter,
+ args,
+ workingDirectory: workingDirectory,
+ expectNonZeroExit: expectFailure,
+ environment: environment,
+ );
+ } finally {
+ formatter.finish();
+ }
await _processTestOutput(formatter, testOutput, tableData);
} else {
await runCommand(
diff --git a/dev/bots/test/analyze-test-input/root/packages/foo/serviceaccount.enc b/dev/bots/test/analyze-test-input/root/packages/foo/serviceaccount.enc
new file mode 100644
index 0000000..ce542ef
--- /dev/null
+++ b/dev/bots/test/analyze-test-input/root/packages/foo/serviceaccount.enc
@@ -0,0 +1 @@
+ÿ
\ No newline at end of file
diff --git a/dev/bots/test/analyze-test-input/root/packages/foo/spaces.txt b/dev/bots/test/analyze-test-input/root/packages/foo/spaces.txt
new file mode 100644
index 0000000..d86d7c4
--- /dev/null
+++ b/dev/bots/test/analyze-test-input/root/packages/foo/spaces.txt
@@ -0,0 +1,9 @@
+// Copyright 2014 The Flutter Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+Trailing space:
+ ^
+
+Extra blank line:
+
diff --git a/dev/bots/test/analyze_test.dart b/dev/bots/test/analyze_test.dart
index 4eb0bf9..c6d36eb 100644
--- a/dev/bots/test/analyze_test.dart
+++ b/dev/bots/test/analyze_test.dart
@@ -7,6 +7,7 @@
import 'package:path/path.dart' as path;
import '../analyze.dart';
+import '../utils.dart';
import 'common.dart';
typedef AsyncVoidCallback = Future<void> Function();
@@ -31,8 +32,10 @@
}
void main() {
+ final String testRootPath = path.join('test', 'analyze-test-input', 'root');
+
test('analyze.dart - verifyDeprecations', () async {
- final String result = await capture(() => verifyDeprecations(path.join('test', 'analyze-test-input', 'root')), exitCode: 1);
+ final String result = await capture(() => verifyDeprecations(testRootPath, minimumMatches: 2), exitCode: 1);
expect(result,
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
+
@@ -50,31 +53,73 @@
)
+
'See: https://github.com/flutter/flutter/wiki/Tree-hygiene#handling-breaking-changes\n'
- '\n'
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
- '\n'
);
});
test('analyze.dart - verifyNoMissingLicense', () async {
- final String result = await capture(() => verifyNoMissingLicense(path.join('test', 'analyze-test-input', 'root')), exitCode: 1);
+ final String result = await capture(() => verifyNoMissingLicense(testRootPath, checkMinimums: false), exitCode: 1);
expect(result,
'━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
+
(
'The following 1 file does not have the right license header:\n'
- '\n'
'test/analyze-test-input/root/packages/foo/foo.dart\n'
.replaceAll('/', Platform.isWindows ? '\\' : '/')
)
+
- '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
- '\n'
'The expected license header is:\n'
'// Copyright 2014 The Flutter Authors. All rights reserved.\n'
'// Use of this source code is governed by a BSD-style license that can be\n'
'// found in the LICENSE file.\n'
'...followed by a blank line.\n'
+ '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
);
});
+
+ test('analyze.dart - verifyNoTrailingSpaces', () async {
+ final String result = await capture(() => verifyNoTrailingSpaces(testRootPath, minimumMatches: 2), exitCode: 1);
+ expect(result,
+ '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
+ +
+ (
+ 'test/analyze-test-input/root/packages/foo/spaces.txt:5: trailing U+0020 space character\n'
+ 'test/analyze-test-input/root/packages/foo/spaces.txt:9: trailing blank line\n'
+ .replaceAll('/', Platform.isWindows ? '\\' : '/')
+ )
+ +
+ '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
+ );
+ });
+
+ test('analyze.dart - verifyNoBinaries - positive', () async {
+ final String result = await capture(() => verifyNoBinaries(
+ testRootPath,
+ grandfatheredBinaries: <Hash256>{Hash256(0x39A050CD69434936, 0, 0, 0)},
+ ), exitCode: Platform.isWindows ? 0 : 1);
+ if (!Platform.isWindows) {
+ // The output starts with the call to git ls-files, the details of which
+ // change from run to run, so we only check the trailing end of the output.
+ expect(result, endsWith('\n'
+ '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
+ 'test/analyze-test-input/root/packages/foo/serviceaccount.enc:0: file is not valid UTF-8\n'
+ 'All files in this repository must be UTF-8. In particular, images and other binaries\n'
+ 'must not be checked into this repository. This is because we are very sensitive to the\n'
+ 'size of the repository as it is distributed to all our developers. If you have a binary\n'
+ 'to which you need access, you should consider how to fetch it from another repository;\n'
+ 'for example, the "assets-for-api-docs" repository is used for images in API docs.\n'
+ '━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n'
+ ));
+ }
+ });
+
+ test('analyze.dart - verifyNoBinaries - negative', () async {
+ await capture(() => verifyNoBinaries(
+ testRootPath,
+ grandfatheredBinaries: <Hash256>{
+ Hash256(0xA8100AE6AA1940D0, 0xB663BB31CD466142, 0xEBBDBD5187131B92, 0xD93818987832EB89), // sha256("\xff")
+ Hash256(0x155644D3F13D98BF, 0, 0, 0),
+ },
+ ), exitCode: 0);
+ });
}
diff --git a/dev/bots/utils.dart b/dev/bots/utils.dart
new file mode 100644
index 0000000..92b2ef6
--- /dev/null
+++ b/dev/bots/utils.dart
@@ -0,0 +1,72 @@
+// Copyright 2014 The Flutter Authors. 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:core' as core_internals show print;
+import 'dart:core' hide print;
+import 'dart:io' as io_internals show exit;
+import 'dart:io' hide exit;
+
+final bool hasColor = stdout.supportsAnsiEscapes;
+
+final String bold = hasColor ? '\x1B[1m' : ''; // used for shard titles
+final String red = hasColor ? '\x1B[31m' : ''; // used for errors
+final String green = hasColor ? '\x1B[32m' : ''; // used for section titles, commands
+final String yellow = hasColor ? '\x1B[33m' : ''; // unused
+final String cyan = hasColor ? '\x1B[36m' : ''; // used for paths
+final String reverse = hasColor ? '\x1B[7m' : ''; // used for clocks
+final String reset = hasColor ? '\x1B[0m' : '';
+
+class ExitException implements Exception {
+ ExitException(this.exitCode);
+
+ final int exitCode;
+
+ void apply() {
+ io_internals.exit(exitCode);
+ }
+}
+
+// We actually reimplement exit() so that it uses exceptions rather
+// than truly immediately terminating the application, so that we can
+// test the exit code in unit tests (see test/analyze_test.dart).
+void exit(int exitCode) {
+ throw ExitException(exitCode);
+}
+
+void exitWithError(List<String> messages) {
+ final String redLine = '$red━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━$reset';
+ print(redLine);
+ messages.forEach(print);
+ print(redLine);
+ exit(1);
+}
+
+typedef PrintCallback = void Function(Object line);
+
+// Allow print() to be overridden, for tests.
+PrintCallback print = core_internals.print;
+
+String get clock {
+ final DateTime now = DateTime.now();
+ return '$reverse▌'
+ '${now.hour.toString().padLeft(2, "0")}:'
+ '${now.minute.toString().padLeft(2, "0")}:'
+ '${now.second.toString().padLeft(2, "0")}'
+ '▐$reset';
+}
+
+String prettyPrintDuration(Duration duration) {
+ String result = '';
+ final int minutes = duration.inMinutes;
+ if (minutes > 0)
+ result += '${minutes}min ';
+ final int seconds = duration.inSeconds - minutes * 60;
+ final int milliseconds = duration.inMilliseconds - (seconds * 1000 + minutes * 60 * 1000);
+ result += '$seconds.${milliseconds.toString().padLeft(3, "0")}s';
+ return result;
+}
+
+void printProgress(String action, String workingDir, String command) {
+ print('$clock $action: cd $cyan$workingDir$reset; $green$command$reset');
+}
diff --git a/dev/ci/docker_linux/README.md b/dev/ci/docker_linux/README.md
index a2a00b0..3aca335 100644
--- a/dev/ci/docker_linux/README.md
+++ b/dev/ci/docker_linux/README.md
@@ -10,4 +10,3 @@
* run `./docker_build.sh` to build the container image.
* run `./docker_push.sh` to push the image to google cloud registry. This will
affect our CI tests.
-
diff --git a/dev/devicelab/bin/tasks/flutter_run_test.dart b/dev/devicelab/bin/tasks/flutter_run_test.dart
index f6e74f6..462075a 100644
--- a/dev/devicelab/bin/tasks/flutter_run_test.dart
+++ b/dev/devicelab/bin/tasks/flutter_run_test.dart
@@ -63,4 +63,3 @@
? TaskResult.success(<String, dynamic>{})
: TaskResult.failure('Test did not execute as expected.');
}
-
diff --git a/dev/devicelab/bin/tasks/tiles_scroll_perf__timeline_summary.dart b/dev/devicelab/bin/tasks/tiles_scroll_perf__timeline_summary.dart
index 7916a10..509ca4c 100644
--- a/dev/devicelab/bin/tasks/tiles_scroll_perf__timeline_summary.dart
+++ b/dev/devicelab/bin/tasks/tiles_scroll_perf__timeline_summary.dart
@@ -12,4 +12,3 @@
deviceOperatingSystem = DeviceOperatingSystem.android;
await task(createTilesScrollPerfTest());
}
-
diff --git a/dev/devicelab/pubspec.yaml b/dev/devicelab/pubspec.yaml
index 9477c5a..98cff86 100644
--- a/dev/devicelab/pubspec.yaml
+++ b/dev/devicelab/pubspec.yaml
@@ -43,12 +43,12 @@
analyzer: 0.38.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
io: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -77,4 +77,4 @@
watcher: 0.9.7+13 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
yaml: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
-# PUBSPEC CHECKSUM: 9e46
+# PUBSPEC CHECKSUM: d549
diff --git a/dev/integration_tests/README.md b/dev/integration_tests/README.md
index 04768e6..07accc9 100644
--- a/dev/integration_tests/README.md
+++ b/dev/integration_tests/README.md
@@ -11,4 +11,3 @@
```shell
% flutter drive
```
-
diff --git a/dev/integration_tests/android_embedding_v2_smoke_test/pubspec.yaml b/dev/integration_tests/android_embedding_v2_smoke_test/pubspec.yaml
index a94145a..4257c7a 100644
--- a/dev/integration_tests/android_embedding_v2_smoke_test/pubspec.yaml
+++ b/dev/integration_tests/android_embedding_v2_smoke_test/pubspec.yaml
@@ -20,12 +20,12 @@
flutter:
sdk: flutter
# This plugin is using Android Embedding 1
- battery: 0.3.1+4
+ battery: 0.3.1+7
# TODO(egarciad): Add a plugin that uses Android Embedding 2
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
- cupertino_icons: 0.1.2
+ cupertino_icons: 0.1.3
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
meta: 1.1.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -100,4 +100,4 @@
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages
-# PUBSPEC CHECKSUM: fad6
+# PUBSPEC CHECKSUM: 6dda
diff --git a/dev/integration_tests/android_semantics_testing/pubspec.yaml b/dev/integration_tests/android_semantics_testing/pubspec.yaml
index 2139674..916ac3a 100644
--- a/dev/integration_tests/android_semantics_testing/pubspec.yaml
+++ b/dev/integration_tests/android_semantics_testing/pubspec.yaml
@@ -15,14 +15,14 @@
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
intl: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -68,4 +68,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: f2a9
+# PUBSPEC CHECKSUM: f0ac
diff --git a/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/README.md b/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/README.md
index 49c2cf0..2338a98 100644
--- a/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/README.md
+++ b/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/README.md
@@ -12,12 +12,12 @@
- /test_driver/main.dart
- /test_driver/main_test.dart
- /android/app/src/main/java/io/flutter/splash_screen_kitchen_sink/MainActivity.java
-
+
The files that should be inspected to learn about splash behavior are:
-
+
- /android/app/src/main/java/io/flutter/splash_screen_kitchen_sink/FlutterZoomSplashScreen.java
- /android/app/src/main/java/io/flutter/splash_screen_kitchen_sink/FlutterZoomSplashView.java
-
+
Communication takes place from Android to Flutter to Driver to communicate splash screen events.
This communication takes place over a channel called "testChannel", whose definition can be
- found in `MainActivity.java` and `test_driver/main.dart`.
\ No newline at end of file
+ found in `MainActivity.java` and `test_driver/main.dart`.
diff --git a/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/pubspec.yaml b/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/pubspec.yaml
index 832e345..1399939 100644
--- a/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/pubspec.yaml
+++ b/dev/integration_tests/android_splash_screens/splash_screen_kitchen_sink/pubspec.yaml
@@ -22,7 +22,7 @@
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
- cupertino_icons: 0.1.2
+ cupertino_icons: 0.1.3
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
meta: 1.1.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -49,14 +49,14 @@
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
image: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -138,4 +138,4 @@
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages
-# PUBSPEC CHECKSUM: 8095
+# PUBSPEC CHECKSUM: dd99
diff --git a/dev/integration_tests/android_splash_screens/splash_screen_load_rotate/README.md b/dev/integration_tests/android_splash_screens/splash_screen_load_rotate/README.md
index bd7b494..9169c18 100644
--- a/dev/integration_tests/android_splash_screens/splash_screen_load_rotate/README.md
+++ b/dev/integration_tests/android_splash_screens/splash_screen_load_rotate/README.md
@@ -2,6 +2,6 @@
This project is an example of a splash screen that displays an animation indefinitely.
-A never ending animation is provided as a demo so that developers can manually verify that
-orientation changes and other UI destruction processes do not cause issues with Flutter's splash
-system for Android.
+A never ending animation is provided as a demo so that developers can manually verify that
+orientation changes and other UI destruction processes do not cause issues with Flutter's splash
+system for Android.
diff --git a/dev/integration_tests/android_splash_screens/splash_screen_load_rotate/pubspec.yaml b/dev/integration_tests/android_splash_screens/splash_screen_load_rotate/pubspec.yaml
index b4ae8e3..5e5dd72 100644
--- a/dev/integration_tests/android_splash_screens/splash_screen_load_rotate/pubspec.yaml
+++ b/dev/integration_tests/android_splash_screens/splash_screen_load_rotate/pubspec.yaml
@@ -22,7 +22,7 @@
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
- cupertino_icons: 0.1.2
+ cupertino_icons: 0.1.3
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
meta: 1.1.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -97,4 +97,4 @@
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages
-# PUBSPEC CHECKSUM: 712e
+# PUBSPEC CHECKSUM: 6e2f
diff --git a/dev/integration_tests/android_splash_screens/splash_screen_trans_rotate/README.md b/dev/integration_tests/android_splash_screens/splash_screen_trans_rotate/README.md
index def6d00..88dfe1d 100644
--- a/dev/integration_tests/android_splash_screens/splash_screen_trans_rotate/README.md
+++ b/dev/integration_tests/android_splash_screens/splash_screen_trans_rotate/README.md
@@ -2,6 +2,6 @@
This project is an example of a splash screen that fades very slowly to the Flutter UI.
-A slow transition is provided as a demo so that developers can manually verify that orientation
+A slow transition is provided as a demo so that developers can manually verify that orientation
changes and other UI destruction processes do not cause issues with Flutter's splash system for
-Android.
+Android.
diff --git a/dev/integration_tests/android_splash_screens/splash_screen_trans_rotate/pubspec.yaml b/dev/integration_tests/android_splash_screens/splash_screen_trans_rotate/pubspec.yaml
index ee41f96..d915cb2 100644
--- a/dev/integration_tests/android_splash_screens/splash_screen_trans_rotate/pubspec.yaml
+++ b/dev/integration_tests/android_splash_screens/splash_screen_trans_rotate/pubspec.yaml
@@ -22,7 +22,7 @@
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
- cupertino_icons: 0.1.2
+ cupertino_icons: 0.1.3
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
meta: 1.1.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -49,14 +49,14 @@
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
image: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -138,4 +138,4 @@
# For details regarding fonts from package dependencies,
# see https://flutter.dev/custom-fonts/#from-packages
-# PUBSPEC CHECKSUM: 8095
+# PUBSPEC CHECKSUM: dd99
diff --git a/dev/integration_tests/android_views/README.md b/dev/integration_tests/android_views/README.md
index b1b594b..f6df75f 100644
--- a/dev/integration_tests/android_views/README.md
+++ b/dev/integration_tests/android_views/README.md
@@ -29,4 +29,3 @@
When running this test with `flutter drive` the record touch sequences is
replayed and the test asserts that the events that got to FlutterView are
equivalent to the ones that got to the embedded view.
-
diff --git a/dev/integration_tests/android_views/android/app/src/main/java/io/flutter/integration/androidviews/MainActivity.java b/dev/integration_tests/android_views/android/app/src/main/java/io/flutter/integration/androidviews/MainActivity.java
index 474ce9d..050696c 100644
--- a/dev/integration_tests/android_views/android/app/src/main/java/io/flutter/integration/androidviews/MainActivity.java
+++ b/dev/integration_tests/android_views/android/app/src/main/java/io/flutter/integration/androidviews/MainActivity.java
@@ -101,4 +101,3 @@
permissionResult = null;
}
}
-
diff --git a/dev/integration_tests/android_views/pubspec.yaml b/dev/integration_tests/android_views/pubspec.yaml
index 9fad209..c1d8e60 100644
--- a/dev/integration_tests/android_views/pubspec.yaml
+++ b/dev/integration_tests/android_views/pubspec.yaml
@@ -7,7 +7,7 @@
sdk: flutter
flutter_driver:
sdk: flutter
- path_provider: 1.4.5
+ path_provider: 1.5.1
collection: 1.14.11
assets_for_android_views:
git:
@@ -44,12 +44,12 @@
archive: 2.0.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
image: 2.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -86,4 +86,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: 4173
+# PUBSPEC CHECKSUM: 8273
diff --git a/dev/integration_tests/channels/pubspec.yaml b/dev/integration_tests/channels/pubspec.yaml
index 98245b6..08b83f0 100644
--- a/dev/integration_tests/channels/pubspec.yaml
+++ b/dev/integration_tests/channels/pubspec.yaml
@@ -19,14 +19,14 @@
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
intl: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -72,4 +72,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: f2a9
+# PUBSPEC CHECKSUM: f0ac
diff --git a/dev/integration_tests/codegen/pubspec.yaml b/dev/integration_tests/codegen/pubspec.yaml
index 9160ca3..21ab2f6 100644
--- a/dev/integration_tests/codegen/pubspec.yaml
+++ b/dev/integration_tests/codegen/pubspec.yaml
@@ -37,12 +37,12 @@
analyzer: 0.38.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
io: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -79,4 +79,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: f2a9
+# PUBSPEC CHECKSUM: f0ac
diff --git a/dev/integration_tests/external_ui/pubspec.yaml b/dev/integration_tests/external_ui/pubspec.yaml
index 7b8916a..71112f4 100644
--- a/dev/integration_tests/external_ui/pubspec.yaml
+++ b/dev/integration_tests/external_ui/pubspec.yaml
@@ -19,14 +19,14 @@
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
intl: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -72,4 +72,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: f2a9
+# PUBSPEC CHECKSUM: f0ac
diff --git a/dev/integration_tests/flavors/pubspec.yaml b/dev/integration_tests/flavors/pubspec.yaml
index 864e366..79a9a05 100644
--- a/dev/integration_tests/flavors/pubspec.yaml
+++ b/dev/integration_tests/flavors/pubspec.yaml
@@ -19,14 +19,14 @@
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
intl: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -72,4 +72,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: f2a9
+# PUBSPEC CHECKSUM: f0ac
diff --git a/dev/integration_tests/flutter_driver_screenshot_test/pubspec.yaml b/dev/integration_tests/flutter_driver_screenshot_test/pubspec.yaml
index 8ae3e37..4d793a0 100644
--- a/dev/integration_tests/flutter_driver_screenshot_test/pubspec.yaml
+++ b/dev/integration_tests/flutter_driver_screenshot_test/pubspec.yaml
@@ -9,8 +9,8 @@
sdk: flutter
flutter_driver:
sdk: flutter
- cupertino_icons: 0.1.2
- device_info: 0.4.1+2
+ cupertino_icons: 0.1.3
+ device_info: 0.4.1+4
async: 2.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -38,12 +38,12 @@
analyzer: 0.38.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
io: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -78,4 +78,4 @@
assets:
- assets/
-# PUBSPEC CHECKSUM: e877
+# PUBSPEC CHECKSUM: cf7d
diff --git a/dev/integration_tests/image_loading/pubspec.yaml b/dev/integration_tests/image_loading/pubspec.yaml
index 9c2ea37..81ff0fe 100644
--- a/dev/integration_tests/image_loading/pubspec.yaml
+++ b/dev/integration_tests/image_loading/pubspec.yaml
@@ -14,13 +14,13 @@
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
io: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -63,4 +63,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: a6c7
+# PUBSPEC CHECKSUM: 81ca
diff --git a/dev/integration_tests/ios_add2app/build_and_test.sh b/dev/integration_tests/ios_add2app/build_and_test.sh
index 00977a2..40fa2c7 100755
--- a/dev/integration_tests/ios_add2app/build_and_test.sh
+++ b/dev/integration_tests/ios_add2app/build_and_test.sh
@@ -24,4 +24,3 @@
-scheme ios_add2appTests \
-sdk "iphonesimulator$os_version" \
-destination "OS=$os_version,name=iPhone X" test | $PRETTY
-
diff --git a/dev/integration_tests/ios_add2app/flutterapp/pubspec.yaml b/dev/integration_tests/ios_add2app/flutterapp/pubspec.yaml
index a580873..3320ce6 100644
--- a/dev/integration_tests/ios_add2app/flutterapp/pubspec.yaml
+++ b/dev/integration_tests/ios_add2app/flutterapp/pubspec.yaml
@@ -22,7 +22,7 @@
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
- cupertino_icons: 0.1.2
+ cupertino_icons: 0.1.3
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
meta: 1.1.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -105,4 +105,4 @@
androidPackage: com.example.iosadd2appflutter
iosBundleIdentifier: com.example.iosAdd2appFlutter
-# PUBSPEC CHECKSUM: 712e
+# PUBSPEC CHECKSUM: 6e2f
diff --git a/dev/integration_tests/ios_host_app/Host/AppDelegate.h b/dev/integration_tests/ios_host_app/Host/AppDelegate.h
index 2aa64d9..78655f9 100644
--- a/dev/integration_tests/ios_host_app/Host/AppDelegate.h
+++ b/dev/integration_tests/ios_host_app/Host/AppDelegate.h
@@ -7,4 +7,3 @@
@interface AppDelegate : FlutterAppDelegate
@end
-
diff --git a/dev/integration_tests/ios_host_app/Host/ViewController.h b/dev/integration_tests/ios_host_app/Host/ViewController.h
index bca64f0..4b4bbd0 100644
--- a/dev/integration_tests/ios_host_app/Host/ViewController.h
+++ b/dev/integration_tests/ios_host_app/Host/ViewController.h
@@ -6,4 +6,3 @@
@interface ViewController : UIViewController
@end
-
diff --git a/dev/integration_tests/platform_interaction/pubspec.yaml b/dev/integration_tests/platform_interaction/pubspec.yaml
index dcc209f..04c95da 100644
--- a/dev/integration_tests/platform_interaction/pubspec.yaml
+++ b/dev/integration_tests/platform_interaction/pubspec.yaml
@@ -19,14 +19,14 @@
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
intl: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -72,4 +72,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: f2a9
+# PUBSPEC CHECKSUM: f0ac
diff --git a/dev/integration_tests/release_smoke_test/pubspec.yaml b/dev/integration_tests/release_smoke_test/pubspec.yaml
index 3a95f02..828f1f5 100644
--- a/dev/integration_tests/release_smoke_test/pubspec.yaml
+++ b/dev/integration_tests/release_smoke_test/pubspec.yaml
@@ -17,7 +17,7 @@
flutter_test:
sdk: flutter
- e2e: 0.2.1+1
+ e2e: 0.2.2+3
archive: 2.0.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -40,4 +40,4 @@
test_api: 0.2.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
xml: 3.5.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
-# PUBSPEC CHECKSUM: b92d
+# PUBSPEC CHECKSUM: b430
diff --git a/dev/integration_tests/ui/pubspec.yaml b/dev/integration_tests/ui/pubspec.yaml
index a530981..4fc04a2 100644
--- a/dev/integration_tests/ui/pubspec.yaml
+++ b/dev/integration_tests/ui/pubspec.yaml
@@ -21,14 +21,14 @@
charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection: 1.14.11 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto: 2.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
file: 5.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
html: 0.14.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
intl: 0.16.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -82,4 +82,4 @@
flutter:
uses-material-design: true
-# PUBSPEC CHECKSUM: 1cf0
+# PUBSPEC CHECKSUM: 59f3
diff --git a/dev/snippets/pubspec.yaml b/dev/snippets/pubspec.yaml
index 6aade2f..56cab92 100644
--- a/dev/snippets/pubspec.yaml
+++ b/dev/snippets/pubspec.yaml
@@ -47,8 +47,8 @@
test: 1.9.4
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- http: 0.12.0+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ http: 0.12.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server: 2.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser: 3.1.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
io: 0.3.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -101,4 +101,4 @@
vm_service_client: 0.2.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
web_socket_channel: 1.0.9 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
-# PUBSPEC CHECKSUM: a7d1
+# PUBSPEC CHECKSUM: 60d4
diff --git a/dev/tools/gen_keycodes/README.md b/dev/tools/gen_keycodes/README.md
index c07f281..9c81a23 100644
--- a/dev/tools/gen_keycodes/README.md
+++ b/dev/tools/gen_keycodes/README.md
@@ -9,9 +9,9 @@
`PhysicalKeyboardKey` classes), and `keyboard_maps.dart`, containing
platform-specific immutable maps for translating platform keycodes and
information into the pre-defined key values in the `LogicalKeyboardKey` and
-`PhysicalKeyboardKey` classes.
+`PhysicalKeyboardKey` classes.
-The `data` subdirectory contains both some local data files, and the templates
+The `data` subdirectory contains both some local data files, and the templates
used to generate the source files.
- `data/key_data.json`: contains the merged data from all the other sources.
@@ -30,9 +30,9 @@
- `data/synonyms.json`: contains a mapping between pseudo-keys that represent
other keys, and the sets of keys they represent. For example, this contains
the "shift" key that represents either a "shiftLeft" or "shiftRight" key.
-
+
## Running the tool
-
+
To run the `gen_keycodes` tool using the checked in `key_data.json` file, run
it like so:
@@ -106,9 +106,9 @@
a unique prefix in the range 0x2-0xFE. If multiple systems define keys with
the same usage (not the same number), then the value with the lowest prefix
is used as the defining code.
-
+
Prefixes will be:
-
+
|Code|Platform|
|----|--------|
|0x02| Android|
@@ -139,7 +139,7 @@
- **0x200 0000 0000 - 0x2FF FFFF FFFF**: For pseudo-keys which represent
combinations of other keys, and conceptual keys which don't have a physical
- representation. This is where things like key synonyms are defined (e.g.
+ representation. This is where things like key synonyms are defined (e.g.
"shiftLeft" is a synonym for "shift": the "shift" key is a pseudo-key
representing either the left or right shift key).
diff --git a/dev/tools/gen_keycodes/data/key_name_to_glfw_name.json b/dev/tools/gen_keycodes/data/key_name_to_glfw_name.json
index aac1813..f52194f 100644
--- a/dev/tools/gen_keycodes/data/key_name_to_glfw_name.json
+++ b/dev/tools/gen_keycodes/data/key_name_to_glfw_name.json
@@ -1,4 +1,4 @@
-{
+{
"altLeft": ["LEFT_ALT"],
"altRight": ["RIGHT_ALT"],
"arrowDown": ["DOWN"],
diff --git a/dev/tools/gen_keycodes/data/supplemental_hid_codes.inc b/dev/tools/gen_keycodes/data/supplemental_hid_codes.inc
index b9c99dc..cf66a07 100644
--- a/dev/tools/gen_keycodes/data/supplemental_hid_codes.inc
+++ b/dev/tools/gen_keycodes/data/supplemental_hid_codes.inc
@@ -49,4 +49,3 @@
// give it a Mac keycode. This overrides their definition.
// USB HID evdev XKB Win Mac DOMKey Code
USB_KEYMAP(0x000012, 0x0000, 0x0000, 0x0000, 0x003f, "Fn", FN),
-
diff --git a/dev/tools/gen_keycodes/pubspec.yaml b/dev/tools/gen_keycodes/pubspec.yaml
index e001d98..4861dff 100644
--- a/dev/tools/gen_keycodes/pubspec.yaml
+++ b/dev/tools/gen_keycodes/pubspec.yaml
@@ -7,7 +7,7 @@
dependencies:
args: 1.5.2
- http: 0.12.0+2
+ http: 0.12.0+3
path: 1.6.4
platform: 2.2.1
@@ -22,4 +22,4 @@
term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
typed_data: 1.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
-# PUBSPEC CHECKSUM: 613a
+# PUBSPEC CHECKSUM: 853b
diff --git a/dev/tools/pubspec.yaml b/dev/tools/pubspec.yaml
index 09f0177..316c1d5 100644
--- a/dev/tools/pubspec.yaml
+++ b/dev/tools/pubspec.yaml
@@ -8,7 +8,7 @@
dependencies:
archive: 2.0.11
args: 1.5.2
- http: 0.12.0+2
+ http: 0.12.0+3
intl: 0.16.0
meta: 1.1.8
path: 1.6.4
@@ -35,7 +35,7 @@
analyzer: 0.38.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector: 1.0.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
- coverage: 0.13.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
+ coverage: 0.13.3+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
csslib: 0.16.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
front_end: 0.1.27 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob: 1.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
@@ -69,4 +69,4 @@
web_socket_channel: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
yaml: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
-# PUBSPEC CHECKSUM: 3590
+# PUBSPEC CHECKSUM: cc93
diff --git a/dev/tools/vitool/test/vitool_test.dart b/dev/tools/vitool/test/vitool_test.dart
index 82d2020..fffcef2 100644
--- a/dev/tools/vitool/test/vitool_test.dart
+++ b/dev/tools/vitool/test/vitool_test.dart
@@ -696,4 +696,3 @@
String testAsset(String name) {
return path.join(kPackagePath, 'test_assets', name);
}
-