Skip to content

Commit 8f834cf

Browse files
authored
Read dart_plugin_registrant path from FlutterProject to support non-standard path. (#107617)
1 parent cdf4a6a commit 8f834cf

File tree

11 files changed

+376
-212
lines changed

11 files changed

+376
-212
lines changed

packages/flutter_tools/lib/src/compile.dart

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ class KernelCompiler {
328328
dartPluginRegistrant.path,
329329
'--source',
330330
'package:flutter/src/dart_plugin_registrant.dart',
331-
'-Dflutter.dart_plugin_registrant=${dartPluginRegistrant.uri}',
331+
'-Dflutter.dart_plugin_registrant=${toMultiRootPath(dartPluginRegistrant.uri, _fileSystemScheme, _fileSystemRoots, _fileSystem.path.separator == r'\')}',
332332
],
333333
// See: https://github.com/flutter/flutter/issues/103994
334334
'--verbosity=error',
@@ -375,15 +375,15 @@ class _RecompileRequest extends _CompilationRequest {
375375
this.outputPath,
376376
this.packageConfig,
377377
this.suppressErrors,
378-
{this.additionalSource}
378+
{this.additionalSourceUri}
379379
);
380380

381381
Uri mainUri;
382382
List<Uri>? invalidatedFiles;
383383
String outputPath;
384384
PackageConfig packageConfig;
385385
bool suppressErrors;
386-
final String? additionalSource;
386+
final Uri? additionalSourceUri;
387387

388388
@override
389389
Future<CompilerOutput?> _run(DefaultResidentCompiler compiler) async =>
@@ -499,6 +499,7 @@ abstract class ResidentCompiler {
499499
String? projectRootPath,
500500
bool suppressErrors = false,
501501
bool checkDartPluginRegistry = false,
502+
File? dartPluginRegistrant,
502503
});
503504

