From efa2e98541749ed106cb1305cb7fb39b0661e45a Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Fri, 20 Nov 2015 17:10:27 +0300 Subject: [PATCH] Do not launch Android Extensions JPS plugin if the Android IDEA plugin is disabled, or the module is not an Android JPS module --- .../src/KotlinAndroidJpsPlugin.kt | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/plugins/android-jps-plugin/src/KotlinAndroidJpsPlugin.kt b/plugins/android-jps-plugin/src/KotlinAndroidJpsPlugin.kt index 52e99f228ca..5f71ef3cbc8 100644 --- a/plugins/android-jps-plugin/src/KotlinAndroidJpsPlugin.kt +++ b/plugins/android-jps-plugin/src/KotlinAndroidJpsPlugin.kt @@ -29,6 +29,8 @@ import javax.xml.parsers.DocumentBuilderFactory public class KotlinAndroidJpsPlugin : KotlinJpsCompilerArgumentsProvider { override fun getExtraArguments(moduleBuildTarget: ModuleBuildTarget, context: CompileContext): List { val module = moduleBuildTarget.module + if (!hasAndroidJpsPlugin() || isAndroidModuleWithoutGradle(module)) return emptyList() + val pluginId = ANDROID_COMPILER_PLUGIN_ID val resPath = getAndroidResPath(module) val applicationId = getAndroidManifest(module)?.let { getApplicationPackageFromManifest(it) } @@ -38,10 +40,28 @@ public class KotlinAndroidJpsPlugin : KotlinJpsCompilerArgumentsProvider { getPluginOptionString(pluginId, VARIANT_OPTION_NAME, "main;$resPath"), getPluginOptionString(pluginId, PACKAGE_OPTION_NAME, applicationId)) } - else listOf() + else emptyList() + } + + private fun isAndroidModuleWithoutGradle(module: JpsModule): Boolean { + val androidFacet = AndroidJpsUtil.getExtension(module) ?: return false + return !androidFacet.isGradleProject + } + + private fun hasAndroidJpsPlugin(): Boolean { + try { + Class.forName(ANDROID_JPS_UTIL_CLASS_FQNAME) + return true + } + catch (e: ClassNotFoundException) { + return false + } } override fun getClasspath(moduleBuildTarget: ModuleBuildTarget, context: CompileContext): List { + val module = moduleBuildTarget.module + if (!hasAndroidJpsPlugin() || isAndroidModuleWithoutGradle(module)) return emptyList() + val inJar = File(PathUtil.getJarPathForClass(javaClass)).isFile val manifestFile = getAndroidManifest(moduleBuildTarget.module) return if (manifestFile != null) { @@ -55,7 +75,7 @@ public class KotlinAndroidJpsPlugin : KotlinJpsCompilerArgumentsProvider { File(kotlinProjectDirectory, "dist/kotlinc/lib/$JAR_FILE_NAME").absolutePath }) } - else listOf() + else emptyList() } private fun getAndroidResPath(module: JpsModule): String? { @@ -69,6 +89,8 @@ public class KotlinAndroidJpsPlugin : KotlinJpsCompilerArgumentsProvider { } companion object { + private val ANDROID_JPS_UTIL_CLASS_FQNAME = "org.jetbrains.jps.android.AndroidJpsUtil" + private val JAR_FILE_NAME = "android-compiler-plugin.jar" private val ANDROID_COMPILER_PLUGIN_ID = "org.jetbrains.kotlin.android"