2010-07-19 48 views
8

Tôi đang cố gắng tạo chú thích cho biến cục bộ. Tôi biết rằng tôi không thể giữ lại các chú thích trong bytecode tạo ra, nhưng tôi sẽ có thể được tiếp cận với các thông tin ở thời gian biên dịch bằng cách làm một cái gì đó như thế này:Tôi làm cách nào để tạo bộ xử lý chú thích xử lý Biến cục bộ?

@Target({ElementType.LOCAL_VARIABLE}) 
@Retention(RetentionPolicy.SOURCE) 
public @interface Junk { 
    String value(); 
} 

chỉ, điều này không được xử lý bởi apt, hoặc javac khi tôi chỉ định một ProcessorFactory có "Junk" trong nó được hỗ trợ loại trong những điều sau đây:

class JunkTester { 
    public static void main(String[] args) { 
     @Junk String tmp = "Hello World"; 
     System.out.println(tmp); 
    } 
} 

nó sẽ tuy nhiên hoạt động khi tôi di chuyển chú thích @Junk trước public static

Suy nghĩ và hay cách giải quyết?

+0

tò mò: bạn muốn làm gì với các biến cục bộ được chú thích bằng @Junk? – irreputable

+1

@Junk rõ ràng chỉ là một ví dụ, nhưng cuối cùng tôi muốn tạo mã từ chú thích thực. – apg

+0

có, nhưng nếu bạn làm điều đó, bạn đang thao tác mã bên trong phương thức, phải không? có vẻ khá khó trong bộ xử lý chú thích. – irreputable

Trả lời

8

Đã làm một số xét nghiệm nhanh chóng và đã tìm kiếm một chút, và nó trông như hooking vào LOCAL_VARIABLE là không thực sự hỗ trợ ... được nêu ra:

http://forums.sun.com/thread.jspa?threadID=775449
http://www.cs.rice.edu/~mgricken/research/laptjavac/
https://checkerframework.org/jsr308/

thể được hoàn toàn sai, nhưng đó là cách nó đang tìm kiếm ...

+0

Đó cũng là những phát hiện của tôi. Tôi không chắc chắn nếu có bất kỳ cách giải quyết khác hơn là một trình biên dịch mới như laptjavac (tốt, vá). Tôi cũng thấy rằng '@ SuppressWarnings', mà theo hiệu quả Java làm việc như là' LOCAL_VARIABLE' chú thích, là loại vỏ bọc đặc biệt trong javac, do đó, nó không nhìn tốt. – apg

2

Kể từ Java 8, chú thích biến cục bộ được lưu trữ trong tệp lớp.

Bộ xử lý chú thích Java chuẩn không xử lý các phần tử của phương thức. Tuy nhiên, Checker Framework cho phép bạn viết một bộ xử lý chú thích xử lý mọi chú thích bao gồm cả các biến cục bộ. Bộ xử lý chú thích của nó thậm chí có thể kiểm tra mọi câu lệnh của chương trình, cho dù có chú thích hay không.

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