in src/it/MCOMPILER-503-processorpath-duplicated-deps/annotation-processor/src/main/java/mcompiler503/SimpleAnnotationProcessor.java [45:102]
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
if (annotations.isEmpty()) {
return true;
}
// assert that mcompiler503-annotation-processor-dep:2.0.0-SNAPSHOT is on the classpath
try {
getClass().getClassLoader().loadClass("mcompiler503.AnnotationProcessorDependencyV2");
} catch (ClassNotFoundException expected) {
throw new RuntimeException("Expected mcompiler503.AnnotationProcessorDependencyV2 to be on the"
+ "processorpath, because mcompiler503-annotation-processor-dep:2.0.0-SNAPSHOT is specifically"
+ "configured as one the elements of the processorpath.");
}
// assert that mcompiler503-annotation-processor-dep:1.0.0-SNAPSHOT is NOT on the classpath,
// since it should be replaced by mcompiler503-annotation-processor-dep:2.0.0-SNAPSHOT
// when resolving annotation processors and their dependencies
try {
getClass().getClassLoader().loadClass("mcompiler503.AnnotationProcessorDependencyV1");
throw new RuntimeException("Expected a ClassNotFoundException, because "
+ "mcompiler503.AnnotationProcessorDependencyV1 is not supposed to be on the processorpath.");
} catch (ClassNotFoundException expected) {
// expected.
}
Filer filer = processingEnv.getFiler();
Elements elementUtils = processingEnv.getElementUtils();
Set<? extends Element> elements =
roundEnv.getElementsAnnotatedWith(annotations.iterator().next());
for (Element element : elements) {
Name name = element.getSimpleName();
PackageElement packageElement = elementUtils.getPackageOf(element);
try {
Name packageName = packageElement.getQualifiedName();
FileObject resource =
filer.createResource(StandardLocation.SOURCE_OUTPUT, packageName, name + ".txt", element);
Writer writer = resource.openWriter();
writer.write(name.toString());
writer.close();
String className = name + "Companion";
JavaFileObject javaFile = filer.createSourceFile(packageName + "." + className, element);
Writer javaWriter = javaFile.openWriter();
javaWriter.append("package ").append(packageName).append(";\n\n");
javaWriter.append("public class ").append(className).append(" {\n");
javaWriter.append(" public ").append(className).append("() {\n");
javaWriter.append(" System.out.println(\"Hey there!\");\n");
javaWriter.append(" }\n}\n");
javaWriter.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return !elements.isEmpty();
}