delegate android resource and manifest reading in ide to android support plugin

This commit is contained in:
Mikhail Mutcianko
2014-08-08 17:53:09 +04:00
committed by Yan Zhulanow
parent 85e18a3d73
commit f49e28387e
3 changed files with 35 additions and 2 deletions
@@ -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<PsiFile> {
@@ -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
}
@@ -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<PsiFile> {
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<String, PsiElement>()
public fun addMapping(name: String, attr: XmlAttribute) {
@@ -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
}