Support Android flavors
This commit is contained in:
+9
-7
@@ -33,20 +33,22 @@ public class AndroidSubplugin : KotlinGradleSubplugin {
|
|||||||
val sourceSets = androidExtension.getSourceSets()
|
val sourceSets = androidExtension.getSourceSets()
|
||||||
val mainSourceSet = sourceSets.getByName("main")
|
val mainSourceSet = sourceSets.getByName("main")
|
||||||
|
|
||||||
val resourceDir = mainSourceSet.getRes().getSrcDirs().firstOrNull()
|
val resourceDirs = mainSourceSet.getRes().getSrcDirs()
|
||||||
val manifestFile = mainSourceSet.getManifest().getSrcFile()
|
val manifestFile = mainSourceSet.getManifest().getSrcFile()
|
||||||
|
|
||||||
val compileDependencies = project.getConfigurations().getByName("compile").getFiles()
|
val compileDependencies = project.getConfigurations().getByName("compile").getFiles()
|
||||||
val supportV4 = compileDependencies?.filter { it.name.startsWith("support-v4-") }?.isNotEmpty() ?: false
|
val supportV4 = compileDependencies?.filter { it.name.startsWith("support-v4-") }?.isNotEmpty() ?: false
|
||||||
val supportV4Property = if (supportV4) "true" else "false"
|
val supportV4Property = if (supportV4) "true" else "false"
|
||||||
|
|
||||||
if (resourceDir != null) {
|
if (resourceDirs.isNotEmpty()) {
|
||||||
resourceDir.listFiles { it.isDirectory() && it.name.startsWith("layout") }?.forEach { task.source(it) }
|
val resourceDirOptions = resourceDirs.map { resourceDir ->
|
||||||
|
resourceDir.listFiles { it.isDirectory() && it.name.startsWith("layout") }?.forEach { task.source(it) }
|
||||||
|
SubpluginOption("androidRes", resourceDir.getAbsolutePath())
|
||||||
|
}
|
||||||
return listOf(
|
return listOf(
|
||||||
SubpluginOption("androidRes", resourceDir.getAbsolutePath()),
|
SubpluginOption("androidManifest", manifestFile.getAbsolutePath()),
|
||||||
SubpluginOption("androidManifest", manifestFile.getAbsolutePath()),
|
SubpluginOption("supportV4", supportV4Property)
|
||||||
SubpluginOption("supportV4", supportV4Property)
|
) + resourceDirOptions
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return null
|
return null
|
||||||
|
|||||||
+1
-8
@@ -55,7 +55,7 @@ public abstract class AndroidResourceManager(val project: Project) {
|
|||||||
return allChildren
|
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() }
|
val allChildren = resDirectories.flatMap { it?.getAllChildren() ?: listOf() }
|
||||||
|
|
||||||
return allChildren
|
return allChildren
|
||||||
@@ -66,13 +66,6 @@ public abstract class AndroidResourceManager(val project: Project) {
|
|||||||
.mapValues { it.getValue().sortBy { it.getParent().getName().length() } }
|
.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 {
|
companion object {
|
||||||
public fun getInstance(module: Module): AndroidResourceManager {
|
public fun getInstance(module: Module): AndroidResourceManager {
|
||||||
val service = ModuleServiceManager.getService<AndroidResourceManager>(module, javaClass<AndroidResourceManager>())
|
val service = ModuleServiceManager.getService<AndroidResourceManager>(module, javaClass<AndroidResourceManager>())
|
||||||
|
|||||||
+2
-2
@@ -28,11 +28,11 @@ import kotlin.properties.Delegates
|
|||||||
public class CliAndroidResourceManager(
|
public class CliAndroidResourceManager(
|
||||||
project: Project,
|
project: Project,
|
||||||
private val manifestPath: String,
|
private val manifestPath: String,
|
||||||
private val mainResDirectory: List<String>
|
private val resDirectories: List<String>
|
||||||
) : AndroidResourceManager(project) {
|
) : AndroidResourceManager(project) {
|
||||||
|
|
||||||
override val androidModuleInfo by Delegates.lazy {
|
override val androidModuleInfo by Delegates.lazy {
|
||||||
AndroidModuleInfo(getApplicationPackage(manifestPath), mainResDirectory)
|
AndroidModuleInfo(getApplicationPackage(manifestPath), resDirectories)
|
||||||
}
|
}
|
||||||
|
|
||||||
val saxParser: SAXParser = initSAX()
|
val saxParser: SAXParser = initSAX()
|
||||||
|
|||||||
+2
-2
@@ -30,11 +30,11 @@ import com.intellij.psi.util.CachedValueProvider.Result
|
|||||||
public class CliAndroidUIXmlProcessor(
|
public class CliAndroidUIXmlProcessor(
|
||||||
project: Project,
|
project: Project,
|
||||||
private val manifestPath: String,
|
private val manifestPath: String,
|
||||||
private val mainResDirectories: List<String>
|
private val resDirectories: List<String>
|
||||||
) : AndroidUIXmlProcessor(project) {
|
) : AndroidUIXmlProcessor(project) {
|
||||||
|
|
||||||
override val resourceManager: CliAndroidResourceManager by Delegates.lazy {
|
override val resourceManager: CliAndroidResourceManager by Delegates.lazy {
|
||||||
CliAndroidResourceManager(project, manifestPath, mainResDirectories)
|
CliAndroidResourceManager(project, manifestPath, resDirectories)
|
||||||
}
|
}
|
||||||
|
|
||||||
override val cachedSources: CachedValue<List<AndroidSyntheticFile>> by Delegates.lazy {
|
override val cachedSources: CachedValue<List<AndroidSyntheticFile>> by Delegates.lazy {
|
||||||
|
|||||||
+1
-1
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.lang.resolve.android
|
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 class AndroidResource(val id: String) {
|
||||||
public abstract val className: 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.ide.highlighter.XmlFileType
|
||||||
import com.intellij.openapi.roots.ProjectRootManager
|
import com.intellij.openapi.roots.ProjectRootManager
|
||||||
import com.intellij.openapi.util.SimpleModificationTracker
|
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.PsiFile
|
||||||
import com.intellij.psi.impl.PsiTreeChangeEventImpl
|
import com.intellij.psi.impl.PsiTreeChangeEventImpl
|
||||||
import com.intellij.psi.impl.PsiTreeChangePreprocessor
|
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 {
|
private fun PsiFile.isLayoutXmlFile(): Boolean {
|
||||||
if (getFileType() != XmlFileType.INSTANCE) return false
|
if (getFileType() != XmlFileType.INSTANCE) return false
|
||||||
return getParent()?.getName()?.startsWith("layout") ?: false
|
return getParent()?.getName()?.startsWith("layout") ?: false
|
||||||
|
|||||||
Reference in New Issue
Block a user