2011-10-18 80 views
9

我正在使用可插入註釋處理API處理java註釋。是否有可能在裏面使用註解方法體?處理方法體內的註釋

感謝您的幫助。彼得

回答

4

我想,我找到了解決辦法。正如我所想,目前的javac是不可能的。本地註釋只是簡單的註釋,並且不會由可插入註釋處理API處理。但在JSR308中有一些有趣的工作,處理支持類型變量,局部變量,註釋類型檢查和轉換等參數的奇妙事物的類型註釋,並且看起來,它將被合併到openJDK 8.很好的

+0

JSR 308不直接支持註釋處理(儘管它糾正了一個長期的錯誤,其中局部變量註釋未存儲在類文件中)。它具有您提及的其他功能,並且它是Java 8的一部分。[Checker Framework](http://checkerframework.org)構建於JSR 308之上,確實提供方便訪問者在方法體內處理註釋。 – mernst

1

在JSR269,相關的接口將是javax.lang.model.element.VariableElement,這對於訪問這樣的標註繼承getAnnotation(Class<A> annotationType)

for (VariableElement variable : ElementFilter.fieldsIn(methods)) { 
    final AnnotationType annotation = variable.getAnnotation(AnnotationType.class); 
    if (annotation != null) { 
     // ... 
    } 
} 
+2

謝謝你的回答。但'methods'是一組元素的含義,它應該已經包含註釋的字段(這使得該方法成爲該集合的錯誤名稱)。所以'fieldsIn'不會在方法中返回「fields(=局部變量)」,而只是過濾一組給定的元素。問題在於,API不會給我註釋局部變量(作爲'process'-method的參數)。現在,它看起來像我必須處理所有(不只是註釋)類和手動搜索本地變量註釋(雖然我不知道如何)。或者有沒有辦法使用你的例子? – wrm