Support Android flavors
This commit is contained in:
+9
-7
@@ -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
|
||||
|
||||
+1
-8
@@ -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>())
|
||||
|
||||
+2
-2
@@ -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()
|
||||
|
||||
+2
-2
@@ -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 {
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
+9
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user