如何在 IntelliJ 结构替换中将 Java 原语转换为盒装类型

How to convert Java primitive to boxed type in IntelliJ Structural Replace

我正在尝试使用 IntelliJ 结构搜索和替换来重载具有 Optional 变体的一套 setter 方法。这需要尊重目标值可能是原始值(例如 booleanOptional<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 中存在多个具有相同名称的设置方法时,您的替换将生成红色代码:这些方法将具有相同的擦除。