package com.intellij.refactoring; import com.intellij.JavaTestUtil; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.refactoring.replaceConstructorWithFactory.ReplaceConstructorWithFactoryProcessor; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; /** * @author dsl */ public class ReplaceConstructorWithFactoryTest extends LightRefactoringTestCase { @NotNull @Override protected String getTestDataPath() { return JavaTestUtil.getJavaTestDataPath(); } public void testEmptyConstructor() throws Exception { runTest("01", null); } public void testSubclass() throws Exception { runTest("02", null); } public void testDefaultConstructor() throws Exception { runTest("03", null); } public void testDefaultConstructorWithTypeParams() throws Exception { runTest("TypeParams", null); } public void testInnerClass() throws Exception { runTest("04", "OuterClass"); } public void testSubclassVisibility() throws Exception { runTest("05", null); } public void testImplicitConstructorUsages() throws Exception { runTest("06", null); } public void testImplicitConstructorCreation() throws Exception { runTest("07", null); } public void testConstructorTypeParameters() throws Exception { runTest("08", null); } private void runTest(final String testIndex, @NonNls String targetClassName) throws Exception { configureByFile("/refactoring/replaceConstructorWithFactory/before" + testIndex + ".java"); perform(targetClassName); checkResultByFile("/refactoring/replaceConstructorWithFactory/after" + testIndex + ".java"); } private void perform(String targetClassName) { int offset = myEditor.getCaretModel().getOffset(); PsiElement element = myFile.findElementAt(offset); PsiMethod constructor = null; PsiClass aClass = null; while (true) { if (element == null || element instanceof PsiFile) { assertTrue(false); return; } if (element instanceof PsiMethod && ((PsiMethod)element).isConstructor()) { constructor = (PsiMethod)element; break; } if (element instanceof PsiClass && ((PsiClass)element).getConstructors().length == 0) { aClass = (PsiClass)element; break; } element = element.getParent(); } PsiClass targetClass = null; if (targetClassName != null) { targetClass = JavaPsiFacade.getInstance(getProject()).findClass(targetClassName, GlobalSearchScope.allScope(getProject())); assertTrue(targetClass != null); } final ReplaceConstructorWithFactoryProcessor replaceConstructorWithFactoryProcessor; if (constructor != null) { if (targetClass == null) { targetClass = constructor.getContainingClass(); } replaceConstructorWithFactoryProcessor = new ReplaceConstructorWithFactoryProcessor( getProject(), constructor, constructor.getContainingClass(), targetClass, "new" + constructor.getName()); } else { if (targetClass == null) { targetClass = aClass; } replaceConstructorWithFactoryProcessor = new ReplaceConstructorWithFactoryProcessor( getProject(), null, aClass, targetClass, "new" + aClass.getName()); } replaceConstructorWithFactoryProcessor.run(); } }