KT-2255, KT-3032 Repair renaming in JetSimpleNameReference

This commit is contained in:
Vladimir Rudev
2013-01-10 00:19:03 +04:00
committed by Andrey Breslav
parent 2201e63031
commit e4d33e386e
2 changed files with 26 additions and 2 deletions
@@ -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);
}
}
@@ -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);
}