mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
[flutter_tools] do not require a dependency on devtools server (#66842)
Re-arrange the implementation of the devtools launcher so that google3 is not required to depend on any devtools packages. Also renames the build_runner folders to isolated to better clarify their intention.
This commit is contained in:
parent
e8fbb43aac
commit
e819f292b3
@ -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<void> main(List<String> 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<void> main(List<String> args) async {
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/// An abstraction for instantiation of the correct logger type.
|
||||
///
|
||||
/// Our logger class hierarchy and runtime requirements are overly complicated.
|
||||
|
||||
@ -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<void> launch(Uri observatoryAddress) async {
|
||||
try {
|
||||
await serve();
|
||||
await devtools_server.launchDevTools(
|
||||
<String, dynamic>{
|
||||
'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<DevToolsServerAddress> 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<void> close() async {
|
||||
await _devtoolsServer?.close();
|
||||
_devtoolsServer = null;
|
||||
}
|
||||
}
|
||||
@ -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<void> launch(Uri observatoryAddress) async {
|
||||
try {
|
||||
await serve();
|
||||
await devtools_server.launchDevTools(
|
||||
<String, dynamic>{
|
||||
'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<void> launch(Uri observatoryAddress);
|
||||
|
||||
Future<DevToolsServerAddress> 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<DevToolsServerAddress> serve();
|
||||
|
||||
Future<void> close() async {
|
||||
await _devtoolsServer?.close();
|
||||
_devtoolsServer = null;
|
||||
}
|
||||
Future<void> close();
|
||||
|
||||
static DevtoolsLauncher get instance => context.get<DevtoolsLauncher>() ?? DevtoolsLauncher();
|
||||
static DevtoolsLauncher get instance => context.get<DevtoolsLauncher>();
|
||||
}
|
||||
|
||||
class DevToolsServerAddress {
|
||||
|
||||
@ -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';
|
||||
|
||||
@ -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';
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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';
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -86,7 +86,6 @@ void main() {
|
||||
|
||||
test('no unauthorized imports of test_api', () {
|
||||
final List<String> allowedPaths = <String>[
|
||||
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<String> allowedPath = <String>[
|
||||
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 <String>['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<String> allowedPaths = <String>[
|
||||
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');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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';
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user