diff --git a/packages/flutter_tools/lib/executable.dart b/packages/flutter_tools/lib/executable.dart index 2515f94425f..0979f9bf2a6 100644 --- a/packages/flutter_tools/lib/executable.dart +++ b/packages/flutter_tools/lib/executable.dart @@ -9,13 +9,7 @@ import 'src/base/context.dart'; import 'src/base/io.dart'; import 'src/base/logger.dart'; import 'src/base/template.dart'; -// The build_runner code generation is provided here to make it easier to -// avoid introducing the dependency into google3. Not all build* packages -// are synced internally. import 'src/base/terminal.dart'; -import 'src/build_runner/mustache_template.dart'; -import 'src/build_runner/resident_web_runner.dart'; -import 'src/build_runner/web_compilation_delegate.dart'; import 'src/commands/analyze.dart'; import 'src/commands/assemble.dart'; import 'src/commands/attach.dart'; @@ -51,6 +45,12 @@ import 'src/commands/upgrade.dart'; import 'src/commands/version.dart'; import 'src/features.dart'; import 'src/globals.dart' as globals; +// Files in `isolated` are intentionally excluded from google3 tooling. +import 'src/isolated/devtools_launcher.dart'; +import 'src/isolated/mustache_template.dart'; +import 'src/isolated/resident_web_runner.dart'; +import 'src/isolated/web_compilation_delegate.dart'; +import 'src/resident_runner.dart'; import 'src/runner/flutter_command.dart'; import 'src/web/compile.dart'; import 'src/web/web_runner.dart'; @@ -136,6 +136,9 @@ Future main(List args) async { WebRunnerFactory: () => DwdsWebRunnerFactory(), // The mustache dependency is different in google3 TemplateRenderer: () => const MustacheTemplateRenderer(), + // The devtools launcher is not supported in google3 because it depends on + // devtools source code. + DevtoolsLauncher: () => DevtoolsServerLauncher(logger: globals.logger), Logger: () { final LoggerFactory loggerFactory = LoggerFactory( outputPreferences: globals.outputPreferences, @@ -153,7 +156,6 @@ Future main(List args) async { }); } - /// An abstraction for instantiation of the correct logger type. /// /// Our logger class hierarchy and runtime requirements are overly complicated. diff --git a/packages/flutter_tools/lib/src/build_runner/devfs_web.dart b/packages/flutter_tools/lib/src/isolated/devfs_web.dart similarity index 100% rename from packages/flutter_tools/lib/src/build_runner/devfs_web.dart rename to packages/flutter_tools/lib/src/isolated/devfs_web.dart diff --git a/packages/flutter_tools/lib/src/isolated/devtools_launcher.dart b/packages/flutter_tools/lib/src/isolated/devtools_launcher.dart new file mode 100644 index 00000000000..d4b264604bb --- /dev/null +++ b/packages/flutter_tools/lib/src/isolated/devtools_launcher.dart @@ -0,0 +1,61 @@ +// 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 'package:devtools_server/devtools_server.dart' as devtools_server; +import 'package:meta/meta.dart'; + +import '../base/io.dart' as io; +import '../base/logger.dart'; +import '../resident_runner.dart'; + +/// An implementation of the devtools launcher that uses the server package. +/// +/// This is implemented in isolated to prevent the flutter_tool from needing +/// a devtools dep in google3. +class DevtoolsServerLauncher extends DevtoolsLauncher { + DevtoolsServerLauncher({ + @required Logger logger, + }) : _logger = logger; + + final Logger _logger; + + io.HttpServer _devtoolsServer; + + @override + Future launch(Uri observatoryAddress) async { + try { + await serve(); + await devtools_server.launchDevTools( + { + 'reuseWindows': true, + }, + observatoryAddress, + 'http://${_devtoolsServer.address.host}:${_devtoolsServer.port}', + false, // headless mode, + false, // machine mode + ); + } on Exception catch (e, st) { + _logger.printTrace('Failed to launch DevTools: $e\n$st'); + } + } + + @override + Future serve() async { + try { + _devtoolsServer ??= await devtools_server.serveDevTools( + enableStdinCommands: false, + ); + return DevToolsServerAddress(_devtoolsServer.address.host, _devtoolsServer.port); + } on Exception catch (e, st) { + _logger.printTrace('Failed to serve DevTools: $e\n$st'); + return null; + } + } + + @override + Future close() async { + await _devtoolsServer?.close(); + _devtoolsServer = null; + } +} diff --git a/packages/flutter_tools/lib/src/build_runner/mustache_template.dart b/packages/flutter_tools/lib/src/isolated/mustache_template.dart similarity index 100% rename from packages/flutter_tools/lib/src/build_runner/mustache_template.dart rename to packages/flutter_tools/lib/src/isolated/mustache_template.dart diff --git a/packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart b/packages/flutter_tools/lib/src/isolated/resident_web_runner.dart similarity index 100% rename from packages/flutter_tools/lib/src/build_runner/resident_web_runner.dart rename to packages/flutter_tools/lib/src/isolated/resident_web_runner.dart diff --git a/packages/flutter_tools/lib/src/build_runner/web_compilation_delegate.dart b/packages/flutter_tools/lib/src/isolated/web_compilation_delegate.dart similarity index 100% rename from packages/flutter_tools/lib/src/build_runner/web_compilation_delegate.dart rename to packages/flutter_tools/lib/src/isolated/web_compilation_delegate.dart diff --git a/packages/flutter_tools/lib/src/resident_runner.dart b/packages/flutter_tools/lib/src/resident_runner.dart index aa3c422f707..97d0c912c6c 100644 --- a/packages/flutter_tools/lib/src/resident_runner.dart +++ b/packages/flutter_tools/lib/src/resident_runner.dart @@ -4,7 +4,6 @@ import 'dart:async'; -import 'package:devtools_server/devtools_server.dart' as devtools_server; import 'package:meta/meta.dart'; import 'package:package_config/package_config.dart'; import 'package:vm_service/vm_service.dart' as vm_service; @@ -1703,43 +1702,15 @@ String nextPlatform(String currentPlatform, FeatureFlags featureFlags) { } } -class DevtoolsLauncher { - io.HttpServer _devtoolsServer; - Future launch(Uri observatoryAddress) async { - try { - await serve(); - await devtools_server.launchDevTools( - { - 'reuseWindows': true, - }, - observatoryAddress, - 'http://${_devtoolsServer.address.host}:${_devtoolsServer.port}', - false, // headless mode, - false, // machine mode - ); - } on Exception catch (e, st) { - globals.printTrace('Failed to launch DevTools: $e\n$st'); - } - } +/// A launcher for the devtools debugger and analysis tool. +abstract class DevtoolsLauncher { + Future launch(Uri observatoryAddress); - Future serve() async { - try { - _devtoolsServer ??= await devtools_server.serveDevTools( - enableStdinCommands: false, - ); - return DevToolsServerAddress(_devtoolsServer.address.host, _devtoolsServer.port); - } on Exception catch (e, st) { - globals.printTrace('Failed to serve DevTools: $e\n$st'); - return null; - } - } + Future serve(); - Future close() async { - await _devtoolsServer?.close(); - _devtoolsServer = null; - } + Future close(); - static DevtoolsLauncher get instance => context.get() ?? DevtoolsLauncher(); + static DevtoolsLauncher get instance => context.get(); } class DevToolsServerAddress { diff --git a/packages/flutter_tools/test/general.shard/resident_web_runner_cold_test.dart b/packages/flutter_tools/test/general.shard/resident_web_runner_cold_test.dart index c7dd2ff8806..cd7dd0dbdd6 100644 --- a/packages/flutter_tools/test/general.shard/resident_web_runner_cold_test.dart +++ b/packages/flutter_tools/test/general.shard/resident_web_runner_cold_test.dart @@ -10,8 +10,8 @@ import 'package:flutter_tools/src/base/logger.dart'; import 'package:flutter_tools/src/base/platform.dart'; import 'package:flutter_tools/src/base/terminal.dart'; import 'package:flutter_tools/src/build_info.dart'; -import 'package:flutter_tools/src/build_runner/devfs_web.dart'; -import 'package:flutter_tools/src/build_runner/resident_web_runner.dart'; +import 'package:flutter_tools/src/isolated/devfs_web.dart'; +import 'package:flutter_tools/src/isolated/resident_web_runner.dart'; import 'package:flutter_tools/src/build_system/build_system.dart'; import 'package:flutter_tools/src/dart/pub.dart'; import 'package:flutter_tools/src/device.dart'; diff --git a/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart b/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart index 05210091482..17873075c10 100644 --- a/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart +++ b/packages/flutter_tools/test/general.shard/resident_web_runner_test.dart @@ -15,8 +15,8 @@ import 'package:flutter_tools/src/base/logger.dart'; import 'package:flutter_tools/src/base/platform.dart'; import 'package:flutter_tools/src/base/terminal.dart'; import 'package:flutter_tools/src/build_info.dart'; -import 'package:flutter_tools/src/build_runner/devfs_web.dart'; -import 'package:flutter_tools/src/build_runner/resident_web_runner.dart'; +import 'package:flutter_tools/src/isolated/devfs_web.dart'; +import 'package:flutter_tools/src/isolated/resident_web_runner.dart'; import 'package:flutter_tools/src/compile.dart'; import 'package:flutter_tools/src/dart/pub.dart'; import 'package:flutter_tools/src/devfs.dart'; diff --git a/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart b/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart index 0f9cbca0725..a68070a810a 100644 --- a/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart +++ b/packages/flutter_tools/test/general.shard/web/devfs_web_test.dart @@ -10,7 +10,7 @@ import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/io.dart'; import 'package:flutter_tools/src/base/platform.dart'; import 'package:flutter_tools/src/build_info.dart'; -import 'package:flutter_tools/src/build_runner/devfs_web.dart'; +import 'package:flutter_tools/src/isolated/devfs_web.dart'; import 'package:flutter_tools/src/compile.dart'; import 'package:flutter_tools/src/convert.dart'; import 'package:flutter_tools/src/globals.dart' as globals; diff --git a/packages/flutter_tools/test/general.shard/web/web_asset_server_test.dart b/packages/flutter_tools/test/general.shard/web/web_asset_server_test.dart index e43f4018e3c..7994c311542 100644 --- a/packages/flutter_tools/test/general.shard/web/web_asset_server_test.dart +++ b/packages/flutter_tools/test/general.shard/web/web_asset_server_test.dart @@ -6,7 +6,7 @@ import 'package:file/memory.dart'; import 'package:flutter_tools/src/base/file_system.dart'; import 'package:flutter_tools/src/base/io.dart'; import 'package:flutter_tools/src/base/platform.dart'; -import 'package:flutter_tools/src/build_runner/devfs_web.dart'; +import 'package:flutter_tools/src/isolated/devfs_web.dart'; import 'package:shelf/shelf.dart'; import '../../src/common.dart'; diff --git a/packages/flutter_tools/test/general.shard/web/web_expression_compiler_test.dart b/packages/flutter_tools/test/general.shard/web/web_expression_compiler_test.dart index 4869caab17a..cbb7295ea6e 100644 --- a/packages/flutter_tools/test/general.shard/web/web_expression_compiler_test.dart +++ b/packages/flutter_tools/test/general.shard/web/web_expression_compiler_test.dart @@ -4,7 +4,7 @@ import 'package:dwds/dwds.dart'; import 'package:flutter_tools/src/compile.dart'; -import 'package:flutter_tools/src/build_runner/devfs_web.dart'; +import 'package:flutter_tools/src/isolated/devfs_web.dart'; import 'package:matcher/matcher.dart'; import 'package:mockito/mockito.dart'; import 'package:flutter_tools/src/globals.dart' as globals; diff --git a/packages/flutter_tools/test/integration.shard/forbidden_imports_test.dart b/packages/flutter_tools/test/integration.shard/forbidden_imports_test.dart index 6aaf493c7a2..c43cd203e55 100644 --- a/packages/flutter_tools/test/integration.shard/forbidden_imports_test.dart +++ b/packages/flutter_tools/test/integration.shard/forbidden_imports_test.dart @@ -86,7 +86,6 @@ void main() { test('no unauthorized imports of test_api', () { final List allowedPaths = [ - fileSystem.path.join(flutterTools, 'lib', 'src', 'build_runner', 'build_script.dart'), fileSystem.path.join(flutterTools, 'lib', 'src', 'test', 'flutter_platform.dart'), fileSystem.path.join(flutterTools, 'lib', 'src', 'test', 'flutter_web_platform.dart'), fileSystem.path.join(flutterTools, 'lib', 'src', 'test', 'test_wrapper.dart'), @@ -113,7 +112,7 @@ void main() { test('no unauthorized imports of package:path', () { final List allowedPath = [ - fileSystem.path.join(flutterTools, 'lib', 'src', 'build_runner', 'web_compilation_delegate.dart'), + fileSystem.path.join(flutterTools, 'lib', 'src', 'isolated', 'web_compilation_delegate.dart'), fileSystem.path.join(flutterTools, 'test', 'general.shard', 'platform_plugins_test.dart'), ]; for (final String dirName in ['lib', 'bin', 'test']) { @@ -181,10 +180,10 @@ void main() { } }); - test('no unauthorized imports of build_runner or dwds', () { + test('no unauthorized imports of build_runner/dwds/devtools', () { final List allowedPaths = [ - fileSystem.path.join(flutterTools, 'test', 'src', 'build_runner'), - fileSystem.path.join(flutterTools, 'lib', 'src', 'build_runner'), + fileSystem.path.join(flutterTools, 'test', 'src', 'isolated'), + fileSystem.path.join(flutterTools, 'lib', 'src', 'isolated'), fileSystem.path.join(flutterTools, 'lib', 'executable.dart'), fileSystem.path.join(flutterTools, 'lib', 'devfs_web.dart'), fileSystem.path.join(flutterTools, 'lib', 'resident_web_runner.dart'), @@ -203,9 +202,10 @@ void main() { line.startsWith(RegExp(r'import.*package:build_runner/build_runner.dart')) || line.startsWith(RegExp(r'import.*package:build_config/build_config.dart')) || line.startsWith(RegExp(r'import.*dwds:*.dart')) || + line.startsWith(RegExp(r'import.*devtools_server:*.dart')) || line.startsWith(RegExp(r'import.*build_runner/.*.dart'))) { final String relativePath = fileSystem.path.relative(file.path, from:flutterTools); - fail('$relativePath imports a build_runner package'); + fail('$relativePath imports a build_runner/dwds/devtools package'); } } } diff --git a/packages/flutter_tools/test/src/context.dart b/packages/flutter_tools/test/src/context.dart index f24479614ba..97c4633aa86 100644 --- a/packages/flutter_tools/test/src/context.dart +++ b/packages/flutter_tools/test/src/context.dart @@ -17,7 +17,7 @@ import 'package:flutter_tools/src/base/signals.dart'; import 'package:flutter_tools/src/base/template.dart'; import 'package:flutter_tools/src/base/terminal.dart'; import 'package:flutter_tools/src/base/time.dart'; -import 'package:flutter_tools/src/build_runner/mustache_template.dart'; +import 'package:flutter_tools/src/isolated/mustache_template.dart'; import 'package:flutter_tools/src/cache.dart'; import 'package:flutter_tools/src/context_runner.dart'; import 'package:flutter_tools/src/dart/pub.dart';