/******************************************************************************* * Copyright (c) 2000, 2005 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package net.sourceforge.phpdt.core.dom; /** * Abstract base class of all type AST node types. A type node represents a * reference to a primitive type (including void), to an array type, or to a * simple named type (or type variable), to a qualified type, to a * parameterized type, or to a wildcard type. Note that not all of these * are meaningful in all contexts; for example, a wildcard type is only * meaningful in the type argument position of a parameterized type. *

*

 * Type:
 *    PrimitiveType
 *    ArrayType
 *    SimpleType
 *    QualifiedType
 *    ParameterizedType
 *    WildcardType
 * PrimitiveType:
 *    byte
 *    short
 *    char
 *    int
 *    long
 *    float
 *    double
 *    boolean
 *    void
 * ArrayType:
 *    Type [ ]
 * SimpleType:
 *    TypeName
 * ParameterizedType:
 *    Type < Type { , Type } >
 * QualifiedType:
 *    Type . SimpleName
 * WildcardType:
 *    ? [ ( extends | super) Type ] 
 * 
*

* * @since 2.0 */ public abstract class Type extends ASTNode { /** * Creates a new AST node for a type owned by the given AST. *

* N.B. This constructor is package-private. *

* * @param ast the AST that is to own this node */ Type(AST ast) { super(ast); } /** * Returns whether this type is a primitive type * (PrimitiveType). * * @return true if this is a primitive type, and * false otherwise */ public final boolean isPrimitiveType() { return (this instanceof PrimitiveType); } /** * Returns whether this type is a simple type * (SimpleType). * * @return true if this is a simple type, and * false otherwise */ public final boolean isSimpleType() { return (this instanceof SimpleType); } /** * Returns whether this type is an array type * (ArrayType). * * @return true if this is an array type, and * false otherwise */ public final boolean isArrayType() { return (this instanceof ArrayType); } /** * Returns whether this type is a parameterized type * (ParameterizedType). * * @return true if this is a parameterized type, and * false otherwise * @since 3.1 */ public final boolean isParameterizedType() { return (this instanceof ParameterizedType); } /** * Returns whether this type is a qualified type * (QualifiedType). *

* Note that a type like "A.B" can be represented either of two ways: *

    *
  1. * QualifiedType(SimpleType(SimpleName("A")),SimpleName("B")) *
  2. *
  3. * SimpleType(QualifiedName(SimpleName("A"),SimpleName("B"))) *
  4. *
* The first form is preferred when "A" is known to be a type. However, a * parser cannot always determine this. Clients should be prepared to handle * either rather than make assumptions. (Note also that the first form * became possible as of JLS3; only the second form existed in the * JLS2 API.) *

* * @return true if this is a qualified type, and * false otherwise * @since 3.1 */ public final boolean isQualifiedType() { return (this instanceof QualifiedType); } /** * Returns whether this type is a wildcard type * (WildcardType). *

* Note that a wildcard type is only meaningful as a * type argument of a ParameterizedType node. *

* * @return true if this is a wildcard type, and * false otherwise * @since 3.1 */ public final boolean isWildcardType() { return (this instanceof WildcardType); } /** * Resolves and returns the binding for this type. *

* Note that bindings are generally unavailable unless requested when the * AST is being built. *

* * @return the type binding, or null if the binding cannot be * resolved */ public final ITypeBinding resolveBinding() { return this.ast.getBindingResolver().resolveType(this); } }