Class MoreTypes


  • public final class MoreTypes
    extends java.lang.Object
    Utilities related to TypeMirror instances.
    Since:
    2.0
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      private MoreTypes()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static javax.lang.model.type.ArrayType asArray​(javax.lang.model.type.TypeMirror maybeArrayType)
      Returns a ArrayType if the TypeMirror represents a primitive array or throws an IllegalArgumentException.
      static javax.lang.model.type.DeclaredType asDeclared​(javax.lang.model.type.TypeMirror maybeDeclaredType)
      Returns a DeclaredType if the TypeMirror represents a declared type such as a class, interface, union/compound, or enum or throws an IllegalArgumentException.
      static javax.lang.model.element.Element asElement​(javax.lang.model.type.TypeMirror typeMirror)
      An alternate implementation of Types.asElement(javax.lang.model.type.TypeMirror) that does not require a Types instance with the notable difference that it will throw IllegalArgumentException instead of returning null if the TypeMirror can not be converted to an Element.
      static javax.lang.model.type.ErrorType asError​(javax.lang.model.type.TypeMirror maybeErrorType)
      Returns a ExecutableType if the TypeMirror represents an executable type such as may result from missing code, or bad compiles or throws an IllegalArgumentException.
      static javax.lang.model.type.ExecutableType asExecutable​(javax.lang.model.type.TypeMirror maybeExecutableType)
      Returns a ExecutableType if the TypeMirror represents an executable type such as a method, constructor, or initializer or throws an IllegalArgumentException.
      static javax.lang.model.type.TypeMirror asMemberOf​(javax.lang.model.util.Types types, javax.lang.model.type.DeclaredType container, javax.lang.model.element.VariableElement variable)
      Resolves a VariableElement parameter to a method or constructor based on the given container, or a member of a class.
      static javax.lang.model.type.NoType asNoType​(javax.lang.model.type.TypeMirror maybeNoType)
      Returns a NoType if the TypeMirror represents an non-type such as void, or package, etc.
      static javax.lang.model.type.NullType asNullType​(javax.lang.model.type.TypeMirror maybeNullType)
      Returns a NullType if the TypeMirror represents the null type or throws an IllegalArgumentException.
      static javax.lang.model.type.PrimitiveType asPrimitiveType​(javax.lang.model.type.TypeMirror maybePrimitiveType)
      Returns a PrimitiveType if the TypeMirror represents a primitive type or throws an IllegalArgumentException.
      static javax.lang.model.element.TypeElement asTypeElement​(javax.lang.model.type.TypeMirror mirror)  
      static com.google.common.collect.ImmutableSet<javax.lang.model.element.TypeElement> asTypeElements​(java.lang.Iterable<? extends javax.lang.model.type.TypeMirror> mirrors)  
      static javax.lang.model.type.TypeVariable asTypeVariable​(javax.lang.model.type.TypeMirror maybeTypeVariable)
      Returns a TypeVariable if the TypeMirror represents a type variable or throws an IllegalArgumentException.
      static javax.lang.model.type.WildcardType asWildcard​(javax.lang.model.type.TypeMirror maybeWildcardType)
      Returns a WildcardType if the TypeMirror represents a wildcard type or throws an IllegalArgumentException.
      private static javax.lang.model.type.TypeMirror enclosingType​(javax.lang.model.type.DeclaredType t)
      Returns the type of the innermost enclosing instance, or null if there is none.
      private static boolean equal​(javax.lang.model.type.TypeMirror a, javax.lang.model.type.TypeMirror b, java.util.Set<MoreTypes.ComparedElements> visiting)  
      private static boolean equalIntersectionTypes​(javax.lang.model.type.TypeMirror a, javax.lang.model.type.TypeMirror b, java.util.Set<MoreTypes.ComparedElements> visiting)  
      private static boolean equalLists​(java.util.List<? extends javax.lang.model.type.TypeMirror> a, java.util.List<? extends javax.lang.model.type.TypeMirror> b, java.util.Set<MoreTypes.ComparedElements> visiting)  
      static com.google.common.base.Equivalence<javax.lang.model.type.TypeMirror> equivalence()  
      private static int hash​(javax.lang.model.type.TypeMirror mirror, java.util.Set<javax.lang.model.element.Element> visiting)  
      private static int hashList​(java.util.List<? extends javax.lang.model.type.TypeMirror> mirrors, java.util.Set<javax.lang.model.element.Element> visiting)  
      private static boolean isIntersectionType​(javax.lang.model.type.TypeMirror t)  
      static boolean isType​(javax.lang.model.type.TypeMirror type)
      Returns true if the raw type underlying the given TypeMirror represents a type that can be referenced by a Class.
      static boolean isTypeOf​(java.lang.Class<?> clazz, javax.lang.model.type.TypeMirror type)
      Returns true if the raw type underlying the given TypeMirror represents the same raw type as the given Class and throws an IllegalArgumentException if the TypeMirror does not represent a type that can be referenced by a Class
      static com.google.common.base.Optional<javax.lang.model.type.DeclaredType> nonObjectSuperclass​(javax.lang.model.util.Types types, javax.lang.model.util.Elements elements, javax.lang.model.type.DeclaredType type)
      Returns the non-object superclass of the type with the proper type parameters.
      static com.google.common.collect.ImmutableSet<javax.lang.model.element.TypeElement> referencedTypes​(javax.lang.model.type.TypeMirror type)
      Returns the set of types that are referenced by the given TypeMirror.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • INTERSECTION_TYPE

        private static final java.lang.Class<?> INTERSECTION_TYPE
      • GET_BOUNDS

        private static final java.lang.reflect.Method GET_BOUNDS
    • Constructor Detail

      • MoreTypes

        private MoreTypes()
    • Method Detail

      • equivalence

        public static com.google.common.base.Equivalence<javax.lang.model.type.TypeMirror> equivalence()
      • equal

        private static boolean equal​(javax.lang.model.type.TypeMirror a,
                                     javax.lang.model.type.TypeMirror b,
                                     java.util.Set<MoreTypes.ComparedElements> visiting)
      • enclosingType

        private static javax.lang.model.type.TypeMirror enclosingType​(javax.lang.model.type.DeclaredType t)
        Returns the type of the innermost enclosing instance, or null if there is none. This is the same as DeclaredType.getEnclosingType() except that it returns null rather than NoType for a static type. We need this because of this bug whereby the Eclipse compiler returns a value for static classes that is not NoType.
      • isIntersectionType

        private static boolean isIntersectionType​(javax.lang.model.type.TypeMirror t)
      • equalIntersectionTypes

        private static boolean equalIntersectionTypes​(javax.lang.model.type.TypeMirror a,
                                                      javax.lang.model.type.TypeMirror b,
                                                      java.util.Set<MoreTypes.ComparedElements> visiting)
      • equalLists

        private static boolean equalLists​(java.util.List<? extends javax.lang.model.type.TypeMirror> a,
                                          java.util.List<? extends javax.lang.model.type.TypeMirror> b,
                                          java.util.Set<MoreTypes.ComparedElements> visiting)
      • hashList

        private static int hashList​(java.util.List<? extends javax.lang.model.type.TypeMirror> mirrors,
                                    java.util.Set<javax.lang.model.element.Element> visiting)
      • hash

        private static int hash​(javax.lang.model.type.TypeMirror mirror,
                                java.util.Set<javax.lang.model.element.Element> visiting)
      • referencedTypes

        public static com.google.common.collect.ImmutableSet<javax.lang.model.element.TypeElement> referencedTypes​(javax.lang.model.type.TypeMirror type)
        Returns the set of types that are referenced by the given TypeMirror.
      • asElement

        public static javax.lang.model.element.Element asElement​(javax.lang.model.type.TypeMirror typeMirror)
        An alternate implementation of Types.asElement(javax.lang.model.type.TypeMirror) that does not require a Types instance with the notable difference that it will throw IllegalArgumentException instead of returning null if the TypeMirror can not be converted to an Element.
        Throws:
        java.lang.NullPointerException - if typeMirror is null
        java.lang.IllegalArgumentException - if typeMirror cannot be converted to an Element
      • asTypeElement

        public static javax.lang.model.element.TypeElement asTypeElement​(javax.lang.model.type.TypeMirror mirror)
      • asTypeElements

        public static com.google.common.collect.ImmutableSet<javax.lang.model.element.TypeElement> asTypeElements​(java.lang.Iterable<? extends javax.lang.model.type.TypeMirror> mirrors)
      • asArray

        public static javax.lang.model.type.ArrayType asArray​(javax.lang.model.type.TypeMirror maybeArrayType)
        Returns a ArrayType if the TypeMirror represents a primitive array or throws an IllegalArgumentException.
      • asDeclared

        public static javax.lang.model.type.DeclaredType asDeclared​(javax.lang.model.type.TypeMirror maybeDeclaredType)
        Returns a DeclaredType if the TypeMirror represents a declared type such as a class, interface, union/compound, or enum or throws an IllegalArgumentException.
      • asError

        public static javax.lang.model.type.ErrorType asError​(javax.lang.model.type.TypeMirror maybeErrorType)
        Returns a ExecutableType if the TypeMirror represents an executable type such as may result from missing code, or bad compiles or throws an IllegalArgumentException.
      • asExecutable

        public static javax.lang.model.type.ExecutableType asExecutable​(javax.lang.model.type.TypeMirror maybeExecutableType)
        Returns a ExecutableType if the TypeMirror represents an executable type such as a method, constructor, or initializer or throws an IllegalArgumentException.
      • asNoType

        public static javax.lang.model.type.NoType asNoType​(javax.lang.model.type.TypeMirror maybeNoType)
        Returns a NoType if the TypeMirror represents an non-type such as void, or package, etc. or throws an IllegalArgumentException.
      • asNullType

        public static javax.lang.model.type.NullType asNullType​(javax.lang.model.type.TypeMirror maybeNullType)
        Returns a NullType if the TypeMirror represents the null type or throws an IllegalArgumentException.
      • asPrimitiveType

        public static javax.lang.model.type.PrimitiveType asPrimitiveType​(javax.lang.model.type.TypeMirror maybePrimitiveType)
        Returns a PrimitiveType if the TypeMirror represents a primitive type or throws an IllegalArgumentException.
      • asTypeVariable

        public static javax.lang.model.type.TypeVariable asTypeVariable​(javax.lang.model.type.TypeMirror maybeTypeVariable)
        Returns a TypeVariable if the TypeMirror represents a type variable or throws an IllegalArgumentException.
      • asWildcard

        public static javax.lang.model.type.WildcardType asWildcard​(javax.lang.model.type.TypeMirror maybeWildcardType)
        Returns a WildcardType if the TypeMirror represents a wildcard type or throws an IllegalArgumentException.
      • isType

        public static boolean isType​(javax.lang.model.type.TypeMirror type)
        Returns true if the raw type underlying the given TypeMirror represents a type that can be referenced by a Class. If this returns true, then isTypeOf(java.lang.Class<?>, javax.lang.model.type.TypeMirror) is guaranteed to not throw.
      • isTypeOf

        public static boolean isTypeOf​(java.lang.Class<?> clazz,
                                       javax.lang.model.type.TypeMirror type)
        Returns true if the raw type underlying the given TypeMirror represents the same raw type as the given Class and throws an IllegalArgumentException if the TypeMirror does not represent a type that can be referenced by a Class
      • nonObjectSuperclass

        public static com.google.common.base.Optional<javax.lang.model.type.DeclaredType> nonObjectSuperclass​(javax.lang.model.util.Types types,
                                                                                                              javax.lang.model.util.Elements elements,
                                                                                                              javax.lang.model.type.DeclaredType type)
        Returns the non-object superclass of the type with the proper type parameters. An absent Optional is returned if there is no non-Object superclass.
      • asMemberOf

        public static javax.lang.model.type.TypeMirror asMemberOf​(javax.lang.model.util.Types types,
                                                                  javax.lang.model.type.DeclaredType container,
                                                                  javax.lang.model.element.VariableElement variable)
        Resolves a VariableElement parameter to a method or constructor based on the given container, or a member of a class. For parameters to a method or constructor, the variable's enclosing element must be a supertype of the container type. For example, given a container of type Set<String>, and a variable corresponding to the E e parameter in the Set.add(E e) method, this will return a TypeMirror for String.