delegate android resource and manifest reading in ide to android support plugin
This commit is contained in:
committed by
Yan Zhulanow
parent
85e18a3d73
commit
f49e28387e
+7
@@ -29,6 +29,7 @@ import javax.xml.parsers.SAXParser
|
|||||||
import javax.xml.parsers.SAXParserFactory
|
import javax.xml.parsers.SAXParserFactory
|
||||||
import org.xml.sax.helpers.DefaultHandler
|
import org.xml.sax.helpers.DefaultHandler
|
||||||
import org.xml.sax.Attributes
|
import org.xml.sax.Attributes
|
||||||
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
|
|
||||||
open class AndroidResourceManagerBase(project: Project, searchPath: String?) : AndroidResourceManager(project, searchPath) {
|
open class AndroidResourceManagerBase(project: Project, searchPath: String?) : AndroidResourceManager(project, searchPath) {
|
||||||
override fun getLayoutXmlFiles(): Collection<PsiFile> {
|
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)
|
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? {
|
override fun idToXmlAttribute(id: String): PsiElement? {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,9 +21,34 @@ import org.jetbrains.jet.lang.resolve.android.AndroidResourceManagerBase
|
|||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import java.util.HashMap
|
import java.util.HashMap
|
||||||
import com.intellij.psi.xml.XmlAttribute
|
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) {
|
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>()
|
private val idToXmlAttributeCache = HashMap<String, PsiElement>()
|
||||||
|
|
||||||
public fun addMapping(name: String, attr: XmlAttribute) {
|
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) {
|
class IDEAndroidUIXmlProcessor(project: Project) : AndroidUIXmlProcessor(project) {
|
||||||
override val searchPath: String? = project.getBasePath() + "/res/layout/"
|
override val searchPath: String? = project.getBasePath() + "/res/layout/"
|
||||||
override var androidAppPackage: String = ""
|
override var androidAppPackage: String = ""
|
||||||
|
get() = resourceManager.readManifest()._package
|
||||||
|
|
||||||
override val resourceManager: IDEAndroidResourceManager = IDEAndroidResourceManager(project, searchPath)
|
override val resourceManager: IDEAndroidResourceManager = IDEAndroidResourceManager(project, searchPath)
|
||||||
|
|
||||||
override protected fun lazySetup() {
|
override protected fun lazySetup() {
|
||||||
if (listenerSetUp) return
|
if (listenerSetUp) return
|
||||||
androidAppPackage = resourceManager.readManifest()._package
|
// androidAppPackage = resourceManager.readManifest()._package
|
||||||
populateQueue()
|
// populateQueue()
|
||||||
listenerSetUp = true
|
listenerSetUp = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user