2

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

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

对此:

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

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

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

    类 $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$);
}

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

4

1 回答 1

6

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

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

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

  $other$;
}

确保未设置 $MethodName$ 的“此变量是搜索的目标”,否则它将不起作用。

$statement$
最小计数:0
最大计数:无限制

$other$
最小计数:0
最大计数:无限制

其余的在类现有模板的方法中。

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

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

于 2014-12-19T19:24:06.170 回答