2016-01-22 6 views
0

Я создаю собственные проверки на основе структурного замещения. Например, я хочу, чтобы сделать проверку преобразования кода, как:Как исключить блок кода в Intellij IDEA Structural Replace

if (!$Map$.containsKey($key$)){ 
    $Map$.put($key$, $value$); 
} 

и

if ($Map$.get($key$) == null){ 
    $Map$.put($key$, $value$); 
} 

в

$Map$.putIfAbsent($key$, $value$); 

Но я не хочу, чтобы реагировать на код, как:

if (!$Map$.containsKey($key$)){ 
    $Map$.put($key$, $value$); 
} 
else { 
    // any logic 
} 

Я попытался использовать

if (!$Map$.containsKey($key$)){ 
    $Map$.put($key$, $value$); 
} 
$else$ 

с текстом опции «еще», но это не сработало.

Возможно ли это? Также я должен сделать два разных инспекции с одинаковым результатом замены. Можем ли мы использовать несколько шаблонов поиска?

UPDATE:

Я попытался заменить следующий рисунок

$Iterable$.forEach($value$ -> { 
    if ($condition$) { 
     $statement$; 
    } 
}); 

в

$Iterable$.stream() 
     .filter($value$ -> $condition$) 
     .forEach($value$ -> $statement$); 

Но после замены я получаю:

$Iterable$.stream() 
     .filter($value$ -> $condition$) 
     .forEach($value$ -> $statement$;); 

Можно ли удалить «;» от результата замены?

+0

Относительно * Обновить *; похоже, что вы сталкиваетесь с некоторыми ошибками в Structural Search. Кажется, в настоящий момент это невозможно. –

+0

Обновление вашего обновления: исправлена ​​ошибка. В IntelliJ IDEA 2017.2 ваша структурная замена больше не дает дополнительных точек с запятой. –

ответ

0

Используйте шаблон поиска, как это:

if (!$Map$.containsKey($key$)){ 
    $Map$.put($key$, $value$); 
} else { 
    $statement$; 
} 

Редактировать переменные и установить минимальное и максимальное кол-statement в 0.

Использование нескольких шаблонов поиска для одного инспекции структурного поиска в настоящее время невозможно.

+0

Это работает. Большое спасибо. Также вы знаете, можно ли заменить на импорт? Например, заменить $ String $ == null || $ String $ .isEmpty() to org.apache.lang3.StringUtils.isEmpty ($ String $) – Monk3D

+0

Включить флажок «укоротить полные имена» в диалоговом окне «Структурная замена»? –

+0

Спасибо, я попробовал это вчера. Но это не сработало, может, у меня была другая проблема. Не могли бы вы ответить на еще один вопрос в обновлениях, поскольку вы знакомы с этой темой. – Monk3D