是否有一系列的IntelliJ自动重构将消除多余的类Foo?
在重构之前:
public static class Foo {
private final String s;
public Foo(String s) {
this.s = s;
}
public String getS() {
return s;
}
}
private static void run() {
Foo f = new Foo("blah");
f.getS().length();
f.getS().getBytes();
Foo f2 = new Foo("blahg");
f2.getS().length();
f2.getS().getBytes();
}
重构后:
private static void run() {
String f = "blah";
f.length();
f.getBytes();
String f2 = new "blahg";
f2.length();
f2.getBytes();
}
在我的具体案例中,自动重构的原因是实际使用了几千次Foo。但我也很感兴趣。使用其他自动化步骤将代理对象获取到Foo状态是非常容易的,但我不知道如何处理最后一点。
发布于 2019-10-04 09:01:21
不确定这在更一般的设置中如何工作,但我会:
XXXXXXXXX
Foo
,将getS
的名称更改为非常不同的名称,例如,用空字符串替换.XXXXXXXXX()
,用空字符串
Foo (\w+) = new Foo\("(\w+)"\);
,用String $1 = "$2"
;
替换Foo (\w+) = new Foo\("(\w+)"\);
这将处理run
方法中的所有内容。现在只需要手动删除Foo
,虽然它不是IntelliJ重构,但只需要在一个地方完成,这样就可以接受了。
发布于 2019-10-16 15:26:02
一种更安全的方法是使用结构替换。
在搜索框中的菜单中搜索结构替换( $Instance$.getS().$MethodCall$($Parameter$)
$Instance$.getS().$MethodCall$($Parameter$)
),在$Instance$上添加一个筛选器,使其仅为Foo
Migrate
并从类Foo
创建自定义类型映射到‘String`’H 214,如果您想再次使用结构替换,您可以使用这样的方法来查找和替换
Foo $name$ = new Foo($Parameter$);
String $name$ = $Parameter$;
。
https://stackoverflow.com/questions/58230042
复制相似问题