504505
Future<CompilerOutput?> compileExpression(
@@ -642,27 +643,18 @@ class DefaultResidentCompiler implements ResidentCompiler {
642643
required PackageConfig packageConfig,
643644
bool suppressErrors = false,
644645
bool checkDartPluginRegistry = false,
646+
File? dartPluginRegistrant,
645647
String? projectRootPath,
646648
FileSystem? fs,
647649
}) async {
648650
assert(outputPath != null);
649651
if (!_controller.hasListener) {
650652
_controller.stream.listen(_handleCompilationRequest);
651653
}
652-
String? additionalSource;
654+
Uri? additionalSourceUri;
653655
// `dart_plugin_registrant.dart` contains the Dart plugin registry.
654-
if (checkDartPluginRegistry && projectRootPath != null && fs != null) {
655-
final File dartPluginRegistrantDart = fs.file(
656-
fs.path.join(
657-
projectRootPath,
658-
'.dart_tool',
659-
'flutter_build',
660-
'dart_plugin_registrant.dart',
661-
),
662-
);
663-
if (dartPluginRegistrantDart != null && dartPluginRegistrantDart.existsSync()) {
664-
additionalSource = dartPluginRegistrantDart.path;
665-
}
656+
if (checkDartPluginRegistry && dartPluginRegistrant != null && dartPluginRegistrant.existsSync()) {
657+
additionalSourceUri = dartPluginRegistrant.uri;
666658
}
667659
final Completer<CompilerOutput?> completer = Completer<CompilerOutput?>();
668660
_controller.add(_RecompileRequest(
@@ -672,7 +664,7 @@ class DefaultResidentCompiler implements ResidentCompiler {
672664
outputPath,
673665
packageConfig,
674666
suppressErrors,
675-
additionalSource: additionalSource,
667+
additionalSourceUri: additionalSourceUri,
676668
));
677669
return completer.future;
678670
}
@@ -685,9 +677,15 @@ class DefaultResidentCompiler implements ResidentCompiler {
685677
final String mainUri = request.packageConfig.toPackageUri(request.mainUri)?.toString() ??
686678
toMultiRootPath(request.mainUri, fileSystemScheme, fileSystemRoots, _platform.isWindows);
687679

680+
String? additionalSourceUri;
681+
if (request.additionalSourceUri != null) {
682+
additionalSourceUri = request.packageConfig.toPackageUri(request.additionalSourceUri!)?.toString() ??
683+
toMultiRootPath(request.additionalSourceUri!, fileSystemScheme, fileSystemRoots, _platform.isWindows);
684+
}
685+
688686
final Process? server = _server;
689687
if (server == null) {
690-
return _compile(mainUri, request.outputPath, additionalSource: request.additionalSource);
688+
return _compile(mainUri, request.outputPath, additionalSourceUri: additionalSourceUri);
691689
}
692690
final String inputKey = Uuid().generateV4();
693691

@@ -733,7 +731,7 @@ class DefaultResidentCompiler implements ResidentCompiler {
733731
Future<CompilerOutput?> _compile(
734732
String scriptUri,
735733
String? outputPath,
736-
{String? additionalSource}
734+
{String? additionalSourceUri}
737735
) async {
738736
final String frontendServer = _artifacts.getArtifactPath(
739737
Artifact.frontendServerSnapshotForEngineDartSdk
@@ -786,12 +784,12 @@ class DefaultResidentCompiler implements ResidentCompiler {
786784
initializeFromDill!,
787785
],
788786
if (assumeInitializeFromDillUpToDate) '--assume-initialize-from-dill-up-to-date',
789-
if (additionalSource != null) ...<String>[
787+
if (additionalSourceUri != null) ...<String>[
790788
'--source',
791-
additionalSource,
789+
additionalSourceUri,
792790
'--source',
793791
'package:flutter/src/dart_plugin_registrant.dart',
794-
'-Dflutter.dart_plugin_registrant=${Uri.file(additionalSource)}',
792+
'-Dflutter.dart_plugin_registrant=$additionalSourceUri',
795793
],
796794
if (platformDill != null) ...<String>[
797795
'--platform',

packages/flutter_tools/lib/src/devfs.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -581,6 +581,7 @@ class DevFS {
581581
bool bundleFirstUpload = false,
582582
bool fullRestart = false,
583583
String? projectRootPath,
584+
File? dartPluginRegistrant,
584585
}) async {
585586
assert(trackWidgetCreation != null);
586587
assert(generator != null);
@@ -610,6 +611,7 @@ class DevFS {
610611
projectRootPath: projectRootPath,
611612
packageConfig: packageConfig,
612613
checkDartPluginRegistry: true, // The entry point is assumed not to have changed.
614+
dartPluginRegistrant: dartPluginRegistrant,
613615
).then((CompilerOutput? result) {
614616
compileTimer.stop();
615617
return result;

packages/flutter_tools/lib/src/isolated/devfs_web.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -799,6 +799,7 @@ class WebDevFS implements DevFS {
799799
bool bundleFirstUpload = false,
800800
bool fullRestart = false,
801801
String? projectRootPath,
802+
File? dartPluginRegistrant,
802803
}) async {
803804
assert(trackWidgetCreation != null);
804805
assert(generator != null);
@@ -866,6 +867,7 @@ class WebDevFS implements DevFS {
866867
packageConfig: packageConfig,
867868
projectRootPath: projectRootPath,
868869
fs: globals.fs,
870+
dartPluginRegistrant: dartPluginRegistrant,
869871
);
870872
if (compilerOutput == null || compilerOutput.errorCount > 0) {
871873
return UpdateFSReport();

packages/flutter_tools/lib/src/resident_runner.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -563,6 +563,7 @@ class FlutterDevice {
563563
invalidatedFiles: invalidatedFiles,
564564
packageConfig: packageConfig,
565565
devFSWriter: devFSWriter,
566+
dartPluginRegistrant: FlutterProject.current().dartPluginRegistrant,
566567
);
567568
} on DevFSException {
568569
devFSStatus.cancel();

packages/flutter_tools/lib/src/run_hot.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,7 @@ class HotRunner extends ResidentRunner {
373373
// should only be displayed once.
374374
suppressErrors: applicationBinary == null,
375375
checkDartPluginRegistry: true,
376+
dartPluginRegistrant: FlutterProject.current().dartPluginRegistrant,
376377
outputPath: dillOutputPath,
377378
packageConfig: debuggingOptions.buildInfo.packageConfig,
378379
projectRootPath: FlutterProject.current().directory.absolute.path,

packages/flutter_tools/test/general.shard/compile_incremental_test.dart

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import 'dart:async';
66

7+
import 'package:file/file.dart';
78
import 'package:file/memory.dart';
89
import 'package:flutter_tools/src/artifacts.dart';
910
import 'package:flutter_tools/src/base/async_guard.dart';
@@ -394,6 +395,43 @@ void main() {
394395
'line2\nline3\n'
395396
));
396397
});
398+
399+
testWithoutContext('incremental compile with dartPluginRegistrant', () async {
400+
fakeProcessManager.addCommand(FakeCommand(
401+
command: const <String>[
402+
...frontendServerCommand,
403+
'--filesystem-root',
404+
'/foo/bar/fizz',
405+
'--filesystem-scheme',
406+
'scheme',
407+
'--source',
408+
'some/dir/plugin_registrant.dart',
409+
'--source',
410+
'package:flutter/src/dart_plugin_registrant.dart',
411+
'-Dflutter.dart_plugin_registrant=some/dir/plugin_registrant.dart',
412+
'--verbosity=error',
413+
],
414+
stdout: 'result abc\nline1\nline2\nabc\nabc /path/to/main.dart.dill 0',
415+
stdin: frontendServerStdIn,
416+
));
417+
418+
final MemoryFileSystem fs = MemoryFileSystem();
419+
final File dartPluginRegistrant = fs.file('some/dir/plugin_registrant.dart')..createSync(recursive: true);
420+
final CompilerOutput? output = await generatorWithScheme.recompile(
421+
Uri.parse('file:///foo/bar/fizz/main.dart'),
422+
null /* invalidatedFiles */,
423+
outputPath: '/build/',
424+
packageConfig: PackageConfig.empty,
425+
fs: fs,
426+
projectRootPath: '',
427+
checkDartPluginRegistry: true,
428+
dartPluginRegistrant: dartPluginRegistrant,
429+
);
430+
expect(frontendServerStdIn.getAndClear(), 'compile scheme:///main.dart\n');
431+
expect(testLogger.errorText, equals('line1\nline2\n'));
432+
expect(output?.outputFilename, equals('/path/to/main.dart.dill'));
433+
expect(fakeProcessManager, hasNoRemainingExpectations);
434+
});
397435
}
398436

399437
Future<void> _recompile(

packages/flutter_tools/test/general.shard/devfs_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -581,7 +581,7 @@ class FakeResidentCompiler extends Fake implements ResidentCompiler {
581581
Future<CompilerOutput> Function(Uri mainUri, List<Uri>? invalidatedFiles)? onRecompile;
582582

583583
@override
584-
Future<CompilerOutput> recompile(Uri mainUri, List<Uri>? invalidatedFiles, {String? outputPath, PackageConfig? packageConfig, String? projectRootPath, FileSystem? fs, bool suppressErrors = false, bool checkDartPluginRegistry = false}) {
584+
Future<CompilerOutput> recompile(Uri mainUri, List<Uri>? invalidatedFiles, {String? outputPath, PackageConfig? packageConfig, String? projectRootPath, FileSystem? fs, bool suppressErrors = false, bool checkDartPluginRegistry = false, File? dartPluginRegistrant}) {
585585
return onRecompile?.call(mainUri, invalidatedFiles)
586586
?? Future<CompilerOutput>.value(const CompilerOutput('', 1, <Uri>[]));
587587
}

packages/flutter_tools/test/general.shard/resident_runner_test.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2464,6 +2464,7 @@ class FakeResidentCompiler extends Fake implements ResidentCompiler {
24642464
@required FileSystem fs,
24652465
bool suppressErrors = false,
24662466
bool checkDartPluginRegistry = false,
2467+
File dartPluginRegistrant,
24672468
}) async {
24682469
didSuppressErrors = suppressErrors;
24692470
return nextOutput ?? const CompilerOutput('foo.dill', 0, <Uri>[]);
@@ -2623,6 +2624,7 @@ class FakeDevFS extends Fake implements DevFS {
26232624
bool bundleFirstUpload = false,
26242625
bool fullRestart = false,
26252626
String projectRootPath,
2627+
File dartPluginRegistrant,
26262628
}) async {
26272629
return nextUpdateReport;
26282630
}

0 commit comments

Comments
 (0)