001package io.avaje.http.generator.core; 002 003import io.avaje.http.generator.core.openapi.DocContext; 004 005import javax.annotation.processing.Filer; 006import javax.annotation.processing.Messager; 007import javax.annotation.processing.ProcessingEnvironment; 008import javax.lang.model.SourceVersion; 009import javax.lang.model.element.Element; 010import javax.lang.model.element.TypeElement; 011import javax.lang.model.type.DeclaredType; 012import javax.lang.model.type.TypeMirror; 013import javax.lang.model.util.Elements; 014import javax.lang.model.util.Types; 015import javax.tools.Diagnostic; 016import javax.tools.JavaFileObject; 017import java.io.IOException; 018 019public class ProcessingContext { 020 021 private final PlatformAdapter readAdapter; 022 private final Messager messager; 023 private final Filer filer; 024 private final Elements elements; 025 private final Types types; 026 private final boolean openApiAvailable; 027 private final DocContext docContext; 028 029 ProcessingContext(ProcessingEnvironment env, PlatformAdapter readAdapter) { 030 this.readAdapter = readAdapter; 031 this.messager = env.getMessager(); 032 this.filer = env.getFiler(); 033 this.elements = env.getElementUtils(); 034 this.types = env.getTypeUtils(); 035 this.openApiAvailable = isTypeAvailable(Constants.OPENAPIDEFINITION); 036 this.docContext = new DocContext(env, openApiAvailable); 037 } 038 039 private boolean isTypeAvailable(String canonicalName) { 040 return null != getTypeElement(canonicalName); 041 } 042 043 public TypeElement getTypeElement(String canonicalName) { 044 return elements.getTypeElement(canonicalName); 045 } 046 047 public boolean isOpenApiAvailable() { 048 return openApiAvailable; 049 } 050 051 public void logError(Element e, String msg, Object... args) { 052 messager.printMessage(Diagnostic.Kind.ERROR, String.format(msg, args), e); 053 } 054 055 /** 056 * Create a file writer for the given class name. 057 */ 058 public JavaFileObject createWriter(String cls, Element origin) throws IOException { 059 return filer.createSourceFile(cls, origin); 060 } 061 062 public String getDocComment(Element param) { 063 return elements.getDocComment(param); 064 } 065 066 public DocContext doc() { 067 return docContext; 068 } 069 070 public Element asElement(TypeMirror typeMirror) { 071 return types.asElement(typeMirror); 072 } 073 074 public TypeMirror asMemberOf(DeclaredType declaredType, Element element) { 075 return types.asMemberOf(declaredType, element); 076 } 077 078 public PlatformAdapter platform() { 079 return readAdapter; 080 } 081}