2014-09-14 2 views
0

У меня есть пользовательская аннотация, как показано ниже.Java Метод аннотации Метод возвращает

@customelement(folder = "/path/") 
public testMethod() { 

} 

Как я могу извлечь значение папки т.е.. "/ Путь /", используя AbstractProcessor ниже?

public class CompileTimeAnnotationProcessor extends AbstractProcessor { 

    @Override 
    public boolean process(Set<? extends TypeElement> annotations, 
          RoundEnvironment roundEnv) { 
     Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(CustomAnnotation.class); 
     for(Element te : elements){ 
      for (Element e : te.getEnclosedElements()) { 
        if (e.getSimpleName().toString().equals("folder")) { 
         //Here fetch method return value 
        } 
      } 
     } 
     return true; 
    } 

} 
+0

Вы пытаетесь создать пользовательский обработчик аннотации или хотите, чтобы значения отражались во время выполнения? Если это первый, как вы его компилируете? Я когда-либо видел/использовал обработчик аннотации при компиляции источника с использованием ['JavaCompiler'] (http://docs.oracle.com/javase/7/docs/api/javax/tools/JavaCompiler.html). – Makoto

+0

@Makoto вы можете запустить javac-компилятор с соответствующими аргументами (см.: -proc, -processorpath, -s, -processor), чтобы включить и настроить обработку аннотаций во время стандартной компиляции javac. Я думаю, что это типичный способ использования обработчиков аннотаций. –

ответ

0

Я предполагаю, что вы хотите сделать STH как:

@Override 
    public boolean process(Set<? extends TypeElement> annotations, 
          RoundEnvironment roundEnv) { 
     Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(CustomAnnotation.class); 
     for(Element te : elements){ 
      CustomAnnotation annotation = te.getAnnotation(CustomAnnotation.class); 
      String folder = annotation.folder(); 
      //... do sth with folder in context of te. 
      //te represent annotated method, e.g. testMethod from your example 
     } 
     return true; 
    } 

запомнить Также аннотировать CompileTimeAnnotationProcessor с @SupportedAnnotationTypes("package.CustomAnnotation") и @SupportedSourceVersion(SourceVersion.RELEASE_7) (или любой другой вариант синтаксиса Java вы собираетесь поддерживать).

В случае возникновения дополнительных проблем, я рекомендую прочитать this great tutorial blog post.

+0

Спасибо .. Это помогает. Как я могу получить информацию о исходном файле и имя проекта внутри AbstractProcessor? – Sandip

+0

Это сделано. благодаря – Sandip

Смежные вопросы