diff --git a/plugins/android-compiler-plugin/src/AndroidComponentRegistrar.kt b/plugins/android-compiler-plugin/src/AndroidComponentRegistrar.kt index f193efe4f4e..dd80d5eebe9 100644 --- a/plugins/android-compiler-plugin/src/AndroidComponentRegistrar.kt +++ b/plugins/android-compiler-plugin/src/AndroidComponentRegistrar.kt @@ -34,11 +34,8 @@ import org.jetbrains.kotlin.lang.resolve.android.* import org.jetbrains.kotlin.psi.JetFile public object AndroidConfigurationKeys { - - public val ANDROID_RES_PATH: CompilerConfigurationKey = CompilerConfigurationKey.create("android resources search path") - + public val ANDROID_RES_PATH: CompilerConfigurationKey> = CompilerConfigurationKey.create>("android resources search path") public val ANDROID_MANIFEST: CompilerConfigurationKey = CompilerConfigurationKey.create("android manifest file") - public val SUPPORT_V4: CompilerConfigurationKey = CompilerConfigurationKey.create("'true' if compiled with support-v4 library") } @@ -46,7 +43,7 @@ public class AndroidCommandLineProcessor : CommandLineProcessor { companion object { public val ANDROID_COMPILER_PLUGIN_ID: String = "org.jetbrains.kotlin.android" - public val RESOURCE_PATH_OPTION: CliOption = CliOption("androidRes", "", "Android resources path") + public val RESOURCE_PATH_OPTION: CliOption = CliOption("androidRes", "", "Android resources path", allowMultipleOccurrences = true) public val MANIFEST_FILE_OPTION: CliOption = CliOption("androidManifest", "", "Android manifest file") public val SUPPORT_V4_OPTION: CliOption = CliOption("supportV4", "", "Support android-v4 library", required = false) } @@ -57,7 +54,11 @@ public class AndroidCommandLineProcessor : CommandLineProcessor { override fun processOption(option: CliOption, value: String, configuration: CompilerConfiguration) { when (option) { - RESOURCE_PATH_OPTION -> configuration.put(AndroidConfigurationKeys.ANDROID_RES_PATH, value) + RESOURCE_PATH_OPTION -> { + val paths = configuration.getList(AndroidConfigurationKeys.ANDROID_RES_PATH).toArrayList() + paths.add(value) + configuration.put(AndroidConfigurationKeys.ANDROID_RES_PATH, paths) + } MANIFEST_FILE_OPTION -> configuration.put(AndroidConfigurationKeys.ANDROID_MANIFEST, value) SUPPORT_V4_OPTION -> configuration.put(AndroidConfigurationKeys.SUPPORT_V4, value) else -> throw CliOptionProcessingException("Unknown option: ${option.name}") diff --git a/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/AndroidResourceManager.kt b/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/AndroidResourceManager.kt index 103bb7a85c0..b51a50d4eef 100644 --- a/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/AndroidResourceManager.kt +++ b/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/AndroidResourceManager.kt @@ -55,8 +55,8 @@ public abstract class AndroidResourceManager(val project: Project) { return allChildren } - val resDirectory = fileManager.findFileByUrl("file://" + info.mainResDirectory) - val allChildren = resDirectory?.getAllChildren() ?: listOf() + val resDirectories = info.mainResDirectories.map { fileManager.findFileByUrl("file://$it") } + val allChildren = resDirectories.flatMap { it?.getAllChildren() ?: listOf() } return allChildren .filter { it.getParent().getName().startsWith("layout") && it.getName().toLowerCase().endsWith(".xml") } @@ -66,10 +66,11 @@ public abstract class AndroidResourceManager(val project: Project) { .mapValues { it.getValue().sortBy { it.getParent().getName().length() } } } - fun getMainResDirectory(): VirtualFile? { + fun getModuleResDirectories(): List { val info = androidModuleInfo - if (info == null) return null - return VirtualFileManager.getInstance().findFileByUrl("file://" + info.mainResDirectory) + if (info == null) return listOf() + val fileManager = VirtualFileManager.getInstance() + return info.mainResDirectories.map { fileManager.findFileByUrl("file://" + it) } } companion object { diff --git a/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/CliAndroidResourceManager.kt b/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/CliAndroidResourceManager.kt index 66dbbfcef2e..6e2cef812f3 100644 --- a/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/CliAndroidResourceManager.kt +++ b/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/CliAndroidResourceManager.kt @@ -28,7 +28,7 @@ import kotlin.properties.Delegates public class CliAndroidResourceManager( project: Project, private val manifestPath: String, - private val mainResDirectory: String + private val mainResDirectory: List ) : AndroidResourceManager(project) { override val androidModuleInfo by Delegates.lazy { diff --git a/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/CliAndroidUIXmlProcessor.kt b/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/CliAndroidUIXmlProcessor.kt index c705d53244e..ba3b5953f7e 100644 --- a/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/CliAndroidUIXmlProcessor.kt +++ b/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/CliAndroidUIXmlProcessor.kt @@ -30,11 +30,11 @@ import com.intellij.psi.util.CachedValueProvider.Result public class CliAndroidUIXmlProcessor( project: Project, private val manifestPath: String, - private val mainResDirectory: String + private val mainResDirectories: List ) : AndroidUIXmlProcessor(project) { override val resourceManager: CliAndroidResourceManager by Delegates.lazy { - CliAndroidResourceManager(project, manifestPath, mainResDirectory) + CliAndroidResourceManager(project, manifestPath, mainResDirectories) } override val cachedSources: CachedValue> by Delegates.lazy { diff --git a/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/androidResources.kt b/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/androidResources.kt index dfe0c8eb8d9..b4dcae9f025 100644 --- a/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/androidResources.kt +++ b/plugins/android-compiler-plugin/src/org/jetbrains/kotlin/lang/resolve/android/androidResources.kt @@ -16,7 +16,7 @@ package org.jetbrains.kotlin.lang.resolve.android -public data class AndroidModuleInfo(val applicationPackage: String, val mainResDirectory: String?) +public data class AndroidModuleInfo(val applicationPackage: String, val mainResDirectories: List) public abstract class AndroidResource(val id: String) { public abstract val className: String diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/severalResDirs/AndroidManifest.xml b/plugins/android-compiler-plugin/testData/android/converter/simple/severalResDirs/AndroidManifest.xml new file mode 100644 index 00000000000..580c474f5de --- /dev/null +++ b/plugins/android-compiler-plugin/testData/android/converter/simple/severalResDirs/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugins/android-compiler-plugin/testData/android/converter/simple/severalResDirs/res/layout/test.xml b/plugins/android-compiler-plugin/testData/android/converter/simple/severalResDirs/res/layout/test.xml new file mode 100644 index 00000000000..f2376f5ddc7 --- /dev/null +++ b/plugins/android-compiler-plugin/testData/android/converter/simple/severalResDirs/res/layout/test.xml @@ -0,0 +1,15 @@ + + +