Как преобразовать Java примитив в штучный тип в IntelliJ Structural Replace - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь использовать IntelliJ Structural Search and Replace, чтобы перегрузить набор методов установки с Optional вариантами. Это должно учитывать, что целевое значение может быть примитивным (например, от 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$;
}

Я немного застрял на необходимом сценарии PSI Groovy сгенерировать $vTypeMightBeBoxed

PS. В основном это вызвано полным отсутствием помощи редактора при добавлении этих скриптов! Не то, что ожидается от Jetbrains!

1 Ответ

1 голос
/ 03 февраля 2020

Сценарий для $VTypeMightBeBoxed$, подобный этому, должен работать:

import com.intellij.psi.*
def x = VType.getType()
if (x instanceof PsiPrimitiveType) {
  return x.getBoxedTypeName();
} else {
  return VType.getText();
} 

Но будьте осторожны, ваша замена сгенерирует красный код, когда в классе есть несколько из этих методов set с одинаковым именем: методы будут иметь одинаковое стирание.

...