Do not pass resource manager to AndroidXmlVisitor and AndroidXmlHandler

This commit is contained in:
Yan Zhulanow
2015-02-27 21:05:49 +03:00
parent 13fee64003
commit c56347058f
5 changed files with 9 additions and 13 deletions
@@ -20,10 +20,7 @@ import org.xml.sax.helpers.DefaultHandler
import org.xml.sax.Attributes import org.xml.sax.Attributes
import java.util.HashMap import java.util.HashMap
class AndroidXmlHandler( class AndroidXmlHandler(private val elementCallback: (String, String) -> Unit) : DefaultHandler() {
private val resourceManager: AndroidResourceManager,
private val elementCallback: (String, String) -> Unit
) : DefaultHandler() {
override fun startDocument() { override fun startDocument() {
super<DefaultHandler>.startDocument() super<DefaultHandler>.startDocument()
@@ -40,7 +40,7 @@ public class CliAndroidUIXmlProcessor(
override fun parseSingleFile(file: PsiFile): Collection<AndroidWidget> { override fun parseSingleFile(file: PsiFile): Collection<AndroidWidget> {
val widgets: MutableCollection<AndroidWidget> = ArrayList() val widgets: MutableCollection<AndroidWidget> = ArrayList()
val handler = AndroidXmlHandler(resourceManager, { id, clazz -> widgets.add(AndroidWidget(id, clazz)) }) val handler = AndroidXmlHandler { id, clazz -> widgets.add(AndroidWidget(id, clazz)) }
try { try {
val inputStream = ByteArrayInputStream(file.getVirtualFile().contentsToByteArray()) val inputStream = ByteArrayInputStream(file.getVirtualFile().contentsToByteArray())
@@ -26,10 +26,7 @@ import org.jetbrains.kotlin.lang.resolve.android.AndroidConst
import org.jetbrains.kotlin.lang.resolve.android import org.jetbrains.kotlin.lang.resolve.android
import org.jetbrains.kotlin.lang.resolve.android.idToName import org.jetbrains.kotlin.lang.resolve.android.idToName
class AndroidXmlVisitor( class AndroidXmlVisitor(val elementCallback: (String, String, XmlAttribute) -> Unit) : XmlElementVisitor() {
val resourceManager: AndroidResourceManager,
val elementCallback: (String, String, XmlAttribute) -> Unit
) : XmlElementVisitor() {
override fun visitElement(element: PsiElement) { override fun visitElement(element: PsiElement) {
element.acceptChildren(this) element.acceptChildren(this)
@@ -45,8 +42,10 @@ class AndroidXmlVisitor(
val attributeValue = attribute.getValue() val attributeValue = attribute.getValue()
if (attributeValue != null) { if (attributeValue != null) {
val classNameAttr = tag?.getAttribute(AndroidConst.CLASS_ATTRIBUTE_NO_NAMESPACE)?.getValue() ?: tag?.getLocalName() val classNameAttr = tag?.getAttribute(AndroidConst.CLASS_ATTRIBUTE_NO_NAMESPACE)?.getValue() ?: tag?.getLocalName()
val name = idToName(attributeValue) if (classNameAttr != null) {
if (name != null) elementCallback(name, classNameAttr!!, attribute) val name = idToName(attributeValue)
if (name != null) elementCallback(name, classNameAttr!!, attribute)
}
} }
} }
tag?.acceptChildren(this) tag?.acceptChildren(this)
@@ -31,7 +31,7 @@ public class IDEAndroidResourceManager(val module: Module) : AndroidResourceMana
override fun idToXmlAttribute(id: String): PsiElement? { override fun idToXmlAttribute(id: String): PsiElement? {
var ret: PsiElement? = null var ret: PsiElement? = null
for (file in getLayoutXmlFiles()) { for (file in getLayoutXmlFiles()) {
file.accept(AndroidXmlVisitor(this, { retId, wClass, valueElement -> file.accept(AndroidXmlVisitor({ retId, wClass, valueElement ->
if (retId == id) ret = valueElement if (retId == id) ret = valueElement
})) }))
} }
@@ -35,7 +35,7 @@ class IDEAndroidUIXmlProcessor(val module: Module) : AndroidUIXmlProcessor(modul
override fun parseSingleFile(file: PsiFile): List<AndroidWidget> { override fun parseSingleFile(file: PsiFile): List<AndroidWidget> {
val widgets = arrayListOf<AndroidWidget>() val widgets = arrayListOf<AndroidWidget>()
file.accept(AndroidXmlVisitor(resourceManager, { id, wClass, valueElement -> file.accept(AndroidXmlVisitor({ id, wClass, valueElement ->
widgets.add(AndroidWidget(id, wClass)) widgets.add(AndroidWidget(id, wClass))
})) }))