I want to create an api using my own custom annotation that the hidden code should be triggered. I have created my annotation and have created the processor as well. But now the problem is, I don't know how to build it. Let me explain in better way: Its a console applicatioyn, I have to print a text once a method is called.
So, I have created an annotation @PrintText and also created a PrintTextProcessor.
But when I try to compile it, it doesn't show the required output.
I am annotating a method.
But it looks annotation doesn't work.
Am I missing anything.
Following is my code Annotation Class:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PrintText{
}
Annotation Processor Class:
@SupportedAnnotationTypes("com.example.PrintText")
public class PrintTextProcessor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations,
RoundEnvironment roundEnv) {
Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(PrintText.class);
for(Element e : elements){
if(!e.getClass().equals(ParticularType.class)){
processingEnv.getMessager().printMessage(Kind.ERROR,
"@PrintText annotated fields must be of type ParticularType");
}
}
return true;
}
}
Now my main class comes:
public class Main{
@PrintMe
public void testMethod(){
System.out.println("In test method");
}
public static void main(String s[]){
new Main().testMethod();
}
}
Now when I try to compile this program and run it, it only prints the following text: In test method
I used following commands
javac Main.java
java Main
Did I miss something? I have been gone through several posts on the internet and found that there is apt tool. But I don't know how to build and run it via command line. I am using java6.
Thanks in advance.
Here is very good example https://github.com/provegard/aptdemo but basically you have to create package META-INF/services and put javax.annotation.processing.Processor file with classpath to your processor (in other words register your processor), then build your app let's say with mvn to get jar file (mvn package, see example) and then compile with javac (javac -cp /path/to/aptdemo-1.0-SNAPSHOT.jar SomeTestClass.java)