From d310b2021cd5a99a4b736a4322aad801c58614e1 Mon Sep 17 00:00:00 2001 From: Mikhail Mutcianko Date: Fri, 8 Aug 2014 14:33:13 +0400 Subject: [PATCH] add android xml reference and rename handling to JetSimpleNameReference --- .../idea/references/JetSimpleNameReference.kt | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/JetSimpleNameReference.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/JetSimpleNameReference.kt index fb5361d87d8..a50124c04ed 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/JetSimpleNameReference.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/JetSimpleNameReference.kt @@ -35,11 +35,30 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.dataClassUtils.isComponentLike import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.psi.psiUtil.* +import com.intellij.psi.impl.light.LightElement public class JetSimpleNameReference( jetSimpleNameExpression: JetSimpleNameExpression ) : JetSimpleReference(jetSimpleNameExpression) { + override fun isReferenceTo(element: PsiElement?): Boolean { + val resolvedElement = resolve() + if (resolvedElement == null || element == null) { + return false + } + if (isAndroidSyntheticElement(resolvedElement)) { + if (element is ValueResourceElementWrapper) { + val resource = element.getValue()!! + return (resolvedElement as JetProperty).getName() == resource.substring(resource.indexOf('/')+1) + } + + } + else if (resolvedElement is LightElement && element is JetProperty) { + return resolvedElement.getName() == element.getName() + } + return super.isReferenceTo(element) + } + override fun getRangeInElement(): TextRange = TextRange(0, getElement().getTextLength()) override fun canRename(): Boolean { @@ -67,7 +86,14 @@ public class JetSimpleNameReference( val element = when (expression.getReferencedNameElementType()) { JetTokens.FIELD_IDENTIFIER -> psiFactory.createFieldIdentifier(newElementName) JetTokens.LABEL_IDENTIFIER -> psiFactory.createClassLabel(newElementName) - else -> psiFactory.createNameIdentifier(newElementName) + else -> { + if (newElementName.startsWith("@+id/")) { + psiFactory.createNameIdentifier(newElementName.substring(newElementName.indexOf('/')+1)) + } + else { + psiFactory.createNameIdentifier(newElementName) + } + } } var nameElement = expression.getReferencedNameElement()