Intellij结构替换更改方法签名

时间:2014-12-19 13:22:28

标签: intellij-idea structural-search

我想更改具有特定签名的方法:

public OldReturnType get.*(Params) {
  //lots of code
}

到此:

public NewReturnTyp get.*(Params) {
  //lots of code
}

- >我想替换返回类型。我用SSR尝试了这个:

  • 复制现有模板“类的方法”。这会产生模板:

    class $ Class $ {   $ ReturnType $ $ MethodName $($ ParameterType $ $ Parameter $); }

我首先尝试分别替换$ ReturnType $ OldType和NewType:

搜索模板:

class $Class$ { 
  OldType $MethodName$($ParameterType$ $Parameter$);
}

替换模板:

class $Class$ { 
  NewType $MethodName$($ParameterType$ $Parameter$);
}

这给了我所有的方法,但如果我替换它,方法就会被删除。

然后我尝试按以下方式更改模式:

搜索模板:

class $Class$ { 
  $OldType$ $MethodName$($ParameterType$ $Parameter$);
}

并指定,$ OldType $应该是搜索的目标。我还为此变量指定了一个RegEx模式:OldType。

替换模板:

class $Class$ { 
  NewType $MethodName$($ParameterType$ $Parameter$);
}

这也找到了所有方法,但是如果我替换它们就会被删除。我尝试了非常不同,总是有相同的结果:如果我替换匹配,方法将被删除。如何指定搜索/替换模板以仅在签名中用NewType替换OldType。

1 个答案:

答案 0 :(得分:5)

您在“结构搜索”中遇到了一个错误。更换。可能是这个:https://youtrack.jetbrains.com/issue/IDEA-127835

但有一个解决方法。使用以下搜索模板:

class $Class$ { 
  OldType $MethodName$($ParameterType$ $Parameter$) {
    $statement$;
  }

  $other$;
}

确保"此变量是搜索的目标"对于$ MethodName $未设置,或者它无法正常工作。

$声明$
最小数量:0
最大数量:无限

<强> $ $其他
最小数量:0
最大数量:无限

其余内容与类现有模板的方法一样。

替换模板正如您所期望的那样与搜索模板相同,只有NewType替换OldType。

让我知道它是否有效,或者你是否还有其他问题。