1 11 12 package org.eclipse.jdt.core.dom; 13 14 import java.util.ArrayList ; 15 import java.util.List ; 16 17 31 public class WildcardType extends Type { 32 33 36 public static final ChildPropertyDescriptor BOUND_PROPERTY = 37 new ChildPropertyDescriptor(WildcardType.class, "bound", Type.class, OPTIONAL, CYCLE_RISK); 39 42 public static final SimplePropertyDescriptor UPPER_BOUND_PROPERTY = 43 new SimplePropertyDescriptor(WildcardType.class, "upperBound", boolean.class, MANDATORY); 45 50 private static final List PROPERTY_DESCRIPTORS; 51 52 static { 53 List propertyList = new ArrayList (3); 54 createPropertyList(WildcardType.class, propertyList); 55 addProperty(BOUND_PROPERTY, propertyList); 56 addProperty(UPPER_BOUND_PROPERTY, propertyList); 57 PROPERTY_DESCRIPTORS = reapPropertyList(propertyList); 58 } 59 60 70 public static List propertyDescriptors(int apiLevel) { 71 return PROPERTY_DESCRIPTORS; 72 } 73 74 78 private Type optionalBound = null; 79 80 85 private boolean isUpperBound = true; 86 87 96 WildcardType(AST ast) { 97 super(ast); 98 unsupportedIn2(); 99 } 100 101 104 final List internalStructuralPropertiesForType(int apiLevel) { 105 return propertyDescriptors(apiLevel); 106 } 107 108 111 final boolean internalGetSetBooleanProperty(SimplePropertyDescriptor property, boolean get, boolean value) { 112 if (property == UPPER_BOUND_PROPERTY) { 113 if (get) { 114 return isUpperBound(); 115 } else { 116 setUpperBound(value); 117 return false; 118 } 119 } 120 return super.internalGetSetBooleanProperty(property, get, value); 122 } 123 124 127 final ASTNode internalGetSetChildProperty(ChildPropertyDescriptor property, boolean get, ASTNode child) { 128 if (property == BOUND_PROPERTY) { 129 if (get) { 130 return getBound(); 131 } else { 132 setBound((Type) child); 133 return null; 134 } 135 } 136 return super.internalGetSetChildProperty(property, get, child); 138 } 139 140 143 final int getNodeType0() { 144 return WILDCARD_TYPE; 145 } 146 147 150 ASTNode clone0(AST target) { 151 WildcardType result = new WildcardType(target); 152 result.setSourceRange(this.getStartPosition(), this.getLength()); 153 result.setBound((Type) ASTNode.copySubtree(target, getBound()), isUpperBound()); 154 return result; 155 } 156 157 160 final boolean subtreeMatch0(ASTMatcher matcher, Object other) { 161 return matcher.match(this, other); 163 } 164 165 168 void accept0(ASTVisitor visitor) { 169 boolean visitChildren = visitor.visit(this); 170 if (visitChildren) { 171 acceptChild(visitor, getBound()); 173 } 174 visitor.endVisit(this); 175 } 176 177 189 public boolean isUpperBound() { 190 return this.isUpperBound; 191 } 192 193 203 public Type getBound() { 204 return this.optionalBound; 205 } 206 207 224 public void setBound(Type type, boolean isUpperBound) { 225 setBound(type); 226 setUpperBound(isUpperBound); 227 } 228 229 241 public void setBound(Type type) { 242 ASTNode oldChild = this.optionalBound; 243 preReplaceChild(oldChild, type, BOUND_PROPERTY); 244 this.optionalBound = type; 245 postReplaceChild(oldChild, type, BOUND_PROPERTY); 246 } 247 248 256 public void setUpperBound(boolean isUpperBound) { 257 preValueChange(UPPER_BOUND_PROPERTY); 258 this.isUpperBound = isUpperBound; 259 postValueChange(UPPER_BOUND_PROPERTY); 260 } 261 262 265 int memSize() { 266 return BASE_NODE_SIZE + 2 * 4; 267 } 268 269 272 int treeSize() { 273 return 274 memSize() 275 + (this.optionalBound == null ? 0 : getBound().treeSize()); 276 } 277 } 278 279 | Popular Tags |