2015-07-28 21 views
6

Project Lombok là hấp dẫn để giảm mã bản mẫu trong mã Java 8 của chúng tôi. Nhược điểm là nó giới hạn hỗ trợ công cụ (tái cấu trúc, phân tích tĩnh).Hỗ trợ tái cấu trúc IDE trong dự án Lombok

Ví dụ: trong các thử nghiệm của tôi với IntelliJ, hãy tái cấu trúc các trường của một lớp được chú thích bằng @Builder, không còn hoạt động nữa. Tôi biết không có cách giải quyết khác (bạn phải sửa các vị trí theo cách thủ công, nơi sử dụng tên phương thức cũ của Trình tạo).

Ví dụ khác là trong Eclipse "tìm tham chiếu" trên trường không tìm thấy tham chiếu, nhưng cách giải quyết tốt là mở đường viền và áp dụng "tìm tham chiếu" trên trình tạo/thiết lập được tạo.

Câu hỏi của tôi:

  • Những tính năng nào trong những IDE lớn (đặc biệt là Eclipse, IntelliJ) refactoring nó phá vỡ?
  • Có cách giải quyết tốt không?
+1

Nếu bạn không nhận được câu trả lời ở đây, bạn có thể cân nhắc việc hỏi về [tracker theo dõi vấn đề] của Lombok (https://github.com/rzwitserloot/lombok/issues). – Jeffrey

Trả lời

2

Một thời gian gần đây tôi đi qua:

Trong IntelliJ (không biết về Eclipse), bạn không thể lấy một giao diện bao gồm bất kỳ phương pháp tạo ra bởi Lombok. Chúng không hiển thị trên hộp thoại có liên quan.

Có một cách giải quyết dễ dàng: Hãy để IntelliJ tạo các phương thức, trích xuất giao diện, hoàn nguyên lớp học của bạn và yêu cầu nó triển khai lại giao diện.

4

Đây là giải pháp thay thế nhỏ để cấu trúc lại trình lấy/đặt của biến trong lớp @Data. Này hoạt động trong nhật thực và có lẽ ở nơi khác cũng như: lớp

mẫu, nơi mà chúng tôi muốn cấu trúc lại "giá trị" thành "value2":

import lombok.Data; 
@Data 
public class Thing { 
    int value; 
} 

(1) Đổi tên (không refactor) biến để một cái gì đó tạm thời để loại bỏ getter/setter được tạo ra của lombak cho tên gốc. Bạn sẽ nhận được các lỗi biên dịch ở bất kỳ nơi nào mà trình gỡ rối/thiết lập cũ đã được tham chiếu, nhưng đó là tạm thời:

@Data 
public class Thing { 
    int valueXXX; // reference to getValue() are broken for the moment 
} 

(2) Tạo thủ công trình lấy/đặt giả cho tên cũ. Lỗi biên dịch của bạn sẽ biến mất ngay bây giờ:

@Data 
public class Thing { 
    int valueXXX; 
    public int getValue() { return 0; } 
    public void setValue(int value) {} 
} 

(3) Sử dụng nhật thực để tái cấu trúc trình khởi động giả/bộ đặt giả của bạn. Tất cả các tài liệu tham khảo trong codebase của bạn bây giờ sử dụng getValue2() và setValue2():

@Data 
public class Thing { 
    int valueXXX; // 
    public int getValue2() { return 0; } 
    public void setValue2(int value) {} 
} 

(4) Xóa đổi tên giả getter/setter và thay đổi tên biến từ tên tạm thời của mình vào cái mới. Bây giờ tất cả lại được gộp lại một lần nữa:

@Data 
public class Thing { 
    int value2; 
} 

Phải thừa nhận rằng điều này hơi khó chịu nhưng thực sự không thay đổi hàng trăm tham chiếu bằng tay.

+1

Giải pháp tốt, được giải thích rõ ràng. Chào mừng bạn đến với SO. – namero999

+0

Tôi muốn đề xuất một cải tiến nhỏ sẽ giảm thiểu số lượng nhập liệu.(1) nhận xét chú thích "@Data"; (2) sử dụng IDE để tạo ra getter/setter cho trường; (3) chú thích "@Data" chú thích; (4) tên trường refactor bình thường. (5) xóa getter/setter được tạo ra. – Buck

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