IDEA-60747 Groovy: Change Signature -> Change return type Refactoring applied to...
authorMaxim Medvedev <maxim.medvedev@jetbrains.com>
Sat, 27 Nov 2010 12:20:15 +0000 (15:20 +0300)
committerMaxim Medvedev <maxim.medvedev@jetbrains.com>
Sat, 27 Nov 2010 12:20:15 +0000 (15:20 +0300)
plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/changeSignature/GrChangeSignatureUsageProcessor.java
plugins/groovy/testdata/refactoring/changeSignature/AddReturnType_after.groovy

index 99528fd696c596e2dd0d10888fa697662ef8901b..25417202d1140813b59d4bc4710f8fdb47beb488 100644 (file)
@@ -182,20 +182,20 @@ public class GrChangeSignatureUsageProcessor implements ChangeSignatureUsageProc
       }
     }
 
+    final GrModifierList modifierList = method.getModifierList();
     if (changeInfo.isVisibilityChanged()) {
-      method.getModifierList().setModifierProperty(changeInfo.getNewVisibility(), true);
+      modifierList.setModifierProperty(changeInfo.getNewVisibility(), true);
     }
 
     PsiSubstitutor substitutor = baseMethod != null ? calculateSubstitutor(method, baseMethod) : PsiSubstitutor.EMPTY;
 
     final PsiMethod context = changeInfo.getMethod();
+    GrTypeElement oldReturnTypeElement = method.getReturnTypeElementGroovy();
     if (changeInfo.isReturnTypeChanged()) {
       CanonicalTypes.Type newReturnType = changeInfo.getNewReturnType();
-      GrTypeElement element = method.getReturnTypeElementGroovy();
       if (newReturnType == null) {
-        if (element != null) {
-          element.delete();
-          GrModifierList modifierList = method.getModifierList();
+        if (oldReturnTypeElement != null) {
+          oldReturnTypeElement.delete();
           if (modifierList.getModifiers().length == 0) {
             modifierList.setModifierProperty(GrModifier.DEF, true);
           }
@@ -205,8 +205,11 @@ public class GrChangeSignatureUsageProcessor implements ChangeSignatureUsageProc
         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
+          .isAssignableByMethodCallConversion(type, oldReturnType, context.getManager(), context.getResolveScope())) { //todo ask for replace covariant type
           method.setReturnType(substitutor.substitute(type));
+          if (oldReturnTypeElement==null) {
+            modifierList.setModifierProperty(GrModifier.DEF, false);;
+          }
         }
       }
     }
index f1e098a69e019e259b387ef5a6676bb5e293fffc..987b8ae651c629f35152baf5da50bb2f8a34efaa 100644 (file)
@@ -1,3 +1,3 @@
 class Foo {
-  def int foo(String s){}
+  int foo(String s){}
 }
\ No newline at end of file