Support Android flavors

This commit is contained in:
Yan Zhulanow
2015-04-14 20:11:27 +03:00
parent bf707ec3f7
commit 77be78b627
6 changed files with 24 additions and 20 deletions
@@ -33,20 +33,22 @@ public class AndroidSubplugin : KotlinGradleSubplugin {
val sourceSets = androidExtension.getSourceSets()
val mainSourceSet = sourceSets.getByName("main")
val resourceDir = mainSourceSet.getRes().getSrcDirs().firstOrNull()
val resourceDirs = mainSourceSet.getRes().getSrcDirs()
val manifestFile = mainSourceSet.getManifest().getSrcFile()
val compileDependencies = project.getConfigurations().getByName("compile").getFiles()
val supportV4 = compileDependencies?.filter { it.name.startsWith("support-v4-") }?.isNotEmpty() ?: false
val supportV4Property = if (supportV4) "true" else "false"
if (resourceDir != null) {
resourceDir.listFiles { it.isDirectory() && it.name.startsWith("layout") }?.forEach { task.source(it) }
if (resourceDirs.isNotEmpty()) {
val resourceDirOptions = resourceDirs.map { resourceDir ->
resourceDir.listFiles { it.isDirectory() && it.name.startsWith("layout") }?.forEach { task.source(it) }
SubpluginOption("androidRes", resourceDir.getAbsolutePath())
}
return listOf(
SubpluginOption("androidRes", resourceDir.getAbsolutePath()),
SubpluginOption("androidManifest", manifestFile.getAbsolutePath()),
SubpluginOption("supportV4", supportV4Property)
)
SubpluginOption("androidManifest", manifestFile.getAbsolutePath()),
SubpluginOption("supportV4", supportV4Property)
) + resourceDirOptions
}
return null
@@ -55,7 +55,7 @@ public abstract class AndroidResourceManager(val project: Project) {
return allChildren
}
val resDirectories = info.mainResDirectories.map { fileManager.findFileByUrl("file://$it") }
val resDirectories = info.resDirectories.map { fileManager.findFileByUrl("file://$it") }
val allChildren = resDirectories.flatMap { it?.getAllChildren() ?: listOf() }
return allChildren
@@ -66,13 +66,6 @@ public abstract class AndroidResourceManager(val project: Project) {
.mapValues { it.getValue().sortBy { it.getParent().getName().length() } }
}
fun getModuleResDirectories(): List<VirtualFile> {
val info = androidModuleInfo
if (info == null) return listOf()
val fileManager = VirtualFileManager.getInstance()
return info.mainResDirectories.map { fileManager.findFileByUrl("file://" + it) }
}
companion object {
public fun getInstance(module: Module): AndroidResourceManager {
val service = ModuleServiceManager.getService<AndroidResourceManager>(module, javaClass<AndroidResourceManager>())
@@ -28,11 +28,11 @@ import kotlin.properties.Delegates
public class CliAndroidResourceManager(
project: Project,
private val manifestPath: String,
private val mainResDirectory: List<String>
private val resDirectories: List<String>
) : AndroidResourceManager(project) {
override val androidModuleInfo by Delegates.lazy {
AndroidModuleInfo(getApplicationPackage(manifestPath), mainResDirectory)
AndroidModuleInfo(getApplicationPackage(manifestPath), resDirectories)
}
val saxParser: SAXParser = initSAX()
@@ -30,11 +30,11 @@ import com.intellij.psi.util.CachedValueProvider.Result
public class CliAndroidUIXmlProcessor(
project: Project,
private val manifestPath: String,
private val mainResDirectories: List<String>
private val resDirectories: List<String>
) : AndroidUIXmlProcessor(project) {
override val resourceManager: CliAndroidResourceManager by Delegates.lazy {
CliAndroidResourceManager(project, manifestPath, mainResDirectories)
CliAndroidResourceManager(project, manifestPath, resDirectories)
}
override val cachedSources: CachedValue<List<AndroidSyntheticFile>> by Delegates.lazy {
@@ -16,7 +16,7 @@
package org.jetbrains.kotlin.lang.resolve.android
public data class AndroidModuleInfo(val applicationPackage: String, val mainResDirectories: List<String>)
public data class AndroidModuleInfo(val applicationPackage: String, val resDirectories: List<String>)
public abstract class AndroidResource(val id: String) {
public abstract val className: String
@@ -19,6 +19,8 @@ package org.jetbrains.kotlin.plugin.android
import com.intellij.ide.highlighter.XmlFileType
import com.intellij.openapi.roots.ProjectRootManager
import com.intellij.openapi.util.SimpleModificationTracker
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.openapi.vfs.VirtualFileManager
import com.intellij.psi.PsiFile
import com.intellij.psi.impl.PsiTreeChangeEventImpl
import com.intellij.psi.impl.PsiTreeChangePreprocessor
@@ -58,6 +60,13 @@ public class AndroidPsiTreeChangePreprocessor : PsiTreeChangePreprocessor, Simpl
}
}
private fun AndroidResourceManager.getModuleResDirectories(): List<VirtualFile> {
val info = androidModuleInfo
if (info == null) return listOf()
val fileManager = VirtualFileManager.getInstance()
return info.resDirectories.map { fileManager.findFileByUrl("file://" + it) }
}
private fun PsiFile.isLayoutXmlFile(): Boolean {
if (getFileType() != XmlFileType.INSTANCE) return false
return getParent()?.getName()?.startsWith("layout") ?: false