public boolean process()

in src/it/MCOMPILER-203-processorpath/annotation-processor/src/main/java/org/issue/SimpleAnnotationProcessor.java [45:104]


    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();
    }