我有一个名为"com.foo.BaseFoo"的抽象类
我想找到任何从BaseFoo扩展的东西上调用new()的人
我试过做一个搜索模板:
new $BaseFoo$()
Run Code Online (Sandbox Code Playgroud)
然后编辑变量,使其具有对象类型的表达式约束
com.foo.BaseFoo
Run Code Online (Sandbox Code Playgroud)
并单击"在类型层次结构中应用约束"但这不起作用.
在结构搜索和替换中,如何搜索给定的整数给定方法参数是否大于或等于给定值?或者这甚至可能吗?
例如:假设我有100个这种方法的用法
public void sendString(String msg, int interfaceId){ //doing stuff... }
Run Code Online (Sandbox Code Playgroud)
我想检查一个固定的(无变量号)是否传递给interfaceId是否大于或等于给定的数字.
我想找到属于StringBuilder的toString方法的所有出现:
StringBuilder sb = new StringBuilder();
sb.append("sometext");
return sb.toString();
Run Code Online (Sandbox Code Playgroud)
并替换为:
StringBuilder sb = new StringBuilder();
sb.append("sometext");
return Optimizer.stat(sb.toString());
Run Code Online (Sandbox Code Playgroud)
当然var"sb"并不总是以相同的方式编写:-)
我尝试了IntelliJ Ultimate Structural Search和Replace.但我找不到只能获得StringBuilder类的String的方法.
非常感谢.
IntelliJ是否可以在代码中找到定义匿名类的所有位置?
我只是在寻找而不是改变。我并不是在问要转换为lambda,这与lambda无关。
我想用某个签名更改方法:
public OldReturnType get.*(Params) {
//lots of code
}
Run Code Online (Sandbox Code Playgroud)
对此:
public NewReturnTyp get.*(Params) {
//lots of code
}
Run Code Online (Sandbox Code Playgroud)
- >我想替换返回类型.我用SSR试过这个:
复制现有模板"类的方法".这会产生模板:
class $ Class $ {$ ReturnType $ $ MethodName $($ ParameterType $ $ Parameter $); }
我首先尝试分别替换$ ReturnType $ OldType和NewType:
搜索模板:
class $Class$ {
OldType $MethodName$($ParameterType$ $Parameter$);
}
Run Code Online (Sandbox Code Playgroud)
替换模板:
class $Class$ {
NewType $MethodName$($ParameterType$ $Parameter$);
}
Run Code Online (Sandbox Code Playgroud)
这给了我所有的方法,但如果我替换它,该方法将被删除.
然后我尝试通过以下方式更改模式:
搜索模板:
class $Class$ {
$OldType$ $MethodName$($ParameterType$ $Parameter$);
}
Run Code Online (Sandbox Code Playgroud)
并且指定$ OldType $应该是搜索的目标.我还为此变量指定了一个RegEx模式:OldType.
替换模板:
class $Class$ {
NewType $MethodName$($ParameterType$ $Parameter$);
}
Run Code Online (Sandbox Code Playgroud)
这也找到了所有方法,但是如果我替换它们就会被删除.我尝试了非常不同,总是有相同的结果:如果我替换匹配,该方法将被删除.如何指定搜索/替换模板以在签名中将OldType替换为NewType.
我使用的是IntelliJ IDEA,它有一个叫做结构搜索的漂亮功能.我想用它来查找最后有注释的所有类中的所有字段,如下所示:
class Thing {
double x; // arbitrary comment (any text goes here)
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我尝试过的任何东西似乎都没有用.
使用Copy existing template...I 发现循环的结构搜索:
for ($Type$ $Variable$ : $Expression$) {
$Statement$;
}
Run Code Online (Sandbox Code Playgroud)
我想增强它,以便它只找到变量不是 final 的 for 循环。
它应该找到:
for (String string : strings) {
// Statements
}
Run Code Online (Sandbox Code Playgroud)
然而不是:
for (final String string : strings) {
// Statements
}
Run Code Online (Sandbox Code Playgroud)
现在它显然可以找到两者,因为最终和非最终之间没有区别。我怎样才能添加这个额外的检查?
我正在尝试使用以下搜索和替换模板查找大括号写在新行中的所有 if 语句:
搜索模板:
if ($Expr$)
{
$ThenStatements$;
}
else
{
$ElseStatements$;
}
Run Code Online (Sandbox Code Playgroud)
替换模板:
if ($Expr$) {
$ThenStatements$;
}
else {
$ElseStatements$;
}
Run Code Online (Sandbox Code Playgroud)
如果模板引擎不区分两个模板,我面临的问题。它让我可以用正确的模板替换搜索模板,但它也会将“正确”模板检测为错误模板。
有没有办法使用某种正则表达式来解决这个问题?
编辑:在 Android Studio 上工作。我正在尝试为我的公司代码样式约定生成一组 lint 规则,这些规则将显示为警告或错误
intellij-idea inspection code-inspection structural-search android-studio
IntellJ Idea项目中是否可以用当前的类名+ .class替换对getClass()的所有调用?
因此,例如替换:
class ClassName{
public method(){
Logger.logDebug(getClass(), "Some information")
}
}
Run Code Online (Sandbox Code Playgroud)
与
class ClassName{
public method(){
Logger.logDebug(ClassName.class, "Some information")
}
}
Run Code Online (Sandbox Code Playgroud)