From 01f41c167800381ec569a7560510830bfcd0fb67 Mon Sep 17 00:00:00 2001 From: Maxim Medvedev Date: Sat, 29 May 2010 13:40:10 +0400 Subject: [PATCH] integration with java --- .../ChangeSignatureProcessor.java | 5 +- .../JavaChangeSignatureUsageProcessor.java | 3 +- .../dynamic/elements/DMethodElement.java | 2 +- .../lang/psi/GroovyPsiElementFactory.java | 20 ++- .../psi/impl/GroovyPsiElementFactoryImpl.java | 43 +++-- .../GrChageSignatureUsageSearcher.java | 28 +++- .../GrChangeSignatureConflictSearcher.java | 4 +- .../GrChangeSignatureDialog.form | 2 +- .../GrChangeSignatureDialog.java | 6 + .../GrChangeSignatureUsageProcessor.java | 152 ++++++++++++------ .../ChangeSignatureForJavaTest.java | 22 +-- .../changeSignature/ChangeSignatureTest.java | 18 ++- .../ExceptionCaughtInUsage_after.groovy | 1 + .../ExceptionInClosableBlock_after.groovy | 1 + .../GenerateDelegateForAbstract.groovy | 9 ++ .../GenerateDelegateForAbstract_after.groovy | 13 ++ .../GenerateDelegateForConstructor.groovy | 11 ++ ...enerateDelegateForConstructor_after.groovy | 15 ++ .../changeSignature/MoveArrayToTheEnd.groovy | 3 + .../MoveArrayToTheEnd_after.groovy | 3 + .../changeSignature/TypeParameters.groovy | 7 + .../TypeParameters_after.groovy | 7 + .../AddException_after.groovy | 6 +- .../CovariantReturnType.groovy | 7 + .../CovariantReturnType_after.groovy | 7 + .../EnumConstructor.java | 7 - .../EnumConstructor_after.java | 7 - .../GenericTypesInOldParameters.groovy | 5 + .../GenericTypesInOldParameters_after.groovy | 5 + ...eParameterWithDefaultValueInHierarchy.java | 9 -- ...eterWithDefaultValueInHierarchy_after.java | 9 -- .../ReorderExceptions.groovy | 20 +++ .../ReorderExceptions_after.groovy | 19 +++ .../ReorderWithVarargs.java | 7 - .../ReorderWithVarargs_after.java | 7 - .../TypeParametersInMethod.groovy | 4 + .../TypeParametersInMethod_after.groovy | 4 + .../changeSignatureForJava/Varargs1.groovy | 3 + .../Varargs1_after.groovy | 3 + 39 files changed, 365 insertions(+), 139 deletions(-) create mode 100644 plugins/groovy/testdata/refactoring/changeSignature/GenerateDelegateForAbstract.groovy create mode 100644 plugins/groovy/testdata/refactoring/changeSignature/GenerateDelegateForAbstract_after.groovy create mode 100644 plugins/groovy/testdata/refactoring/changeSignature/GenerateDelegateForConstructor.groovy create mode 100644 plugins/groovy/testdata/refactoring/changeSignature/GenerateDelegateForConstructor_after.groovy create mode 100644 plugins/groovy/testdata/refactoring/changeSignature/MoveArrayToTheEnd.groovy create mode 100644 plugins/groovy/testdata/refactoring/changeSignature/MoveArrayToTheEnd_after.groovy create mode 100644 plugins/groovy/testdata/refactoring/changeSignature/TypeParameters.groovy create mode 100644 plugins/groovy/testdata/refactoring/changeSignature/TypeParameters_after.groovy create mode 100644 plugins/groovy/testdata/refactoring/changeSignatureForJava/CovariantReturnType.groovy create mode 100644 plugins/groovy/testdata/refactoring/changeSignatureForJava/CovariantReturnType_after.groovy delete mode 100644 plugins/groovy/testdata/refactoring/changeSignatureForJava/EnumConstructor.java delete mode 100644 plugins/groovy/testdata/refactoring/changeSignatureForJava/EnumConstructor_after.java create mode 100644 plugins/groovy/testdata/refactoring/changeSignatureForJava/GenericTypesInOldParameters.groovy create mode 100644 plugins/groovy/testdata/refactoring/changeSignatureForJava/GenericTypesInOldParameters_after.groovy delete mode 100644 plugins/groovy/testdata/refactoring/changeSignatureForJava/IntroduceParameterWithDefaultValueInHierarchy.java delete mode 100644 plugins/groovy/testdata/refactoring/changeSignatureForJava/IntroduceParameterWithDefaultValueInHierarchy_after.java create mode 100644 plugins/groovy/testdata/refactoring/changeSignatureForJava/ReorderExceptions.groovy create mode 100644 plugins/groovy/testdata/refactoring/changeSignatureForJava/ReorderExceptions_after.groovy delete mode 100644 plugins/groovy/testdata/refactoring/changeSignatureForJava/ReorderWithVarargs.java delete mode 100644 plugins/groovy/testdata/refactoring/changeSignatureForJava/ReorderWithVarargs_after.java create mode 100644 plugins/groovy/testdata/refactoring/changeSignatureForJava/TypeParametersInMethod.groovy create mode 100644 plugins/groovy/testdata/refactoring/changeSignatureForJava/TypeParametersInMethod_after.groovy create mode 100644 plugins/groovy/testdata/refactoring/changeSignatureForJava/Varargs1.groovy create mode 100644 plugins/groovy/testdata/refactoring/changeSignatureForJava/Varargs1_after.groovy diff --git a/java/java-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureProcessor.java b/java/java-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureProcessor.java index e83f00598218..c543d4ee7b8b 100644 --- a/java/java-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/changeSignature/ChangeSignatureProcessor.java @@ -206,9 +206,8 @@ public class ChangeSignatureProcessor extends BaseRefactoringProcessor { protected boolean isProcessCovariantOverriders() { return Messages - .showYesNoDialog(myProject, RefactoringBundle.message("do.you.want.to.process.overriding.methods.with.covariant.return.type"), - JavaChangeSignatureHandler.REFACTORING_NAME, Messages.getQuestionIcon()) - == DialogWrapper.OK_EXIT_CODE; + .showYesNoDialog(myProject, RefactoringBundle.message("do.you.want.to.process.overriding.methods.with.covariant.return.type"), + JavaChangeSignatureHandler.REFACTORING_NAME, Messages.getQuestionIcon()) == DialogWrapper.OK_EXIT_CODE; } protected void performRefactoring(UsageInfo[] usages) { diff --git a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java index a176578ec659..56985374bbc5 100644 --- a/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/changeSignature/JavaChangeSignatureUsageProcessor.java @@ -403,14 +403,13 @@ public class JavaChangeSignatureUsageProcessor implements ChangeSignatureUsagePr newArgsLength = newParms.length; } final PsiExpression[] newArgs = new PsiExpression[newArgsLength]; - final JavaParameterInfo[] newParameters = changeInfo.getNewParameters(); for (int i = 0; i < newNonVarargCount; i++) { newArgs[i] = createActualArgument(changeInfo, list, newParms[i], toInsertDefaultValue, args); } if (changeInfo.isArrayToVarargs()) { if (newVarargInitializers == null) { newArgs[newNonVarargCount] = - createActualArgument(changeInfo, list, newParameters[newNonVarargCount], toInsertDefaultValue, args); + createActualArgument(changeInfo, list, newParms[newNonVarargCount], toInsertDefaultValue, args); } else { System.arraycopy(newVarargInitializers, 0, newArgs, newNonVarargCount, newVarargInitializers.length); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/dynamic/elements/DMethodElement.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/dynamic/elements/DMethodElement.java index ade4225f7475..2b07b647b2cf 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/dynamic/elements/DMethodElement.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/intentions/dynamic/elements/DMethodElement.java @@ -72,7 +72,7 @@ public class DMethodElement extends DItemElement { final String[] argumentsTypes = QuickfixUtil.getArgumentsTypes(myPairs); final GrMethod method = GroovyPsiElementFactory.getInstance(manager.getProject()) - .createMethodFromText(staticModifier, getName(), type, argumentsTypes); + .createMethodFromText(staticModifier, getName(), type, argumentsTypes, null); myImplicitMethod = new GrDynamicImplicitMethod(manager, method, containingClassName) { @Override diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/GroovyPsiElementFactory.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/GroovyPsiElementFactory.java index 7916fede4bb9..2750f6bf0aae 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/GroovyPsiElementFactory.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/GroovyPsiElementFactory.java @@ -144,15 +144,27 @@ public abstract class GroovyPsiElementFactory { public abstract PsiElement createDotToken(String newDot); - public abstract GrMethod createMethodFromText(String methodText); + public abstract GrMethod createMethodFromText(String methodText, PsiElement context); + + public GrMethod createMethodFromText(String methodText) { + return createMethodFromText(methodText, null); + } public abstract GrAnnotation createAnnotationFromText(String annoText); public abstract GroovyFile createGroovyFile(String text, boolean isPhisical, PsiElement context); - public abstract GrMethod createMethodFromText(String modifier, String name, String type, String[] paramTypes); + public abstract GrMethod createMethodFromText(String modifier, String name, String type, String[] paramTypes, PsiElement context); - public abstract GrMethod createConstructorFromText(@NotNull String constructorName, String[] paramTypes, String[] paramNames, String body); + public abstract GrMethod createConstructorFromText(@NotNull String constructorName, + String[] paramTypes, + String[] paramNames, + String body, + PsiElement context); + + public GrMethod createConstructorFromText(@NotNull String constructorName, String[] paramTypes, String[] paramNames, String body) { + return createConstructorFromText(constructorName, paramTypes, paramNames, body, null); + } public abstract GrLabel createLabel(@NotNull String name); @@ -163,4 +175,6 @@ public abstract class GroovyPsiElementFactory { public abstract PsiReferenceList createThrownList(PsiClassType[] exceptionTypes); public abstract GrCatchClause createCatchClause(PsiClassType type, String parameterName); + + public abstract GrArgumentList createArgumentList(); } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyPsiElementFactoryImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyPsiElementFactoryImpl.java index 1fe8fc9b9241..5605528578de 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyPsiElementFactoryImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyPsiElementFactoryImpl.java @@ -355,10 +355,15 @@ public class GroovyPsiElementFactoryImpl extends GroovyPsiElementFactory { return createReferenceExpressionFromText("a" + newDot + "b").getDotToken(); } - public GrConstructorImpl createConstructorFromText(@NotNull String constructorName, @Nullable String[] paramTypes, String[] paramNames, String body) { - final GrMethod method = createMethodFromText(null, constructorName, null, paramTypes, paramNames, body); + public GrConstructorImpl createConstructorFromText(@NotNull String constructorName, + @Nullable String[] paramTypes, + String[] paramNames, + String body, + PsiElement context) { + final GrMethod method = createMethodFromText(null, constructorName, null, paramTypes, paramNames, body, context); - GroovyFileBase file = createDummyFile("class " + constructorName + "{" + method.getText() + "}"); + GroovyFileImpl file = createDummyFile("class " + constructorName + "{" + method.getText() + "}"); + file.setContext(context); GrTopLevelDefintion defintion = file.getTopLevelDefinitions()[0]; assert defintion != null && defintion instanceof GrClassDefinition; final PsiMethod constructor = ((GrClassDefinition) defintion).getMethods()[0]; @@ -374,8 +379,11 @@ public class GroovyPsiElementFactoryImpl extends GroovyPsiElementFactory { return ((GrLabeledStatement)definition).getLabel(); } - public GrMethod createMethodFromText(@NotNull String methodText) { - GroovyFileBase file = createDummyFile(methodText); + public GrMethod createMethodFromText(@NotNull String methodText, PsiElement context) { + GroovyFileImpl file = createDummyFile(methodText); + if (context != null) { + file.setContext(context); + } try { GrTopLevelDefintion defintion = file.getTopLevelDefinitions()[0]; assert defintion != null && defintion instanceof GrMethod; @@ -388,7 +396,7 @@ public class GroovyPsiElementFactoryImpl extends GroovyPsiElementFactory { @Override public GrAnnotation createAnnotationFromText(String annoText) { - return createMethodFromText(annoText + " void foo() {}").getModifierList().getAnnotations()[0]; + return createMethodFromText(annoText + " void foo() {}", null).getModifierList().getAnnotations()[0]; } public PsiFile createGroovyFile(String idText) { @@ -500,7 +508,13 @@ public class GroovyPsiElementFactoryImpl extends GroovyPsiElementFactory { } - private GrMethod createMethodFromText(String modifier, String name, String type, @Nullable String[] paramTypes, @NotNull String[] paramNames, String body) { + private GrMethod createMethodFromText(String modifier, + String name, + String type, + @Nullable String[] paramTypes, + @NotNull String[] paramNames, + String body, + PsiElement context) { StringBuilder builder = new StringBuilder(); if (modifier != null){ @@ -537,10 +551,10 @@ public class GroovyPsiElementFactoryImpl extends GroovyPsiElementFactory { builder.append("}"); } - return createMethodFromText(builder.toString()); + return createMethodFromText(builder.toString(), context); } - public GrMethod createMethodFromText(String modifier, String name, @Nullable String type, String[] paramTypes) { + public GrMethod createMethodFromText(String modifier, String name, @Nullable String type, String[] paramTypes, PsiElement context) { PsiType psiType; List res = new ArrayList(); final GroovyPsiElementFactory factory = GroovyPsiElementFactory.getInstance(myProject); @@ -556,7 +570,7 @@ public class GroovyPsiElementFactoryImpl extends GroovyPsiElementFactory { } return createMethodFromText(modifier, name, type, paramTypes, - QuickfixUtil.getMethodArgumentsNames(myProject, res.toArray(new PsiType[res.size()])), null); + QuickfixUtil.getMethodArgumentsNames(myProject, res.toArray(new PsiType[res.size()])), null, context); } public GrDocComment createDocCommentFromText(String text) { @@ -575,14 +589,14 @@ public class GroovyPsiElementFactoryImpl extends GroovyPsiElementFactory { @Override public PsiReferenceList createThrownList(PsiClassType[] exceptionTypes) { if (exceptionTypes.length == 0) { - return createMethodFromText("def foo(){}").getThrowsList(); + return createMethodFromText("def foo(){}", null).getThrowsList(); } String[] types = new String[exceptionTypes.length]; for (int i = 0; i < types.length; i++) { types[i] = exceptionTypes[i].getCanonicalText(); } final String end = StringUtil.join(types, ","); - return createMethodFromText("def foo() throws " + end + "{}").getThrowsList(); + return createMethodFromText("def foo() throws " + end + "{}", null).getThrowsList(); } @Override @@ -598,4 +612,9 @@ public class GroovyPsiElementFactoryImpl extends GroovyPsiElementFactory { final GrTryCatchStatement statement = (GrTryCatchStatement)createStatementFromText(buffer.toString()); return statement.getCatchClauses()[0]; } + + @Override + public GrArgumentList createArgumentList() { + return ((GrCall)createExpressionFromText("foo()")).getArgumentList(); + } } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChageSignatureUsageSearcher.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChageSignatureUsageSearcher.java index 072f880bdadc..448b63129244 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChageSignatureUsageSearcher.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChageSignatureUsageSearcher.java @@ -34,7 +34,10 @@ import com.intellij.usageView.UsageViewUtil; import com.intellij.util.containers.HashSet; import org.jetbrains.plugins.groovy.GroovyFileType; import org.jetbrains.plugins.groovy.lang.groovydoc.psi.api.GrDocTagValueToken; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrArgumentList; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrOpenBlock; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrAnonymousClassDefinition; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrEnumConstant; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod; import org.jetbrains.plugins.groovy.lang.psi.api.types.GrClosureSignature; import org.jetbrains.plugins.groovy.lang.psi.impl.types.GrClosureSignatureUtil; @@ -146,7 +149,10 @@ class GrChageSignatureUsageSearcher { } } }; - GrUnresolvableLocalCollisionDetector.visitLocalsCollisions(method, newName, method.getBlock(), variableVisitor); + final GrOpenBlock block = method.getBlock(); + if (block != null) { + GrUnresolvableLocalCollisionDetector.visitLocalsCollisions(method, newName, block, variableVisitor); + } } } } @@ -204,10 +210,22 @@ class GrChageSignatureUsageSearcher { //todo check for applicability of arguments to method if (PsiUtil.isMethodUsage(element)) { GrClosureSignature signature = GrClosureSignatureUtil.createSignature(method, PsiSubstitutor.EMPTY); - GrClosureSignatureUtil.ArgInfo[] map = GrClosureSignatureUtil - .mapParametersToArguments(signature, PsiUtil.getArgumentsList(element), method.getManager(), method.getResolveScope()); - result.add( - new GrMethodCallUsageInfo(element, GrClosureSignatureUtil.createSignature(method, PsiSubstitutor.EMPTY), isToModifyArgs, isToCatchExceptions, map)); + final GrArgumentList argList = PsiUtil.getArgumentsList(element); + //enum constant may not have argList + if (argList == null) { + if (element instanceof GrEnumConstant) { + result.add( + new GrMethodCallUsageInfo(element, GrClosureSignatureUtil.createSignature(method, PsiSubstitutor.EMPTY), isToModifyArgs, + isToCatchExceptions, new GrClosureSignatureUtil.ArgInfo[0])); + } + } + else { + GrClosureSignatureUtil.ArgInfo[] map = + GrClosureSignatureUtil.mapParametersToArguments(signature, argList, method.getManager(), method.getResolveScope()); + result.add( + new GrMethodCallUsageInfo(element, GrClosureSignatureUtil.createSignature(method, PsiSubstitutor.EMPTY), isToModifyArgs, + isToCatchExceptions, map)); + } } else if (element instanceof GrDocTagValueToken) { result.add(new UsageInfo(ref.getElement())); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureConflictSearcher.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureConflictSearcher.java index 1ebefc2c49b1..27acb2f08c76 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureConflictSearcher.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureConflictSearcher.java @@ -139,10 +139,10 @@ class GrChangeSignatureConflictSearcher { final CanonicalTypes.Type returnType = myChangeInfo.getNewReturnType(); String newMethodName = myChangeInfo.getNewName(); if (returnType != null) { - prototype = factory.createMethodFromText("", newMethodName, returnType.getTypeText(), ArrayUtil.EMPTY_STRING_ARRAY); + prototype = factory.createMethodFromText("", newMethodName, returnType.getTypeText(), ArrayUtil.EMPTY_STRING_ARRAY, method); } else { - prototype = factory.createConstructorFromText(newMethodName, ArrayUtil.EMPTY_STRING_ARRAY, ArrayUtil.EMPTY_STRING_ARRAY, "{}"); + prototype = factory.createConstructorFromText(newMethodName, ArrayUtil.EMPTY_STRING_ARRAY, ArrayUtil.EMPTY_STRING_ARRAY, "{}", method); } JavaParameterInfo[] parameters = myChangeInfo.getNewParameters(); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureDialog.form b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureDialog.form index 415ac736259c..fafc8c3bbab0 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureDialog.form +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureDialog.form @@ -116,7 +116,7 @@ - + diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureDialog.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureDialog.java index fc51098f2d6e..36a09576add5 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureDialog.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureDialog.java @@ -72,6 +72,7 @@ public class GrChangeSignatureDialog extends RefactoringDialog { @SuppressWarnings({"UnusedDeclaration"}) private JPanel myParameterButtonPanel; private JBTable myExceptionsTable; @SuppressWarnings({"UnusedDeclaration"}) private JPanel myExceptionsButtonPanel; + private JPanel myDelegatePanel; private GrParameterTableModel myParameterModel; private GrMethod myMethod; private PsiTypeCodeFragment myReturnTypeCodeFragment; @@ -96,6 +97,11 @@ public class GrChangeSignatureDialog extends RefactoringDialog { protected void init() { super.init(); + final PsiClass psiClass = myMethod.getContainingClass(); + if (psiClass == null) return; + if (psiClass.isInterface()) { + myDelegatePanel.setVisible(false); + } } private void stopEditing() { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureUsageProcessor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureUsageProcessor.java index 83fdc3b00eb1..979a99994e26 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureUsageProcessor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureUsageProcessor.java @@ -21,7 +21,7 @@ import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; -import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.util.*; import com.intellij.refactoring.changeSignature.*; import com.intellij.refactoring.util.CanonicalTypes; import com.intellij.refactoring.util.RefactoringUtil; @@ -37,8 +37,10 @@ import com.intellij.util.containers.hash.HashSet; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.GroovyFileType; import org.jetbrains.plugins.groovy.lang.psi.GrReferenceElement; +import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement; import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory; +import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.GrListOrMap; import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.GrModifier; import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.GrModifierList; import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrCatchClause; @@ -50,12 +52,12 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrNamedArg import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock; import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrCodeBlock; import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrOpenBlock; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrCall; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.*; import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter; import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameterList; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrConstructor; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrEnumConstant; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod; import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeElement; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil; @@ -110,10 +112,28 @@ public class GrChangeSignatureUsageProcessor implements ChangeSignatureUsageProc newMethod = (GrMethod)psiClass.addAfter(newMethod, method); StringBuffer buffer = new StringBuffer(); buffer.append("\n"); - if (!PsiType.VOID.equals(method.getReturnType())) { - buffer.append("return "); + if (method.isConstructor()) { + buffer.append("this"); } - buffer.append(method.getName()).append("("); + else { + if (!PsiType.VOID.equals(method.getReturnType())) { + buffer.append("return "); + } + buffer.append(method.getName()); + } + + generateParametersForDelegateCall(grInfo, method, buffer); + + final GrCodeBlock codeBlock = GroovyPsiElementFactory.getInstance(method.getProject()).createMethodBodyFromText(buffer.toString()); + newMethod.setBlock(codeBlock); + newMethod.getModifierList().setModifierProperty(GrModifier.ABSTRACT, false); + + CodeStyleManager.getInstance(method.getProject()).reformat(newMethod); + return processPrimaryMethodInner(grInfo, method, null); + } + + private static void generateParametersForDelegateCall(GrChangeInfoImpl grInfo, GrMethod method, StringBuffer buffer) { + buffer.append("("); final GrParameter[] oldParameters = method.getParameterList().getParameters(); final JavaParameterInfo[] parameters = grInfo.getNewParameters(); @@ -131,11 +151,6 @@ public class GrChangeSignatureUsageProcessor implements ChangeSignatureUsageProc } buffer.append(StringUtil.join(params, ",")); buffer.append(");"); - - final GrCodeBlock codeBlock = GroovyPsiElementFactory.getInstance(method.getProject()).createMethodBodyFromText(buffer.toString()); - newMethod.setBlock(codeBlock); - CodeStyleManager.getInstance(method.getProject()).reformat(newMethod); - return processPrimaryMethodInner(grInfo, method, null); } private static boolean processPrimaryMethodInner(JavaChangeInfo changeInfo, GrMethod method, PsiMethod baseMethod) { @@ -151,6 +166,9 @@ public class GrChangeSignatureUsageProcessor implements ChangeSignatureUsageProc method.getModifierList().setModifierProperty(changeInfo.getNewVisibility(), true); } + PsiSubstitutor substitutor = baseMethod != null ? calculateSubstitutor(method, baseMethod) : PsiSubstitutor.EMPTY; + + final PsiMethod context = changeInfo.getMethod(); if (changeInfo.isReturnTypeChanged()) { CanonicalTypes.Type newReturnType = changeInfo.getNewReturnType(); GrTypeElement element = method.getReturnTypeElementGroovy(); @@ -164,8 +182,11 @@ public class GrChangeSignatureUsageProcessor implements ChangeSignatureUsageProc } } else { - PsiType type = newReturnType.getType(method.getParameterList(), method.getManager()); - method.setReturnType(type); + PsiType type = newReturnType.getType(context, method.getManager()); + final PsiType oldReturnType = method.getReturnType(); + if (!TypesUtil.isAssignable(type, oldReturnType, context.getManager(), context.getResolveScope())) { //todo ask for replace covariant type + method.setReturnType(substitutor.substitute(type)); + } } } @@ -179,39 +200,24 @@ public class GrChangeSignatureUsageProcessor implements ChangeSignatureUsageProc GroovyPsiElementFactory factory = GroovyPsiElementFactory.getInstance(method.getProject()); GrParameter anchor = null; for (JavaParameterInfo newParameter : newParameters) { - /* - int index = newParameter.getOldIndex(); - if (index < 0) { - */ - String typeText; + PsiType type; if (newParameter instanceof GrParameterInfo && ((GrParameterInfo)newParameter).hasNoType()) { - typeText = null; + type = null; } else { - typeText = newParameter.getTypeText(); + type = substitutor.substitute(newParameter.createType(context, method.getManager())); } - GrParameter grParameter = - factory.createParameter(newParameter.getName(), typeText, getInitializer(newParameter), parameterList); + + GrParameter grParameter = factory + .createParameter(newParameter.getName(), type == null ? null : type.getCanonicalText(), getInitializer(newParameter), + parameterList); anchor = (GrParameter)parameterList.addAfter(grParameter, anchor); -/* } - else { - GrParameter grParameter = oldParameters[index]; - if (grParameter != getNextOfType(parameterList, anchor, GrParameter.class)) { - anchor = (GrParameter)parameterList.addAfter(grParameter, anchor); - } - else { - anchor = grParameter; - toRemove.remove(grParameter); - } - if (anchor.getName() != newParameter.getName()) { - anchor.setName(newParameter.getName()); - } - }*/ } for (GrParameter oldParameter : toRemove) { oldParameter.delete(); } + PsiUtil.shortenReferences(parameterList); CodeStyleManager.getInstance(parameterList.getProject()).reformat(parameterList); if (changeInfo.isExceptionSetOrOrderChanged()) { @@ -230,6 +236,31 @@ public class GrChangeSignatureUsageProcessor implements ChangeSignatureUsageProc return true; } + private static PsiSubstitutor calculateSubstitutor(PsiMethod derivedMethod, PsiMethod baseMethod) { + PsiSubstitutor substitutor; + if (derivedMethod.getManager().areElementsEquivalent(derivedMethod, baseMethod)) { + substitutor = PsiSubstitutor.EMPTY; + } + else { + final PsiClass baseClass = baseMethod.getContainingClass(); + final PsiClass derivedClass = derivedMethod.getContainingClass(); + if (baseClass != null && derivedClass != null && InheritanceUtil.isInheritorOrSelf(derivedClass, baseClass, true)) { + final PsiSubstitutor superClassSubstitutor = + TypeConversionUtil.getSuperClassSubstitutor(baseClass, derivedClass, PsiSubstitutor.EMPTY); + final MethodSignature superMethodSignature = baseMethod.getSignature(superClassSubstitutor); + final MethodSignature methodSignature = derivedMethod.getSignature(PsiSubstitutor.EMPTY); + final PsiSubstitutor superMethodSubstitutor = + MethodSignatureUtil.getSuperMethodSignatureSubstitutor(methodSignature, superMethodSignature); + substitutor = superMethodSubstitutor != null ? superMethodSubstitutor : superClassSubstitutor; + } + else { + substitutor = PsiSubstitutor.EMPTY; + } + } + return substitutor; + } + + @Nullable private static Type getNextOfType(List parameterList, PsiElement current, @@ -293,7 +324,7 @@ public class GrChangeSignatureUsageProcessor implements ChangeSignatureUsageProc String name = psiClass.getName(); GrConstructor constructor = ((GrConstructor)GroovyPsiElementFactory.getInstance(psiClass.getProject()) - .createConstructorFromText(name, ArrayUtil.EMPTY_STRING_ARRAY, ArrayUtil.EMPTY_STRING_ARRAY, "{}")); + .createConstructorFromText(name, ArrayUtil.EMPTY_STRING_ARRAY, ArrayUtil.EMPTY_STRING_ARRAY, "{}", null)); GrModifierList list = constructor.getModifierList(); if (psiClass.hasModifierProperty(GrModifier.PRIVATE)) list.setModifierProperty(GrModifier.PRIVATE, true); @@ -337,8 +368,17 @@ public class GrChangeSignatureUsageProcessor implements ChangeSignatureUsageProc } if (toChangeArguments) { JavaParameterInfo[] parameters = changeInfo.getNewParameters(); - GrArgumentList argumentList = ((GrCall)element.getParent()).getArgumentList(); - if (argumentList == null) return; + GrArgumentList argumentList = PsiUtil.getArgumentsList(element); + GroovyPsiElementFactory factory = GroovyPsiElementFactory.getInstance(element.getProject()); + if (argumentList == null) { + if (element instanceof GrEnumConstant) { + argumentList = factory.createArgumentList(); + argumentList = (GrArgumentList)element.add(argumentList); + } + else { + return; + } + } Set argsToDelete = new HashSet(map.length * 2); for (GrClosureSignatureUtil.ArgInfo argInfo : map) { argsToDelete.addAll(argInfo.args); @@ -355,7 +395,6 @@ public class GrChangeSignatureUsageProcessor implements ChangeSignatureUsageProc arg.delete(); } - GroovyPsiElementFactory factory = GroovyPsiElementFactory.getInstance(element.getProject()); boolean skipOptionals = false; PsiElement anchor = null; //PsiTreeUtil.getChildOfAnyType(argumentList, GrExpression.class, GrNamedArgument.class); @@ -384,14 +423,29 @@ public class GrChangeSignatureUsageProcessor implements ChangeSignatureUsageProc else { //arguments for simple parameters if (arguments.size() == 1) { //arg exists PsiElement arg = arguments.iterator().next(); + if (i == parameters.length - 1 && parameter.isVarargType()) { + if (arg instanceof GrSafeCastExpression) { + PsiElement expr = ((GrSafeCastExpression)arg).getOperand(); + if (expr instanceof GrListOrMap && !((GrListOrMap)expr).isMap()) { + final PsiElement copy = expr.copy(); + PsiElement[] newVarargs = ((GrListOrMap)copy).getInitializers(); + for (PsiElement vararg : newVarargs) { + anchor = argumentList.addAfter(vararg, anchor); + } + arg.delete(); + continue; + } + } + } + PsiElement curArg = getNextOfType(argumentList, anchor, GrExpression.class); if (curArg == arg) { anchor = arg; } else { final PsiElement copy = arg.copy(); - arg.delete(); anchor = argumentList.addAfter(copy, anchor); + arg.delete(); } } else { //arg is skipped. Parameter is optional @@ -425,15 +479,18 @@ public class GrChangeSignatureUsageProcessor implements ChangeSignatureUsageProc private static void fixExceptions(PsiElement element, PsiClassType[] exceptions) { if (exceptions.length == 0) return; final GroovyPsiElement context = - PsiTreeUtil.getParentOfType(element, GrTryCatchStatement.class, GrClosableBlock.class, GrMethod.class); + PsiTreeUtil.getParentOfType(element, GrTryCatchStatement.class, GrClosableBlock.class, GrMethod.class, GroovyFile.class); if (context instanceof GrClosableBlock) { element = generateTryCatch(element, exceptions); } else if (context instanceof GrMethod) { - final PsiClassType[] referencedTypes = ((GrMethod)context).getThrowsList().getReferencedTypes(); - final List psiClassTypes = filterOutExceptions(exceptions, context, referencedTypes); + final PsiClassType[] handledExceptions = ((GrMethod)context).getThrowsList().getReferencedTypes(); + final List psiClassTypes = filterOutExceptions(exceptions, context, handledExceptions); element = generateTryCatch(element, psiClassTypes.toArray(new PsiClassType[psiClassTypes.size()])); } + else if (context instanceof GroovyFile) { + element = generateTryCatch(element, exceptions); + } else if (context instanceof GrTryCatchStatement) { final GrCatchClause[] catchClauses = ((GrTryCatchStatement)context).getCatchClauses(); List referencedTypes = ContainerUtil.map(catchClauses, new Function() { @@ -493,6 +550,8 @@ public class GrChangeSignatureUsageProcessor implements ChangeSignatureUsageProc for (PsiClassType type : exceptions) { final String[] names = GroovyNameSuggestionUtil.suggestVariableNameByType(type, nameValidator); final GrCatchClause catchClause = factory.createCatchClause(type, names[0]); + final GrStatement printStackTrace = factory.createStatementFromText(names[0] + ".printStackTrace()"); + catchClause.getBody().addStatementBefore(printStackTrace, null); anchor = tryCatch.addCatchClause(catchClause, anchor); PsiUtil.shortenReferences(anchor); } @@ -501,10 +560,11 @@ public class GrChangeSignatureUsageProcessor implements ChangeSignatureUsageProc private static List filterOutExceptions(PsiClassType[] exceptions, final GroovyPsiElement context, - final PsiClassType[] referencedTypes) { + final PsiClassType[] handledExceptions) { return ContainerUtil.findAll(exceptions, new Condition() { public boolean value(PsiClassType o) { - for (PsiClassType type : referencedTypes) { + if (!InheritanceUtil.isInheritor(o, CommonClassNames.JAVA_LANG_EXCEPTION)) return false; + for (PsiClassType type : handledExceptions) { if (TypesUtil.isAssignable(type, o, context.getManager(), context.getResolveScope(), false)) return false; } return true; diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/changeSignature/ChangeSignatureForJavaTest.java b/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/changeSignature/ChangeSignatureForJavaTest.java index ac619531f787..3a7ee3b4c5e7 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/changeSignature/ChangeSignatureForJavaTest.java +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/changeSignature/ChangeSignatureForJavaTest.java @@ -11,8 +11,6 @@ import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NonNls; import org.jetbrains.plugins.groovy.util.TestUtils; -import java.io.File; - /** * @author Maxim.Medvedev */ @@ -125,7 +123,7 @@ public class ChangeSignatureForJavaTest extends LightCodeInsightFixtureTestCase } */ - //todo? + /*//todo? public void testUseAnyVariable() throws Exception { doTest(null, null, null, new GenParams() { public ParameterInfoImpl[] genParams(PsiMethod method) throws IncorrectOperationException { @@ -135,20 +133,21 @@ public class ChangeSignatureForJavaTest extends LightCodeInsightFixtureTestCase }; } }, false); - } + }*/ /* public void testRemoveVarargParameter() throws Exception { doTest(null, null, null, new ParameterInfoImpl[]{new ParameterInfoImpl(0)}, new ThrownExceptionInfo[0], false); } - */ + public void testEnumConstructor() throws Exception { doTest(null, new ParameterInfoImpl[] { new ParameterInfoImpl(-1, "i", PsiType.INT, "10") }, false); } - + */ + public void testVarargs1() throws Exception { doTest(null, new ParameterInfoImpl[] { new ParameterInfoImpl(-1, "b", PsiType.BOOLEAN, "true"), @@ -166,6 +165,7 @@ public class ChangeSignatureForJavaTest extends LightCodeInsightFixtureTestCase false); } + /* public void testAlreadyHandled() throws Exception { doTest(null, null, null, new SimpleParameterGen(new ParameterInfoImpl[0]), new GenExceptions() { @@ -176,8 +176,9 @@ public class ChangeSignatureForJavaTest extends LightCodeInsightFixtureTestCase } }, false); - } + }*/ + /* public void testAddRuntimeException() throws Exception { doTest(null, null, null, new SimpleParameterGen(new ParameterInfoImpl[0]), new GenExceptions() { @@ -189,6 +190,7 @@ public class ChangeSignatureForJavaTest extends LightCodeInsightFixtureTestCase }, false); } + */ public void testAddException() throws Exception { doTest(null, null, null, new SimpleParameterGen(new ParameterInfoImpl[0]), @@ -202,6 +204,7 @@ public class ChangeSignatureForJavaTest extends LightCodeInsightFixtureTestCase false); } + /* //todo public void testReorderWithVarargs() throws Exception { // IDEADEV-26977 final PsiElementFactory factory = JavaPsiFacade.getInstance(getProject()).getElementFactory(); @@ -210,10 +213,7 @@ public class ChangeSignatureForJavaTest extends LightCodeInsightFixtureTestCase new ParameterInfoImpl(0, "s", factory.createTypeFromText("java.lang.String...", myFixture.getFile())) }, false); } - - public void testIntroduceParameterWithDefaultValueInHierarchy() throws Exception { - doTest(null, new ParameterInfoImpl[]{new ParameterInfoImpl(-1, "i", PsiType.INT, "0")}, false); - } + */ private void doTest(String newReturnType, ParameterInfoImpl[] parameterInfos, final boolean generateDelegate) throws Exception { doTest(null, null, newReturnType, parameterInfos, new ThrownExceptionInfo[0], generateDelegate); diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/changeSignature/ChangeSignatureTest.java b/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/changeSignature/ChangeSignatureTest.java index ee67f97e36fa..c384a1ea8066 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/changeSignature/ChangeSignatureTest.java +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/refactoring/changeSignature/ChangeSignatureTest.java @@ -183,18 +183,28 @@ public class ChangeSignatureTest extends ChangeSignatureTestCase { ); } - public void testGenerateDelegateForConstructor() { - //todo + public void testGenerateDelegateForConstructor() throws Exception { + doTest("public", "Foo", null, new SimpleInfo[]{new SimpleInfo(0), new SimpleInfo("a", -1, "5", null, PsiType.INT)}, + new ThrownExceptionInfo[0], true); } - public void testGenerateDelegateForAbstract() { - //todo + public void testGenerateDelegateForAbstract() throws Exception { + doTest("public", "foo", null, new SimpleInfo[]{new SimpleInfo(0), new SimpleInfo("a", -1, "5", null, PsiType.INT)}, + new ThrownExceptionInfo[0], true); + } + + public void testTypeParameters() throws Exception { + doTest(new SimpleInfo[]{new SimpleInfo("list", -1, "null", null, createType("java.util.List")), new SimpleInfo(0)}); } public void testEnumConstructor() throws Exception { doTest(new SimpleInfo[]{new SimpleInfo("a", -1, "2", null, PsiType.INT)}); } + public void testMoveArrayToTheEnd() throws Exception { + doTest(new SimpleInfo[] {new SimpleInfo(1), new SimpleInfo(0)}); + } + private PsiType createType(String typeText) { return JavaPsiFacade.getElementFactory(getProject()).createTypeByFQClassName(typeText, GlobalSearchScope.allScope(getProject())); } diff --git a/plugins/groovy/testdata/refactoring/changeSignature/ExceptionCaughtInUsage_after.groovy b/plugins/groovy/testdata/refactoring/changeSignature/ExceptionCaughtInUsage_after.groovy index 11e39836bd31..e5cd8cd3337c 100644 --- a/plugins/groovy/testdata/refactoring/changeSignature/ExceptionCaughtInUsage_after.groovy +++ b/plugins/groovy/testdata/refactoring/changeSignature/ExceptionCaughtInUsage_after.groovy @@ -6,6 +6,7 @@ def bar() { try{ foo("") }catch(IOException e){ +e.printStackTrace() } } diff --git a/plugins/groovy/testdata/refactoring/changeSignature/ExceptionInClosableBlock_after.groovy b/plugins/groovy/testdata/refactoring/changeSignature/ExceptionInClosableBlock_after.groovy index 3066c2f95128..a845f80f5b6d 100644 --- a/plugins/groovy/testdata/refactoring/changeSignature/ExceptionInClosableBlock_after.groovy +++ b/plugins/groovy/testdata/refactoring/changeSignature/ExceptionInClosableBlock_after.groovy @@ -4,5 +4,6 @@ new Object().each { try{ foo("") }catch(IOException e){ +e.printStackTrace() } } \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignature/GenerateDelegateForAbstract.groovy b/plugins/groovy/testdata/refactoring/changeSignature/GenerateDelegateForAbstract.groovy new file mode 100644 index 000000000000..bf106aa67632 --- /dev/null +++ b/plugins/groovy/testdata/refactoring/changeSignature/GenerateDelegateForAbstract.groovy @@ -0,0 +1,9 @@ +abstract class X { + abstract def foo(String s) +} + +class Y extends X { + def foo(String s) { + + } +} diff --git a/plugins/groovy/testdata/refactoring/changeSignature/GenerateDelegateForAbstract_after.groovy b/plugins/groovy/testdata/refactoring/changeSignature/GenerateDelegateForAbstract_after.groovy new file mode 100644 index 000000000000..4041b066da34 --- /dev/null +++ b/plugins/groovy/testdata/refactoring/changeSignature/GenerateDelegateForAbstract_after.groovy @@ -0,0 +1,13 @@ +abstract class X { + abstract def foo(String s, int a) + + def foo(String s) { + return foo(s, 5); + } +} + +class Y extends X { + def foo(String s, int a) { + + } +} diff --git a/plugins/groovy/testdata/refactoring/changeSignature/GenerateDelegateForConstructor.groovy b/plugins/groovy/testdata/refactoring/changeSignature/GenerateDelegateForConstructor.groovy new file mode 100644 index 000000000000..44f384176b4c --- /dev/null +++ b/plugins/groovy/testdata/refactoring/changeSignature/GenerateDelegateForConstructor.groovy @@ -0,0 +1,11 @@ +class Foo { + def Foo(String s) { + + } + + def Foo() { + this("a") + + print new Foo("b"); + } +} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignature/GenerateDelegateForConstructor_after.groovy b/plugins/groovy/testdata/refactoring/changeSignature/GenerateDelegateForConstructor_after.groovy new file mode 100644 index 000000000000..ce77fd68ae76 --- /dev/null +++ b/plugins/groovy/testdata/refactoring/changeSignature/GenerateDelegateForConstructor_after.groovy @@ -0,0 +1,15 @@ +class Foo { + def Foo(String s, int a) { + + } + + def Foo(String s) { + this(s, 5); + } + + def Foo() { + this("a") + + print new Foo("b"); + } +} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignature/MoveArrayToTheEnd.groovy b/plugins/groovy/testdata/refactoring/changeSignature/MoveArrayToTheEnd.groovy new file mode 100644 index 000000000000..b5277bb46364 --- /dev/null +++ b/plugins/groovy/testdata/refactoring/changeSignature/MoveArrayToTheEnd.groovy @@ -0,0 +1,3 @@ +def foo(String[] ss, int i) {} + +foo(["1", "2"] as String[], 1); \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignature/MoveArrayToTheEnd_after.groovy b/plugins/groovy/testdata/refactoring/changeSignature/MoveArrayToTheEnd_after.groovy new file mode 100644 index 000000000000..835321f2016b --- /dev/null +++ b/plugins/groovy/testdata/refactoring/changeSignature/MoveArrayToTheEnd_after.groovy @@ -0,0 +1,3 @@ +def foo(int i, String[] ss) {} + +foo(1, "1", "2"); \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignature/TypeParameters.groovy b/plugins/groovy/testdata/refactoring/changeSignature/TypeParameters.groovy new file mode 100644 index 000000000000..6390801ece42 --- /dev/null +++ b/plugins/groovy/testdata/refactoring/changeSignature/TypeParameters.groovy @@ -0,0 +1,7 @@ +class X { + def foo(T t) {} +} + +class Y extends X { + def foo(String t){} +} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignature/TypeParameters_after.groovy b/plugins/groovy/testdata/refactoring/changeSignature/TypeParameters_after.groovy new file mode 100644 index 000000000000..c6789677af49 --- /dev/null +++ b/plugins/groovy/testdata/refactoring/changeSignature/TypeParameters_after.groovy @@ -0,0 +1,7 @@ +class X { + def foo(List list, T t) {} +} + +class Y extends X { + def foo(List list, String t){} +} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignatureForJava/AddException_after.groovy b/plugins/groovy/testdata/refactoring/changeSignatureForJava/AddException_after.groovy index ecc0322fcf7b..d23d7f384c7c 100644 --- a/plugins/groovy/testdata/refactoring/changeSignatureForJava/AddException_after.groovy +++ b/plugins/groovy/testdata/refactoring/changeSignatureForJava/AddException_after.groovy @@ -1,6 +1,6 @@ def test=new Test() try{ - test.foo(); -} catch (Exception e) { - +test.foo() +}catch(Exception e){ +e.printStackTrace() } \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignatureForJava/CovariantReturnType.groovy b/plugins/groovy/testdata/refactoring/changeSignatureForJava/CovariantReturnType.groovy new file mode 100644 index 000000000000..116753525822 --- /dev/null +++ b/plugins/groovy/testdata/refactoring/changeSignatureForJava/CovariantReturnType.groovy @@ -0,0 +1,7 @@ +class B1 extends A { + Q method() { } +} + +class C1 extends A { + Z method() { } +} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignatureForJava/CovariantReturnType_after.groovy b/plugins/groovy/testdata/refactoring/changeSignatureForJava/CovariantReturnType_after.groovy new file mode 100644 index 000000000000..47aad4679fcb --- /dev/null +++ b/plugins/groovy/testdata/refactoring/changeSignatureForJava/CovariantReturnType_after.groovy @@ -0,0 +1,7 @@ +class B1 extends A { + Q method() { } +} + +class C1 extends A { + Runnable method() { } +} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignatureForJava/EnumConstructor.java b/plugins/groovy/testdata/refactoring/changeSignatureForJava/EnumConstructor.java deleted file mode 100644 index 5047f3326b9f..000000000000 --- a/plugins/groovy/testdata/refactoring/changeSignatureForJava/EnumConstructor.java +++ /dev/null @@ -1,7 +0,0 @@ -enum En { - A {}, - B {}, - C; - - En() { } -} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignatureForJava/EnumConstructor_after.java b/plugins/groovy/testdata/refactoring/changeSignatureForJava/EnumConstructor_after.java deleted file mode 100644 index 96ec0ca3fdee..000000000000 --- a/plugins/groovy/testdata/refactoring/changeSignatureForJava/EnumConstructor_after.java +++ /dev/null @@ -1,7 +0,0 @@ -enum En { - A(10) {}, - B(10) {}, - C(10); - - En(int i) { } -} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignatureForJava/GenericTypesInOldParameters.groovy b/plugins/groovy/testdata/refactoring/changeSignatureForJava/GenericTypesInOldParameters.groovy new file mode 100644 index 000000000000..25c195abd9c6 --- /dev/null +++ b/plugins/groovy/testdata/refactoring/changeSignatureForJava/GenericTypesInOldParameters.groovy @@ -0,0 +1,5 @@ +class CString1 extends C { + void put(Object o) { + System.out.println(o+"Text"); + } +} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignatureForJava/GenericTypesInOldParameters_after.groovy b/plugins/groovy/testdata/refactoring/changeSignatureForJava/GenericTypesInOldParameters_after.groovy new file mode 100644 index 000000000000..81f7b4a44f2e --- /dev/null +++ b/plugins/groovy/testdata/refactoring/changeSignatureForJava/GenericTypesInOldParameters_after.groovy @@ -0,0 +1,5 @@ +class CString1 extends C { + void put(String t) { + System.out.println(t+"Text"); + } +} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignatureForJava/IntroduceParameterWithDefaultValueInHierarchy.java b/plugins/groovy/testdata/refactoring/changeSignatureForJava/IntroduceParameterWithDefaultValueInHierarchy.java deleted file mode 100644 index b332ce73eadd..000000000000 --- a/plugins/groovy/testdata/refactoring/changeSignatureForJava/IntroduceParameterWithDefaultValueInHierarchy.java +++ /dev/null @@ -1,9 +0,0 @@ -class Foo { - void foo(){} - - class A extends Foo { - void foo(){ - super.foo(); - } - } -} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignatureForJava/IntroduceParameterWithDefaultValueInHierarchy_after.java b/plugins/groovy/testdata/refactoring/changeSignatureForJava/IntroduceParameterWithDefaultValueInHierarchy_after.java deleted file mode 100644 index 08cf46f1074f..000000000000 --- a/plugins/groovy/testdata/refactoring/changeSignatureForJava/IntroduceParameterWithDefaultValueInHierarchy_after.java +++ /dev/null @@ -1,9 +0,0 @@ -class Foo { - void foo(int i){} - - class A extends Foo { - void foo(int i){ - super.foo(i); - } - } -} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignatureForJava/ReorderExceptions.groovy b/plugins/groovy/testdata/refactoring/changeSignatureForJava/ReorderExceptions.groovy new file mode 100644 index 000000000000..dfcc9155ee89 --- /dev/null +++ b/plugins/groovy/testdata/refactoring/changeSignatureForJava/ReorderExceptions.groovy @@ -0,0 +1,20 @@ +class Derived1 extends Test { + void foo() throws MyException, + MyException1 { + + } + + void bar () { + try { + foo(); + } + catch (MyException e) {} + catch (MyException1 myException1) {} + } +} + +try { + new Test().foo(); +} +catch (MyException e) {} +catch (MyException1 myException1) {} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignatureForJava/ReorderExceptions_after.groovy b/plugins/groovy/testdata/refactoring/changeSignatureForJava/ReorderExceptions_after.groovy new file mode 100644 index 000000000000..5e5ecbd0fd98 --- /dev/null +++ b/plugins/groovy/testdata/refactoring/changeSignatureForJava/ReorderExceptions_after.groovy @@ -0,0 +1,19 @@ +class Derived1 extends Test { + void foo() throws MyException1, MyException { + + } + + void bar () { + try { + Test.foo(); + } + catch (MyException e) {} + catch (MyException1 myException1) {} + } +} + +try { + new Test().foo(); +} +catch (MyException e) {} +catch (MyException1 myException1) {} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignatureForJava/ReorderWithVarargs.java b/plugins/groovy/testdata/refactoring/changeSignatureForJava/ReorderWithVarargs.java deleted file mode 100644 index 41002940ffb2..000000000000 --- a/plugins/groovy/testdata/refactoring/changeSignatureForJava/ReorderWithVarargs.java +++ /dev/null @@ -1,7 +0,0 @@ -class Test { - void foo(String[] s, int a) {} - - { - foo(new String[]{"a", "bbb"}, 1); - } -} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignatureForJava/ReorderWithVarargs_after.java b/plugins/groovy/testdata/refactoring/changeSignatureForJava/ReorderWithVarargs_after.java deleted file mode 100644 index f17d806b135a..000000000000 --- a/plugins/groovy/testdata/refactoring/changeSignatureForJava/ReorderWithVarargs_after.java +++ /dev/null @@ -1,7 +0,0 @@ -class Test { - void foo(int a, String... s) {} - - { - foo(1, "a", "bbb"); - } -} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignatureForJava/TypeParametersInMethod.groovy b/plugins/groovy/testdata/refactoring/changeSignatureForJava/TypeParametersInMethod.groovy new file mode 100644 index 000000000000..e8da3e9ca506 --- /dev/null +++ b/plugins/groovy/testdata/refactoring/changeSignatureForJava/TypeParametersInMethod.groovy @@ -0,0 +1,4 @@ +class C2 extends C { + protected V method(){ + } +} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignatureForJava/TypeParametersInMethod_after.groovy b/plugins/groovy/testdata/refactoring/changeSignatureForJava/TypeParametersInMethod_after.groovy new file mode 100644 index 000000000000..60e39c9db15c --- /dev/null +++ b/plugins/groovy/testdata/refactoring/changeSignatureForJava/TypeParametersInMethod_after.groovy @@ -0,0 +1,4 @@ +class C2 extends C { + protected V method(String t, V u, C cu){ + } +} \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignatureForJava/Varargs1.groovy b/plugins/groovy/testdata/refactoring/changeSignatureForJava/Varargs1.groovy new file mode 100644 index 000000000000..5daac734b897 --- /dev/null +++ b/plugins/groovy/testdata/refactoring/changeSignatureForJava/Varargs1.groovy @@ -0,0 +1,3 @@ +new C().method() +new C().method(1) +new C().method(1, 2) \ No newline at end of file diff --git a/plugins/groovy/testdata/refactoring/changeSignatureForJava/Varargs1_after.groovy b/plugins/groovy/testdata/refactoring/changeSignatureForJava/Varargs1_after.groovy new file mode 100644 index 000000000000..7c3ca4e8aaad --- /dev/null +++ b/plugins/groovy/testdata/refactoring/changeSignatureForJava/Varargs1_after.groovy @@ -0,0 +1,3 @@ +new C().method(true) +new C().method(true, 1) +new C().method(true, 1, 2) \ No newline at end of file