Class JArrayType

java.lang.Object
net.sourceforge.pmd.lang.java.types.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 Details

    • getTypeSystem

      public TypeSystem getTypeSystem()
      Description copied from interface: JTypeMirror
      Returns the type system that built this type.
      Specified by:
      getTypeSystem in interface JTypeMirror
    • getSymbol

      public @NonNull JClassSymbol getSymbol()
      Description copied from interface: JTypeMirror
      Returns the symbol declaring this type. Reifiable types present a symbol, and some other types too. This method's return value depends on this type:

      Note that type annotations are not reflected on the symbol, but only on the type.

      Specified by:
      getSymbol in interface JTypeMirror
    • 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 or void 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

      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:
    • 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.

      Note: streams are a bit impractical when it comes to configuring the filter. Possibly a specialized API should be introduced. We need to support the use cases of the symbol table, ie filter by name + accessibility + staticity, and also possibly use cases for rules, like getting a method from a known signature. See also JClassType.getDeclaredMethod(JExecutableSymbol), which looks like this. Unifying this API would be nice.

      Specified by:
      streamMethods in interface JTypeMirror
      Parameters:
      prefilter - Filter selecting symbols for which a signature should be created and yielded by the stream
    • streamDeclaredMethods

      public Stream<JMethodSig> streamDeclaredMethods(Predicate<? super JMethodSymbol> prefilter)
      Description copied from interface: JTypeMirror
      Like streamMethods, but does not recurse into supertypes. Note that only class and array types declare methods themselves.

      See also note in JTypeMirror.streamMethods(Predicate).

      Specified by:
      streamDeclaredMethods in interface JTypeMirror
      See Also:
    • 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:
    • 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