in src/it/MCOMPILER-203-processorpath/annotation-processor/src/main/java/org/issue/SimpleAnnotationProcessor.java [45:99]
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
if (annotations.isEmpty()) {
return true;
}
// assert that commons-lang3 is on the classpath
try {
getClass().getClassLoader().loadClass("org.apache.commons.lang3.StringUtils");
} catch (ClassNotFoundException expected) {
throw new RuntimeException("Expected org.apache.commons.lang3.StringUtils to be on the processorpath,"
+ "because it is a declared dependency of the annotation processor.");
}
// assert that commons-io is NOT on the classpath, as it is only a project dependency in "annotation-user"
try {
getClass().getClassLoader().loadClass("org.apache.commons.io.IOUtils");
throw new RuntimeException("Expected a ClassNotFoundException because "
+ "org.apache.commons.io.IOUtils 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();
}