2016-01-28 16 views
5

Tôi muốn sử dụng ButterKnife cho Android. Tôi cần chú thích một số trường dựa trên một số biểu thức ở đâu đó trong mã. Tôi có mã như thế nàySử dụng tìm kiếm cấu trúc IntelliJ để thay thế trường và biểu thức của nó bằng trường mới

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

Tôi muốn điều này

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

Trong kết quả biểu hiện đã biến mất, và lĩnh vực được chú thích dựa trên biểu thức cũ.

Có thể thực hiện loại tìm kiếm này và thay thế trong thay thế cấu trúc của IntelliJ không? Dường như nó không xử lý một cách duyên dáng vụ việc khi các dòng lãi không liền kề và ở các vị trí khác nhau về mặt cấu trúc. Tôi đã thử dựa trên mẫu lớp và sử dụng $ Statement $ (số lần xuất hiện không có 0 lần) nhưng nó không hoạt động đối với tôi.

Tôi nhận ra nó thực sự tương đối đơn giản để làm với các biểu thức thông thường, đơn giản hơn nhiều so với tìm kiếm cấu trúc IntelliJ để chơi bóng, nhưng Tôi thích học các công cụ của mình, vì vậy tôi vẫn muốn biết nếu điều này là có thể.

Trả lời

2

Trong khi Search structurally bằng cách nào đó hoạt động và có thể thực hiện truy vấn tìm kiếm, replace structuraly là loại công cụ được tạo bởi "người ngoài hành tinh" cho "kẻ săn mồi". Tôi hy vọng rằng nhóm intelliJ sẽ xem lại tính năng này và sẽ làm cho nó dễ sử dụng hơn/dễ hiểu hơn.

Tôi đã cố gắng một mình để thực hiện truy vấn Replace structurally, nhưng tôi chỉ có thể thực hiện khoản Search structurally.

Tôi đã làm điều đó với Mockito lib chẳng hạn.

Structural search dialog

Một trong những điểm mấu chốt ở đây để đưa cho $SomeStatement1$$SomeStatement2$ min và max đếm đến {0, Unlimited}

enter image description here

Và từ thời điểm này tôi đã cố gắng để đi với mệnh đề thay thế nhưng nó hoàn toàn rối tung ra khỏi phạm vi của khai báo/lớp/phương thức.

Hy vọng điều này sẽ hữu ích.

+0

Tôi cũng thấy nó sai lầm mã của tôi, đôi khi loại bỏ nhiều hơn mức cần thiết, hoặc chèn một lớp mới. Nó dường như làm việc cho tìm kiếm rất đơn giản và địa phương. Tôi đã hy vọng một người nào đó sẽ nói nó không thể hoặc nó được. Nếu không ai biết chắc chắn về kiến ​​thức, tôi sẽ giả định nó bởi vì chỉ có những người biết và biết rằng nó không thể làm những gì tôi muốn. – arberg

0

Điều gì đó như thế này sẽ hoạt động.
Tìm kiếm mẫu:

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

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

biến:
st1 phút: 0 max: không giới hạn
st2 phút: 0 max: không giới hạn

thay thế mẫu:

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

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

Cảm ơn bạn đã thử. Tôi nên đưa nó vào câu hỏi, vì đó là một trong những thứ tôi đã thử, và nó không hoạt động.Tôi không phù hợp với bất cứ điều gì. Khi tôi chơi xung quanh với nó tôi nhớ nhận được một số thay thế để actualy xảy ra, tôi nghĩ rằng tôi đơn giản hóa mã nguồn. Tuy nhiên sau đó nó hoàn toàn sai lầm sự thay thế. Tôi sẽ chấp nhận câu trả lời ở trên để đóng vấn đề. – arberg

Các vấn đề liên quan