Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Annotation Processor Code
- import com.google.auto.service.AutoService;
- import com.squareup.javapoet.JavaFile;
- import com.squareup.javapoet.TypeName;
- import com.squareup.javapoet.TypeSpec;
- import javax.annotation.processing.AbstractProcessor;
- import javax.annotation.processing.Processor;
- import javax.annotation.processing.RoundEnvironment;
- import javax.lang.model.SourceVersion;
- import javax.lang.model.element.Element;
- import javax.lang.model.element.Modifier;
- import javax.lang.model.element.TypeElement;
- import java.io.IOException;
- import java.util.Arrays;
- import java.util.HashSet;
- import java.util.Set;
- @AutoService(Processor.class)
- public class TestAnnotationProcessor extends AbstractProcessor {
- private static String ANNOTATION = TestAnnotation.class.getName();
- @Override
- public Set<String> getSupportedAnnotationTypes() {
- return new HashSet<>(Arrays.asList(ANNOTATION));
- }
- @Override
- public SourceVersion getSupportedSourceVersion() {
- return SourceVersion.latestSupported();
- }
- @Override
- public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
- boolean match = annotations.stream().anyMatch(e -> e.toString().equals(ANNOTATION));
- if (!match) {
- return false;
- }
- Set<? extends Element> elementsAnnotatedWith = roundEnv.getElementsAnnotatedWith(TestAnnotation.class);
- for (Element element : elementsAnnotatedWith) {
- TypeSpec typeSpec = TypeSpec.classBuilder(element.getSimpleName().toString() + "_Impl")
- .addSuperinterface(TypeName.get(element.asType()))
- .addModifiers(Modifier.PUBLIC)
- .build();
- String packageName = element.getEnclosingElement().toString();
- JavaFile javaFile = JavaFile.builder(packageName, typeSpec).build();
- try {
- javaFile.writeTo(processingEnv.getFiler());
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
- return false;
- }
- }
- Annotation
- import java.lang.annotation.ElementType;
- import java.lang.annotation.Retention;
- import java.lang.annotation.RetentionPolicy;
- import java.lang.annotation.Target;
- @Target(ElementType.TYPE)
- @Retention(RetentionPolicy.CLASS)
- public @interface TestAnnotation {
- }
- Test Code :
- @TestAnnotation
- public interface Mapper {
- }
- Eclipse Exception Trace
- Description Resource Path Location Type
- java.lang.NullPointerException
- at org.eclipse.jdt.apt.core.internal.generatedfile.GeneratedFileManager.saveCompilationUnit(GeneratedFileManager.java:1494)
- at org.eclipse.jdt.apt.core.internal.generatedfile.GeneratedFileManager.generateFileDuringBuild(GeneratedFileManager.java:542)
- at org.eclipse.jdt.internal.apt.pluggable.core.filer.IdeJavaSourceOutputStream.close(IdeJavaSourceOutputStream.java:68)
- at sun.nio.cs.StreamEncoder.implClose(Unknown Source)
- at sun.nio.cs.StreamEncoder.close(Unknown Source)
- at java.io.OutputStreamWriter.close(Unknown Source)
- at java.io.BufferedWriter.close(Unknown Source)
- at java.io.PrintWriter.close(Unknown Source)
- at com.squareup.javapoet.JavaFile.$closeResource(JavaFile.java:99)
- at com.squareup.javapoet.JavaFile.writeTo(JavaFile.java:117)
- at com.test.processor.TestAnnotationProcessor.process(TestAnnotationProcessor.java:57)
- at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.handleProcessor(RoundDispatcher.java:139)
- at org.eclipse.jdt.internal.compiler.apt.dispatch.RoundDispatcher.round(RoundDispatcher.java:121)
- at org.eclipse.jdt.internal.compiler.apt.dispatch.BaseAnnotationProcessorManager.processAnnotations(BaseAnnotationProcessorManager.java:159)
- at org.eclipse.jdt.internal.apt.pluggable.core.dispatch.IdeAnnotationProcessorManager.processAnnotations(IdeAnnotationProcessorManager.java:135)
- at org.eclipse.jdt.internal.compiler.Compiler.processAnnotations(Compiler.java:933)
- at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:443)
- at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:419)
- at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:372)
- at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.compile(IncrementalImageBuilder.java:331)
- at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:305)
- at org.eclipse.jdt.internal.core.builder.IncrementalImageBuilder.build(IncrementalImageBuilder.java:136)
- at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:267)
- at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:195)
- at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:735)
- at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
- at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:206)
- at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:246)
- at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:301)
- at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
- at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:304)
- at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:360)
- at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:383)
- at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:142)
- at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:232)
- at org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)
- Mapper.java /TestPOJO/src/com/test line 12 Annotation Problem (Java 6 processor)
Add Comment
Please, Sign In to add comment