add synthetic property renaming by renaming R light class field

This commit is contained in:
Mikhail Mutcianko
2014-08-03 19:11:18 +04:00
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.util.AndroidResourceUtil
import com.intellij.psi.xml.XmlAttribute
import com.intellij.psi.impl.light.LightElement
public class AndroidRenameProcessor : RenamePsiElementProcessor() {
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 &&
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) {
@@ -42,6 +45,9 @@ public class AndroidRenameProcessor : RenamePsiElementProcessor() {
else if (element is XmlAttributeValue) {
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) {
@@ -63,10 +69,21 @@ public class AndroidRenameProcessor : RenamePsiElementProcessor() {
if (element1 == null) return
val oldPropName = AndroidResourceUtil.getResourceNameByReferenceText(attribute.getValue()!!)
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 matchedProps = props?.filter { it.getName() == oldPropName } ?: arrayListOf()
for (prop in matchedProps) {
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!!)
}
}