Skip to content

Commit

Permalink
Add support for type-safe plugin apply (#150958)
Browse files Browse the repository at this point in the history
The Gradle Kotlin DSL also allows for type-safe application of the Flutter Gradle plugin, which is currently undetected by the CLI
```kotlin
plugins {
  dev.flutter.`flutter-gradle-plugin`
}
```

Please note that the added test case isn't ideal, since the example gradle isn't actually valid kotlin DSL, however the `kotlin host app language with Gradle Kotlin DSL` is identical

Fixes #149859
  • Loading branch information
DRSchlaubi authored Jun 28, 2024
1 parent 47e65e8 commit 3a97a38
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 1 deletion.
4 changes: 3 additions & 1 deletion packages/flutter_tools/lib/src/project.dart
Original file line number Diff line number Diff line change
Expand Up @@ -544,7 +544,9 @@ class AndroidProject extends FlutterProjectPlatform {
// pluginManagement block of the settings.gradle file.
// See https://docs.gradle.org/current/userguide/composite_builds.html#included_plugin_builds,
// as well as the settings.gradle and build.gradle templates.
final bool declarativeApply = line.contains('dev.flutter.flutter-gradle-plugin');
final bool declarativeApply = line.contains(
RegExp(r'dev\.flutter\.(?:(?:flutter-gradle-plugin)|(?:`flutter-gradle-plugin`))'),
);

// This case allows for flutter run/build to work for modules. It does
// not guarantee the Flutter Gradle Plugin is applied.
Expand Down
22 changes: 22 additions & 0 deletions packages/flutter_tools/test/general.shard/project_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -805,6 +805,28 @@ plugins {
id "kotlin-android"
id "dev.flutter.flutter-gradle-plugin"
}
''';
});
expect(project.android.isKotlin, isTrue);
}, overrides: <Type, Generator>{
FileSystem: () => fs,
ProcessManager: () => FakeProcessManager.any(),
XcodeProjectInterpreter: () => xcodeProjectInterpreter,
FlutterProjectFactory: () => flutterProjectFactory,
});

testUsingContext('kotlin host app language with Gradle Kotlin DSL and typesafe plugin id', () async {
final FlutterProject project = await someProject();

addAndroidGradleFile(project.directory,
kotlinDsl: true,
gradleFileContent: () {
return '''
plugins {
id "com.android.application"
id "kotlin-android"
dev.flutter.`flutter-gradle-plugin`
}
''';
});
expect(project.android.isKotlin, isTrue);
Expand Down

0 comments on commit 3a97a38

Please sign in to comment.