Class JArrayType

  • All Implemented Interfaces:
    JTypeMirror, JTypeVisitable

    public final class JArrayType
    extends Object
    implements JTypeMirror
    An array type (1 dimension). Multi-level arrays have an array type as component themselves.
    • 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 JArrayType 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
      • isInterface

        public boolean isInterface()
        Description copied from interface: JTypeMirror
        Returns true if this is an interface type. Annotations are also interface types.
        Specified by:
        isInterface in interface JTypeMirror
      • getErasure

        public JArrayType 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
      • getComponentType

        public JTypeMirror getComponentType()
        Gets the component type of this array. This is the same type as the array, stripped of a single array dimensions, e.g. the component type of int[][][] is int[][].
        Returns:
        The component type of this array type
        See Also:
        getElementType()
      • getElementType

        public JTypeMirror getElementType()
        Gets the element type of this array. This is the same type as the array, stripped of all array dimensions, e.g. the element type of int[][][] is int.
        Returns:
        The element type of this array type
        See Also:
        getComponentType()
      • streamMethods

        public Stream<JMethodSig> streamMethods​(Predicate<? super JMethodSymbol> prefilter)
        Description copied from interface: JTypeMirror
        Returns a stream of method signatures declared in and inherited by this type. Method signatures are created on-demand by this method, they're not reused between calls. This stream does not include constructors.
        Specified by:
        streamMethods in interface JTypeMirror
        Parameters:
        prefilter - Filter selecting symbols for which a signature should be created and yielded by the stream
      • getConstructors

        public List<JMethodSig> getConstructors()
        Description copied from interface: JTypeMirror
        Returns a list of all the declared constructors for this type. Abstract types like type variables and interfaces have no constructors.
        Specified by:
        getConstructors in interface JTypeMirror
      • isRaw

        public boolean isRaw()
        Description copied from interface: JTypeMirror
        Returns true if this is a raw type. This may be
        • A generic class or interface type for which no type arguments were provided
        • An array type whose element type is raw
        • A non-static member type of a raw type

        https://docs.oracle.com/javase/specs/jls/se11/html/jls-4.html#jls-4.8

        Specified by:
        isRaw in interface JTypeMirror
        See Also:
        JClassType.isRaw()
      • 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 JArrayType 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
      • equals

        public boolean equals​(Object o)
        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:
        o -
        Returns:
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class Object
      • 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