Tôi có rất nhiều lớp xử lý xử lý các loại tin nhắn cụ thể. Để đăng ký tất cả các trình xử lý này, tôi cần phải biết trình xử lý nào tồn tại. Hiện tại, tất cả chúng đều được chú thích với chú thích cụ thể và tôi sử dụng bộ xử lý chú thích Java 6 để nhận tất cả chúng và tạo lớp Đăng ký chứa một cá thể của từng loại chú thích. Điều này làm việc tuyệt vời nếu toàn bộ cây đang được xây dựng cùng một lúc, nhưng nếu chỉ một trong các lớp chú thích đang được xây dựng (khi tôi lưu tệp trong Eclipse, ví dụ), bộ xử lý chỉ thấy loại đó và các bản dựng một Đăng ký không đầy đủ. Làm thế nào tôi có thể kiểm tra các loại khác trong kịch bản này?Làm thế nào tôi có thể kiểm tra toàn bộ cây nguồn bằng một bộ xử lý chú thích?
Trả lời
Tôi đã giải quyết đủ điều này ngay bây giờ. Những gì tôi đã làm là một chút hackey, nhưng về cơ bản cho mọi lớp chú thích tôi thấy, tôi thêm tên của nó vào một HashSet. Sau đó, tôi sử dụng Filer.getResource() để mở một tệp mà tôi đã ghi lại tất cả các lớp được chú thích trước đó, và thêm chúng vào HashSet nữa. Sau đó, tôi tạo ra lớp đăng ký, và viết toàn bộ HashSet ra cùng một tài nguyên với Filer.createResource(). Điều này sẽ gây ra vấn đề nếu tôi xóa một loại chú thích, vì nó sẽ vẫn được ghi lại trong tập tin đó, nhưng tôi chỉ có thể làm sạch dự án hoặc xóa tập tin đó để giải quyết nó.
EDIT: Ngoài ra, tôi tin rằng việc chuyển "các phần tử gốc" thích hợp cho Filer.createSource() sẽ cho phép Eclipse theo dõi những phụ thuộc đó đúng cách, nhưng không. Có lẽ đó là một lỗi của Eclipse.
bạn có muốn mã này được chia sẻ ở mọi nơi không? Tôi quan tâm đến cách tiếp cận của bạn. –
Đây là mã do công ty sở hữu, nhưng nếu tôi từng viết một cái gì đó như thế này cho một dự án cá nhân, nó sẽ có sẵn –
Tôi đã viết [thư viện chung] (https://github.com/sentinelt/evo-classindex) cho điều này. Tôi tìm thấy trang này, bởi vì thư viện của tôi bị cùng một vấn đề ... –
Không ngạc nhiên, bộ xử lý chú thích biên dịch chỉ xử lý các tệp đang được biên dịch. Eclipse sử dụng trình biên dịch gia tăng để tiết kiệm thời gian, vì vậy câu trả lời ngắn gọn là bạn không thể mong đợi bộ xử lý chú thích của bạn xem tất cả các loại trong một lần truyền.
Một giải pháp là thay đổi kiến trúc của bạn để hỗ trợ biên dịch gia tăng. Ví dụ: đối với mỗi chú thích HandlerClass
, hãy tạo một lớp RegisterHandlerClass
đăng ký lớp trình xử lý đó.
Điều đó nói rằng, âm thanh như những gì bạn đang làm sẽ được thực hiện tốt hơn khi chạy, có lẽ với sự trợ giúp của một công cụ như Reflections.
Đây là mã Android và có vẻ như hầu hết các khung công tác đó đều không hoạt động trên Android; trong mọi trường hợp, tôi muốn tránh quét đường dẫn nếu có thể. Nếu tôi đi tuyến đường RegisterHandlerClass, chính xác điều đó sẽ giúp ích như thế nào? Làm thế nào tôi có thể có được những lớp học để đăng ký lớp xử lý thích hợp, mà không cần phải có một "đăng ký của sổ đăng ký" để nói chuyện? –
Nếu vấn đề là các lớp Handler không được nạp, thì ý tưởng RegisterHandlerClass của tôi sẽ không hoạt động. Thay vào đó, bạn có thể tạo một tệp tài nguyên cho mỗi lớp trình xử lý và đặt tất cả chúng trong cùng một thư mục và sau đó chỉ cần quét thư mục đó khi chạy. –
- 1. Tôi làm cách nào để tạo bộ xử lý chú thích xử lý Biến cục bộ?
- 2. SVN: Làm cách nào để tôi chỉ kiểm tra toàn bộ cây nguồn với thân cây?
- 3. Làm thế nào để viết các bài kiểm tra đơn vị tự động cho bộ xử lý chú thích java?
- 4. Kiểm tra sự vắng mặt của siêu lớp trong bộ xử lý chú thích
- 5. Làm thế nào để viết một bộ xử lý chú thích Java?
- 6. Làm thế nào để tiêm toàn bộ bean được quản lý thông qua chú thích @ManagedProperty?
- 7. Bộ xử lý chú thích - Cách lấy Lớp đang xử lý
- 8. Tích hợp bộ xử lý chú thích với Gradle
- 9. Lập trình gọi Bộ xử lý chú thích
- 10. Đầu ra bộ xử lý chú thích trong maven
- 11. Khám phá lớp của phương thức chú giải trong Bộ xử lý chú thích cho java
- 12. Xử lý một phần tệp bằng bộ tiền xử lý
- 13. làm thế nào để bạn gỡ lỗi bộ xử lý chú thích java bằng cách sử dụng intellij?
- 14. Forward tương thích bộ xử lý chú thích Java 6 và SupportedSourceVersion
- 15. Java xử lý 6 chú thích - nhận được một lớp từ chú thích
- 16. Làm cách nào để biên dịch bộ xử lý chú thích với Ant?
- 17. Chú thích Java - Có thư viện trợ giúp nào để đọc/xử lý chú thích không?
- 18. Chú thích Bộ điều hợp Java
- 19. Làm thế nào tôi có thể thấy đầu ra của bộ tiền xử lý Visual C++?
- 20. Làm cách nào tôi có thể kiểm tra một bộ truy vấn trống trong Django?
- 21. Kiểm tra xem chức năng có được khai báo bằng bộ tiền xử lý C không?
- 22. Kiểm tra toàn bộ bộ Rspec không thành công
- 23. Làm cách nào tôi có thể xử lý an toàn các tham số tùy chọn
- 24. Có thể thêm chú thích @Secured hoặc @PreAuthorized vào toàn bộ lớp học
- 25. Tôi có thể kiểm tra bộ điều khiển Symfony2 bằng cách nào?
- 26. eclipse java chú thích xử lý
- 27. Làm thế nào tôi có thể nhận được kiến trúc bộ vi xử lý của một dll lắp ráp?
- 28. Tôi nên kiểm tra bộ tạo mã như thế nào?
- 29. Làm cách nào để định dạng toàn bộ cây nguồn trong Eclipse 3.4 (Ganymede)?
- 30. Làm thế nào tôi có thể kiểm tra một bộ điều khiển với các thuộc tính giải quyết trong AngularJS?
Bạn đang sử dụng bộ xử lý chú thích nào? –
Tôi đã tự viết, sử dụng API Java 6 (mở rộng javax.annotation.processing.AbstractProcessor) –
+1. Từ điều tra của riêng tôi, điều này không có sẵn, nhưng nếu tôi thực sự muốn biết về nó. –