<s> package org . eclipse . jdt . core . dom ; import java . util . ArrayList ; import java . util . List ; public class WildcardType extends Type { public static final ChildPropertyDescriptor BOUND_PROPERTY = new ChildPropertyDescriptor ( WildcardType . class , "bound" , Type . class , OPTIONAL , CYCLE_RISK ) ; public static final SimplePropertyDescriptor UPPER_BOUND_PROPERTY = new SimplePropertyDescriptor ( WildcardType . class , "upperBound" , boolean . class , MANDATORY ) ; private static final List PROPERTY_DESCRIPTORS ; static { List propertyList = new ArrayList ( 3 ) ; createPropertyList ( WildcardType . class , propertyList ) ; addProperty ( BOUND_PROPERTY , propertyList ) ; addProperty ( UPPER_BOUND_PROPERTY , propertyList ) ; PROPERTY_DESCRIPTORS = reapPropertyList ( propertyList ) ; } public static List propertyDescriptors ( int apiLevel ) { return PROPERTY_DESCRIPTORS ; } private Type optionalBound = null ; private boolean isUpperBound = true ; WildcardType ( AST ast ) { super ( ast ) ; unsupportedIn2 ( ) ; } final List internalStructuralPropertiesForType ( int apiLevel ) { return propertyDescriptors ( apiLevel ) ; } final boolean internalGetSetBooleanProperty ( SimplePropertyDescriptor property , boolean get , boolean value ) { if ( property == UPPER_BOUND_PROPERTY ) { if ( get ) { return isUpperBound ( ) ; } else { setUpperBound ( value ) ; return false ; } } return super . internalGetSetBooleanProperty ( property , get , value ) ; } final ASTNode internalGetSetChildProperty ( ChildPropertyDescriptor property , boolean get , ASTNode child ) { if ( property == BOUND_PROPERTY ) { if ( get ) { return getBound ( ) ; } else { setBound ( ( Type ) child ) ; return null ; } } return super . internalGetSetChildProperty ( property , get , child ) ; } final int getNodeType0 ( ) { return WILDCARD_TYPE ; } ASTNode clone0 ( AST target ) { WildcardType result = new WildcardType ( target ) ; result . setSourceRange ( getStartPosition ( ) , getLength ( ) ) ; result . setBound ( ( Type ) ASTNode . copySubtree ( target , getBound ( ) ) , isUpperBound ( ) ) ; return result ; } final boolean subtreeMatch0 ( ASTMatcher matcher , Object other ) { return matcher . match ( this , other ) ; } void accept0 ( ASTVisitor visitor ) { boolean visitChildren = visitor . visit ( this ) ; if ( visitChildren ) { acceptChild ( visitor , getBound ( ) ) ; } visitor . endVisit ( this ) ; } public boolean isUpperBound ( ) { return this . isUpperBound ; } public Type getBound ( ) { return this . optionalBound ; } public void setBound ( Type type , boolean isUpperBound ) { setBound ( type ) ; setUpperBound ( isUpperBound ) ; } public void setBound ( Type type ) { ASTNode oldChild = this . optionalBound ; preReplaceChild ( oldChild , type , BOUND_PROPERTY ) ; this . optionalBound = type ; postReplaceChild ( oldChild , type , BOUND_PROPERTY ) ; } public void setUpperBound ( boolean isUpperBound ) { preValueChange ( UPPER_BOUND_PROPERTY ) ; this . isUpperBound = isUpperBound ; postValueChange ( UPPER_BOUND_PROPERTY ) ; } int memSize ( ) { return BASE_NODE_SIZE + 2 * 4 ; } int treeSize ( ) { return memSize ( ) + ( this . optionalBound == null ? 0 : getBound ( ) . treeSize ( ) ) ; } } </s>