【发布时间】:2020-02-03 09:56:38
【问题描述】:
我正在尝试使用 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 脚本上
附言。这主要是由于添加这些脚本时完全缺乏编辑器帮助造成的!不是 Jetbrains 所期望的!
【问题讨论】:
-
Optional<Boolean>应该是什么,一个“是/否/也许”的东西?您是否有机会改用具有三个选项的更精确的枚举类型? -
这只是一个例子 :)
boolean可以是int、int[]、String、List<String>或MyClass。这是关于使用 SSR 盲目地添加接受 Optionals 的替代 setter 方法,而不是讨厌的三态逻辑。
标签: java intellij-idea structural-search