2014-12-19 3 views
2

Я хотел бы изменить метод с определенной сигнатурой:Intellij структурный метод замены изменения подписи

public OldReturnType get.*(Params) { 
    //lots of code 
} 

к этому:

public NewReturnTyp get.*(Params) { 
    //lots of code 
} 

-> Я хотел бы заменить тип возвращаемого , Я пробовал это с ССР:

  • Скопируйте существующий шаблон «методы класса». Вы получите шаблон:

    класс $ Класс $ { $ ReturnType $ $ Имя метода $ ($ ParameterType $ $ Parameter $); }

Я первый попытался заменить $ ReturnType $ OldType и NewType respectivly:

Поиск шаблона:

class $Class$ { 
    OldType $MethodName$($ParameterType$ $Parameter$); 
} 

Заменить Шаблон:

class $Class$ { 
    NewType $MethodName$($ParameterType$ $Parameter$); 
} 

Это дает мне все методы, но если я его заменил, метод будет удален.

Затем я попытался изменило характер следующим образом:

Поиск шаблона:

class $Class$ { 
    $OldType$ $MethodName$($ParameterType$ $Parameter$); 
} 

И уточнил, что $ OldType $ должны быть целью поиска. Я также указал шаблон RegEx: OldType для этой переменной.

Заменить Шаблон:

class $Class$ { 
    NewType $MethodName$($ParameterType$ $Parameter$); 
} 

Это также находит все методы, но они удаляются, если я заменю. Я пробовал совсем по-другому, всегда с тем же результатом: метод удаляется, если я заменю совпадение. Как мне указать шаблон поиска/замены, чтобы просто заменить OldType на NewType в подписи.

ответ

5

Вы обнаружили ошибку в структурном поиске & Замените. Вероятно, этот: https://youtrack.jetbrains.com/issue/IDEA-127835

Но есть обходное решение. Используйте следующий шаблон поиска:

class $Class$ { 
    OldType $MethodName$($ParameterType$ $Parameter$) { 
    $statement$; 
    } 

    $other$; 
} 

Убедитесь, что «Эта переменная является объектом поиска» за $ имяМетода $ не установлен, или он не будет работать.

$ оператор $
минимальный отсчет: 0
максимальное количество: неограниченная

$ другие $
минимальный отсчет: 0
максимальное количество: неограниченная

Остальное, как в методы класса существующий шаблон.

Замена шаблона, как и следовало ожидать, такая же, как шаблон поиска, только с заменой NewType на OldType.

Сообщите мне, если это будет работать, или если у вас возникнут проблемы.

+0

Вид: Проблема в том, что некоторые параметры теряют свой последний модификатор, поэтому я получаю некоторую ошибку компилятора в анонимных внутренних классах. Но я сделал это вручную, и я думаю, что ошибка, о которой вы упомянули, является причиной моих ругательств (-.) Я буду принимать ваш ответ, потому что я думаю, что это хороший старт для следующего человека, который хочет это сделать, но для меня, проблема решена. – morpheus05

+0

Думаю, вам понадобится что-то подобное в вашей строке для подписи метода: $ accessModifier $ $ static $ OldType $ MethodName $ ($ ParameterType $ $ Parameter $) { и установить min/max подсчитывается до 0 и 1. – mish

+1

@mish Невозможно использовать переменные для модификаторов в SSR. Шаблоны всегда должны быть допустимыми компилируемыми java-кодом (фрагменты). –

Смежные вопросы