Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
Front-End
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abdullh.alsoleman
Front-End
Commits
b7d48062
Unverified
Commit
b7d48062
authored
Feb 19, 2021
by
Emmanuel Garcia
Committed by
GitHub
Feb 19, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implement dartPluginClass support for plugins (#74469)
parent
d9fca66a
Changes
21
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
1466 additions
and
21 deletions
+1466
-21
dart_plugin_registry_test.dart
dev/devicelab/bin/tasks/dart_plugin_registry_test.dart
+10
-0
dart_plugin_registry_tests.dart
dev/devicelab/lib/tasks/dart_plugin_registry_tests.dart
+181
-0
build_system.dart
...ages/flutter_tools/lib/src/build_system/build_system.dart
+10
-0
common.dart
...es/flutter_tools/lib/src/build_system/targets/common.dart
+2
-0
bundle.dart
packages/flutter_tools/lib/src/bundle.dart
+1
-0
assemble.dart
packages/flutter_tools/lib/src/commands/assemble.dart
+2
-1
build_ios_framework.dart
...s/flutter_tools/lib/src/commands/build_ios_framework.dart
+1
-0
packages.dart
packages/flutter_tools/lib/src/commands/packages.dart
+2
-0
compile.dart
packages/flutter_tools/lib/src/compile.dart
+21
-2
devfs.dart
packages/flutter_tools/lib/src/devfs.dart
+14
-0
flutter_manifest.dart
packages/flutter_tools/lib/src/flutter_manifest.dart
+7
-0
platform_plugins.dart
packages/flutter_tools/lib/src/platform_plugins.dart
+29
-8
plugins.dart
packages/flutter_tools/lib/src/plugins.dart
+344
-9
resident_runner.dart
packages/flutter_tools/lib/src/resident_runner.dart
+1
-0
run_hot.dart
packages/flutter_tools/lib/src/run_hot.dart
+11
-1
flutter_command.dart
packages/flutter_tools/lib/src/runner/flutter_command.dart
+1
-0
compile.dart
packages/flutter_tools/lib/src/web/compile.dart
+2
-0
deferred_components_setup_validator_test.dart
...ard/android/deferred_components_setup_validator_test.dart
+1
-0
plugin_parsing_test.dart
...flutter_tools/test/general.shard/plugin_parsing_test.dart
+33
-0
plugins_test.dart
packages/flutter_tools/test/general.shard/plugins_test.dart
+772
-0
project_test.dart
packages/flutter_tools/test/general.shard/project_test.dart
+21
-0
No files found.
dev/devicelab/bin/tasks/dart_plugin_registry_test.dart
0 → 100644
View file @
b7d48062
// 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:flutter_devicelab/tasks/dart_plugin_registry_tests.dart'
;
import
'package:flutter_devicelab/framework/framework.dart'
;
Future
<
void
>
main
()
async
{
await
task
(
dartPluginRegistryTest
());
}
dev/devicelab/lib/tasks/dart_plugin_registry_tests.dart
0 → 100644
View file @
b7d48062
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import
'dart:async'
;
import
'dart:convert'
;
import
'dart:io'
;
import
'package:path/path.dart'
as
path
;
import
'package:flutter_devicelab/framework/framework.dart'
;
import
'package:flutter_devicelab/framework/task_result.dart'
;
import
'package:flutter_devicelab/framework/utils.dart'
;
TaskFunction
dartPluginRegistryTest
(
{
String
deviceIdOverride
,
Map
<
String
,
String
>
environment
,
})
{
final
Directory
tempDir
=
Directory
.
systemTemp
.
createTempSync
(
'flutter_devicelab_dart_plugin_test.'
);
return
()
async
{
try
{
section
(
'Create implementation plugin'
);
await
inDirectory
(
tempDir
,
()
async
{
await
flutter
(
'create'
,
options:
<
String
>[
'--template=plugin'
,
'--org'
,
'io.flutter.devicelab'
,
'--platforms'
,
'macos'
,
'plugin_platform_implementation'
,
],
environment:
environment
,
);
});
final
File
pluginMain
=
File
(
path
.
join
(
tempDir
.
absolute
.
path
,
'plugin_platform_implementation'
,
'lib'
,
'plugin_platform_implementation.dart'
,
));
if
(!
pluginMain
.
existsSync
())
{
return
TaskResult
.
failure
(
'
${pluginMain.path}
does not exist'
);
}
// Patch plugin main dart file.
await
pluginMain
.
writeAsString
(
'''
class PluginPlatformInterfaceMacOS {
static void registerWith() {
print('
PluginPlatformInterfaceMacOS
.
registerWith
()
was
called
');
}
}
'''
,
flush:
true
);
// Patch plugin main pubspec file.
final
File
pluginImplPubspec
=
File
(
path
.
join
(
tempDir
.
absolute
.
path
,
'plugin_platform_implementation'
,
'pubspec.yaml'
,
));
String
pluginImplPubspecContent
=
await
pluginImplPubspec
.
readAsString
();
pluginImplPubspecContent
=
pluginImplPubspecContent
.
replaceFirst
(
' pluginClass: PluginPlatformImplementationPlugin'
,
' pluginClass: PluginPlatformImplementationPlugin
\n
'
' dartPluginClass: PluginPlatformInterfaceMacOS
\n
'
,
);
pluginImplPubspecContent
=
pluginImplPubspecContent
.
replaceFirst
(
' platforms:
\n
'
,
' implements: plugin_platform_interface
\n
'
' platforms:
\n
'
);
await
pluginImplPubspec
.
writeAsString
(
pluginImplPubspecContent
,
flush:
true
);
section
(
'Create interface plugin'
);
await
inDirectory
(
tempDir
,
()
async
{
await
flutter
(
'create'
,
options:
<
String
>[
'--template=plugin'
,
'--org'
,
'io.flutter.devicelab'
,
'--platforms'
,
'macos'
,
'plugin_platform_interface'
,
],
environment:
environment
,
);
});
final
File
pluginInterfacePubspec
=
File
(
path
.
join
(
tempDir
.
absolute
.
path
,
'plugin_platform_interface'
,
'pubspec.yaml'
,
));
String
pluginInterfacePubspecContent
=
await
pluginInterfacePubspec
.
readAsString
();
pluginInterfacePubspecContent
=
pluginInterfacePubspecContent
.
replaceFirst
(
' pluginClass: PluginPlatformInterfacePlugin'
,
' default_package: plugin_platform_implementation
\n
'
);
pluginInterfacePubspecContent
=
pluginInterfacePubspecContent
.
replaceFirst
(
'dependencies:'
,
'dependencies:
\n
'
' plugin_platform_implementation:
\n
'
' path: ../plugin_platform_implementation
\n
'
);
await
pluginInterfacePubspec
.
writeAsString
(
pluginInterfacePubspecContent
,
flush:
true
);
section
(
'Create app'
);
await
inDirectory
(
tempDir
,
()
async
{
await
flutter
(
'create'
,
options:
<
String
>[
'--template=app'
,
'--org'
,
'io.flutter.devicelab'
,
'--platforms'
,
'macos'
,
'app'
,
],
environment:
environment
,
);
});
final
File
appPubspec
=
File
(
path
.
join
(
tempDir
.
absolute
.
path
,
'app'
,
'pubspec.yaml'
,
));
String
appPubspecContent
=
await
appPubspec
.
readAsString
();
appPubspecContent
=
appPubspecContent
.
replaceFirst
(
'dependencies:'
,
'dependencies:
\n
'
' plugin_platform_interface:
\n
'
' path: ../plugin_platform_interface
\n
'
);
await
appPubspec
.
writeAsString
(
appPubspecContent
,
flush:
true
);
section
(
'Flutter run for macos'
);
await
inDirectory
(
path
.
join
(
tempDir
.
path
,
'app'
),
()
async
{
final
Process
run
=
await
startProcess
(
path
.
join
(
flutterDirectory
.
path
,
'bin'
,
'flutter'
),
flutterCommandArgs
(
'run'
,
<
String
>[
'-d'
,
'macos'
,
'-v'
]),
environment:
null
,
);
Completer
<
void
>
registryExecutedCompleter
=
Completer
<
void
>();
final
StreamSubscription
<
void
>
subscription
=
run
.
stdout
.
transform
<
String
>(
utf8
.
decoder
)
.
transform
<
String
>(
const
LineSplitter
())
.
listen
((
String
line
)
{
if
(
line
.
contains
(
'PluginPlatformInterfaceMacOS.registerWith() was called'
))
{
registryExecutedCompleter
.
complete
();
}
print
(
'stdout:
$line
'
);
});
section
(
'Wait for registry execution'
);
await
registryExecutedCompleter
.
future
.
timeout
(
const
Duration
(
minutes:
1
));
// Hot restart.
run
.
stdin
.
write
(
'R'
);
registryExecutedCompleter
=
Completer
<
void
>();
section
(
'Wait for registry execution after hot restart'
);
await
registryExecutedCompleter
.
future
.
timeout
(
const
Duration
(
minutes:
1
));
subscription
.
cancel
();
run
.
kill
();
});
return
TaskResult
.
success
(
null
);
}
finally
{
rmTree
(
tempDir
);
}
};
}
packages/flutter_tools/lib/src/build_system/build_system.dart
View file @
b7d48062
...
...
@@ -308,6 +308,7 @@ class Environment {
@required
Artifacts
artifacts
,
@required
ProcessManager
processManager
,
@required
String
engineVersion
,
@required
bool
generateDartPluginRegistry
,
Directory
buildDir
,
Map
<
String
,
String
>
defines
=
const
<
String
,
String
>{},
Map
<
String
,
String
>
inputs
=
const
<
String
,
String
>{},
...
...
@@ -347,6 +348,7 @@ class Environment {
processManager:
processManager
,
engineVersion:
engineVersion
,
inputs:
inputs
,
generateDartPluginRegistry:
generateDartPluginRegistry
,
);
}
...
...
@@ -363,6 +365,7 @@ class Environment {
Map
<
String
,
String
>
defines
=
const
<
String
,
String
>{},
Map
<
String
,
String
>
inputs
=
const
<
String
,
String
>{},
String
engineVersion
,
bool
generateDartPluginRegistry
=
false
,
@required
FileSystem
fileSystem
,
@required
Logger
logger
,
@required
Artifacts
artifacts
,
...
...
@@ -381,6 +384,7 @@ class Environment {
artifacts:
artifacts
,
processManager:
processManager
,
engineVersion:
engineVersion
,
generateDartPluginRegistry:
generateDartPluginRegistry
,
);
}
...
...
@@ -398,6 +402,7 @@ class Environment {
@required
this
.
artifacts
,
@required
this
.
engineVersion
,
@required
this
.
inputs
,
@required
this
.
generateDartPluginRegistry
,
});
/// The [Source] value which is substituted with the path to [projectDir].
...
...
@@ -475,6 +480,11 @@ class Environment {
/// The version of the current engine, or `null` if built with a local engine.
final
String
engineVersion
;
/// Whether to generate the Dart plugin registry.
/// When [true], the main entrypoint is wrapped and the wrapper becomes
/// the new entrypoint.
final
bool
generateDartPluginRegistry
;
}
/// The result information from the build system.
...
...
packages/flutter_tools/lib/src/build_system/targets/common.dart
View file @
b7d48062
...
...
@@ -279,6 +279,8 @@ class KernelSnapshot extends Target {
fileSystemScheme:
fileSystemScheme
,
dartDefines:
decodeDartDefines
(
environment
.
defines
,
kDartDefines
),
packageConfig:
packageConfig
,
buildDir:
environment
.
buildDir
,
generateDartPluginRegistry:
environment
.
generateDartPluginRegistry
,
);
if
(
output
==
null
||
output
.
errorCount
!=
0
)
{
throw
Exception
();
...
...
packages/flutter_tools/lib/src/bundle.dart
View file @
b7d48062
...
...
@@ -160,6 +160,7 @@ Future<void> buildWithAssemble({
fileSystem:
globals
.
fs
,
logger:
globals
.
logger
,
processManager:
globals
.
processManager
,
generateDartPluginRegistry:
true
,
);
final
Target
target
=
buildMode
==
BuildMode
.
debug
?
const
CopyFlutterBundle
()
...
...
packages/flutter_tools/lib/src/commands/assemble.dart
View file @
b7d48062
...
...
@@ -195,7 +195,8 @@ class AssembleCommand extends FlutterCommand {
processManager:
globals
.
processManager
,
engineVersion:
globals
.
artifacts
.
isLocalEngine
?
null
:
globals
.
flutterVersion
.
engineRevision
:
globals
.
flutterVersion
.
engineRevision
,
generateDartPluginRegistry:
true
,
);
return
result
;
}
...
...
packages/flutter_tools/lib/src/commands/build_ios_framework.dart
View file @
b7d48062
...
...
@@ -385,6 +385,7 @@ end
engineVersion: globals.artifacts.isLocalEngine
? null
: globals.flutterVersion.engineRevision,
generateDartPluginRegistry: true,
);
Target target;
// Always build debug for simulator.
...
...
packages/flutter_tools/lib/src/commands/packages.dart
View file @
b7d48062
...
...
@@ -119,6 +119,7 @@ class PackagesGetCommand extends FlutterCommand {
outputDir:
globals
.
fs
.
directory
(
getBuildDirectory
()),
processManager:
globals
.
processManager
,
projectDir:
flutterProject
.
directory
,
generateDartPluginRegistry:
true
,
);
await
generateLocalizationsSyntheticPackage
(
...
...
@@ -324,6 +325,7 @@ class PackagesInteractiveGetCommand extends FlutterCommand {
outputDir:
globals
.
fs
.
directory
(
getBuildDirectory
()),
processManager:
globals
.
processManager
,
projectDir:
flutterProject
.
directory
,
generateDartPluginRegistry:
true
,
);
await
generateLocalizationsSyntheticPackage
(
...
...
packages/flutter_tools/lib/src/compile.dart
View file @
b7d48062
...
...
@@ -19,6 +19,8 @@ import 'base/logger.dart';
import
'base/platform.dart'
;
import
'build_info.dart'
;
import
'convert.dart'
;
import
'plugins.dart'
;
import
'project.dart'
;
/// The target model describes the set of core libraries that are available within
/// the SDK.
...
...
@@ -209,6 +211,8 @@ class KernelCompiler {
String
fileSystemScheme
,
String
initializeFromDill
,
String
platformDill
,
Directory
buildDir
,
bool
generateDartPluginRegistry
=
false
,
@required
String
packagesPath
,
@required
BuildMode
buildMode
,
@required
bool
trackWidgetCreation
,
...
...
@@ -227,7 +231,8 @@ class KernelCompiler {
throwToolExit
(
'Unable to find Dart binary at
$engineDartPath
'
);
}
String
mainUri
;
final
Uri
mainFileUri
=
_fileSystem
.
file
(
mainPath
).
uri
;
final
File
mainFile
=
_fileSystem
.
file
(
mainPath
);
final
Uri
mainFileUri
=
mainFile
.
uri
;
if
(
packagesPath
!=
null
)
{
mainUri
=
packageConfig
.
toPackageUri
(
mainFileUri
)?.
toString
();
}
...
...
@@ -235,6 +240,21 @@ class KernelCompiler {
if
(
outputFilePath
!=
null
&&
!
_fileSystem
.
isFileSync
(
outputFilePath
))
{
_fileSystem
.
file
(
outputFilePath
).
createSync
(
recursive:
true
);
}
if
(
buildDir
!=
null
&&
generateDartPluginRegistry
)
{
// `generated_main.dart` is under `.dart_tools/flutter_build/`,
// so the resident compiler can find it.
final
File
newMainDart
=
buildDir
.
parent
.
childFile
(
'generated_main.dart'
);
if
(
await
generateMainDartWithPluginRegistrant
(
FlutterProject
.
current
(),
packageConfig
,
mainUri
,
newMainDart
,
mainFile
,
))
{
mainUri
=
newMainDart
.
path
;
}
}
final
List
<
String
>
command
=
<
String
>[
engineDartPath
,
'--disable-dart-dev'
,
...
...
@@ -579,7 +599,6 @@ class DefaultResidentCompiler implements ResidentCompiler {
if
(!
_controller
.
hasListener
)
{
_controller
.
stream
.
listen
(
_handleCompilationRequest
);
}
final
Completer
<
CompilerOutput
>
completer
=
Completer
<
CompilerOutput
>();
_controller
.
add
(
_RecompileRequest
(
completer
,
mainUri
,
invalidatedFiles
,
outputPath
,
packageConfig
,
suppressErrors
)
...
...
packages/flutter_tools/lib/src/devfs.dart
View file @
b7d48062
...
...
@@ -518,6 +518,20 @@ class DevFS {
// dill files that depend on the invalidated files.
_logger
.
printTrace
(
'Compiling dart to kernel with
${invalidatedFiles.length}
updated files'
);
// `generated_main.dart` contains the Dart plugin registry.
if
(
projectRootPath
!=
null
)
{
final
File
generatedMainDart
=
_fileSystem
.
file
(
_fileSystem
.
path
.
join
(
projectRootPath
,
'.dart_tool'
,
'flutter_build'
,
'generated_main.dart'
,
),
);
if
(
generatedMainDart
!=
null
&&
generatedMainDart
.
existsSync
())
{
mainUri
=
generatedMainDart
.
uri
;
}
}
// Await the compiler response after checking if the bundle is updated. This allows the file
// stating to be done while waiting for the frontend_server response.
final
Future
<
CompilerOutput
>
pendingCompilerOutput
=
generator
.
recompile
(
...
...
packages/flutter_tools/lib/src/flutter_manifest.dart
View file @
b7d48062
...
...
@@ -86,6 +86,13 @@ class FlutterManifest {
/// The string value of the top-level `name` property in the `pubspec.yaml` file.
String
get
appName
=>
_descriptor
[
'name'
]
as
String
??
''
;
/// Contains the name of the dependencies.
/// These are the keys specified in the `dependency` map.
Set
<
String
>
get
dependencies
{
final
YamlMap
dependencies
=
_descriptor
[
'dependencies'
]
as
YamlMap
;
return
dependencies
!=
null
?
<
String
>{...
dependencies
.
keys
.
cast
<
String
>()}
:
<
String
>{};
}
// Flag to avoid printing multiple invalid version messages.
bool
_hasShowInvalidVersionMsg
=
false
;
...
...
packages/flutter_tools/lib/src/platform_plugins.dart
View file @
b7d48062
...
...
@@ -16,6 +16,9 @@ const String kPluginClass = 'pluginClass';
/// Constant for 'pluginClass' key in plugin maps.
const
String
kDartPluginClass
=
'dartPluginClass'
;
// Constant for 'defaultPackage' key in plugin maps.
const
String
kDefaultPackage
=
'default_package'
;
/// Marker interface for all platform specific plugin config implementations.
abstract
class
PluginPlatform
{
const
PluginPlatform
();
...
...
@@ -207,6 +210,7 @@ class MacOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
@required
this
.
name
,
this
.
pluginClass
,
this
.
dartPluginClass
,
this
.
defaultPackage
,
});
factory
MacOSPlugin
.
fromYaml
(
String
name
,
YamlMap
yaml
)
{
...
...
@@ -220,6 +224,7 @@ class MacOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
name:
name
,
pluginClass:
pluginClass
,
dartPluginClass:
yaml
[
kDartPluginClass
]
as
String
,
defaultPackage:
yaml
[
kDefaultPackage
]
as
String
,
);
}
...
...
@@ -227,7 +232,9 @@ class MacOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
if
(
yaml
==
null
)
{
return
false
;
}
return
yaml
[
kPluginClass
]
is
String
||
yaml
[
kDartPluginClass
]
is
String
;
return
yaml
[
kPluginClass
]
is
String
||
yaml
[
kDartPluginClass
]
is
String
||
yaml
[
kDefaultPackage
]
is
String
;
}
static
const
String
kConfigKey
=
'macos'
;
...
...
@@ -235,6 +242,7 @@ class MacOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
final
String
name
;
final
String
pluginClass
;
final
String
dartPluginClass
;
final
String
defaultPackage
;
@override
bool
isNative
()
=>
pluginClass
!=
null
;
...
...
@@ -244,7 +252,8 @@ class MacOSPlugin extends PluginPlatform implements NativeOrDartPlugin {
return
<
String
,
dynamic
>{
'name'
:
name
,
if
(
pluginClass
!=
null
)
'class'
:
pluginClass
,
if
(
dartPluginClass
!=
null
)
'dartPluginClass'
:
dartPluginClass
,
if
(
dartPluginClass
!=
null
)
kDartPluginClass
:
dartPluginClass
,
if
(
defaultPackage
!=
null
)
kDefaultPackage
:
defaultPackage
,
};
}
}
...
...
@@ -258,7 +267,8 @@ class WindowsPlugin extends PluginPlatform implements NativeOrDartPlugin{
@required
this
.
name
,
this
.
pluginClass
,
this
.
dartPluginClass
,
})
:
assert
(
pluginClass
!=
null
||
dartPluginClass
!=
null
);
this
.
defaultPackage
,
})
:
assert
(
pluginClass
!=
null
||
dartPluginClass
!=
null
||
defaultPackage
!=
null
);
factory
WindowsPlugin
.
fromYaml
(
String
name
,
YamlMap
yaml
)
{
assert
(
validate
(
yaml
));
...
...
@@ -271,6 +281,7 @@ class WindowsPlugin extends PluginPlatform implements NativeOrDartPlugin{
name:
name
,
pluginClass:
pluginClass
,
dartPluginClass:
yaml
[
kDartPluginClass
]
as
String
,
defaultPackage:
yaml
[
kDefaultPackage
]
as
String
,
);
}
...
...
@@ -278,7 +289,9 @@ class WindowsPlugin extends PluginPlatform implements NativeOrDartPlugin{
if
(
yaml
==
null
)
{
return
false
;
}
return
yaml
[
kDartPluginClass
]
is
String
||
yaml
[
kPluginClass
]
is
String
;
return
yaml
[
kPluginClass
]
is
String
||
yaml
[
kDartPluginClass
]
is
String
||
yaml
[
kDefaultPackage
]
is
String
;
}
static
const
String
kConfigKey
=
'windows'
;
...
...
@@ -286,6 +299,7 @@ class WindowsPlugin extends PluginPlatform implements NativeOrDartPlugin{
final
String
name
;
final
String
pluginClass
;
final
String
dartPluginClass
;
final
String
defaultPackage
;
@override
bool
isNative
()
=>
pluginClass
!=
null
;
...
...
@@ -296,7 +310,8 @@ class WindowsPlugin extends PluginPlatform implements NativeOrDartPlugin{
'name'
:
name
,
if
(
pluginClass
!=
null
)
'class'
:
pluginClass
,
if
(
pluginClass
!=
null
)
'filename'
:
_filenameForCppClass
(
pluginClass
),
if
(
dartPluginClass
!=
null
)
'dartPluginClass'
:
dartPluginClass
,
if
(
dartPluginClass
!=
null
)
kDartPluginClass:
dartPluginClass
,
if
(
defaultPackage
!=
null
)
kDefaultPackage:
defaultPackage
,
};
}
}
...
...
@@ -310,7 +325,8 @@ class LinuxPlugin extends PluginPlatform implements NativeOrDartPlugin {
@required
this
.
name
,
this
.
pluginClass
,
this
.
dartPluginClass
,
})
:
assert
(
pluginClass
!=
null
||
dartPluginClass
!=
null
);
this
.
defaultPackage
,
})
:
assert
(
pluginClass
!=
null
||
dartPluginClass
!=
null
||
defaultPackage
!=
null
);
factory
LinuxPlugin
.
fromYaml
(
String
name
,
YamlMap
yaml
)
{
assert
(
validate
(
yaml
));
...
...
@@ -323,6 +339,7 @@ class LinuxPlugin extends PluginPlatform implements NativeOrDartPlugin {
name:
name
,
pluginClass:
pluginClass
,
dartPluginClass:
yaml
[
kDartPluginClass
]
as
String
,
defaultPackage:
yaml
[
kDefaultPackage
]
as
String
,
);
}
...
...
@@ -330,7 +347,9 @@ class LinuxPlugin extends PluginPlatform implements NativeOrDartPlugin {
if
(
yaml
==
null
)
{
return
false
;
}
return
yaml
[
kPluginClass
]
is
String
||
yaml
[
kDartPluginClass
]
is
String
;
return
yaml
[
kPluginClass
]
is
String
||
yaml
[
kDartPluginClass
]
is
String
||
yaml
[
kDefaultPackage
]
is
String
;
}
static
const
String
kConfigKey
=
'linux'
;
...
...
@@ -338,6 +357,7 @@ class LinuxPlugin extends PluginPlatform implements NativeOrDartPlugin {
final
String
name
;
final
String
pluginClass
;
final
String
dartPluginClass
;
final
String
defaultPackage
;
@override
bool
isNative
()
=>
pluginClass
!=
null
;
...
...
@@ -348,7 +368,8 @@ class LinuxPlugin extends PluginPlatform implements NativeOrDartPlugin {
'name'
:
name
,
if
(
pluginClass
!=
null
)
'class'
:
pluginClass
,
if
(
pluginClass
!=
null
)
'filename'
:
_filenameForCppClass
(
pluginClass
),
if
(
dartPluginClass
!=
null
)
'dartPluginClass'
:
dartPluginClass
,
if
(
dartPluginClass
!=
null
)
kDartPluginClass:
dartPluginClass
,
if
(
defaultPackage
!=
null
)
kDefaultPackage:
defaultPackage
,
};
}
}
...
...
packages/flutter_tools/lib/src/plugins.dart
View file @
b7d48062
This diff is collapsed.
Click to expand it.
packages/flutter_tools/lib/src/resident_runner.dart
View file @
b7d48062
...
...
@@ -920,6 +920,7 @@ abstract class ResidentRunner {
outputDir:
globals
.
fs
.
directory
(
getBuildDirectory
()),
processManager:
globals
.
processManager
,
projectDir:
globals
.
fs
.
currentDirectory
,
generateDartPluginRegistry:
true
,
);
_lastBuild
=
await
globals
.
buildSystem
.
buildIncremental
(
const
GenerateLocalizationsTarget
(),
...
...
packages/flutter_tools/lib/src/run_hot.dart
View file @
b7d48062
...
...
@@ -26,6 +26,7 @@ import 'devfs.dart';
import
'device.dart'
;
import
'features.dart'
;
import
'globals.dart'
as
globals
;
import
'project.dart'
;
import
'reporting/reporting.dart'
;
import
'resident_devtools_handler.dart'
;
import
'resident_runner.dart'
;
...
...
@@ -314,6 +315,15 @@ class HotRunner extends ResidentRunner {
bool
enableDevTools
=
false
,
String
route
,
})
async
{
File
mainFile
=
globals
.
fs
.
file
(
mainPath
);
// `generated_main.dart` contains the Dart plugin registry.
final
Directory
buildDir
=
FlutterProject
.
current
()
.
directory
.
childDirectory
(
globals
.
fs
.
path
.
join
(
'.dart_tool'
,
'flutter_build'
));
final
File
newMainDart
=
buildDir
?.
childFile
(
'generated_main.dart'
);
if
(
newMainDart
!=
null
&&
newMainDart
.
existsSync
())
{
mainFile
=
newMainDart
;
}
firstBuildTime
=
DateTime
.
now
();
final
List
<
Future
<
bool
>>
startupTasks
=
<
Future
<
bool
>>[];
...
...
@@ -326,7 +336,7 @@ class HotRunner extends ResidentRunner {
if
(
device
.
generator
!=
null
)
{
startupTasks
.
add
(
device
.
generator
.
recompile
(
globals
.
fs
.
file
(
mainPath
)
.
uri
,
mainFile
.
uri
,
<
Uri
>[],
// When running without a provided applicationBinary, the tool will
// simultaneously run the initial frontend_server compilation and
...
...
packages/flutter_tools/lib/src/runner/flutter_command.dart
View file @
b7d48062
...
...
@@ -1153,6 +1153,7 @@ abstract class FlutterCommand extends Command<void> {
outputDir:
globals
.
fs
.
directory
(
getBuildDirectory
()),
processManager:
globals
.
processManager
,
projectDir:
project
.
directory
,
generateDartPluginRegistry:
true
,
);
await
generateLocalizationsSyntheticPackage
(
...
...
packages/flutter_tools/lib/src/web/compile.dart
View file @
b7d48062
...
...
@@ -69,6 +69,8 @@ Future<void> buildWeb(
?
null
:
globals
.
flutterVersion
.
engineRevision
,
flutterRootDir:
globals
.
fs
.
directory
(
Cache
.
flutterRoot
),
// Web uses a different Dart plugin registry.
generateDartPluginRegistry:
false
,
));
if
(!
result
.
success
)
{
for
(
final
ExceptionMeasurement
measurement
in
result
.
exceptions
.
values
)
{
...
...
packages/flutter_tools/test/general.shard/android/deferred_components_setup_validator_test.dart
View file @
b7d48062
...
...
@@ -36,6 +36,7 @@ void main() {
logger:
logger
,
processManager:
globals
.
processManager
,
engineVersion:
'invalidEngineVersion'
,
generateDartPluginRegistry:
false
,
);
return
result
;
}
...
...
packages/flutter_tools/test/general.shard/plugin_parsing_test.dart
View file @
b7d48062
...
...
@@ -220,6 +220,39 @@ void main() {
);
expect
(
plugin
.
platforms
,
<
String
,
PluginPlatform
>{});
expect
(
plugin
.
defaultPackagePlatforms
,
<
String
,
String
>{
'linux'
:
'sample_package_linux'
,
'macos'
:
'sample_package_macos'
,
'windows'
:
'sample_package_windows'
,
});
expect
(
plugin
.
pluginDartClassPlatforms
,
<
String
,
String
>{});
});
testWithoutContext
(
'Desktop plugin parsing allows a dartPluginClass field'
,
()
{
final
FileSystem
fileSystem
=
MemoryFileSystem
.
test
();
const
String
pluginYamlRaw
=
'platforms:
\n
'
' linux:
\n
'
' dartPluginClass: LinuxClass
\n
'
' macos:
\n
'
' dartPluginClass: MacOSClass
\n
'
' windows:
\n
'
' dartPluginClass: WindowsClass
\n
'
;
final
YamlMap
pluginYaml
=
loadYaml
(
pluginYamlRaw
)
as
YamlMap
;
final
Plugin
plugin
=
Plugin
.
fromYaml
(
_kTestPluginName
,
_kTestPluginPath
,
pluginYaml
,
const
<
String
>[],
fileSystem:
fileSystem
,
);
expect
(
plugin
.
pluginDartClassPlatforms
,
<
String
,
String
>{
'linux'
:
'LinuxClass'
,
'macos'
:
'MacOSClass'
,
'windows'
:
'WindowsClass'
,
});
});
testWithoutContext
(
'Plugin parsing throws a fatal error on an empty plugin'
,
()
{
...
...
packages/flutter_tools/test/general.shard/plugins_test.dart
View file @
b7d48062
This diff is collapsed.
Click to expand it.
packages/flutter_tools/test/general.shard/project_test.dart
View file @
b7d48062
...
...
@@ -110,6 +110,17 @@ void main() {
);
});
_testInMemory
(
'reads dependencies from pubspec.yaml'
,
()
async
{
final
Directory
directory
=
globals
.
fs
.
directory
(
'myproject'
);
directory
.
childFile
(
'pubspec.yaml'
)
..
createSync
(
recursive:
true
)
..
writeAsStringSync
(
validPubspecWithDependencies
);
expect
(
FlutterProject
.
fromDirectory
(
directory
).
manifest
.
dependencies
,
<
String
>{
'plugin_a'
,
'plugin_b'
},
);
});
_testInMemory
(
'sets up location'
,
()
async
{
final
Directory
directory
=
globals
.
fs
.
directory
(
'myproject'
);
expect
(
...
...
@@ -905,6 +916,16 @@ name: hello
flutter:
'''
;
String
get
validPubspecWithDependencies
=>
'''
name: hello
flutter:
dependencies:
plugin_a:
plugin_b:
'''
;
String
get
invalidPubspec
=>
'''
name: hello
flutter:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment