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:
- simple properties (
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 SimpleName
- child properties (
ChildPropertyDescriptor
) - properties whose value is another AST node; for example, the name of a MethodDeclaration
- child list properties (
ChildListPropertyDescriptor
) - properties where the value is a list of AST nodes; for example, the statements of a Block
Since: 3.0 @noextend This 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();
}
}