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 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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user