Copyright (c) 2004, 2013 IBM Corporation and others. This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which accompanies this distribution, and is available at https://www.eclipse.org/legal/epl-2.0/ SPDX-License-Identifier: EPL-2.0 Contributors: IBM Corporation - initial API and implementation
/******************************************************************************* * Copyright (c) 2004, 2013 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/
package org.eclipse.jdt.core.dom;
Descriptor for a child property of an AST node. A child property is one whose value is an ASTNode.
See Also:
Since:3.0
@noinstantiateThis class is not intended to be instantiated by clients.
/** * Descriptor for a child property of an AST node. * A child property is one whose value is an * {@link ASTNode}. * * @see org.eclipse.jdt.core.dom.ASTNode#getStructuralProperty(StructuralPropertyDescriptor) * @see org.eclipse.jdt.core.dom.ASTNode#setStructuralProperty(StructuralPropertyDescriptor, Object) * @since 3.0 * @noinstantiate This class is not intended to be instantiated by clients. */
@SuppressWarnings("rawtypes") public final class ChildPropertyDescriptor extends StructuralPropertyDescriptor {
Child type. For example, for a node type like CompilationUnit, the "package" property is PackageDeclaration.class
/** * Child type. For example, for a node type like * CompilationUnit, the "package" property is PackageDeclaration.class */
private final Class childClass;
Indicates whether the child is mandatory. A child property is allowed to be null only if it is not mandatory.
/** * Indicates whether the child is mandatory. A child property is allowed * to be <code>null</code> only if it is not mandatory. */
private final boolean mandatory;
Indicates whether a cycle is possible. Field is private, but marked package-visible for fast access from ASTNode.
/** * Indicates whether a cycle is possible. * Field is private, but marked package-visible for fast * access from ASTNode. */
final boolean cycleRisk;
Creates a new child property descriptor with the given property id. Note that this constructor is declared package-private so that property descriptors can only be created by the AST implementation.
Params:
  • nodeClass – concrete AST node type that owns this property
  • propertyId – the property id
  • childType – the child type of this property
  • mandatory – true if the property is mandatory, and false if it is may be null
  • cycleRisk – true if this property is at risk of cycles, and false if there is no worry about cycles
/** * Creates a new child property descriptor with the given property id. * Note that this constructor is declared package-private so that * property descriptors can only be created by the AST * implementation. * * @param nodeClass concrete AST node type that owns this property * @param propertyId the property id * @param childType the child type of this property * @param mandatory <code>true</code> if the property is mandatory, * and <code>false</code> if it is may be <code>null</code> * @param cycleRisk <code>true</code> if this property is at * risk of cycles, and <code>false</code> if there is no worry about cycles */
ChildPropertyDescriptor(Class nodeClass, String propertyId, Class childType, boolean mandatory, boolean cycleRisk) { super(nodeClass, propertyId); if (childType == null || !ASTNode.class.isAssignableFrom(childType)) { throw new IllegalArgumentException(); } this.childClass = childType; this.mandatory = mandatory; this.cycleRisk = cycleRisk; }
Returns the child type of this property.

For example, for a node type like CompilationUnit, the "package" property returns PackageDeclaration.class.

Returns:the child type of the property
/** * Returns the child type of this property. * <p> * For example, for a node type like CompilationUnit, * the "package" property returns <code>PackageDeclaration.class</code>. * </p> * * @return the child type of the property */
public final Class getChildType() { return this.childClass; }
Returns whether this property is mandatory. A property value is not allowed to be null if it is mandatory.
Returns:true if the property is mandatory, and false if it is may be null
/** * Returns whether this property is mandatory. A property value * is not allowed to be <code>null</code> if it is mandatory. * * @return <code>true</code> if the property is mandatory, * and <code>false</code> if it is may be <code>null</code> */
public final boolean isMandatory() { return this.mandatory; }
Returns whether this property is vulnerable to cycles.

A property is vulnerable to cycles if a node of the owning type (that is, the type that owns this property) could legally appear in the AST subtree below this property. For example, the body property of a MethodDeclaration node admits a body which might include statement that embeds another MethodDeclaration node. On the other hand, the name property of a MethodDeclaration node admits only names, and thereby excludes another MethodDeclaration node.

Returns:true if cycles are possible, and false if cycles are impossible
/** * Returns whether this property is vulnerable to cycles. * <p> * A property is vulnerable to cycles if a node of the owning * type (that is, the type that owns this property) could legally * appear in the AST subtree below this property. For example, * the body property of a * {@link MethodDeclaration} node * admits a body which might include statement that embeds * another {@link MethodDeclaration} node. * On the other hand, the name property of a * MethodDeclaration node admits only names, and thereby excludes * another MethodDeclaration node. * </p> * * @return <code>true</code> if cycles are possible, * and <code>false</code> if cycles are impossible */
public final boolean cycleRisk() { return this.cycleRisk; } }