diff --git a/dev/automated_tests/pubspec.yaml b/dev/automated_tests/pubspec.yaml index 0e01c47595e..74cdeb38811 100644 --- a/dev/automated_tests/pubspec.yaml +++ b/dev/automated_tests/pubspec.yaml @@ -9,7 +9,7 @@ dependencies: sdk: flutter flutter_test: sdk: flutter - test: 1.5.2 + test: 1.5.3 analyzer: 0.33.6+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -56,7 +56,7 @@ dependencies: string_scanner: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - test_core: 0.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + test_core: 0.2.1+1 # 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" utf: 0.9.0+5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -68,4 +68,4 @@ dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: e195 +# PUBSPEC CHECKSUM: 25f2 diff --git a/dev/benchmarks/complex_layout/pubspec.yaml b/dev/benchmarks/complex_layout/pubspec.yaml index 3c6784c9e92..8f4fbe53a14 100644 --- a/dev/benchmarks/complex_layout/pubspec.yaml +++ b/dev/benchmarks/complex_layout/pubspec.yaml @@ -40,7 +40,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - test: 1.5.2 + test: 1.5.3 analyzer: 0.33.6+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -74,7 +74,7 @@ dev_dependencies: source_maps: 0.10.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" string_scanner: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - test_core: 0.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + test_core: 0.2.1+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" utf: 0.9.0+5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -85,4 +85,4 @@ flutter: - packages/flutter_gallery_assets/people/square/ali.png - packages/flutter_gallery_assets/places/india_chettinad_silk_maker.png -# PUBSPEC CHECKSUM: b266 +# PUBSPEC CHECKSUM: 39c3 diff --git a/dev/benchmarks/macrobenchmarks/pubspec.yaml b/dev/benchmarks/macrobenchmarks/pubspec.yaml index 01d15fead71..12523642453 100644 --- a/dev/benchmarks/macrobenchmarks/pubspec.yaml +++ b/dev/benchmarks/macrobenchmarks/pubspec.yaml @@ -40,7 +40,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - test: 1.5.2 + test: 1.5.3 analyzer: 0.33.6+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -74,7 +74,7 @@ dev_dependencies: source_maps: 0.10.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" string_scanner: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - test_core: 0.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + test_core: 0.2.1+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" utf: 0.9.0+5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -82,4 +82,4 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: b266 +# PUBSPEC CHECKSUM: 39c3 diff --git a/dev/benchmarks/microbenchmarks/pubspec.yaml b/dev/benchmarks/microbenchmarks/pubspec.yaml index 698c30bac03..f7317d62717 100644 --- a/dev/benchmarks/microbenchmarks/pubspec.yaml +++ b/dev/benchmarks/microbenchmarks/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: sdk: flutter stocks: path: ../../../examples/stocks - test: 1.5.2 + test: 1.5.3 analyzer: 0.33.6+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -64,7 +64,7 @@ dependencies: string_scanner: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - test_core: 0.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + test_core: 0.2.1+1 # 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" utf: 0.9.0+5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -76,4 +76,4 @@ dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 61eb +# PUBSPEC CHECKSUM: fd49 diff --git a/dev/bots/pubspec.yaml b/dev/bots/pubspec.yaml index f13e21ad69c..c9e4b5c98b0 100644 --- a/dev/bots/pubspec.yaml +++ b/dev/bots/pubspec.yaml @@ -13,7 +13,7 @@ dependencies: platform: 2.2.0 http: 0.12.0+1 http_parser: 3.1.3 - test: 1.5.2 + test: 1.5.3 analyzer: 0.33.6+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" async: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -55,7 +55,7 @@ dependencies: stream_channel: 1.6.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" string_scanner: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - test_core: 0.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + test_core: 0.2.1+1 # 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" utf: 0.9.0+5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -67,4 +67,4 @@ dev_dependencies: mockito: 4.0.0 test_api: 0.2.2 -# PUBSPEC CHECKSUM: 4e3a +# PUBSPEC CHECKSUM: ca97 diff --git a/dev/devicelab/pubspec.yaml b/dev/devicelab/pubspec.yaml index 6c2a62b8a30..276a75842a7 100644 --- a/dev/devicelab/pubspec.yaml +++ b/dev/devicelab/pubspec.yaml @@ -37,7 +37,7 @@ dependencies: dev_dependencies: # See packages/flutter_test/pubspec.yaml for why we're pinning this version. - test: 1.5.2 + test: 1.5.3 analyzer: 0.33.6+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -69,9 +69,9 @@ dev_dependencies: source_maps: 0.10.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" string_scanner: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - test_core: 0.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + test_core: 0.2.1+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" utf: 0.9.0+5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" -# PUBSPEC CHECKSUM: cf24 +# PUBSPEC CHECKSUM: bc81 diff --git a/dev/integration_tests/android_semantics_testing/pubspec.yaml b/dev/integration_tests/android_semantics_testing/pubspec.yaml index 5acaaa7fef7..7b443fc091e 100644 --- a/dev/integration_tests/android_semantics_testing/pubspec.yaml +++ b/dev/integration_tests/android_semantics_testing/pubspec.yaml @@ -6,7 +6,7 @@ dependencies: sdk: flutter flutter_driver: sdk: flutter - test: 1.5.2 + test: 1.5.3 analyzer: 0.33.6+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -54,7 +54,7 @@ dependencies: string_scanner: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - test_core: 0.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + test_core: 0.2.1+1 # 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" utf: 0.9.0+5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -66,4 +66,4 @@ dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 13de +# PUBSPEC CHECKSUM: 7b3c diff --git a/dev/integration_tests/android_views/pubspec.yaml b/dev/integration_tests/android_views/pubspec.yaml index c910f580819..7f0586ff97f 100644 --- a/dev/integration_tests/android_views/pubspec.yaml +++ b/dev/integration_tests/android_views/pubspec.yaml @@ -37,7 +37,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - test: 1.5.2 + test: 1.5.3 analyzer: 0.33.6+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -71,7 +71,7 @@ dev_dependencies: source_maps: 0.10.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" string_scanner: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - test_core: 0.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + test_core: 0.2.1+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" utf: 0.9.0+5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -79,4 +79,4 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: eb90 +# PUBSPEC CHECKSUM: 1bed diff --git a/dev/integration_tests/channels/pubspec.yaml b/dev/integration_tests/channels/pubspec.yaml index 94834d90abe..2142a56e625 100644 --- a/dev/integration_tests/channels/pubspec.yaml +++ b/dev/integration_tests/channels/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: sdk: flutter flutter_driver: sdk: flutter - test: 1.5.2 + test: 1.5.3 analyzer: 0.33.6+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -58,7 +58,7 @@ dependencies: string_scanner: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - test_core: 0.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + test_core: 0.2.1+1 # 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" utf: 0.9.0+5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -70,4 +70,4 @@ dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 13de +# PUBSPEC CHECKSUM: 7b3c diff --git a/dev/integration_tests/external_ui/pubspec.yaml b/dev/integration_tests/external_ui/pubspec.yaml index 69c58bb43db..7492db33c2d 100644 --- a/dev/integration_tests/external_ui/pubspec.yaml +++ b/dev/integration_tests/external_ui/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: sdk: flutter flutter_driver: sdk: flutter - test: 1.5.2 + test: 1.5.3 analyzer: 0.33.6+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -58,7 +58,7 @@ dependencies: string_scanner: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - test_core: 0.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + test_core: 0.2.1+1 # 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" utf: 0.9.0+5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -70,4 +70,4 @@ dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 13de +# PUBSPEC CHECKSUM: 7b3c diff --git a/dev/integration_tests/flavors/pubspec.yaml b/dev/integration_tests/flavors/pubspec.yaml index 10e51b55083..656eb34a969 100644 --- a/dev/integration_tests/flavors/pubspec.yaml +++ b/dev/integration_tests/flavors/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: sdk: flutter flutter_driver: sdk: flutter - test: 1.5.2 + test: 1.5.3 analyzer: 0.33.6+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -58,7 +58,7 @@ dependencies: string_scanner: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - test_core: 0.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + test_core: 0.2.1+1 # 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" utf: 0.9.0+5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -70,4 +70,4 @@ dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 13de +# PUBSPEC CHECKSUM: 7b3c diff --git a/dev/integration_tests/platform_interaction/pubspec.yaml b/dev/integration_tests/platform_interaction/pubspec.yaml index 40b77b21e55..ba266fc5cc5 100644 --- a/dev/integration_tests/platform_interaction/pubspec.yaml +++ b/dev/integration_tests/platform_interaction/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: sdk: flutter flutter_driver: sdk: flutter - test: 1.5.2 + test: 1.5.3 analyzer: 0.33.6+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -58,7 +58,7 @@ dependencies: string_scanner: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - test_core: 0.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + test_core: 0.2.1+1 # 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" utf: 0.9.0+5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -70,4 +70,4 @@ dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 13de +# PUBSPEC CHECKSUM: 7b3c diff --git a/dev/integration_tests/ui/pubspec.yaml b/dev/integration_tests/ui/pubspec.yaml index 4beb8bab032..ea71ee6bc93 100644 --- a/dev/integration_tests/ui/pubspec.yaml +++ b/dev/integration_tests/ui/pubspec.yaml @@ -11,7 +11,7 @@ dependencies: sdk: flutter flutter_driver: sdk: flutter - test: 1.5.2 + test: 1.5.3 analyzer: 0.33.6+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" archive: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -60,7 +60,7 @@ dependencies: stream_channel: 1.6.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" string_scanner: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - test_core: 0.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + test_core: 0.2.1+1 # 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" utf: 0.9.0+5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vector_math: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -80,4 +80,4 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: 54f5 +# PUBSPEC CHECKSUM: e153 diff --git a/dev/snippets/pubspec.yaml b/dev/snippets/pubspec.yaml index 9be4f5119e5..8e37cf03568 100644 --- a/dev/snippets/pubspec.yaml +++ b/dev/snippets/pubspec.yaml @@ -43,7 +43,7 @@ dependencies: yaml: 2.1.15 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" dev_dependencies: - test: 1.5.2 + test: 1.5.3 boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" http: 0.12.0+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -68,7 +68,7 @@ dev_dependencies: stack_trace: 1.9.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" stream_channel: 1.6.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - test_core: 0.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + test_core: 0.2.1+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" 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" @@ -101,4 +101,4 @@ executables: 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: 48f7 +# PUBSPEC CHECKSUM: bb55 diff --git a/examples/catalog/pubspec.yaml b/examples/catalog/pubspec.yaml index 03703762bd6..a496ead3654 100644 --- a/examples/catalog/pubspec.yaml +++ b/examples/catalog/pubspec.yaml @@ -20,7 +20,7 @@ dev_dependencies: sdk: flutter flutter_driver: sdk: flutter - test: 1.5.2 + test: 1.5.3 analyzer: 0.33.6+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -66,7 +66,7 @@ dev_dependencies: string_scanner: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - test_core: 0.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + test_core: 0.2.1+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" utf: 0.9.0+5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -76,4 +76,4 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: c6c7 +# PUBSPEC CHECKSUM: d225 diff --git a/examples/flutter_gallery/pubspec.yaml b/examples/flutter_gallery/pubspec.yaml index 239ede4dfb9..e1ba254c4c3 100644 --- a/examples/flutter_gallery/pubspec.yaml +++ b/examples/flutter_gallery/pubspec.yaml @@ -10,7 +10,7 @@ dependencies: collection: 1.14.11 device_info: 0.4.0 intl: 0.15.7 - connectivity: 0.4.0 + connectivity: 0.4.0+1 string_scanner: 1.0.4 url_launcher: 5.0.0 cupertino_icons: 0.1.2 @@ -36,7 +36,7 @@ dev_dependencies: sdk: flutter flutter_goldens: sdk: flutter - test: 1.5.2 + test: 1.5.3 analyzer: 0.33.6+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -79,7 +79,7 @@ dev_dependencies: stack_trace: 1.9.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" stream_channel: 1.6.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - test_core: 0.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + test_core: 0.2.1+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" utf: 0.9.0+5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -242,4 +242,4 @@ flutter: - asset: packages/flutter_gallery_assets/fonts/private/googlesans/GoogleSansDisplay-Regular.ttf weight: 400 -# PUBSPEC CHECKSUM: 2c0e +# PUBSPEC CHECKSUM: b3c7 diff --git a/examples/platform_channel/pubspec.yaml b/examples/platform_channel/pubspec.yaml index a0ab404035c..42df5e2c28d 100644 --- a/examples/platform_channel/pubspec.yaml +++ b/examples/platform_channel/pubspec.yaml @@ -18,7 +18,7 @@ dev_dependencies: sdk: flutter flutter_driver: sdk: flutter - test: 1.5.2 + test: 1.5.3 analyzer: 0.33.6+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" args: 1.5.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -65,7 +65,7 @@ dev_dependencies: string_scanner: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" test_api: 0.2.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - test_core: 0.2.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + test_core: 0.2.1+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" utf: 0.9.0+5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" vm_service_client: 0.2.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -75,4 +75,4 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: c6c7 +# PUBSPEC CHECKSUM: d225 diff --git a/packages/flutter_build/lib/src/kernel_builder.dart b/packages/flutter_build/lib/src/kernel_builder.dart index 1ee28329776..65f873dd335 100644 --- a/packages/flutter_build/lib/src/kernel_builder.dart +++ b/packages/flutter_build/lib/src/kernel_builder.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +// Note: this Builder does not run in the same process as the flutter_tool, so +// the DI provided getters such as `fs` will not work. import 'dart:async'; import 'dart:convert'; import 'dart:io'; @@ -14,7 +16,6 @@ import 'package:path/path.dart' as path; const String _kFlutterDillOutputExtension = '.app.dill'; const String _kPackagesExtension = '.packages'; -const String multiRootScheme = 'org-dartlang-app'; /// A builder which creates a kernel and packages file for a Flutter app. /// @@ -235,39 +236,47 @@ class _StdoutHandler { } } + +class _CompilerOutput { + const _CompilerOutput(this.outputFilename, this.errorCount); + + final String outputFilename; + final int errorCount; +} + /// Converts filesystem paths to package URIs. class _PackageUriMapper { - _PackageUriMapper(String scriptPath, String packagesPath, this.fileSystemScheme, this.fileSystemRoots) { + _PackageUriMapper(String scriptPath, String packagesPath, String fileSystemScheme, List fileSystemRoots) { final List bytes = File(path.absolute(packagesPath)).readAsBytesSync(); final Map packageMap = packages_file.parse(bytes, Uri.file(packagesPath, windows: Platform.isWindows)); final String scriptUri = Uri.file(scriptPath, windows: Platform.isWindows).toString(); + for (String packageName in packageMap.keys) { final String prefix = packageMap[packageName].toString(); if (fileSystemScheme != null && fileSystemRoots != null && prefix.contains(fileSystemScheme)) { _packageName = packageName; - _uriPrefix = fileSystemRoots.map((String name) => Uri.file('$name/lib/', windows: Platform.isWindows).toString()).toList(); + _uriPrefixes = fileSystemRoots + .map((String name) => Uri.file('$name/lib/', windows: Platform.isWindows).toString()) + .toList(); return; } if (scriptUri.startsWith(prefix)) { _packageName = packageName; - _uriPrefix = [prefix]; + _uriPrefixes = [prefix]; return; } } } - final String fileSystemScheme; - final List fileSystemRoots; - String _packageName; - List _uriPrefix; + List _uriPrefixes; Uri map(String scriptPath) { if (_packageName == null) { return null; } final String scriptUri = Uri.file(scriptPath, windows: Platform.isWindows).toString(); - for (String uriPrefix in _uriPrefix) { + for (String uriPrefix in _uriPrefixes) { if (scriptUri.startsWith(uriPrefix)) { return Uri.parse('package:$_packageName/${scriptUri.substring(uriPrefix.length)}'); } @@ -279,10 +288,3 @@ class _PackageUriMapper { return _PackageUriMapper(scriptPath, packagesPath, fileSystemScheme, fileSystemRoots).map(scriptPath); } } - -class _CompilerOutput { - const _CompilerOutput(this.outputFilename, this.errorCount); - - final String outputFilename; - final int errorCount; -} diff --git a/packages/flutter_build/pubspec.yaml b/packages/flutter_build/pubspec.yaml index 1784a936426..bd81dc578cb 100644 --- a/packages/flutter_build/pubspec.yaml +++ b/packages/flutter_build/pubspec.yaml @@ -7,7 +7,7 @@ environment: dependencies: # To update these, use "flutter update-packages --force-upgrade". build: 1.1.0 - build_modules: 1.0.4 + build_modules: 1.0.6 package_config: 1.0.5 path: 1.6.2 @@ -33,7 +33,7 @@ dependencies: pedantic: 1.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" plugin: 0.2.0+3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" pool: 1.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - protobuf: 0.13.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + protobuf: 0.13.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" pub_semver: 1.4.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" pubspec_parse: 0.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" scratch_space: 0.0.3+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -50,4 +50,4 @@ dartdoc: # Exclude this package from the hosted API docs. nodoc: true -# PUBSPEC CHECKSUM: ec31 +# PUBSPEC CHECKSUM: 1f34 diff --git a/packages/flutter_tools/lib/src/build_runner/build_runner.dart b/packages/flutter_tools/lib/src/build_runner/build_runner.dart index 3c062cfeb07..68591c079bd 100644 --- a/packages/flutter_tools/lib/src/build_runner/build_runner.dart +++ b/packages/flutter_tools/lib/src/build_runner/build_runner.dart @@ -4,19 +4,22 @@ import 'dart:async'; +import 'package:build_runner_core/build_runner_core.dart'; import 'package:meta/meta.dart'; import '../artifacts.dart'; import '../base/context.dart'; import '../base/file_system.dart'; import '../base/io.dart'; +import '../base/logger.dart'; import '../base/platform.dart'; import '../base/process_manager.dart'; import '../cache.dart'; import '../convert.dart'; -import '../dart/package_map.dart'; +import '../dart/pub.dart'; import '../globals.dart'; import '../project.dart'; +import 'build_script_generator.dart'; /// The [BuildRunnerFactory] instance. BuildRunnerFactory get buildRunnerFactory => context[BuildRunnerFactory]; @@ -26,17 +29,8 @@ BuildRunnerFactory get buildRunnerFactory => context[BuildRunnerFactory]; /// This requires both an experimental opt in via the environment variable /// 'FLUTTER_EXPERIMENTAL_BUILD' and that the project itself has a /// dependency on the package 'flutter_build' and 'build_runner.' -FutureOr get experimentalBuildEnabled async { - if (_experimentalBuildEnabled != null) { - return _experimentalBuildEnabled; - } - final bool flagEnabled = platform.environment['FLUTTER_EXPERIMENTAL_BUILD']?.toLowerCase() == 'true'; - if (!flagEnabled) { - return _experimentalBuildEnabled = false; - } - final FlutterProject flutterProject = await FlutterProject.current(); - final Map packages = PackageMap(flutterProject.packagesFile.path).map; - return _experimentalBuildEnabled = packages.containsKey('flutter_build') && packages.containsKey('build_runner'); +bool get experimentalBuildEnabled { + return _experimentalBuildEnabled ??= platform.environment['FLUTTER_EXPERIMENTAL_BUILD']?.toLowerCase() == 'true'; } bool _experimentalBuildEnabled; @@ -74,53 +68,69 @@ class BuildRunner { @required String mainPath, @required List extraFrontEndOptions, }) async { + await generateBuildScript(); final FlutterProject flutterProject = await FlutterProject.current(); final String frontendServerPath = artifacts.getArtifactPath( Artifact.frontendServerSnapshotForEngineDartSdk ); - final String pubExecutable = fs.path.join(Cache.flutterRoot, 'bin', 'cache', 'dart-sdk','bin', 'pub'); final String sdkRoot = artifacts.getArtifactPath(Artifact.flutterPatchedSdkPath); final String engineDartBinaryPath = artifacts.getArtifactPath(Artifact.engineDartBinary); final String packagesPath = flutterProject.packagesFile.absolute.path; - final Process process = await processManager.start([ - '$pubExecutable', - 'run', - 'build_runner', - 'build', - '--define', 'flutter_build|kernel=disabled=false', - '--define', 'flutter_build|kernel=aot=$aot', - '--define', 'flutter_build|kernel=linkPlatformKernelIn=$linkPlatformKernelIn', - '--define', 'flutter_build|kernel=trackWidgetCreation=$trackWidgetCreation', - '--define', 'flutter_build|kernel=targetProductVm=$targetProductVm', - '--define', 'flutter_build|kernel=mainPath=$mainPath', - '--define', 'flutter_build|kernel=packagesPath=$packagesPath', - '--define', 'flutter_build|kernel=sdkRoot=$sdkRoot', - '--define', 'flutter_build|kernel=frontendServerPath=$frontendServerPath', - '--define', 'flutter_build|kernel=engineDartBinaryPath=$engineDartBinaryPath', - '--define', 'flutter_build|kernel=extraFrontEndOptions=${extraFrontEndOptions ?? const []}', - ]); - process.stdout - .transform(utf8.decoder) - .transform(const LineSplitter()) - .listen(_handleOutput); - process.stderr - .transform(utf8.decoder) - .transform(const LineSplitter()) - .listen(_handleError); - final int exitCode = await process.exitCode; - if (exitCode != 0) { - throw Exception('build_runner exited with non-zero exit code: $exitCode'); + final String buildScript = flutterProject + .dartTool + .childDirectory('build') + .childDirectory('entrypoint') + .childFile('build.dart') + .path; + final String scriptPackagesPath = flutterProject + .dartTool + .childDirectory('flutter_tool') + .childFile('.packages') + .path; + final String dartPath = fs.path.join(Cache.flutterRoot, 'bin', 'cache', 'dart-sdk', 'bin', 'dart'); + final Status status = logger.startProgress('running builders...', timeout: null); + try { + final Process buildProcess = await processManager.start([ + dartPath, + '--packages=$scriptPackagesPath', + buildScript, + 'build', + '--define', 'flutter_build|kernel=disabled=false', + '--define', 'flutter_build|kernel=aot=$aot', + '--define', 'flutter_build|kernel=linkPlatformKernelIn=$linkPlatformKernelIn', + '--define', 'flutter_build|kernel=trackWidgetCreation=$trackWidgetCreation', + '--define', 'flutter_build|kernel=targetProductVm=$targetProductVm', + '--define', 'flutter_build|kernel=mainPath=$mainPath', + '--define', 'flutter_build|kernel=packagesPath=$packagesPath', + '--define', 'flutter_build|kernel=sdkRoot=$sdkRoot', + '--define', 'flutter_build|kernel=frontendServerPath=$frontendServerPath', + '--define', 'flutter_build|kernel=engineDartBinaryPath=$engineDartBinaryPath', + '--define', 'flutter_build|kernel=extraFrontEndOptions=${extraFrontEndOptions ?? const []}', + ]); + buildProcess + .stdout + .transform(utf8.decoder) + .transform(const LineSplitter()) + .listen(printStatus); + buildProcess + .stderr + .transform(utf8.decoder) + .transform(const LineSplitter()) + .listen(printError); + await buildProcess.exitCode; + } finally { + status.stop(); } /// We don't check for this above because it might be generated for the /// first time by invoking the build. final Directory dartTool = flutterProject.dartTool; final String projectName = flutterProject.manifest.appName; final Directory generatedDirectory = dartTool - .absolute - .childDirectory('build') - .childDirectory('generated') - .childDirectory(projectName); - if (!await generatedDirectory.exists()) { + .absolute + .childDirectory('build') + .childDirectory('generated') + .childDirectory(projectName); + if (!generatedDirectory.existsSync()) { throw Exception('build_runner cannot find generated directory'); } final String relativeMain = fs.path.relative(mainPath, from: flutterProject.directory.path); @@ -130,18 +140,66 @@ class BuildRunner { final File dillFile = fs.file( fs.path.join(generatedDirectory.path, fs.path.setExtension(relativeMain, '.app.dill')) ); - if (!await packagesFile.exists() || !await dillFile.exists()) { + if (!packagesFile.existsSync() || !dillFile.existsSync()) { throw Exception('build_runner did not produce output at expected location: ${dillFile.path} missing'); } return BuildResult(packagesFile, dillFile); } - void _handleOutput(String line) { - printTrace(line); + /// Invalidates a generated build script by deleting it. + /// + /// Must be called any time a pubspec file update triggers a corresponding change + /// in .packages. + Future invalidateBuildScript() async { + final FlutterProject flutterProject = await FlutterProject.current(); + final File buildScript = flutterProject.dartTool + .absolute + .childDirectory('flutter_tool') + .childFile('build.dart'); + if (!buildScript.existsSync()) { + return; + } + await buildScript.delete(); } - void _handleError(String line) { - printError(line); + // Generates a synthetic package under .dart_tool/flutter_tool which is in turn + // used to generate a build script. + Future generateBuildScript() async { + final FlutterProject flutterProject = await FlutterProject.current(); + final String generatedDirectory = fs.path.join(flutterProject.dartTool.path, 'flutter_tool'); + final String resultScriptPath = fs.path.join(flutterProject.dartTool.path, 'build', 'entrypoint', 'build.dart'); + if (fs.file(resultScriptPath).existsSync()) { + return; + } + final Status status = logger.startProgress('generating build script...', timeout: null); + try { + fs.directory(generatedDirectory).createSync(recursive: true); + + final File syntheticPubspec = fs.file(fs.path.join(generatedDirectory, 'pubspec.yaml')); + final StringBuffer stringBuffer = StringBuffer(); + + stringBuffer.writeln('name: synthetic_example'); + stringBuffer.writeln('dependencies:'); + for (String builder in await flutterProject.builders) { + stringBuffer.writeln(' $builder: any'); + } + stringBuffer.writeln(' build_runner: any'); + stringBuffer.writeln(' flutter_build:'); + stringBuffer.writeln(' sdk: flutter'); + await syntheticPubspec.writeAsString(stringBuffer.toString()); + + await pubGet( + context: PubContext.pubGet, + directory: generatedDirectory, + upgrade: false, + checkLastModified: false, + ); + final PackageGraph packageGraph = PackageGraph.forPath(syntheticPubspec.parent.path); + final BuildScriptGenerator buildScriptGenerator = buildScriptGeneratorFactory.create(flutterProject, packageGraph); + await buildScriptGenerator.generateBuildScript(); + } finally { + status.stop(); + } } } diff --git a/packages/flutter_tools/lib/src/build_runner/build_script_generator.dart b/packages/flutter_tools/lib/src/build_runner/build_script_generator.dart new file mode 100644 index 00000000000..1467872ace4 --- /dev/null +++ b/packages/flutter_tools/lib/src/build_runner/build_script_generator.dart @@ -0,0 +1,283 @@ +// Copyright 201 The Chromium 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:async'; + +import 'package:build_runner_core/build_runner_core.dart'; +import 'package:build/build.dart' show BuilderOptions; +import 'package:build_config/build_config.dart'; +import 'package:code_builder/code_builder.dart'; +import 'package:dart_style/dart_style.dart'; +import 'package:graphs/graphs.dart'; + +import '../base/common.dart'; +import '../base/context.dart'; +import '../base/file_system.dart'; +import '../project.dart'; + +BuildScriptGeneratorFactory get buildScriptGeneratorFactory => context[BuildScriptGeneratorFactory]; + +class BuildScriptGeneratorFactory { + const BuildScriptGeneratorFactory(); + + /// Creates a [BuildScriptGenerator] for the current flutter project. + BuildScriptGenerator create(FlutterProject flutterProject, PackageGraph packageGraph) { + return BuildScriptGenerator(flutterProject, packageGraph); + } +} + +/// Generates a build_script for the current flutter project. +class BuildScriptGenerator { + const BuildScriptGenerator(this.flutterProject, this.packageGraph); + + final FlutterProject flutterProject; + final PackageGraph packageGraph; + + /// Generate a build script for the curent flutter project. + /// + /// Requires the project to have a pubspec.yaml. + Future generateBuildScript() async { + final Iterable builders = await _findBuilderApplications(); + final Library library = Library((LibraryBuilder libraryBuilder) => libraryBuilder.body.addAll([ + literalList(builders, refer('BuilderApplication', 'package:build_runner_core/build_runner_core.dart')) + .assignFinal('_builders') + .statement, + _createMain() + ])); + final DartEmitter emitter = DartEmitter(Allocator.simplePrefixing()); + try { + final String location = fs.path.join(flutterProject.dartTool.path, 'build', 'entrypoint', 'build.dart'); + final String result = DartFormatter().format(''' + // ignore_for_file: directives_ordering + ${library.accept(emitter)}'''); + final File output = fs.file(location); + await output.create(recursive: true); + await fs.file(location).writeAsString(result); + } on FormatterException { + throwToolExit('Generated build script could not be parsed. ' + 'This is likely caused by a misconfigured builder definition.'); + } + } + + /// Finds expressions to create all the `BuilderApplication` instances that + /// should be applied packages in the build. + /// + /// Adds `apply` expressions based on the BuildefDefinitions from any package + /// which has a `build.yaml`. + Future> _findBuilderApplications() async { + final List builderApplications = []; + final Iterable orderedPackages = stronglyConnectedComponents( + [packageGraph.root], + (PackageNode node) => node.dependencies, + equals: (PackageNode a, PackageNode b) => a.name == b.name, + hashCode: (PackageNode n) => n.name.hashCode, + ).expand((List nodes) => nodes); + Future _packageBuildConfig(PackageNode package) async { + try { + return await BuildConfig.fromBuildConfigDir(package.name, package.dependencies.map((PackageNode node) => node.name), package.path); + } on ArgumentError catch (_) { + // During the build an error will be logged. + return BuildConfig.useDefault(package.name, package.dependencies.map((PackageNode node) => node.name)); + } + } + + final Iterable orderedConfigs = await Future.wait(orderedPackages.map(_packageBuildConfig)); + final List builderDefinitions = orderedConfigs + .expand((BuildConfig buildConfig) => buildConfig.builderDefinitions.values) + .where((BuilderDefinition builderDefinition) { + if (builderDefinition.import.startsWith('package:')) { + return true; + } + return builderDefinition.package == packageGraph.root.name; + }) + .toList(); + + final List orderedBuilders = _findBuilderOrder(builderDefinitions).toList(); + builderApplications.addAll(orderedBuilders.map(_applyBuilder)); + + final List postProcessBuilderDefinitions = orderedConfigs + .expand((BuildConfig buildConfig) => buildConfig.postProcessBuilderDefinitions.values) + .where((PostProcessBuilderDefinition builderDefinition) { + if (builderDefinition.import.startsWith('package:')) { + return true; + } + return builderDefinition.package == packageGraph.root.name; + }) + .toList(); + builderApplications.addAll(postProcessBuilderDefinitions.map(_applyPostProcessBuilder)); + + return builderApplications; + } + + /// A method forwarding to `run`. + Method _createMain() { + return Method((MethodBuilder b) => b + ..name = 'main' + ..modifier = MethodModifier.async + ..requiredParameters.add(Parameter((ParameterBuilder parameterBuilder) => parameterBuilder + ..name = 'args' + ..type = TypeReference((TypeReferenceBuilder typeReferenceBuilder) => typeReferenceBuilder + ..symbol = 'List' + ..types.add(refer('String'))))) + ..optionalParameters.add(Parameter((ParameterBuilder parameterBuilder) => parameterBuilder + ..name = 'sendPort' + ..type = refer('SendPort', 'dart:isolate'))) + ..body = Block.of([ + refer('run', 'package:build_runner/build_runner.dart') + .call([refer('args'), refer('_builders')]) + .awaited + .assignVar('result') + .statement, + refer('sendPort') + .nullSafeProperty('send') + .call([refer('result')]).statement, + ])); + } + + /// An expression calling `apply` with appropriate setup for a Builder. + Expression _applyBuilder(BuilderDefinition definition) { + final Map namedArgs = {}; + if (definition.isOptional) { + namedArgs['isOptional'] = literalTrue; + } + if (definition.buildTo == BuildTo.cache) { + namedArgs['hideOutput'] = literalTrue; + } else { + namedArgs['hideOutput'] = literalFalse; + } + if (!identical(definition.defaults?.generateFor, InputSet.anything)) { + final Map inputSetArgs = {}; + if (definition.defaults.generateFor.include != null) { + inputSetArgs['include'] = literalConstList(definition.defaults.generateFor.include); + } + if (definition.defaults.generateFor.exclude != null) { + inputSetArgs['exclude'] = literalConstList(definition.defaults.generateFor.exclude); + } + namedArgs['defaultGenerateFor'] = + refer('InputSet', 'package:build_config/build_config.dart') + .constInstance([], inputSetArgs); + } + if (!identical(definition.defaults?.options, BuilderOptions.empty)) { + namedArgs['defaultOptions'] = _constructBuilderOptions(definition.defaults.options); + } + if (!identical(definition.defaults?.devOptions, BuilderOptions.empty)) { + namedArgs['defaultDevOptions'] = _constructBuilderOptions(definition.defaults.devOptions); + } + if (!identical(definition.defaults?.releaseOptions, BuilderOptions.empty)) { + namedArgs['defaultReleaseOptions'] = _constructBuilderOptions(definition.defaults.releaseOptions); + } + if (definition.appliesBuilders.isNotEmpty) { + namedArgs['appliesBuilders'] = literalList(definition.appliesBuilders); + } + final String import = _buildScriptImport(definition.import); + return refer('apply', 'package:build_runner_core/build_runner_core.dart') + .call([ + literalString(definition.key), + literalList( + definition.builderFactories.map((String f) => refer(f, import)).toList()), + _findToExpression(definition), + ], namedArgs); + } + + /// An expression calling `applyPostProcess` with appropriate setup for a + /// PostProcessBuilder. + Expression _applyPostProcessBuilder(PostProcessBuilderDefinition definition) { + final Map namedArgs = {}; + if (definition.defaults?.generateFor != null) { + final Map inputSetArgs = {}; + if (definition.defaults.generateFor.include != null) { + inputSetArgs['include'] = literalConstList(definition.defaults.generateFor.include); + } + if (definition.defaults.generateFor.exclude != null) { + inputSetArgs['exclude'] = literalConstList(definition.defaults.generateFor.exclude); + } + if (!identical(definition.defaults?.options, BuilderOptions.empty)) { + namedArgs['defaultOptions'] = _constructBuilderOptions(definition.defaults.options); + } + if (!identical(definition.defaults?.devOptions, BuilderOptions.empty)) { + namedArgs['defaultDevOptions'] = _constructBuilderOptions(definition.defaults.devOptions); + } + if (!identical(definition.defaults?.releaseOptions, BuilderOptions.empty)) { + namedArgs['defaultReleaseOptions'] = _constructBuilderOptions(definition.defaults.releaseOptions); + } + namedArgs['defaultGenerateFor'] = refer('InputSet', 'package:build_config/build_config.dart').constInstance([], inputSetArgs); + } + final String import = _buildScriptImport(definition.import); + return refer('applyPostProcess', 'package:build_runner_core/build_runner_core.dart') + .call([ + literalString(definition.key), + refer(definition.builderFactory, import), + ], namedArgs); + } + + /// Returns the actual import to put in the generated script based on an import + /// found in the build.yaml. + String _buildScriptImport(String import) { + if (import.startsWith('package:')) { + return import; + } + throwToolExit('non-package import syntax in build.yaml is not supported'); + return null; + } + + Expression _findToExpression(BuilderDefinition definition) { + switch (definition.autoApply) { + case AutoApply.none: + return refer('toNoneByDefault', + 'package:build_runner_core/build_runner_core.dart') + .call([]); + case AutoApply.dependents: + return refer('toDependentsOf', + 'package:build_runner_core/build_runner_core.dart') + .call([literalString(definition.package)]); + case AutoApply.allPackages: + return refer('toAllPackages', + 'package:build_runner_core/build_runner_core.dart') + .call([]); + case AutoApply.rootPackage: + return refer('toRoot', 'package:build_runner_core/build_runner_core.dart') + .call([]); + } + throw ArgumentError('Unhandled AutoApply type: ${definition.autoApply}'); + } + + /// An expression creating a [BuilderOptions] from a json string. + Expression _constructBuilderOptions(BuilderOptions options) { + return refer('BuilderOptions', 'package:build/build.dart').newInstance([literalMap(options.config)]); + } + + /// Put [builders] into an order such that any builder which specifies + /// [BuilderDefinition.requiredInputs] will come after any builder which + /// produces a desired output. + /// + /// Builders will be ordered such that their `required_inputs` and `runs_before` + /// constraints are met, but the rest of the ordering is arbitrary. + Iterable _findBuilderOrder(Iterable builders) { + Iterable dependencies(BuilderDefinition parent) { + return builders.where((BuilderDefinition child) => _hasInputDependency(parent, child) || _mustRunBefore(parent, child)); + } + final List> components = stronglyConnectedComponents( + builders, + dependencies, + equals: (BuilderDefinition a, BuilderDefinition b) => a.key == b.key, + hashCode: (BuilderDefinition b) => b.key.hashCode, + ); + return components.map((List component) { + if (component.length > 1) { + throw ArgumentError('Required input cycle for ${component.toList()}'); + } + return component.single; + }).toList(); + } + + /// Whether [parent] has a `required_input` that wants to read outputs produced + /// by [child]. + bool _hasInputDependency(BuilderDefinition parent, BuilderDefinition child) { + final Set childOutputs = child.buildExtensions.values.expand((List values) => values).toSet(); + return parent.requiredInputs.any((String input) => childOutputs.any((String output) => output.endsWith(input))); + } + + /// Whether [child] specifies that it wants to run before [parent]. + bool _mustRunBefore(BuilderDefinition parent, BuilderDefinition child) => child.runsBefore.contains(parent.key); +} \ No newline at end of file diff --git a/packages/flutter_tools/lib/src/commands/update_packages.dart b/packages/flutter_tools/lib/src/commands/update_packages.dart index f1f9d3d8a15..07aab13a7e1 100644 --- a/packages/flutter_tools/lib/src/commands/update_packages.dart +++ b/packages/flutter_tools/lib/src/commands/update_packages.dart @@ -119,7 +119,7 @@ class UpdatePackagesCommand extends FlutterCommand { ); } // Only retain flutter, flutter_test, flutter_driver, and flutter_localizations. - const List consumerPackages = ['flutter', 'flutter_test', 'flutter_driver', 'flutter_localizations', 'flutter_build']; + const List consumerPackages = ['flutter', 'flutter_test', 'flutter_driver', 'flutter_localizations']; // ensure we only get flutter/packages packages.retainWhere((Directory directory) { return consumerPackages.any((String package) { diff --git a/packages/flutter_tools/lib/src/context_runner.dart b/packages/flutter_tools/lib/src/context_runner.dart index deb0e228fc6..7229b9017d4 100644 --- a/packages/flutter_tools/lib/src/context_runner.dart +++ b/packages/flutter_tools/lib/src/context_runner.dart @@ -22,6 +22,7 @@ import 'base/time.dart'; import 'base/user_messages.dart'; import 'base/utils.dart'; import 'build_runner/build_runner.dart'; +import 'build_runner/build_script_generator.dart'; import 'cache.dart'; import 'compile.dart'; import 'devfs.dart'; @@ -60,6 +61,7 @@ Future runInContext( Artifacts: () => CachedArtifacts(), AssetBundleFactory: () => AssetBundleFactory.defaultInstance, BotDetector: () => const BotDetector(), + BuildScriptGeneratorFactory: () => const BuildScriptGeneratorFactory(), BuildRunnerFactory: () => const BuildRunnerFactory(), Cache: () => Cache(), CocoaPods: () => CocoaPods(), diff --git a/packages/flutter_tools/lib/src/project.dart b/packages/flutter_tools/lib/src/project.dart index bfbe689bd05..68f1f1228ca 100644 --- a/packages/flutter_tools/lib/src/project.dart +++ b/packages/flutter_tools/lib/src/project.dart @@ -4,7 +4,9 @@ import 'dart:async'; +import 'package:build_runner_core/build_runner_core.dart'; import 'package:meta/meta.dart'; +import 'package:yaml/yaml.dart'; import 'android/gradle.dart' as gradle; import 'base/common.dart'; @@ -144,6 +146,23 @@ class FlutterProject { await ios.ensureReadyForPlatformSpecificTooling(); await injectPlugins(this); } + + /// Return the build_runner [PackageGraph] for this package. + Future get packageGraph async { + return PackageGraph.forPath(directory.path); + } + + /// Return the set of builders used by this package. + Future> get builders async { + final YamlMap pubspec = loadYaml(await pubspecFile.readAsString()); + final YamlList builders = pubspec['builders']; + if (builders == null) { + return []; + } + return builders.map((Object node) { + return node.toString(); + }).toList(); + } } /// Represents the iOS sub-project of a Flutter project. diff --git a/packages/flutter_tools/pubspec.yaml b/packages/flutter_tools/pubspec.yaml index 25bc40fb216..5e2f0dbbbdd 100644 --- a/packages/flutter_tools/pubspec.yaml +++ b/packages/flutter_tools/pubspec.yaml @@ -23,7 +23,7 @@ dependencies: json_schema: 1.0.10 linter: 0.1.74 meta: 1.1.6 - mustache: 1.1.0 + mustache: 1.1.1 package_config: 1.0.5 platform: 2.2.0 plugin: 0.2.0+3 @@ -39,23 +39,40 @@ dependencies: flutter_goldens_client: path: ../flutter_goldens_client + # build_runner depenencies needed for codegen. + build: 1.1.0 + build_modules: 1.0.6 + # We depend on very specific internal implementation details of the # 'test' package, which change between versions, so when upgrading # this, make sure the tests are still running correctly. test_api: 0.2.2 - test_core: 0.2.1 + test_core: 0.2.1+1 + + # Code generation dependencies + build_runner_core: 2.0.1 + dart_style: 1.2.0 + code_builder: 3.2.0 async: 2.0.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + bazel_worker: 0.1.18 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" boolean_selector: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + build_config: 0.3.1+4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + build_resolvers: 0.2.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + built_collection: 4.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + built_value: 6.3.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" convert: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" csslib: 0.14.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" dart2_constant: 1.0.2+dart2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + fixnum: 0.10.9 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" front_end: 0.1.6+9 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" glob: 1.1.7 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + graphs: 0.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" html: 0.13.3+3 # 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" + json_annotation: 2.0.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" kernel: 0.3.6+9 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" logging: 0.11.3+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" matcher: 0.12.3+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -64,12 +81,17 @@ dependencies: pedantic: 1.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" petitparser: 2.1.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" pool: 1.4.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + protobuf: 0.13.1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" pub_semver: 1.4.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + pubspec_parse: 0.1.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + scratch_space: 0.0.3+2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" source_map_stack_trace: 1.1.5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" source_maps: 0.10.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" source_span: 1.5.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + stream_transform: 0.0.14+1 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" string_scanner: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" term_glyph: 1.1.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + timing: 0.1.1+1 # 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" utf: 0.9.0+5 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" watcher: 0.9.7+10 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -89,10 +111,10 @@ dev_dependencies: shelf_packages_handler: 1.0.4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" shelf_static: 0.2.8 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" shelf_web_socket: 0.2.2+4 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" - test: 1.5.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" + test: 1.5.3 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" dartdoc: # Exclude this package from the hosted API docs. nodoc: true -# PUBSPEC CHECKSUM: 8bcf +# PUBSPEC CHECKSUM: 7930 diff --git a/packages/flutter_tools/test/build_runner/build_runner_test.dart b/packages/flutter_tools/test/build_runner/build_runner_test.dart index 289adbd1cc0..a69ee5f3c51 100644 --- a/packages/flutter_tools/test/build_runner/build_runner_test.dart +++ b/packages/flutter_tools/test/build_runner/build_runner_test.dart @@ -2,103 +2,35 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:convert'; -import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/platform.dart'; import 'package:flutter_tools/src/build_runner/build_runner.dart'; import 'package:mockito/mockito.dart'; -import 'package:process/process.dart'; import '../src/common.dart'; import '../src/context.dart'; void main() { group('experimentalBuildEnabled', () { - final MockProcessManager mockProcessManager = MockProcessManager(); final MockPlatform mockPlatform = MockPlatform(); - final MockFileSystem mockFileSystem = MockFileSystem(); setUp(() { experimentalBuildEnabled = null; }); - testUsingContext('is enabled if environment variable is enabled and project ' - 'contains a dependency on flutter_build and build_runner', () async { - final MockDirectory projectDirectory = MockDirectory(); - final MockDirectory exampleDirectory = MockDirectory(); - final MockFile packagesFile = MockFile(); - final MockFile pubspecFile = MockFile(); - final MockFile examplePubspecFile = MockFile(); - const String packages = r''' -flutter_build:file:///Users/tester/.pub-cache/hosted/pub.dartlang.org/flutter_build/lib/ -build_runner:file:///Users/tester/.pub-cache/hosted/pub.dartlang.org/build_runner/lib/ -example:lib/ -'''; - when(mockPlatform.environment).thenReturn({'FLUTTER_EXPERIMENTAL_BUILD': 'true'}); - when(mockFileSystem.currentDirectory).thenReturn(projectDirectory); - when(mockFileSystem.isFileSync(any)).thenReturn(false); - when(projectDirectory.childFile('pubspec.yaml')).thenReturn(pubspecFile); - when(projectDirectory.childFile('.packages')).thenReturn(packagesFile); - when(projectDirectory.childDirectory('example')).thenReturn(exampleDirectory); - when(exampleDirectory.childFile('pubspec.yaml')).thenReturn(examplePubspecFile); - when(packagesFile.path).thenReturn('/test/.packages'); - when(pubspecFile.path).thenReturn('/test/pubspec.yaml'); - when(examplePubspecFile.path).thenReturn('/test/example/pubspec.yaml'); - when(mockFileSystem.file('/test/.packages')).thenReturn(packagesFile); - when(packagesFile.readAsBytesSync()).thenReturn(utf8.encode(packages)); - - expect(await experimentalBuildEnabled, true); + testUsingContext('is enabled if environment variable is enabled', () async { + when(mockPlatform.environment).thenReturn({'FLUTTER_EXPERIMENTAL_BUILD': 'true'}); + expect(experimentalBuildEnabled, true); }, overrides: { - ProcessManager: () => mockProcessManager, Platform: () => mockPlatform, - FileSystem: () => mockFileSystem, }); - testUsingContext('is not enabled if environment variable is enabled and project ' - 'does not contain a dependency on flutter_build', () async { - final MockDirectory projectDirectory = MockDirectory(); - final MockDirectory exampleDirectory = MockDirectory(); - final MockFile packagesFile = MockFile(); - final MockFile pubspecFile = MockFile(); - final MockFile examplePubspecFile = MockFile(); - const String packages = r''' -build_runner:file:///Users/tester/.pub-cache/hosted/pub.dartlang.org/build_runner/lib/ -example:lib/ -'''; - when(mockPlatform.environment).thenReturn({'FLUTTER_EXPERIMENTAL_BUILD': 'true'}); - when(mockFileSystem.currentDirectory).thenReturn(projectDirectory); - when(mockFileSystem.isFileSync(any)).thenReturn(false); - when(projectDirectory.childFile('pubspec.yaml')).thenReturn(pubspecFile); - when(projectDirectory.childFile('.packages')).thenReturn(packagesFile); - when(projectDirectory.childDirectory('example')).thenReturn(exampleDirectory); - when(exampleDirectory.childFile('pubspec.yaml')).thenReturn(examplePubspecFile); - when(packagesFile.path).thenReturn('/test/.packages'); - when(pubspecFile.path).thenReturn('/test/pubspec.yaml'); - when(examplePubspecFile.path).thenReturn('/test/example/pubspec.yaml'); - when(mockFileSystem.file('/test/.packages')).thenReturn(packagesFile); - when(packagesFile.readAsBytesSync()).thenReturn(utf8.encode(packages)); - - expect(await experimentalBuildEnabled, false); - }, overrides: { - ProcessManager: () => mockProcessManager, - Platform: () => mockPlatform, - FileSystem: () => mockFileSystem, - }); - - testUsingContext('is not enabed if environment varable is not enabled', () async { when(mockPlatform.environment).thenReturn({}); - expect(await experimentalBuildEnabled, false); + expect(experimentalBuildEnabled, false); }, overrides: { - ProcessManager: () => mockProcessManager, Platform: () => mockPlatform, - FileSystem: () => mockFileSystem, }); }); } -class MockProcessManager extends Mock implements ProcessManager {} -class MockPlatform extends Mock implements Platform {} -class MockFileSystem extends Mock implements FileSystem {} -class MockDirectory extends Mock implements Directory {} -class MockFile extends Mock implements File {} +class MockPlatform extends Mock implements Platform {} \ No newline at end of file diff --git a/packages/flutter_tools/test/forbidden_imports_test.dart b/packages/flutter_tools/test/forbidden_imports_test.dart index 06b1fc6ff7a..3b3c3c2e239 100644 --- a/packages/flutter_tools/test/forbidden_imports_test.dart +++ b/packages/flutter_tools/test/forbidden_imports_test.dart @@ -10,8 +10,11 @@ void main() { final String flutterTools = fs.path.join(getFlutterRoot(), 'packages', 'flutter_tools'); test('no unauthorized imports of dart:io', () { - final String whitelistedPath = fs.path.join(flutterTools, 'lib', 'src', 'base', 'io.dart'); - bool _isNotWhitelisted(FileSystemEntity entity) => entity.path != whitelistedPath; + final List whitelistedPaths = [ + fs.path.join(flutterTools, 'lib', 'src', 'base', 'io.dart'), + fs.path.join(flutterTools, 'lib', 'src', 'build_runner', 'kernel_builder.dart'), + ]; + bool _isNotWhitelisted(FileSystemEntity entity) => whitelistedPaths.every((String path) => path != entity.path); for (String dirName in ['lib', 'bin']) { final Iterable files = fs.directory(fs.path.join(flutterTools, dirName)) @@ -32,14 +35,17 @@ void main() { }); test('no unauthorized imports of package:path', () { + final String whitelistedPath = fs.path.join(flutterTools, 'lib', 'src', 'build_runner', 'kernel_builder.dart'); for (String dirName in ['lib', 'bin', 'test']) { final Iterable files = fs.directory(fs.path.join(flutterTools, dirName)) .listSync(recursive: true) .where(_isDartFile) + .where((FileSystemEntity entity) => entity.path != whitelistedPath) .map(_asFile); for (File file in files) { for (String line in file.readAsLinesSync()) { - if (line.startsWith(RegExp(r'import.*package:path/path.dart'))) { + if (line.startsWith(RegExp(r'import.*package:path/path.dart')) && + !line.contains('ignore: package_path_import')) { final String relativePath = fs.path.relative(file.path, from:flutterTools); fail("$relativePath imports 'package:path/path.dart'; use 'fs.path' instead"); } @@ -49,8 +55,11 @@ void main() { }); test('no unauthorized imports of dart:convert', () { - final String whitelistedPath = fs.path.join(flutterTools, 'lib', 'src', 'convert.dart'); - bool _isNotWhitelisted(FileSystemEntity entity) => entity.path != whitelistedPath; + final List whitelistedPaths = [ + fs.path.join(flutterTools, 'lib', 'src', 'convert.dart'), + fs.path.join(flutterTools, 'lib', 'src', 'build_runner', 'kernel_builder.dart'), + ]; + bool _isNotWhitelisted(FileSystemEntity entity) => whitelistedPaths.every((String path) => path != entity.path); for (String dirName in ['lib']) { final Iterable files = fs.directory(fs.path.join(flutterTools, dirName))