如何在 IntelliJ 结构替换中将 Java 原语转换为盒装类型
How to convert Java primitive to boxed type in IntelliJ Structural Replace
我正在尝试使用 IntelliJ 结构搜索和替换来重载具有 Optional
变体的一套 setter 方法。这需要尊重目标值可能是原始值(例如 boolean
到 Optional<Boolean>
)。这是转换的核心部分:
搜索:
public static void set($BType$ $BName$, $VType$ $VName$) {
$body$; // 0 - infinity
}
替换:
public static void set($BType$ $BName$, java.util.Optional<$VTypeMightBeBoxed$> $VName$) {
$VName$.ifPresent(v -> set($BName$, v));
}
public static void set($BType$ $BName$, $VType$ $VName$) {
$body$;
}
我有点卡在生成 $vTypeMightBeBoxed
所需的 PSI Groovy 脚本上
PS。这主要是由于添加这些脚本时完全缺乏编辑器的帮助造成的!不是 Jetbrains 所期望的!
像这样的 $VTypeMightBeBoxed$
脚本应该可以工作:
import com.intellij.psi.*
def x = VType.getType()
if (x instanceof PsiPrimitiveType) {
return x.getBoxedTypeName();
} else {
return VType.getText();
}
但请注意,当 class 中存在多个具有相同名称的设置方法时,您的替换将生成红色代码:这些方法将具有相同的擦除。
我正在尝试使用 IntelliJ 结构搜索和替换来重载具有 Optional
变体的一套 setter 方法。这需要尊重目标值可能是原始值(例如 boolean
到 Optional<Boolean>
)。这是转换的核心部分:
搜索:
public static void set($BType$ $BName$, $VType$ $VName$) {
$body$; // 0 - infinity
}
替换:
public static void set($BType$ $BName$, java.util.Optional<$VTypeMightBeBoxed$> $VName$) {
$VName$.ifPresent(v -> set($BName$, v));
}
public static void set($BType$ $BName$, $VType$ $VName$) {
$body$;
}
我有点卡在生成 $vTypeMightBeBoxed
PS。这主要是由于添加这些脚本时完全缺乏编辑器的帮助造成的!不是 Jetbrains 所期望的!
像这样的 $VTypeMightBeBoxed$
脚本应该可以工作:
import com.intellij.psi.*
def x = VType.getType()
if (x instanceof PsiPrimitiveType) {
return x.getBoxedTypeName();
} else {
return VType.getText();
}
但请注意,当 class 中存在多个具有相同名称的设置方法时,您的替换将生成红色代码:这些方法将具有相同的擦除。