diff --git a/idea/src/org/jetbrains/jet/plugin/android/AndroidRenameProcessor.kt b/idea/src/org/jetbrains/jet/plugin/android/AndroidRenameProcessor.kt index 496e17c32dd..f8926b086b7 100644 --- a/idea/src/org/jetbrains/jet/plugin/android/AndroidRenameProcessor.kt +++ b/idea/src/org/jetbrains/jet/plugin/android/AndroidRenameProcessor.kt @@ -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, 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, 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, newPropName: String, oldPropName: String?, processor: AndroidUIXmlProcessor) { val props = processor.lastCachedPsi?.findChildrenByClass(javaClass()) val matchedProps = props?.filter { it.getName() == oldPropName } ?: arrayListOf() for (prop in matchedProps) { allRenames[prop] = newPropName } } + + private fun renameLightClassField(field: LightElement, newName: String?, allRenames: MutableMap, scope: SearchScope) { + val oldName = field.getName()!! + val processor = ServiceManager.getService(field.getProject(), javaClass()) + renameSyntheticProperties(allRenames, newName!!, oldName, processor!!) + } + }