blob: 64327636836e56e87dcdd5013c4407e6686f3f75 [file] [log] [blame]
package com.intellij.refactoring.inline;
import com.intellij.JavaTestUtil;
import com.intellij.codeInsight.TargetElementUtilBase;
import com.intellij.psi.PsiElement;
import com.intellij.refactoring.BaseRefactoringProcessor;
import com.intellij.refactoring.LightRefactoringTestCase;
import com.intellij.refactoring.util.CommonRefactoringUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
/**
* @author yole
*/
public class InlineParameterTest extends LightRefactoringTestCase {
@NotNull
@Override
protected String getTestDataPath() {
return JavaTestUtil.getJavaTestDataPath();
}
public void testSameValue() throws Exception {
doTest(true);
}
public void testNullValue() throws Exception {
doTest(true);
}
public void testConstructorCall() throws Exception {
doTest(true);
}
public void testStaticFinalField() throws Exception {
doTest(true);
}
public void testRefIdentical() throws Exception {
doTest(true);
}
public void testRefIdenticalNoLocal() throws Exception {
doTest(false);
}
public void testRefLocalConstantInitializer() throws Exception {
doTest(false);
}
public void testRefLocalWithLocal() throws Exception {
doTest(false);
}
public void testRefMethod() throws Exception {
doTest(true);
}
public void testRefMethodOnLocal() throws Exception {
doTest(false);
}
public void testRefFinalLocal() throws Exception {
doTest(true);
}
public void testRefStaticField() throws Exception {
doTest(true);
}
public void testRefFinalLocalInitializedWithMethod() throws Exception {
doTest(false);
}
public void testRefSelfField() throws Exception {
doTest(false);
}
public void testRefStaticMethod() throws Exception {
doTest(true);
}
public void testRefOuterThis() throws Exception {
try {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on this which is not available inside the method and cannot be inlined", e.getMessage());
}
}
public void testRefThis() throws Exception {
doTest(false);
}
public void testRefQualifiedThis() throws Exception {
doTest(false);
}
public void testRefSameNonFinalField() throws Exception {
doTest(false);
}
public void testRefSameNonFinalFieldOtherObject() throws Exception {
doTestCannotFindInitializer();
}
public void testRef2ConstantsWithTheSameValue() throws Exception {
doTest(false);
}
public void testRefConstantAndField() throws Exception {
doTestCannotFindInitializer();
}
public void testRefNewInner() throws Exception {
try {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on class <b><code>User.Local</code></b> which is not available inside method and cannot be inlined", e.getMessage());
}
}
public void testRefNewInnerForMethod() throws Exception {
doTest(false);
}
public void testRefNewInnerAvailable() throws Exception {
doTest(false);
}
public void testLocalVarDeclarationInConstructor() throws Exception {
doTest(true);
}
public void testFromClassInitializer() throws Exception {
doTest(false);
}
public void testPropagatedParams() throws Exception {
doTest(false);
}
public void testParameterWithWriteAccess() throws Exception {
try {
doTest(false);
}
catch (CommonRefactoringUtil.RefactoringErrorHintException e) {
assertEquals("Inline parameter which has write usages is not supported", e.getMessage());
}
}
public void testRefNewInnerFromMethod() throws Exception {
try {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on class <b><code>Local</code></b> which is not available inside method and cannot be inlined", e.getMessage());
}
}
public void testRefNewInnerInHierarchyAvailable() throws Exception {
doTest(false);
}
public void testRefNewTopLevel() throws Exception {
doTest(false);
}
public void testRefNewLocal() throws Exception {
try {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on class <b><code>Local</code></b> which is not available inside method and cannot be inlined", e.getMessage());
}
}
public void testRefArrayAccess() throws Exception {
try {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on value which is not available inside method and cannot be inlined", e.getMessage());
}
}
public void testRefCallerParameter() throws Exception {
try {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on callers parameter", e.getMessage());
}
}
public void testHandleExceptions() throws Exception {
doTest(false);
}
private void doTestCannotFindInitializer() throws Exception {
try {
doTest(false);
}
catch (CommonRefactoringUtil.RefactoringErrorHintException e) {
assertEquals("Cannot find constant initializer for parameter", e.getMessage());
}
}
public void testRefNonStatic() throws Exception {
try {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on method <b><code>provideObject()</code></b> which is not available inside the static method", e.getMessage());
}
}
public void testRefNonStaticClass() throws Exception {
try {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on non static class which is not available inside static method", e.getMessage());
}
}
public void testRefThisFromStatic() throws Exception {
try {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on this which is not available inside the static method", e.getMessage());
}
}
public void testVisibility() throws Exception {
try {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on value which is not available inside method", e.getMessage());
}
}
public void testWriteAccess() throws Exception {
try {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on value which is not available inside method and cannot be inlined", e.getMessage());
}
}
public void testRefCallerParameterInCallChain() throws Exception {
try {
doTest(false);
}
catch (BaseRefactoringProcessor.ConflictsInTestsException e) {
assertEquals("Parameter initializer depends on callers parameter", e.getMessage());
}
}
public void testInlineLocalParamDef() throws Exception {
doTest(false);
}
public void testInlineRecursive() throws Exception {
doTest(false);
}
public void testCantInlineRecursive() throws Exception {
try {
doTest(false);
}
catch (CommonRefactoringUtil.RefactoringErrorHintException e) {
assertEquals("Cannot find constant initializer for parameter", e.getMessage());
return;
}
fail("Initializer shoul not be found");
}
public void testParameterDefWithWriteAccess() throws Exception {
try {
doTest(false);
}
catch (CommonRefactoringUtil.RefactoringErrorHintException e) {
assertEquals("Method has no usages", e.getMessage());
}
}
private void doTest(final boolean createLocal) throws Exception {
getProject().putUserData(InlineParameterExpressionProcessor.CREATE_LOCAL_FOR_TESTS,createLocal);
String name = getTestName(false);
@NonNls String fileName = "/refactoring/inlineParameter/" + name + ".java";
configureByFile(fileName);
performAction();
checkResultByFile(null, fileName + ".after", true);
}
private static void performAction() {
final PsiElement element = TargetElementUtilBase.findTargetElement(myEditor, TargetElementUtilBase
.REFERENCED_ELEMENT_ACCEPTED | TargetElementUtilBase.ELEMENT_NAME_ACCEPTED);
new InlineParameterHandler().inlineElement(getProject(), myEditor, element);
}
}