Class MoreTypes


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

      Fields 
      Modifier and Type Field Description
      private static int HASH_MULTIPLIER  
      private static int HASH_SEED  
    • 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 an 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.IntersectionType asIntersection​(javax.lang.model.type.TypeMirror maybeIntersectionType)
      Returns an IntersectionType if the TypeMirror represents an intersection-type 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 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()
      Returns an Equivalence that can be used to compare types.
      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)  
      static boolean isConversionFromObjectUnchecked​(javax.lang.model.type.TypeMirror type)
      Returns true if casting Object to the given type will elicit an unchecked warning from the compiler.
      private static boolean isObjectType​(javax.lang.model.type.DeclaredType type)  
      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 superclass of type, with any type parameters bound by type, or Optional.absent() if type is an interface or Object or its superclass is Object.
      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
    • Constructor Detail

      • MoreTypes

        private MoreTypes()
    • Method Detail

      • equivalence

        public static com.google.common.base.Equivalence<javax.lang.model.type.TypeMirror> equivalence()
        Returns an Equivalence that can be used to compare types. The standard way to compare types is Types.isSameType, but this alternative may be preferred in a number of cases:
        • If you don't have an instance of Types.
        • If you want a reliable hashCode() for the types, for example to construct a set of types using HashSet with Equivalence.wrap(Object).
        • If you want distinct type variables to be considered equal if they have the same names and bounds.
        • If you want wildcard types to compare equal if they have the same bounds. Types.isSameType never considers wildcards equal, even when comparing a type to itself.
      • 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.
      • 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 an 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.
      • asIntersection

        public static javax.lang.model.type.IntersectionType asIntersection​(javax.lang.model.type.TypeMirror maybeIntersectionType)
        Returns an IntersectionType if the TypeMirror represents an intersection-type 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 superclass of type, with any type parameters bound by type, or Optional.absent() if type is an interface or Object or its superclass is Object.
      • isObjectType

        private static boolean isObjectType​(javax.lang.model.type.DeclaredType type)
      • 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.
      • isConversionFromObjectUnchecked

        public static boolean isConversionFromObjectUnchecked​(javax.lang.model.type.TypeMirror type)
        Returns true if casting Object to the given type will elicit an unchecked warning from the compiler. Only type variables and parameterized types such as List<String> produce such warnings. There will be no warning if the type's only type parameters are simple wildcards, as in Map<?, ?>.