2011-10-18 8 views

Odpowiedz

4

myślę, znalazłem rozwiązanie. Tak jak myślałem, nie jest to możliwe przy obecnym javacu. Adnotacje lokalne są po prostu zwykłymi komentarzami i nie będą przetwarzane za pomocą interfejsu API do wstawiania adnotacji z wtyczką. ALE są interesujące wysiłki w JSR308, obsługa adnotacji typu, które wspierają cudowne rzeczy jako parametry na zmiennych typu, zmiennych lokalnych, sprawdzaniu typu adnotacji i rzutowaniu ... i jak to wygląda, zostanie ono włączone do openJDK 8. nice

+0

JSR 308 nie obsługuje bezpośrednio przetwarzania adnotacji (mimo że naprawia długotrwały błąd, w którym lokalne adnotacje zmiennych nie były przechowywane w pliku klasy). Ma inne funkcje, o których wspomniałeś, i jest częścią Java 8. [Framework Checker] (http://checkerframework.org) jest zbudowany na JSR 308 i zapewnia wygodnych użytkowników, którzy przetwarzają adnotacje w ciałach metod. – mernst

1

W JSR269, odpowiedni interfejs byłby javax.lang.model.element.VariableElement, która dziedziczy getAnnotation(Class<A> annotationType) dostępu do takich adnotacji:

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

dzięki za tę odpowiedź. Ale "metody" to zbiór elementów oznaczających, powinien już zawierać pola z adnotacjami (co czyni metodę złym określeniem dla tego zbioru). więc 'fieldsIn' nie zwraca" pól (= zmiennych lokalnych) w metodzie ", ale po prostu filtruje zestaw danych elementów. Problem polega na tym, że API nie dostarczy mi adnotowanych zmiennych lokalnych (jako parametr metody "proces"). Na razie wygląda na to, że muszę przetworzyć WSZYSTKIE (nie tylko adnotowane) klasy i ręcznie wyszukiwać adnotacje o zmiennych lokalnych (choć nie wiem, jak dokładnie). lub czy istnieje sposób na wykorzystanie twojego przykładu? – wrm