2016-01-28 1 views
5

Я хочу использовать ButterKnife для Android. Мне нужно аннотировать некоторые поля на основе некоторых выражений, которые находятся в другом месте кода. У меня есть код, как этотИспользуйте IntelliJ структурный поиск, чтобы заменить поле и его выражение новым полем

private String myField; 
... 
public myClassConstructor() { 
    ... 
    myField = res.getString(R.string.my_string_id); 
    ... 
} 

Я хочу, чтобы этот

@BindString(R.string.my_string_id); 
String myField; 
... 
public myClassConstructor() { 
    ... 
    ... 
} 

В результате выражение уводят, а поле помечается на основе старого выражения.

Возможно ли это осуществить поиск и замену в структурной замене IntelliJ? Кажется, что он не изящно обрабатывает случай, когда интересующие линии не смежны и находятся в разных местах структурно. Я попытался использовать его в шаблоне класса и использовал $ Statement $ (0-неограниченные вхождения), но это не сработало для меня.

Я понял, что на самом деле он относительно прост в использовании с регулярными выражениями, что намного проще, чем получение структурного поиска IntelliJ для игры в мяч, но Мне нравится изучать мои инструменты, поэтому мне все равно хотелось бы знать, возможно ли это.

ответ

2

В то время как Search structurally как-то работает, и можно сделать поисковый запрос, replace structuraly - это вид инструментов, которые были сделаны «инопланетянами» для «хищников». Я надеюсь, что команда intelliJ пересмотрит эту функцию и сделает ее более удобной и понятной.

Я пытался сам сделать Replace structurally запрос, но я мог только сделать Search structurally пункт.

Я сделал это с помощью Mockito lib, например.

Structural search dialog

Одним из ключевых моментов здесь, чтобы положить на $SomeStatement1$ и $SomeStatement2$ мин и максимальным кол в {0,} Безлимитный

enter image description here

И с этого момента я пытался прийти с предложением замены, но это полностью противоречило сфере применения метода/полей/класса.

Надеюсь, это поможет.

+0

Я также нашел, что это перепутано мой код, иногда удаляя гораздо больше, чем нужно, или вставил новый класс. Казалось, это работает для очень простых и локальных обысков. Я надеялся, что кто-то скажет, что это невозможно, или так оно и есть. Если никто с уверенным знанием не перехватит, я буду считать его, потому что знают только разработчики и что он, вероятно, не может делать то, что я хотел. – arberg

0

Что-то вроде этого должно работать. Шаблон
Поиск:

class $Class$ { 
    $FieldType$ $FieldName$; 

    $Class$() { 
     $st1$; 
     $FieldName$ = res.getString($expr$); 
     $st2$; 
    } 
} 

Переменные:
st1 мин: 0 макс: неограничен
st2 мин: 0 макс: неограничен

шаблон Замена:

class $Class$ { 
    @BindString($expr$) 
    $FieldType$ $FieldName$; 

    $Class$() { 
     $st1$; 
     $st2$; 
    } 
} 
+0

Благодарим за попытку. Я должен был включить это в вопрос, поскольку это была одна из вещей, которые я пробовал, и это не сработает.Я ничего не сравниваю. Когда я играл с ним, я помню, что я получил некоторую замену на самом деле, я думаю, что упростил исходный код. Однако тогда он полностью испортил замену. Я приму этот ответ, чтобы закрыть вопрос. – arberg

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