Android Extensions: Downgrade to old Android variant processing logic when 'experimental' flag is disabled (KT-19270)

This commit is contained in:
Yan Zhulanow
2017-07-27 22:10:24 +03:00
committed by Yan Zhulanow
parent 3bb7febeb8
commit 6002281874
2 changed files with 35 additions and 2 deletions
@@ -55,8 +55,13 @@ internal val Module.androidExtensionsIsEnabled: Boolean
internal val ModuleInfo.androidExtensionsIsExperimental: Boolean
get() {
val module = (this as? ModuleSourceInfo)?.module ?: return false
if (isTestMode(module)) return true
return module.getOptionValueInFacet(EXPERIMENTAL_OPTION) == "true"
return module.androidExtensionsIsExperimental
}
internal val Module.androidExtensionsIsExperimental: Boolean
get() {
if (isTestMode(this)) return true
return getOptionValueInFacet(EXPERIMENTAL_OPTION) == "true"
}
val ModuleInfo.androidExtensionsGlobalCacheImpl: CacheImplementation
@@ -28,6 +28,7 @@ import org.jetbrains.android.facet.AndroidFacet
import org.jetbrains.kotlin.android.synthetic.AndroidConst.SYNTHETIC_PACKAGE_PATH_LENGTH
import org.jetbrains.kotlin.android.synthetic.idea.AndroidPsiTreeChangePreprocessor
import org.jetbrains.kotlin.android.synthetic.idea.AndroidXmlVisitor
import org.jetbrains.kotlin.android.synthetic.idea.androidExtensionsIsExperimental
import org.jetbrains.kotlin.android.synthetic.res.*
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
@@ -110,6 +111,33 @@ class IDEAndroidLayoutXmlFileManager(val module: Module) : AndroidLayoutXmlFileM
private fun SourceProvider.toVariant() = AndroidVariant(name, resDirectories.map { it.canonicalPath })
private fun getAndroidModuleInfo(androidFacet: AndroidFacet): AndroidModule? {
if (androidFacet.module.androidExtensionsIsExperimental) {
return getAndroidModuleInfoExperimental(androidFacet)
}
val applicationPackage = androidFacet.manifest?.`package`?.toString()
if (applicationPackage != null) {
val mainVariant = androidFacet.mainSourceProvider.toVariant()
val method = try { androidFacet::class.java.getMethod("getFlavorSourceProviders") } catch (e: NoSuchMethodException) { null }
val variants: List<AndroidVariant>? = if (method != null) {
val sourceProviders = method.invoke(androidFacet) as List<SourceProvider>?
sourceProviders?.map { it.toVariant() } ?: listOf()
}
else {
val model = AndroidGradleModel.get(androidFacet.module)
model?.flavorSourceProviders?.map { it.toVariant() } ?: listOf(androidFacet.mainSourceProvider.toVariant())
}
if (variants != null) {
return AndroidModule(applicationPackage, listOf(mainVariant) + variants)
}
}
return null
}
private fun getAndroidModuleInfoExperimental(androidFacet: AndroidFacet): AndroidModule? {
val applicationPackage = androidFacet.manifest?.`package`?.toString() ?: return null
val allResDirectories = androidFacet.getAppResources(true)?.resourceDirs.orEmpty().mapNotNull { it.canonicalPath }