# Class ArrayType

java.lang.Object
org.eclipse.jdt.core.dom.ASTNode
org.eclipse.jdt.core.dom.Type
org.eclipse.jdt.core.dom.ArrayType

public class ArrayType extends Type
Type node for an array type.

In JLS8 and later, array types are represented by a base element type (which cannot be an array type) and a list of dimensions, each of which may have a list of annotations.

    ArrayType:
       Type Dimension { Dimension }

In JLS4 and before, array types were expressed in a recursive manner, one dimension at a time:

    ArrayType:
       Type [ ]

This structure became untenable with the advent of type-use annotations, because in the language model, the base type binds with array dimensions from right to left, whereas a recursive structure binds from left to right (inside out).

Example:
`int @A[] @B[] @C[]` is an `@A`-array of
`int @B[] @C[]`, but such a component type is not representable by nested `ArrayType`s with contiguous source ranges.

Since:
  2.0
Restriction:
  This class is not intended to be instantiated by clients.

## Field Summary

Fields
Modifier and Type
Field
Description
`static final ChildPropertyDescriptor`
`COMPONENT_TYPE_PROPERTY`
Deprecated.
In the JLS8 API, this property is replaced by `ELEMENT_TYPE_PROPERTY` and `DIMENSIONS_PROPERTY`.
`static final ChildListPropertyDescriptor`
`DIMENSIONS_PROPERTY`
The "dimensions" structural property of this node type (element type: `Dimension`) (added in JLS8 API).
`static final ChildPropertyDescriptor`
`ELEMENT_TYPE_PROPERTY`
The "elementType" structural property of this node type (child type: `Type`) (added in JLS8 API).

### Fields inherited from class ASTNode

`ANNOTATION_TYPE_DECLARATION, ANNOTATION_TYPE_MEMBER_DECLARATION, ANONYMOUS_CLASS_DECLARATION, ARRAY_ACCESS, ARRAY_CREATION, ARRAY_INITIALIZER, ARRAY_TYPE, ASSERT_STATEMENT, ASSIGNMENT, BLOCK, BLOCK_COMMENT, BOOLEAN_LITERAL, BREAK_STATEMENT, CASE_DEFAULT_EXPRESSION, CAST_EXPRESSION, CATCH_CLAUSE, CHARACTER_LITERAL, CLASS_INSTANCE_CREATION, COMPILATION_UNIT, CONDITIONAL_EXPRESSION, CONSTRUCTOR_INVOCATION, CONTINUE_STATEMENT, CREATION_REFERENCE, DIMENSION, DO_STATEMENT, EitherOr_MultiPattern, EMPTY_STATEMENT, ENHANCED_FOR_STATEMENT, ENUM_CONSTANT_DECLARATION, ENUM_DECLARATION, EXPORTS_DIRECTIVE, EXPRESSION_METHOD_REFERENCE, EXPRESSION_STATEMENT, FIELD_ACCESS, FIELD_DECLARATION, FOR_STATEMENT, GUARDED_PATTERN, IF_STATEMENT, IMPORT_DECLARATION, INFIX_EXPRESSION, INITIALIZER, INSTANCEOF_EXPRESSION, INTERSECTION_TYPE, JAVADOC, JAVADOC_REGION, JAVADOC_TEXT_ELEMENT, LABELED_STATEMENT, LAMBDA_EXPRESSION, LINE_COMMENT, MALFORMED, MARKER_ANNOTATION, MEMBER_REF, MEMBER_VALUE_PAIR, METHOD_DECLARATION, METHOD_INVOCATION, METHOD_REF, METHOD_REF_PARAMETER, MODIFIER, MODULE_DECLARATION, MODULE_MODIFIER, MODULE_QUALIFIED_NAME, NAME_QUALIFIED_TYPE, NORMAL_ANNOTATION, NULL_LITERAL, NULL_PATTERN, NUMBER_LITERAL, OPENS_DIRECTIVE, ORIGINAL, PACKAGE_DECLARATION, PARAMETERIZED_TYPE, PARENTHESIZED_EXPRESSION, PATTERN_INSTANCEOF_EXPRESSION, POSTFIX_EXPRESSION, PREFIX_EXPRESSION, PRIMITIVE_TYPE, PROTECT, PROVIDES_DIRECTIVE, QUALIFIED_NAME, QUALIFIED_TYPE, RECORD_DECLARATION, RECORD_PATTERN, RECOVERED, REQUIRES_DIRECTIVE, RETURN_STATEMENT, SIMPLE_NAME, SIMPLE_TYPE, SINGLE_MEMBER_ANNOTATION, SINGLE_VARIABLE_DECLARATION, STRING_LITERAL, SUPER_CONSTRUCTOR_INVOCATION, SUPER_FIELD_ACCESS, SUPER_METHOD_INVOCATION, SUPER_METHOD_REFERENCE, SWITCH_CASE, SWITCH_EXPRESSION, SWITCH_STATEMENT, SYNCHRONIZED_STATEMENT, TAG_ELEMENT, TAG_PROPERTY, TEXT_BLOCK, TEXT_ELEMENT, THIS_EXPRESSION, THROW_STATEMENT, TRY_STATEMENT, TYPE_DECLARATION, TYPE_DECLARATION_STATEMENT, TYPE_LITERAL, TYPE_METHOD_REFERENCE, TYPE_PARAMETER, TYPE_PATTERN, UNION_TYPE, UNNAMED_CLASS, USES_DIRECTIVE, VARIABLE_DECLARATION_EXPRESSION, VARIABLE_DECLARATION_FRAGMENT, VARIABLE_DECLARATION_STATEMENT, WHILE_STATEMENT, WILDCARD_TYPE, YIELD_STATEMENT`

