blob: 060456c2547218333e4f019fdebb5db310e6b062 [file] [log] [blame]
// 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.
package com.flutter.gradle
import org.gradle.api.plugins.ExtraPropertiesExtension
import java.io.File
// TODO(gmackall): Remove reflection after migrating to plugin style application in
// https://github.com/flutter/flutter/issues/166461.
// New methods should not be added.
/**
* Class to hide from Kotlin source the dangerous reflection being used to call methods defined
* in script gradle plugins.
*/
object NativePluginLoaderReflectionBridge {
/**
* An abstraction to hide reflection from calling sites. See ../scripts/native_plugin_loader.gradle.kts.
*/
fun getPlugins(
extraProperties: ExtraPropertiesExtension,
flutterProjectRoot: File
): List<Map<String?, Any?>> {
val nativePluginLoader = extraProperties.get("nativePluginLoader")!!
@Suppress("UNCHECKED_CAST")
val pluginList: List<Map<String?, Any?>> =
nativePluginLoader::class
.members
.firstOrNull { it.name == "getPlugins" }
?.call(nativePluginLoader, flutterProjectRoot) as List<Map<String?, Any?>>
return pluginList
}
/**
* An abstraction to hide reflection from calling sites. See ../scripts/native_plugin_loader.gradle.kts.
*/
fun getDependenciesMetadata(
extraProperties: ExtraPropertiesExtension,
flutterProjectRoot: File
): Map<String, Any> {
val nativePluginLoader = extraProperties.get("nativePluginLoader")!!
@Suppress("UNCHECKED_CAST")
val dependenciesMetadata: Map<String, Any> =
nativePluginLoader::class
.members
.firstOrNull { it.name == "dependenciesMetadata" }
?.call(nativePluginLoader, flutterProjectRoot) as Map<String, Any>
return dependenciesMetadata
}
}