Fix Android layout widget redeclarations

This commit is contained in:
Yan Zhulanow
2015-03-20 21:24:43 +03:00
parent c40598b3e9
commit a4dc6870dc
17 changed files with 224 additions and 21 deletions
@@ -51,7 +51,8 @@ class AndroidFindMemberUsagesHandler(
override fun getPrimaryElements(): Array<PsiElement> {
assert(isAndroidSyntheticElement(declaration))
val name = (declaration as JetProperty).getName()!!
val property = declaration as JetProperty
val name = property.getName()!!
val parser = ServiceManager.getService(declaration.getProject(), javaClass<AndroidUIXmlProcessor>())
val psiElement = parser?.resourceManager?.idToXmlAttribute(name) as? XmlAttribute
if (psiElement != null && psiElement.getValueElement() != null) {
@@ -30,7 +30,7 @@ public class IDEAndroidResourceManager(val module: Module) : AndroidResourceMana
override fun idToXmlAttribute(id: String): PsiElement? {
var ret: PsiElement? = null
for (file in getLayoutXmlFiles()) {
for (file in getLayoutXmlFiles().values().flatMap { it }) {
file.accept(AndroidXmlVisitor({ retId, wClass, valueElement ->
if (retId == id) ret = valueElement
}))
@@ -41,13 +41,14 @@ class IDEAndroidUIXmlProcessor(val module: Module) : AndroidUIXmlProcessor(modul
}
}
override fun parseSingleFile(file: PsiFile): List<AndroidWidget> {
override fun parseLayout(files: List<PsiFile>): List<AndroidWidget> {
val widgets = arrayListOf<AndroidWidget>()
file.accept(AndroidXmlVisitor({ id, wClass, valueElement ->
widgets.add(AndroidWidget(id, wClass))
}))
val visitor = AndroidXmlVisitor { id, widgetType, attribute ->
widgets.add(AndroidWidget(id, widgetType))
}
return widgets
files.forEach { it.accept(visitor) }
return removeDuplicates(widgets)
}
}