mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-16 22:51:17 +07:00
introduce field: avoid dbl setup creation when no annotation present (IDEA-76926)
This commit is contained in:
@@ -0,0 +1,13 @@
|
|||||||
|
import org.junit.*;
|
||||||
|
public class T {
|
||||||
|
private int i;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp(){
|
||||||
|
i = 9;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
import org.junit.*;
|
||||||
|
public class T {
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
int <caret>i = 9;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUp(){}
|
||||||
|
}
|
||||||
@@ -83,6 +83,9 @@ public class IntroduceFieldWitSetUpInitializationTest extends CodeInsightTestCas
|
|||||||
doTest();
|
doTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testBeforeExistNonAnnotated() throws Exception {
|
||||||
|
doTest();
|
||||||
|
}
|
||||||
|
|
||||||
private void doTest() throws Exception {
|
private void doTest() throws Exception {
|
||||||
configureByFile("/refactoring/introduceField/before" + getTestName(false) + ".java");
|
configureByFile("/refactoring/introduceField/before" + getTestName(false) + ".java");
|
||||||
|
|||||||
@@ -15,9 +15,14 @@
|
|||||||
*/
|
*/
|
||||||
package com.intellij.execution.junit;
|
package com.intellij.execution.junit;
|
||||||
|
|
||||||
|
import com.intellij.CommonBundle;
|
||||||
import com.intellij.codeInsight.AnnotationUtil;
|
import com.intellij.codeInsight.AnnotationUtil;
|
||||||
|
import com.intellij.codeInsight.intention.AddAnnotationFix;
|
||||||
import com.intellij.ide.fileTemplates.FileTemplateDescriptor;
|
import com.intellij.ide.fileTemplates.FileTemplateDescriptor;
|
||||||
|
import com.intellij.openapi.application.ApplicationManager;
|
||||||
import com.intellij.openapi.projectRoots.ex.JavaSdkUtil;
|
import com.intellij.openapi.projectRoots.ex.JavaSdkUtil;
|
||||||
|
import com.intellij.openapi.ui.DialogWrapper;
|
||||||
|
import com.intellij.openapi.ui.Messages;
|
||||||
import com.intellij.psi.*;
|
import com.intellij.psi.*;
|
||||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||||
import com.intellij.testIntegration.JavaTestFramework;
|
import com.intellij.testIntegration.JavaTestFramework;
|
||||||
@@ -87,6 +92,18 @@ public class JUnit4Framework extends JavaTestFramework {
|
|||||||
PsiElementFactory factory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory();
|
PsiElementFactory factory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory();
|
||||||
|
|
||||||
method = factory.createMethodFromText("@org.junit.Before public void setUp() throws Exception {\n}", null);
|
method = factory.createMethodFromText("@org.junit.Before public void setUp() throws Exception {\n}", null);
|
||||||
|
PsiMethod existingMethod = clazz.findMethodBySignature(method, false);
|
||||||
|
if (existingMethod != null) {
|
||||||
|
int exit = ApplicationManager.getApplication().isUnitTestMode() ?
|
||||||
|
DialogWrapper.OK_EXIT_CODE :
|
||||||
|
Messages.showOkCancelDialog("Method setUp already exist but is not annotated as @Before. Annotate?",
|
||||||
|
CommonBundle.getWarningTitle(),
|
||||||
|
Messages.getWarningIcon());
|
||||||
|
if (exit == DialogWrapper.OK_EXIT_CODE) {
|
||||||
|
new AddAnnotationFix("org.junit.Before", existingMethod).invoke(existingMethod.getProject(), null, existingMethod.getContainingFile());
|
||||||
|
return existingMethod;
|
||||||
|
}
|
||||||
|
}
|
||||||
final PsiMethod testMethod = JUnitUtil.findFirstTestMethod(clazz);
|
final PsiMethod testMethod = JUnitUtil.findFirstTestMethod(clazz);
|
||||||
if (testMethod != null) {
|
if (testMethod != null) {
|
||||||
method = (PsiMethod)clazz.addBefore(method, testMethod);
|
method = (PsiMethod)clazz.addBefore(method, testMethod);
|
||||||
|
|||||||
@@ -15,8 +15,13 @@
|
|||||||
*/
|
*/
|
||||||
package com.theoryinpractice.testng;
|
package com.theoryinpractice.testng;
|
||||||
|
|
||||||
|
import com.intellij.CommonBundle;
|
||||||
import com.intellij.codeInsight.AnnotationUtil;
|
import com.intellij.codeInsight.AnnotationUtil;
|
||||||
|
import com.intellij.codeInsight.intention.AddAnnotationFix;
|
||||||
import com.intellij.ide.fileTemplates.FileTemplateDescriptor;
|
import com.intellij.ide.fileTemplates.FileTemplateDescriptor;
|
||||||
|
import com.intellij.openapi.application.ApplicationManager;
|
||||||
|
import com.intellij.openapi.ui.DialogWrapper;
|
||||||
|
import com.intellij.openapi.ui.Messages;
|
||||||
import com.intellij.psi.*;
|
import com.intellij.psi.*;
|
||||||
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
import com.intellij.psi.codeStyle.JavaCodeStyleManager;
|
||||||
import com.intellij.testIntegration.JavaTestFramework;
|
import com.intellij.testIntegration.JavaTestFramework;
|
||||||
@@ -93,8 +98,29 @@ public class TestNGFramework extends JavaTestFramework {
|
|||||||
|
|
||||||
final PsiManager manager = clazz.getManager();
|
final PsiManager manager = clazz.getManager();
|
||||||
final PsiElementFactory factory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory();
|
final PsiElementFactory factory = JavaPsiFacade.getInstance(manager.getProject()).getElementFactory();
|
||||||
PsiMethod patternMethod =
|
String setUpName = "setUp";
|
||||||
factory.createMethodFromText("@org.testng.annotations.BeforeMethod\n protected void setUp() throws Exception {}", null);
|
PsiMethod patternMethod = factory.createMethodFromText("@" + BeforeMethod.class.getName() + "\n protected void " + setUpName + "() throws Exception {}", null);
|
||||||
|
PsiMethod inClass = clazz.findMethodBySignature(patternMethod, false);
|
||||||
|
if (inClass != null) {
|
||||||
|
int exit = ApplicationManager.getApplication().isUnitTestMode() ?
|
||||||
|
DialogWrapper.OK_EXIT_CODE :
|
||||||
|
Messages.showYesNoDialog("Method \'" + setUpName + "\' already exist but is not annotated as @BeforeMethod.",
|
||||||
|
CommonBundle.getWarningTitle(),
|
||||||
|
"Annotate",
|
||||||
|
"Create new method",
|
||||||
|
Messages.getWarningIcon());
|
||||||
|
if (exit == DialogWrapper.OK_EXIT_CODE) {
|
||||||
|
new AddAnnotationFix(BeforeMethod.class.getName(), inClass).invoke(inClass.getProject(), null, inClass.getContainingFile());
|
||||||
|
return inClass;
|
||||||
|
} else if (exit == DialogWrapper.CANCEL_EXIT_CODE) {
|
||||||
|
inClass = null;
|
||||||
|
int i = 0;
|
||||||
|
while (clazz.findMethodBySignature(patternMethod, false) != null) {
|
||||||
|
patternMethod.setName(setUpName + (++i));
|
||||||
|
}
|
||||||
|
setUpName = patternMethod.getName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final PsiClass superClass = clazz.getSuperClass();
|
final PsiClass superClass = clazz.getSuperClass();
|
||||||
if (superClass != null) {
|
if (superClass != null) {
|
||||||
@@ -102,20 +128,20 @@ public class TestNGFramework extends JavaTestFramework {
|
|||||||
if (methods.length > 0) {
|
if (methods.length > 0) {
|
||||||
final PsiModifierList modifierList = methods[0].getModifierList();
|
final PsiModifierList modifierList = methods[0].getModifierList();
|
||||||
if (!modifierList.hasModifierProperty(PsiModifier.PRIVATE)) { //do not override private method
|
if (!modifierList.hasModifierProperty(PsiModifier.PRIVATE)) { //do not override private method
|
||||||
@NonNls String pattern = "@org.testng.annotations.BeforeMethod\n";
|
@NonNls String pattern = "@" + BeforeMethod.class.getName() + "\n";
|
||||||
if (modifierList.hasModifierProperty(PsiModifier.PROTECTED)) {
|
if (modifierList.hasModifierProperty(PsiModifier.PROTECTED)) {
|
||||||
pattern += "protected ";
|
pattern += "protected ";
|
||||||
}
|
}
|
||||||
else if (modifierList.hasModifierProperty(PsiModifier.PUBLIC)) {
|
else if (modifierList.hasModifierProperty(PsiModifier.PUBLIC)) {
|
||||||
pattern += "public ";
|
pattern += "public ";
|
||||||
}
|
}
|
||||||
patternMethod = factory.createMethodFromText(pattern + "void setUp() throws Exception {\nsuper.setUp();\n}", null);
|
patternMethod = factory.createMethodFromText(pattern + "void " + setUpName + "() throws Exception {\nsuper." + setUpName + "();\n}", null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final PsiMethod[] psiMethods = clazz.getMethods();
|
final PsiMethod[] psiMethods = clazz.getMethods();
|
||||||
PsiMethod inClass = null;
|
|
||||||
PsiMethod testMethod = null;
|
PsiMethod testMethod = null;
|
||||||
for (PsiMethod psiMethod : psiMethods) {
|
for (PsiMethod psiMethod : psiMethods) {
|
||||||
if (inClass == null && AnnotationUtil.isAnnotated(psiMethod, BeforeMethod.class.getName(), false)) {
|
if (inClass == null && AnnotationUtil.isAnnotated(psiMethod, BeforeMethod.class.getName(), false)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user