Intellij Idea 用IntelliJ提取Kotlin代码中的with块

k97glaaz  于 2022-12-17  发布在  Kotlin
关注(0)|答案(1)|浏览(185)

假设data是一个普通的Kotlin数据类,我想用with结构包围一个块,这样

myFun(data.start, data.end, data.name)

变成

with(data) { myFun(start, end, name) }

这可以通过IntelliJ重构来实现吗(最好是使用键盘快捷键)。我在IntelliJ 2022.3中找不到任何合适的选项

m2xkgtsf

m2xkgtsf1#

我不知道有这样的重构,也不知道有什么方法可以一步完成。
然而,我通常只从中提取一个函数:
1.用Ctrl + Alt + M从表达式中提取函数
1.(有时)如果data是在函数中捕获的,而不是自动作为param传递的,我会通过在它上面使用Ctrl + Alt + P使它成为一个param,如果data是一个属性,无论您的新函数在哪里结束,都可以使用它,那么就可能发生这种情况。
1.通过在data参数声明上使用Alt + Enter并选择快速操作Convert parameter to receiver,将参数转换为接收方
现在您应该:

data.myFun2() // call site

fun TypeOfData.myFun2() = myFun(start, end, name)

然后你可以这样(我个人喜欢这样),但如果你想让你的最终结果看起来像你的问题,你可以做几个步骤:
1.手动将data.myFun2()更改为with(data) { myFun2() }(更简单,因为现在只需更改一个示例)
1.用Ctrl + Alt + N内联对myFun2()的调用
但是如果你想得到这个结果,整个序列可能会让你觉得矫枉过正。

相关问题