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

net.zerobuilder.compiler.common.LessTypes Maven / Gradle / Ivy

package net.zerobuilder.compiler.common;

import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.DeclaredType;
import javax.lang.model.type.ErrorType;
import javax.lang.model.type.TypeMirror;
import javax.lang.model.type.TypeVariable;
import javax.lang.model.type.TypeVisitor;
import javax.lang.model.util.SimpleTypeVisitor6;

import static net.zerobuilder.compiler.common.LessElements.asType;

/**
 * Guava-free versions of some helpers from auto-common.
 */
public final class LessTypes {

  private static final TypeVisitor AS_ELEMENT_VISITOR =
      new SimpleTypeVisitor6() {
        @Override
        protected Element defaultAction(TypeMirror e, Void p) {
          return null;
        }

        @Override
        public Element visitDeclared(DeclaredType t, Void p) {
          return t.asElement();
        }

        @Override
        public Element visitError(ErrorType t, Void p) {
          return t.asElement();
        }

        @Override
        public Element visitTypeVariable(TypeVariable t, Void p) {
          return t.asElement();
        }
      };

  public static TypeElement asTypeElement(TypeMirror mirror) {
    Element element = asElement(mirror);
    if (element == null) {
      throw new IllegalArgumentException("not an element: " + mirror);
    }
    return asType(element);
  }

  private static Element asElement(TypeMirror typeMirror) {
    return typeMirror.accept(AS_ELEMENT_VISITOR, null);
  }

  public static boolean isDeclaredType(TypeMirror mirror) {
    Element returnType = asElement(mirror);
    if (returnType == null) {
      return false;
    }
    return returnType.getKind().isClass() ||
        returnType.getKind().isInterface();
  }


  private LessTypes() {
    throw new UnsupportedOperationException("no instances");
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy