blob: 6799dd64391cc235409f14e230b53f0ca257d15e [file] [log] [blame]
package com.intellij.refactoring;
import com.intellij.JavaTestUtil;
import com.intellij.codeInsight.TargetElementUtilBase;
import com.intellij.codeInsight.template.impl.TemplateManagerImpl;
import com.intellij.codeInsight.template.impl.TemplateState;
import com.intellij.lang.java.JavaRefactoringSupportProvider;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
import com.intellij.refactoring.rename.JavaNameSuggestionProvider;
import com.intellij.refactoring.rename.RenameProcessor;
import com.intellij.refactoring.rename.RenameWrongRefHandler;
import com.intellij.refactoring.rename.inplace.VariableInplaceRenameHandler;
import com.intellij.testFramework.fixtures.CodeInsightTestUtil;
import org.jetbrains.annotations.NotNull;
import java.util.HashSet;
/**
* @author ven
*/
public class RenameLocalTest extends LightRefactoringTestCase {
private static final String BASE_PATH = "/refactoring/renameLocal/";
@NotNull
@Override
protected String getTestDataPath() {
return JavaTestUtil.getJavaTestDataPath();
}
public void testIDEADEV3320() throws Exception {
doTest("f");
}
public void testIDEADEV13849() throws Exception {
doTest("aaaaa");
}
public void testConflictWithOuterClassField() throws Exception { // IDEADEV-24564
doTest("f");
}
public void testConflictWithJavadocTag() throws Exception {
doTest("i");
}
public void testRenameLocalIncomplete() throws Exception {
doTest("_i");
}
public void testRenameParamIncomplete() throws Exception {
doTest("_i");
}
public void testClassNameUsedInMethodRefs() throws Exception {
doTest("Bar1");
}
public void testRenameParamUniqueName() throws Exception {
configureByFile(BASE_PATH + getTestName(false) + ".java");
PsiElement element = TargetElementUtilBase
.findTargetElement(myEditor, TargetElementUtilBase.ELEMENT_NAME_ACCEPTED | TargetElementUtilBase.REFERENCED_ELEMENT_ACCEPTED);
assertNotNull(element);
final HashSet<String> result = new HashSet<String>();
new JavaNameSuggestionProvider().getSuggestedNames(element, getFile(), result);
assertTrue(result.toString(), result.contains("window"));
}
private void doTest(final String newName) throws Exception {
configureByFile(BASE_PATH + getTestName(false) + ".java");
PsiElement element = TargetElementUtilBase
.findTargetElement(myEditor, TargetElementUtilBase.ELEMENT_NAME_ACCEPTED | TargetElementUtilBase.REFERENCED_ELEMENT_ACCEPTED);
assertNotNull(element);
new RenameProcessor(getProject(), element, newName, true, true).run();
checkResultByFile(BASE_PATH + getTestName(false) + "_after.java");
}
public void testRenameInPlaceQualifyFieldReference() throws Exception {
doTestInplaceRename("myI");
}
public void testRenameInPlaceQualifyFieldReferenceInChild() throws Exception {
doTestInplaceRename("myI");
}
public void testRenameInPlaceThisNeeded() throws Exception {
doTestInplaceRename("a");
}
public void testRenameInPlaceOnRef() throws Exception {
doTestInplaceRename("a");
}
public void testRenameInPlaceParamInOverriderAutomaticRenamer() throws Exception {
doTestInplaceRename("pp");
}
public void testRenameFieldWithConstructorParamAutomatic() throws Exception {
doTest("pp");
}
public void testRenameInPlaceParamInOverriderAutomaticRenamerConflict() throws Exception {
doTestInplaceRename("pp");
}
public void testRenameResource() throws Exception {
doTest("r1");
}
public void testRenameResourceInPlace() throws Exception {
doTestInplaceRename("r1");
}
public void testRenameToFieldNameInStaticContext() throws Exception {
doTestInplaceRename("myFoo");
}
public void testRenameInPlaceInStaticContextWithConflictingField() throws Exception {
doTestInplaceRename("s");
}
private void doTestInplaceRename(final String newName) throws Exception {
configureByFile(BASE_PATH + "/" + getTestName(false) + ".java");
final PsiElement element = TargetElementUtilBase.findTargetElement(myEditor, TargetElementUtilBase.ELEMENT_NAME_ACCEPTED | TargetElementUtilBase.REFERENCED_ELEMENT_ACCEPTED);
assertNotNull(element);
assertTrue("In-place rename not allowed for " + element,
JavaRefactoringSupportProvider.mayRenameInplace(element, null));
CodeInsightTestUtil.doInlineRename(new VariableInplaceRenameHandler(), newName, getEditor(), element);
checkResultByFile(BASE_PATH + getTestName(false) + "_after.java");
}
public void testRenameWrongRef() throws Exception {
doRenameWrongRef("i");
}
private void doRenameWrongRef(final String newName) throws Exception {
final String name = getTestName(false);
configureByFile(BASE_PATH + name + ".java");
TemplateManagerImpl.setTemplateTesting(getProject(), getTestRootDisposable());
new RenameWrongRefHandler().invoke(getProject(), getEditor(), getFile(), null);
final TemplateState state = TemplateManagerImpl.getTemplateState(getEditor());
assert state != null;
final TextRange range = state.getCurrentVariableRange();
assert range != null;
new WriteCommandAction.Simple(getProject()) {
@Override
protected void run() throws Throwable {
getEditor().getDocument().replaceString(range.getStartOffset(), range.getEndOffset(), newName);
}
}.execute().throwException();
state.gotoEnd(false);
checkResultByFile(BASE_PATH + name + "_after.java");
}
}