Class JPrimitiveType

    • Method Detail

      • getTypeAnnotations

        public org.pcollections.PSet<SymbolicValue.SymAnnot> getTypeAnnotations()
        Description copied from interface: JTypeMirror
        Return a list of annotations on this type. Annotations can be written on nearly any type (eg @A Out.@B In<@C T>, @A ? extends @B Up).

        For JTypeVar, this includes both the annotations defined on the type var and those defined at use site. For instance

        
            <@A T> void accept(@B T t);
         
        The T type var will have annotation @A in the symbol (AnnotableSymbol.getDeclaredAnnotations()) and in the type var that is in the JMethodSig.getTypeParameters(). In the formal parameter, the type var will have annotations @B @A.
        Specified by:
        getTypeAnnotations in interface JTypeMirror
      • withAnnotations

        public JTypeMirror withAnnotations​(org.pcollections.PSet<SymbolicValue.SymAnnot> newTypeAnnots)
        Description copied from interface: JTypeMirror
        Returns a type mirror that is equal to this instance but has different type annotations. Note that some types ignore this method and return themselves without changing. Eg the null type cannot be annotated.
        Specified by:
        withAnnotations in interface JTypeMirror
        Parameters:
        newTypeAnnots - New type annotations (not null)
        Returns:
        A new type, maybe this one
      • box

        public JClassType box()
        Description copied from interface: JTypeMirror
        Returns the primitive wrapper type of this type, if this is a primitive type. Otherwise returns this type unchanged.
        Specified by:
        box in interface JTypeMirror
      • unbox

        public JPrimitiveType unbox()
        Description copied from interface: JTypeMirror
        Returns the unboxed version of this type. Returns this type unchanged if this is not a primitive wrapper type.
        Specified by:
        unbox in interface JTypeMirror
      • getErasure

        public JTypeMirror getErasure()
        Description copied from interface: JTypeMirror
        Returns the erasure of this type. Erasure is defined by JLS§4.6, an adapted definition follows:
        1. The erasure of a parameterized type (§4.5) G<T1,...,Tn> is |G|.
        2. The erasure of a nested type T.C is |T|.C.
        3. The erasure of an array type T[] is |T|[].
        4. The erasure of a type variable (§4.4) is the erasure of its upper bound.
        5. The erasure of an intersection type is the erasure of its leftmost component.
        6. The erasure of every other type is the type itself.

        The JVM representation of a type is in general the symbol of its erasure. So to get a Class instance for the runtime representation of a type, you should do t.getErasure().getSymbol(). The erasure procedure gets rid of types that have no symbol (except if t is a wildcard type, or the TypeSystem.NULL_TYPE)

        Specified by:
        getErasure in interface JTypeMirror
      • isNumeric

        public boolean isNumeric()
        Description copied from interface: JTypeMirror
        Returns true if this is a primitive numeric type. The only non-numeric primitive type is TypeSystem.BOOLEAN.
        Specified by:
        isNumeric in interface JTypeMirror
      • getSuperTypeSet

        public Set<JTypeMirror> getSuperTypeSet()
        Description copied from interface: JTypeMirror
        Returns the set of (nominal) supertypes of this type. If this is a primitive type, returns the set of other primitives to which this type is convertible by widening conversion (eg for long returns {long, float, double}).

        The returned set always contains this type, so is never empty. Ordering is stable, though unspecified.

        Note that this set contains TypeSystem.OBJECT for interfaces too.

        Note that for types having type annotations, the supertypes do not bear the same annotations. Eg the supertypes of @A String contain Object but not @A Object. The supertypes may be annotated though, eg if a class declares extends @A Foo, the supertypes contain @A Foo.

        Specified by:
        getSuperTypeSet in interface JTypeMirror
      • toString

        public String toString()
        Description copied from interface: JTypeMirror
        The toString of type mirrors prints useful debug information, but shouldn't be relied on anywhere, as it may change anytime. Use TypePrettyPrint to display types.
        Specified by:
        toString in interface JTypeMirror
        Overrides:
        toString in class Object
      • equals

        public boolean equals​(Object obj)
        Description copied from interface: JTypeMirror
        Returns true if the object is a type equivalent to this one. A few kinds of types use reference identity, like captured type variables, or the null type. A few special types are represented by constants (see TypeSystem). Apart from those, types should always be compared using this method. or TypeOps.isSameType(JTypeMirror, JTypeMirror) (which is null-safe).

        Note that types belonging to different type systems do not test equal. The type system object is global to the analysis though, so this should not ever happen in rules.

        Specified by:
        equals in interface JTypeMirror
        Overrides:
        equals in class Object
        Parameters:
        obj -
        Returns:
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class Object
      • getSimpleName

        public @NonNull String getSimpleName()
        Returns the token used to represent the type in source, e.g. "int" or "double".
      • acceptVisitor

        public <T,​P> T acceptVisitor​(JTypeVisitor<T,​P> visitor,
                                           P p)
        Description copied from interface: JTypeVisitable
        Accept a type visitor, dispatching on this object's runtime type to the correct method of the visitor.
        Specified by:
        acceptVisitor in interface JTypeVisitable
        Type Parameters:
        T - Type of result of the visitor
        P - Type of data of the visitor
      • subst

        public JTypeMirror subst​(Function<? super SubstVar,​? extends @NonNull JTypeMirror> subst)
        Description copied from interface: JTypeVisitable
        Replace the type variables occurring in the given type by their image by the given function. Substitutions are not applied recursively (ie, is not applied on the result of a substitution).
        Specified by:
        subst in interface JTypeMirror
        Specified by:
        subst in interface JTypeVisitable
        Parameters:
        subst - Substitution function, eg a Substitution