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;
Abstract base class for property descriptors of AST nodes. There are three kinds of properties:
Since:3.0
@noextendThis class is not intended to be subclassed by clients.
/** * Abstract base class for property descriptors of AST nodes. * There are three kinds of properties: * <ul> * <li>simple properties ({@link SimplePropertyDescriptor}) * - properties where the value is a primitive (int, boolean) * or simple (String, InfixExprsssion.Operator) type other than an * AST node; for example, the identifier of a {@link SimpleName}</li> * <li>child properties ({@link ChildPropertyDescriptor}) * - properties whose value is another AST node; * for example, the name of a {@link MethodDeclaration}</li> * <li>child list properties ({@link ChildListPropertyDescriptor}) * - properties where the value is a list of AST nodes; * for example, the statements of a {@link Block}</li> * </ul> * * @since 3.0 * @noextend This class is not intended to be subclassed by clients. */
@SuppressWarnings("rawtypes") public abstract class StructuralPropertyDescriptor {
Property id.
/** * Property id. */
private final String propertyId;
The concrete AST node type that owns this property.
/** * The concrete AST node type that owns this property. */
private final Class nodeClass;
Creates a new property descriptor for the given node type 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
/** * Creates a new property descriptor for the given node type * 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 */
StructuralPropertyDescriptor(Class nodeClass, String propertyId) { if (nodeClass == null || propertyId == null) { throw new IllegalArgumentException(); } this.propertyId = propertyId; this.nodeClass = nodeClass; }
Returns the id of this property.
Returns:the property id
/** * Returns the id of this property. * * @return the property id */
public final String getId() { return this.propertyId; }
Returns the AST node type that owns this property.

For example, for all properties of the node type TypeDeclaration, this method returns TypeDeclaration.class.

Returns:the node type that owns this property
/** * Returns the AST node type that owns this property. * <p> * For example, for all properties of the node type * TypeDeclaration, this method returns <code>TypeDeclaration.class</code>. * </p> * * @return the node type that owns this property */
public final Class getNodeClass() { return this.nodeClass; }
Returns whether this property is a simple property (instance of SimplePropertyDescriptor.
Returns:true if this is a simple property, and false otherwise
/** * Returns whether this property is a simple property * (instance of {@link SimplePropertyDescriptor}. * * @return <code>true</code> if this is a simple property, and * <code>false</code> otherwise */
public final boolean isSimpleProperty(){ return (this instanceof SimplePropertyDescriptor); }
Returns whether this property is a child property (instance of ChildPropertyDescriptor.
Returns:true if this is a child property, and false otherwise
/** * Returns whether this property is a child property * (instance of {@link ChildPropertyDescriptor}. * * @return <code>true</code> if this is a child property, and * <code>false</code> otherwise */
public final boolean isChildProperty() { return (this instanceof ChildPropertyDescriptor); }
Returns whether this property is a child list property (instance of ChildListPropertyDescriptor.
Returns:true if this is a child list property, and false otherwise
/** * Returns whether this property is a child list property * (instance of {@link ChildListPropertyDescriptor}. * * @return <code>true</code> if this is a child list property, and * <code>false</code> otherwise */
public final boolean isChildListProperty() { return (this instanceof ChildListPropertyDescriptor); }
Returns a string suitable for debug purposes.
Returns:{@inheritDoc}
/** * Returns a string suitable for debug purposes. * @return {@inheritDoc} */
@Override public String toString() { StringBuffer b = new StringBuffer(); if (isChildListProperty()) { b.append("ChildList"); //$NON-NLS-1$ } if (isChildProperty()) { b.append("Child"); //$NON-NLS-1$ } if (isSimpleProperty()) { b.append("Simple"); //$NON-NLS-1$ } b.append("Property["); //$NON-NLS-1$ if (this.nodeClass != null) { b.append(this.nodeClass.getName()); } b.append(","); //$NON-NLS-1$ if (this.propertyId != null) { b.append(this.propertyId); } b.append("]"); //$NON-NLS-1$ return b.toString(); } }