## Method Summary

Modifier and Type
Method
Description
`List`
`dimensions()`
Returns the live ordered list of dimensions with optional annotations (added in JLS8 API).
`Type`
`getComponentType()`
Deprecated.
In the JLS8 API, the recursive structure is not valid.
`int`
`getDimensions()`
Returns the number of dimensions in this array type.
`Type`
`getElementType()`
Returns the element type of this array type.
`static List`
`propertyDescriptors(int apiLevel)`
Returns a list of structural property descriptors for this node type.
`void`
`setComponentType(Type componentType)`
Deprecated.
In the JLS8 API, the recursive structure is not valid.
`void`
`setElementType(Type type)`
Sets the element type of the array.

### Methods inherited from class Type

`isAnnotatable, isArrayType, isIntersectionType, isNameQualifiedType, isParameterizedType, isPrimitiveType, isQualifiedType, isSimpleType, isUnionType, isVar, isWildcardType, resolveBinding`

### Methods inherited from class ASTNode

`accept, copySubtree, copySubtrees, delete, equals, getAST, getFlags, getLength, getLocationInParent, getNodeType, getParent, getProperty, getRoot, getStartPosition, getStructuralProperty, hashCode, nodeClassForType, properties, setFlags, setProperty, setSourceRange, setStructuralProperty, structuralPropertiesForType, subtreeBytes, subtreeMatch, toString`

### Methods inherited from class Object

`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

## Field Details

### COMPONENT_TYPE_PROPERTY

public static final ChildPropertyDescriptor COMPONENT_TYPE_PROPERTY
Deprecated.
In the JLS8 API, this property is replaced by `ELEMENT_TYPE_PROPERTY` and `DIMENSIONS_PROPERTY`.
The "componentType" structural property of this node type (child type: `Type`).

Since:
  3.0

### ELEMENT_TYPE_PROPERTY

public static final ChildPropertyDescriptor ELEMENT_TYPE_PROPERTY
The "elementType" structural property of this node type (child type: `Type`) (added in JLS8 API). Cannot be an array type.

Since:
  3.10

### DIMENSIONS_PROPERTY

public static final ChildListPropertyDescriptor DIMENSIONS_PROPERTY
The "dimensions" structural property of this node type (element type: `Dimension`) (added in JLS8 API).

Since:
  3.10

## Method Details

### propertyDescriptors

public static List propertyDescriptors(int apiLevel)
Returns a list of structural property descriptors for this node type. Clients must not modify the result.

Parameters:
  `apiLevel` - the API level; one of the `AST.JLS*` constants
Returns:
  a list of property descriptors (element type: `StructuralPropertyDescriptor`)
Since:
  3.0

### getComponentType

public Type getComponentType()
Deprecated.
In the JLS8 API, the recursive structure is not valid.
Returns the component type of this array type. The component type may be another array type.

Returns:
  the component type node
Throws:
  `UnsupportedOperationException` - if this operation is used in an AST later than JLS4
See Also:
  - `dimensions()`

### setComponentType

public void setComponentType(Type componentType)
Deprecated.
In the JLS8 API, the recursive structure is not valid.
Sets the component type of this array type. The component type may be another array type.

Parameters:
  `componentType` - the component type
Throws:
  `IllegalArgumentException` - if:
  - the node belongs to a different AST
  - the node already has a parent
  - a cycle in would be created
  `UnsupportedOperationException` - if this operation is used in an AST later than JLS4

### getElementType

public Type getElementType()
Returns the element type of this array type. The element type is never an array type.

In JLS4 and earlier, this is a convenience method that descends a chain of nested array types until it reaches a non-array type.

Returns:
  the element type node

### setElementType

public void setElementType(Type type)
Sets the element type of the array.

Parameters:
  `type` - the new type
Throws:
  `IllegalArgumentException` - if:
  - the node belongs to a different AST
  - the node already has a parent
  - the node is an array type
  `UnsupportedOperationException` - if this operation is used below JLS8
Since:
  3.10

### getDimensions

public int getDimensions()
Returns the number of dimensions in this array type.

In JLS8 and later, this is a convenience method that returns `dimensions().size()`.

In JLS4 and earlier, this is a convenience method that descends a chain of nested array types until it reaches a non-array type.

Returns:
  the number of dimensions (always positive)

### dimensions

public List dimensions()
Returns the live ordered list of dimensions with optional annotations (added in JLS8 API).

For the array type to be plausible, the list should contain at least one element.

Returns:
  the live list of dimensions with optional annotations (element type: `Dimension`)
Throws:
  `UnsupportedOperationException` - if this operation is used below JLS8
Since:
  3.10