From e4d33e386e0c81b87f0c18934c6dfb7a2a7ef349 Mon Sep 17 00:00:00 2001 From: Vladimir Rudev Date: Thu, 10 Jan 2013 00:19:03 +0400 Subject: [PATCH] KT-2255, KT-3032 Repair renaming in JetSimpleNameReference --- .../jetbrains/jet/lang/psi/JetPsiFactory.java | 10 ++++++++++ .../references/JetSimpleNameReference.java | 18 ++++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiFactory.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiFactory.java index 9472266b39b..5ff2cfdf1ae 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiFactory.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiFactory.java @@ -33,6 +33,7 @@ import org.jetbrains.jet.plugin.JetFileType; import java.util.List; public class JetPsiFactory { + public static ASTNode createValNode(Project project) { JetProperty property = createProperty(project, "val x = 1"); return property.getValOrVarNode(); @@ -200,4 +201,13 @@ public class JetPsiFactory { JetClass aClass = createClass(project, "class A()"); return aClass.findElementAt(7).getParent(); } + + public static JetSimpleNameExpression createClassLabel(Project project, @NotNull String labelName) { + JetThisExpression expression = (JetThisExpression) createExpression(project, "this@" + labelName); + return expression.getTargetLabel(); + } + + public static JetExpression createFieldIdentifier(Project project, @NotNull String fieldName) { + return createExpression(project, "$" + fieldName); + } } diff --git a/idea/src/org/jetbrains/jet/plugin/references/JetSimpleNameReference.java b/idea/src/org/jetbrains/jet/plugin/references/JetSimpleNameReference.java index 5c97d3a9a40..3a739d83bec 100644 --- a/idea/src/org/jetbrains/jet/plugin/references/JetSimpleNameReference.java +++ b/idea/src/org/jetbrains/jet/plugin/references/JetSimpleNameReference.java @@ -16,17 +16,20 @@ package org.jetbrains.jet.plugin.references; +import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; +import com.intellij.psi.tree.IElementType; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.plugin.codeInsight.TipsManager; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetPsiFactory; import org.jetbrains.jet.lang.psi.JetSimpleNameExpression; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.lazy.ResolveSession; import org.jetbrains.jet.lang.resolve.lazy.ResolveSessionUtils; +import org.jetbrains.jet.lexer.JetTokens; +import org.jetbrains.jet.plugin.codeInsight.TipsManager; import org.jetbrains.jet.plugin.completion.DescriptorLookupConverter; import org.jetbrains.jet.plugin.project.WholeProjectAnalyzerFacade; @@ -69,7 +72,18 @@ public class JetSimpleNameReference extends JetPsiReference { @Override public PsiElement handleElementRename(String newElementName) throws IncorrectOperationException { - PsiElement element = JetPsiFactory.createNameIdentifier(myExpression.getProject(), newElementName); + IElementType type = myExpression.getReferencedNameElementType(); + Project project = myExpression.getProject(); + PsiElement element; + if (JetTokens.FIELD_IDENTIFIER == type) { + element = JetPsiFactory.createFieldIdentifier(project, newElementName); + } + else if (JetTokens.LABEL_IDENTIFIER == type) { + element = JetPsiFactory.createClassLabel(project, newElementName); + } + else { + element = JetPsiFactory.createNameIdentifier(project, newElementName); + } return myExpression.getReferencedNameElement().replace(element); }