Search for all properties in layout files corresponding to the given JetProperty
This commit is contained in:
+15
-12
@@ -58,10 +58,9 @@ class AndroidFindMemberUsagesHandler(
|
||||
val moduleInfo = declaration.getModuleInfo() as? ModuleSourceInfo ?: return super.getPrimaryElements()
|
||||
val parser = ModuleServiceManager.getService(moduleInfo.module, javaClass<AndroidUIXmlProcessor>())
|
||||
|
||||
val psiElement = parser?.resourceManager?.propertyToXmlAttribute(property) as? XmlAttribute
|
||||
if (psiElement != null && psiElement.getValueElement() != null) {
|
||||
return array(psiElement.getValueElement()!!)
|
||||
}
|
||||
val psiElements = parser?.resourceManager?.propertyToXmlAttributes(property)
|
||||
val valueElements = psiElements?.map { (it as? XmlAttribute)?.getValueElement() as? PsiElement }?.filterNotNull()
|
||||
if (valueElements != null && valueElements.isNotEmpty()) return valueElements.copyToArray()
|
||||
|
||||
return super.getPrimaryElements()
|
||||
}
|
||||
@@ -77,17 +76,21 @@ class AndroidFindMemberUsagesHandler(
|
||||
val moduleInfo = declaration.getModuleInfo() as? ModuleSourceInfo ?: return super.getPrimaryElements()
|
||||
val parser = ModuleServiceManager.getService(moduleInfo.module, javaClass<AndroidUIXmlProcessor>())
|
||||
|
||||
val psiElement = parser?.resourceManager?.propertyToXmlAttribute(property) as? XmlAttribute
|
||||
if (psiElement != null) {
|
||||
val res = ArrayList<PsiElement>()
|
||||
val fields = AndroidResourceUtil.findIdFields(psiElement)
|
||||
for (field in fields) {
|
||||
res.add(field)
|
||||
val psiElements = parser?.resourceManager?.propertyToXmlAttributes(property) ?: listOf()
|
||||
|
||||
val res = ArrayList<PsiElement>()
|
||||
for (psiElement in psiElements) {
|
||||
if (psiElement is XmlAttribute) {
|
||||
val fields = AndroidResourceUtil.findIdFields(psiElement)
|
||||
for (field in fields) {
|
||||
res.add(field)
|
||||
}
|
||||
res.add(declaration)
|
||||
}
|
||||
res.add(declaration)
|
||||
return res.copyToArray()
|
||||
}
|
||||
|
||||
if (res.isNotEmpty()) return res.copyToArray()
|
||||
|
||||
return super.getSecondaryElements()
|
||||
}
|
||||
|
||||
|
||||
+3
-5
@@ -41,11 +41,9 @@ public class AndroidGotoDeclarationHandler : GotoDeclarationHandler {
|
||||
if (moduleInfo !is ModuleSourceInfo) return null
|
||||
|
||||
val parser = ModuleServiceManager.getService(moduleInfo.module, javaClass<AndroidUIXmlProcessor>())
|
||||
val psiElement = parser.resourceManager.propertyToXmlAttribute(property) as? XmlAttribute
|
||||
val attributeValue = psiElement?.getValueElement()
|
||||
if (attributeValue != null) {
|
||||
return array(attributeValue)
|
||||
}
|
||||
val psiElements = parser.resourceManager.propertyToXmlAttributes(property)
|
||||
val valueElements = psiElements.map { (it as? XmlAttribute)?.getValueElement() as? PsiElement }.filterNotNull()
|
||||
if (valueElements.isNotEmpty()) return valueElements.copyToArray()
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
+13
-6
@@ -96,12 +96,19 @@ public class AndroidRenameProcessor : RenamePsiElementProcessor() {
|
||||
|
||||
val processor = ModuleServiceManager.getService(module, javaClass<AndroidUIXmlProcessor>())
|
||||
val resourceManager = processor.resourceManager
|
||||
val attr = resourceManager.propertyToXmlAttribute(jetProperty) as XmlAttribute
|
||||
val attributeValue = attr.getValueElement() ?: return
|
||||
allRenames[XmlAttributeValueWrapper(attributeValue)] = nameToIdDeclaration(newName)
|
||||
val name = AndroidResourceUtil.getResourceNameByReferenceText(newName) ?: return
|
||||
for (resField in AndroidResourceUtil.findIdFields(attr)) {
|
||||
allRenames.put(resField, AndroidResourceUtil.getFieldNameByResourceName(name))
|
||||
|
||||
val psiElements = resourceManager.propertyToXmlAttributes(jetProperty).map { it as? XmlAttribute }.filterNotNull()
|
||||
|
||||
for (psiElement in psiElements) {
|
||||
val valueElement = psiElement.getValueElement()
|
||||
|
||||
if (valueElement != null) {
|
||||
allRenames[XmlAttributeValueWrapper(valueElement)] = nameToIdDeclaration(newName)
|
||||
val name = AndroidResourceUtil.getResourceNameByReferenceText(newName) ?: return
|
||||
for (resField in AndroidResourceUtil.findIdFields(psiElement)) {
|
||||
allRenames.put(resField, AndroidResourceUtil.getFieldNameByResourceName(name))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+8
-8
@@ -30,23 +30,23 @@ public class IDEAndroidResourceManager(val module: Module) : AndroidResourceMana
|
||||
|
||||
override val androidModuleInfo: AndroidModuleInfo? by Delegates.lazy { module.androidFacet?.toAndroidModuleInfo() }
|
||||
|
||||
override fun propertyToXmlAttribute(property: JetProperty): PsiElement? {
|
||||
val fqPath = property.getFqName()?.pathSegments() ?: return null
|
||||
if (fqPath.size() <= AndroidConst.SYNTHETIC_PACKAGE_PATH_LENGTH) return null
|
||||
override fun propertyToXmlAttributes(property: JetProperty): List<PsiElement> {
|
||||
val fqPath = property.getFqName()?.pathSegments() ?: return listOf()
|
||||
if (fqPath.size() <= AndroidConst.SYNTHETIC_PACKAGE_PATH_LENGTH) return listOf()
|
||||
|
||||
val layoutPackageName = fqPath[AndroidConst.SYNTHETIC_PACKAGE_PATH_LENGTH].asString()
|
||||
val layoutFiles = getLayoutXmlFiles()[layoutPackageName]
|
||||
if (layoutFiles == null || layoutFiles.isEmpty()) return null
|
||||
if (layoutFiles == null || layoutFiles.isEmpty()) return listOf()
|
||||
|
||||
val propertyName = property.getName()
|
||||
|
||||
var ret: PsiElement? = null
|
||||
val attributes = arrayListOf<PsiElement>()
|
||||
val visitor = AndroidXmlVisitor { retId, wClass, valueElement ->
|
||||
if (retId == propertyName) ret = valueElement
|
||||
if (retId == propertyName) attributes.add(valueElement)
|
||||
}
|
||||
|
||||
layoutFiles.first().accept(visitor)
|
||||
return ret
|
||||
layoutFiles.forEach { it.accept(visitor) }
|
||||
return attributes
|
||||
}
|
||||
|
||||
private val Module.androidFacet: AndroidFacet?
|
||||
|
||||
Reference in New Issue
Block a user