From f49e28387e22a373df35daa1140e066483a846c7 Mon Sep 17 00:00:00 2001 From: Mikhail Mutcianko Date: Fri, 8 Aug 2014 17:53:09 +0400 Subject: [PATCH] delegate android resource and manifest reading in ide to android support plugin --- .../android/AndroidResourceManagerBase.kt | 7 ++++++ .../android/IDEAndroidResourceManager.kt | 25 +++++++++++++++++++ .../android/IDEAndroidUIXmlProcessor.kt | 5 ++-- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidResourceManagerBase.kt b/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidResourceManagerBase.kt index 21ead1cc1fb..a218d822468 100644 --- a/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidResourceManagerBase.kt +++ b/compiler/frontend.android/src/org/jetbrains/jet/lang/resolve/android/AndroidResourceManagerBase.kt @@ -29,6 +29,7 @@ import javax.xml.parsers.SAXParser import javax.xml.parsers.SAXParserFactory import org.xml.sax.helpers.DefaultHandler import org.xml.sax.Attributes +import com.intellij.openapi.vfs.VirtualFile open class AndroidResourceManagerBase(project: Project, searchPath: String?) : AndroidResourceManager(project, searchPath) { override fun getLayoutXmlFiles(): Collection { @@ -38,6 +39,12 @@ open class AndroidResourceManagerBase(project: Project, searchPath: String?) : A return watchDir?.getChildren()?.toArrayList()?.map { psiManager.findFile(it) }?.mapNotNull { it } ?: ArrayList(0) } + protected fun vritualFileToPsi(vf: VirtualFile): PsiFile? { + val psiManager = PsiManager.getInstance(project) + return psiManager.findFile(vf) + + } + override fun idToXmlAttribute(id: String): PsiElement? { return null } diff --git a/idea/src/org/jetbrains/jet/plugin/android/IDEAndroidResourceManager.kt b/idea/src/org/jetbrains/jet/plugin/android/IDEAndroidResourceManager.kt index 9eb00df2e08..7a884ae27e9 100644 --- a/idea/src/org/jetbrains/jet/plugin/android/IDEAndroidResourceManager.kt +++ b/idea/src/org/jetbrains/jet/plugin/android/IDEAndroidResourceManager.kt @@ -21,9 +21,34 @@ import org.jetbrains.jet.lang.resolve.android.AndroidResourceManagerBase import com.intellij.psi.PsiElement import java.util.HashMap import com.intellij.psi.xml.XmlAttribute +import com.intellij.psi.PsiFile +import org.jetbrains.android.util.AndroidResourceUtil +import org.jetbrains.jps.android.AndroidJpsUtil +import org.jetbrains.android.facet.AndroidFacet +import org.jetbrains.jet.lang.resolve.android.AndroidManifest +import com.intellij.openapi.module.ModuleManager public class IDEAndroidResourceManager(project: Project, searchPath: String?) : AndroidResourceManagerBase(project, searchPath) { + override fun getLayoutXmlFiles(): Collection { + val facet = getAndroidFacet() + return facet.getAllResourceDirectories() flatMap { it.findChild("layout")?.getChildren()!! map {vritualFileToPsi(it)!!}} + } + + private fun getAndroidFacet(): AndroidFacet { + for (module in ModuleManager.getInstance(project)!!.getModules()) { + val facet = AndroidFacet.getInstance(module) + if (facet != null) return facet + } + throw Exception("No android facet found in project") + } + + override fun readManifest(): AndroidManifest { + val facet = getAndroidFacet() + val attributeValue = facet.getManifest()!!.getPackage() + return AndroidManifest(attributeValue!!.getRawText()!!) + } + private val idToXmlAttributeCache = HashMap() public fun addMapping(name: String, attr: XmlAttribute) { diff --git a/idea/src/org/jetbrains/jet/plugin/android/IDEAndroidUIXmlProcessor.kt b/idea/src/org/jetbrains/jet/plugin/android/IDEAndroidUIXmlProcessor.kt index ebe42c007b7..92a55c27bd0 100644 --- a/idea/src/org/jetbrains/jet/plugin/android/IDEAndroidUIXmlProcessor.kt +++ b/idea/src/org/jetbrains/jet/plugin/android/IDEAndroidUIXmlProcessor.kt @@ -26,13 +26,14 @@ import org.jetbrains.jet.lang.resolve.android.KotlinStringWriter class IDEAndroidUIXmlProcessor(project: Project) : AndroidUIXmlProcessor(project) { override val searchPath: String? = project.getBasePath() + "/res/layout/" override var androidAppPackage: String = "" + get() = resourceManager.readManifest()._package override val resourceManager: IDEAndroidResourceManager = IDEAndroidResourceManager(project, searchPath) override protected fun lazySetup() { if (listenerSetUp) return - androidAppPackage = resourceManager.readManifest()._package - populateQueue() +// androidAppPackage = resourceManager.readManifest()._package +// populateQueue() listenerSetUp = true }