add synthetic property renaming by renaming R light class field
This commit is contained in:
committed by
Yan Zhulanow
parent
885d963c3f
commit
9f20c36959
@@ -28,11 +28,14 @@ import com.intellij.psi.xml.XmlAttributeValue
|
|||||||
import org.jetbrains.android.dom.wrappers.LazyValueResourceElementWrapper
|
import org.jetbrains.android.dom.wrappers.LazyValueResourceElementWrapper
|
||||||
import org.jetbrains.android.util.AndroidResourceUtil
|
import org.jetbrains.android.util.AndroidResourceUtil
|
||||||
import com.intellij.psi.xml.XmlAttribute
|
import com.intellij.psi.xml.XmlAttribute
|
||||||
|
import com.intellij.psi.impl.light.LightElement
|
||||||
|
|
||||||
public class AndroidRenameProcessor : RenamePsiElementProcessor() {
|
public class AndroidRenameProcessor : RenamePsiElementProcessor() {
|
||||||
override fun canProcessElement(element: PsiElement): Boolean {
|
override fun canProcessElement(element: PsiElement): Boolean {
|
||||||
|
// either renaming synthetic property, or value in ui xml, or R light class field
|
||||||
return (element.namedUnwrappedElement is JetProperty &&
|
return (element.namedUnwrappedElement is JetProperty &&
|
||||||
isAndroidSyntheticElement(element.namedUnwrappedElement)) || element is XmlAttributeValue
|
isAndroidSyntheticElement(element.namedUnwrappedElement)) || element is XmlAttributeValue ||
|
||||||
|
element is LightElement
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun prepareRenaming(element: PsiElement?, newName: String?, allRenames: MutableMap<PsiElement, String>, scope: SearchScope) {
|
override fun prepareRenaming(element: PsiElement?, newName: String?, allRenames: MutableMap<PsiElement, String>, scope: SearchScope) {
|
||||||
@@ -42,6 +45,9 @@ public class AndroidRenameProcessor : RenamePsiElementProcessor() {
|
|||||||
else if (element is XmlAttributeValue) {
|
else if (element is XmlAttributeValue) {
|
||||||
renameAttributeValue(element, newName, allRenames, scope)
|
renameAttributeValue(element, newName, allRenames, scope)
|
||||||
}
|
}
|
||||||
|
else if (element is LightElement) {
|
||||||
|
renameLightClassField(element, newName, allRenames, scope)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun renameSyntheticProperty(jetProperty: JetProperty, newName: String?, allRenames: MutableMap<PsiElement, String>, scope: SearchScope) {
|
private fun renameSyntheticProperty(jetProperty: JetProperty, newName: String?, allRenames: MutableMap<PsiElement, String>, scope: SearchScope) {
|
||||||
@@ -63,10 +69,21 @@ public class AndroidRenameProcessor : RenamePsiElementProcessor() {
|
|||||||
if (element1 == null) return
|
if (element1 == null) return
|
||||||
val oldPropName = AndroidResourceUtil.getResourceNameByReferenceText(attribute.getValue()!!)
|
val oldPropName = AndroidResourceUtil.getResourceNameByReferenceText(attribute.getValue()!!)
|
||||||
val newPropName = processor!!.resourceManager.idToName(newName!!)
|
val newPropName = processor!!.resourceManager.idToName(newName!!)
|
||||||
|
renameSyntheticProperties(allRenames, newPropName, oldPropName, processor)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun renameSyntheticProperties(allRenames: MutableMap<PsiElement, String>, newPropName: String, oldPropName: String?, processor: AndroidUIXmlProcessor) {
|
||||||
val props = processor.lastCachedPsi?.findChildrenByClass(javaClass<JetProperty>())
|
val props = processor.lastCachedPsi?.findChildrenByClass(javaClass<JetProperty>())
|
||||||
val matchedProps = props?.filter { it.getName() == oldPropName } ?: arrayListOf()
|
val matchedProps = props?.filter { it.getName() == oldPropName } ?: arrayListOf()
|
||||||
for (prop in matchedProps) {
|
for (prop in matchedProps) {
|
||||||
allRenames[prop] = newPropName
|
allRenames[prop] = newPropName
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun renameLightClassField(field: LightElement, newName: String?, allRenames: MutableMap<PsiElement, String>, scope: SearchScope) {
|
||||||
|
val oldName = field.getName()!!
|
||||||
|
val processor = ServiceManager.getService(field.getProject(), javaClass<AndroidUIXmlProcessor>())
|
||||||
|
renameSyntheticProperties(allRenames, newName!!, oldName, processor!!)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user