Android: Extract dependencies to Android plugin to extensions

This commit is contained in:
Yan Zhulanow
2018-03-19 22:58:13 +03:00
parent 39e9d28c63
commit 8f02d338a6
15 changed files with 298 additions and 79 deletions
@@ -10,7 +10,7 @@ dependencies {
compile(project(":compiler:util"))
compile(project(":jps-plugin"))
compile(project(":plugins:android-extensions-compiler"))
compileOnly(intellijDep()) { includeJars("openapi", "jps-builders") }
compileOnly(intellijDep()) { includeJars("openapi", "jps-builders", "jps-model", "jdom") }
compileOnly(intellijPluginDep("android")) { includeJars("jps/android-jps-plugin") }
compile(intellijPluginDep("android")) { includeJars("jps/android-jps-plugin") }
@@ -17,7 +17,7 @@
package org.jetbrains.kotlin.android.jps
import com.intellij.util.PathUtil
import org.jetbrains.jps.android.AndroidJpsUtil
import org.jetbrains.jps.android.model.base.AndroidExtensionsDataProvider
import org.jetbrains.jps.incremental.CompileContext
import org.jetbrains.jps.incremental.ModuleBuildTarget
import org.jetbrains.jps.model.module.JpsModule
@@ -37,23 +37,22 @@ class KotlinAndroidJpsPlugin : KotlinJpsCompilerArgumentsProvider {
return if (resPath != null && applicationId != null) {
listOf(
getPluginOptionString(pluginId, VARIANT_OPTION_NAME, "main;$resPath"),
getPluginOptionString(pluginId, PACKAGE_OPTION_NAME, applicationId))
}
else emptyList()
getPluginOptionString(pluginId, VARIANT_OPTION_NAME, "main;$resPath"),
getPluginOptionString(pluginId, PACKAGE_OPTION_NAME, applicationId)
)
} else emptyList()
}
private fun isAndroidModuleWithoutGradle(module: JpsModule): Boolean {
val androidFacet = AndroidJpsUtil.getExtension(module) ?: return false
return !androidFacet.isGradleProject
val androidFacet = AndroidExtensionsDataProvider.getExtension(module) ?: return false
return !androidFacet.isGradleProject()
}
private fun hasAndroidJpsPlugin(): Boolean {
try {
Class.forName(ANDROID_JPS_UTIL_CLASS_FQNAME)
return true
}
catch (e: ClassNotFoundException) {
} catch (e: ClassNotFoundException) {
return false
}
}
@@ -78,35 +77,31 @@ class KotlinAndroidJpsPlugin : KotlinJpsCompilerArgumentsProvider {
}
listOf(compilerPluginJar.absolutePath)
}
else emptyList()
} else emptyList()
}
private fun getAndroidResPath(module: JpsModule): String? {
val extension = AndroidJpsUtil.getExtension(module) ?: return null
return AndroidJpsUtil.getResourceDirForCompilationPath(extension)?.absolutePath
return AndroidExtensionsDataProvider.getExtension(module)?.getResourceDirForCompilationPath()?.absolutePath
}
private fun getAndroidManifest(module: JpsModule): File? {
val extension = AndroidJpsUtil.getExtension(module) ?: return null
return AndroidJpsUtil.getManifestFileForCompilationPath(extension)
return AndroidExtensionsDataProvider.getExtension(module)?.getManifestFileForCompilationPath()
}
companion object {
private val ANDROID_JPS_UTIL_CLASS_FQNAME = "org.jetbrains.jps.android.AndroidJpsUtil"
private const val ANDROID_JPS_UTIL_CLASS_FQNAME = "org.jetbrains.jps.android.AndroidJpsUtil"
private val JAR_FILE_NAME = "android-extensions-compiler.jar"
private val ANDROID_COMPILER_PLUGIN_ID = "org.jetbrains.kotlin.android"
private const val JAR_FILE_NAME = "android-extensions-compiler.jar"
private const val ANDROID_COMPILER_PLUGIN_ID = "org.jetbrains.kotlin.android"
private val VARIANT_OPTION_NAME = "variant"
private val PACKAGE_OPTION_NAME = "package"
private const val VARIANT_OPTION_NAME = "variant"
private const val PACKAGE_OPTION_NAME = "package"
private fun getApplicationPackageFromManifest(manifestFile: File): String? {
try {
return manifestFile.parseXml().documentElement.getAttribute("package")
}
catch (e: Exception) {
return null
return try {
manifestFile.parseXml().documentElement.getAttribute("package")
} catch (e: Exception) {
null
}
}
@@ -0,0 +1 @@
org.jetbrains.jps.android.model.base.impl.AndroidExtensionDataProviderJpsModelSerializerExtension
@@ -0,0 +1,27 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.jps.android.model.base
import org.jetbrains.jps.model.JpsElement
import org.jetbrains.jps.model.ex.JpsElementChildRoleBase
import org.jetbrains.jps.model.module.JpsModule
import java.io.File
interface AndroidExtensionsDataProvider : JpsElement {
companion object {
val KIND: JpsElementChildRoleBase<AndroidExtensionsDataProvider> =
JpsElementChildRoleBase.create<AndroidExtensionsDataProvider>("android extensions data provider")
fun getExtension(module: JpsModule): AndroidExtensionsDataProvider? {
return module.container.getChild(KIND)
}
}
fun isGradleProject(): Boolean
fun getResourceDirForCompilationPath(): File?
fun getManifestFileForCompilationPath(): File?
}
@@ -0,0 +1,17 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.jps.android.model.base.impl
import org.jdom.Element
import org.jetbrains.jps.android.model.base.AndroidExtensionsDataProvider
import org.jetbrains.jps.model.module.JpsModule
import org.jetbrains.jps.model.serialization.JpsModelSerializerExtension
class AndroidExtensionDataProviderJpsModelSerializerExtension : JpsModelSerializerExtension() {
override fun loadModuleOptions(module: JpsModule, rootElement: Element) {
module.container.setChild(AndroidExtensionsDataProvider.KIND, AndroidExtensionsDataProviderImpl())
}
}
@@ -0,0 +1,43 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.jps.android.model.base.impl
import org.jetbrains.jps.android.AndroidJpsUtil
import org.jetbrains.jps.android.model.base.AndroidExtensionsDataProvider
import org.jetbrains.jps.model.ex.JpsElementBase
import org.jetbrains.jps.model.module.JpsModule
import java.io.File
class AndroidExtensionsDataProviderImpl : JpsElementBase<AndroidExtensionsDataProviderImpl>(),
AndroidExtensionsDataProvider {
private val module
get() = super.getParent() as JpsModule
override fun applyChanges(modified: AndroidExtensionsDataProviderImpl) {
fireElementChanged()
}
override fun createCopy(): AndroidExtensionsDataProviderImpl {
return AndroidExtensionsDataProviderImpl()
}
private val androidExtension
get() = AndroidJpsUtil.getExtension(module)
override fun isGradleProject(): Boolean {
return androidExtension?.isGradleProject ?: false
}
override fun getResourceDirForCompilationPath(): File? {
val androidExtension = this.androidExtension ?: return null
return AndroidJpsUtil.getResourceDirForCompilationPath(androidExtension)
}
override fun getManifestFileForCompilationPath(): File? {
val androidExtension = this.androidExtension ?: return null
return AndroidJpsUtil.getManifestFileForCompilationPath(androidExtension)
}
}