From 0d80b4f8b0841dcf7da02d835b6741330fc91040 Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Tue, 24 Nov 2015 19:05:56 +0300 Subject: [PATCH] Fix compatibility with AS 2.0 (for master branch) --- .../res/IDEAndroidLayoutXmlFileManager.kt | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/plugins/android-idea-plugin/src/org/jetbrains/kotlin/android/synthetic/idea/res/IDEAndroidLayoutXmlFileManager.kt b/plugins/android-idea-plugin/src/org/jetbrains/kotlin/android/synthetic/idea/res/IDEAndroidLayoutXmlFileManager.kt index b26fd1bda55..9a8534f27c2 100644 --- a/plugins/android-idea-plugin/src/org/jetbrains/kotlin/android/synthetic/idea/res/IDEAndroidLayoutXmlFileManager.kt +++ b/plugins/android-idea-plugin/src/org/jetbrains/kotlin/android/synthetic/idea/res/IDEAndroidLayoutXmlFileManager.kt @@ -24,9 +24,9 @@ import com.intellij.psi.impl.PsiTreeChangePreprocessor import com.intellij.psi.util.CachedValue import com.intellij.psi.util.CachedValueProvider import org.jetbrains.android.facet.AndroidFacet -import org.jetbrains.kotlin.android.synthetic.idea.AndroidXmlVisitor 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.res.* import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor @@ -100,12 +100,28 @@ public class IDEAndroidLayoutXmlFileManager(val module: Module) : AndroidLayoutX private fun AndroidFacet.toAndroidModuleInfo(): AndroidModule? { val applicationPackage = manifest?.`package`?.toString() - return if (applicationPackage != null) { + if (applicationPackage != null) { + // This code is needed for compatibility with AS 2.0 and IDEA 15.0, because of difference in android plugins + val modelClass = try { + Class.forName("com.android.tools.idea.gradle.AndroidGradleModel") + } + catch(e: ClassNotFoundException) { + null + } val mainVariant = mainSourceProvider.toVariant() - val flavorVariants = flavorSourceProviders?.map { it.toVariant() } ?: listOf() - AndroidModule(applicationPackage, listOf(mainVariant) + flavorVariants) + if (modelClass == null) { + val flavorVariants = flavorSourceProviders?.map { it.toVariant() } ?: listOf() + return AndroidModule(applicationPackage, listOf(mainVariant) + flavorVariants) + } + else { + val model = modelClass.getDeclaredMethod("get", Module::class.java).invoke(null, module) + if (model != null) { + val sourceProviders = modelClass.getDeclaredMethod("getFlavorSourceProviders").invoke(model) as List + return AndroidModule(applicationPackage, listOf(mainVariant) + sourceProviders.map { it.toVariant() }) + } + } } - else null + return null } } \ No newline at end of file