Fix compatibility with AS 2.0 (for master branch)

This commit is contained in:
Natalia Ukhorskaya
2015-11-24 19:05:56 +03:00
parent 48027f5fb5
commit 0d80b4f8b0
@@ -24,9 +24,9 @@ import com.intellij.psi.impl.PsiTreeChangePreprocessor
import com.intellij.psi.util.CachedValue import com.intellij.psi.util.CachedValue
import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValueProvider
import org.jetbrains.android.facet.AndroidFacet 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.AndroidConst.SYNTHETIC_PACKAGE_PATH_LENGTH
import org.jetbrains.kotlin.android.synthetic.idea.AndroidPsiTreeChangePreprocessor 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.android.synthetic.res.*
import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor
@@ -100,12 +100,28 @@ public class IDEAndroidLayoutXmlFileManager(val module: Module) : AndroidLayoutX
private fun AndroidFacet.toAndroidModuleInfo(): AndroidModule? { private fun AndroidFacet.toAndroidModuleInfo(): AndroidModule? {
val applicationPackage = manifest?.`package`?.toString() 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 mainVariant = mainSourceProvider.toVariant()
val flavorVariants = flavorSourceProviders?.map { it.toVariant() } ?: listOf() if (modelClass == null) {
AndroidModule(applicationPackage, listOf(mainVariant) + flavorVariants) 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<SourceProvider>
return AndroidModule(applicationPackage, listOf(mainVariant) + sourceProviders.map { it.toVariant() })
}
}
} }
else null return null
} }
} }