All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.ebean.querybean.generator.LookupWriter Maven / Gradle / Ivy

The newest version!
package io.ebean.querybean.generator;

import static java.util.function.Predicate.not;

import java.io.IOException;
import java.io.Writer;
import java.util.Collection;
import java.util.Set;

import javax.annotation.processing.FilerException;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.element.TypeElement;
import javax.lang.model.util.Elements;
import javax.tools.FileObject;

/** Write the source code for the factory. */
final class LookupWriter {
  private LookupWriter() {}

  private static final String METAINF_SERVICES_LOOKUP =
      "META-INF/services/io.ebean.config.LookupProvider";

  private static final String FILE_STRING =
      "package %s;\n"
          + "\n"
          + "import java.lang.invoke.MethodHandles;\n"
          + "\n"
          + "import io.ebean.config.LookupProvider;\n"
          + "\n"
          + "public class EbeanMethodLookup implements LookupProvider {\n"
          + "\n"
          + "  private static final MethodHandles.Lookup LOOKUP = MethodHandles.lookup();\n"
          + "\n"
          + "  @Override\n"
          + "  public MethodHandles.Lookup provideLookup() {\n"
          + "    return LOOKUP;\n"
          + "  }\n"
          + "}";

  static void write(
      ProcessingContext processingContext,
      Elements util,
      Set annotations,
      RoundEnvironment roundEnv) {

    var module =
        annotations.stream()
            .map(roundEnv::getElementsAnnotatedWith)
            .filter(not(Collection::isEmpty))
            .findAny()
            .map(s -> s.iterator().next())
            .map(util::getModuleOf)
            .orElse(null);

    if (module != null && !module.isUnnamed()) {
      var moduleNameString = module.getQualifiedName().toString();

      var pkg = moduleNameString + ".lookup";
      String fqn = pkg + ".EbeanMethodLookup";
      try {
        var javaFileObject = processingContext.createWriter(fqn);
        var writer = new Append(javaFileObject.openWriter());

        writer.append(FILE_STRING, pkg);
        writer.close();
        writeServicesFile(processingContext, fqn);
      } catch (FilerException e) {
        processingContext.logWarn(null, "FilerException writing Lookup " + e.getMessage());
      } catch (IOException e) {
        processingContext.logError(null, "Failed to write lookup class " + e.getMessage());
      }
    }
  }

  private static void writeServicesFile(ProcessingContext processingContext, String fqn) throws IOException {
    FileObject jfo = processingContext.createMetaInfWriter(METAINF_SERVICES_LOOKUP);
    if (jfo != null) {
      Writer writer = jfo.openWriter();
      writer.write(fqn);
      writer.close();
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy