1 11 12 package org.eclipse.jdt.core.dom; 13 14 import java.util.ArrayList ; 15 import java.util.List ; 16 17 27 public class CatchClause extends ASTNode { 28 29 33 public static final ChildPropertyDescriptor EXCEPTION_PROPERTY = 34 new ChildPropertyDescriptor(CatchClause.class, "exception", SingleVariableDeclaration.class, MANDATORY, CYCLE_RISK); 36 40 public static final ChildPropertyDescriptor BODY_PROPERTY = 41 new ChildPropertyDescriptor(CatchClause.class, "body", Block.class, MANDATORY, CYCLE_RISK); 43 48 private static final List PROPERTY_DESCRIPTORS; 49 50 static { 51 List properyList = new ArrayList (3); 52 createPropertyList(CatchClause.class, properyList); 53 addProperty(EXCEPTION_PROPERTY, properyList); 54 addProperty(BODY_PROPERTY, properyList); 55 PROPERTY_DESCRIPTORS = reapPropertyList(properyList); 56 } 57 58 69 public static List propertyDescriptors(int apiLevel) { 70 return PROPERTY_DESCRIPTORS; 71 } 72 73 76 private Block body = null; 77 78 82 private SingleVariableDeclaration exceptionDecl = null; 83 84 94 CatchClause(AST ast) { 95 super(ast); 96 } 97 98 101 final List internalStructuralPropertiesForType(int apiLevel) { 102 return propertyDescriptors(apiLevel); 103 } 104 105 108 final ASTNode internalGetSetChildProperty(ChildPropertyDescriptor property, boolean get, ASTNode child) { 109 if (property == EXCEPTION_PROPERTY) { 110 if (get) { 111 return getException(); 112 } else { 113 setException((SingleVariableDeclaration) child); 114 return null; 115 } 116 } 117 if (property == BODY_PROPERTY) { 118 if (get) { 119 return getBody(); 120 } else { 121 setBody((Block) child); 122 return null; 123 } 124 } 125 return super.internalGetSetChildProperty(property, get, child); 127 } 128 129 132 final int getNodeType0() { 133 return CATCH_CLAUSE; 134 } 135 136 139 ASTNode clone0(AST target) { 140 CatchClause result = new CatchClause(target); 141 result.setSourceRange(this.getStartPosition(), this.getLength()); 142 result.setBody((Block) getBody().clone(target)); 143 result.setException( 144 (SingleVariableDeclaration) ASTNode.copySubtree(target, getException())); 145 return result; 146 } 147 148 151 final boolean subtreeMatch0(ASTMatcher matcher, Object other) { 152 return matcher.match(this, other); 154 } 155 156 159 void accept0(ASTVisitor visitor) { 160 boolean visitChildren = visitor.visit(this); 161 if (visitChildren) { 162 acceptChild(visitor, getException()); 164 acceptChild(visitor, getBody()); 165 } 166 visitor.endVisit(this); 167 } 168 169 174 public SingleVariableDeclaration getException() { 175 if (this.exceptionDecl == null) { 176 synchronized (this) { 178 if (this.exceptionDecl == null) { 179 preLazyInit(); 180 this.exceptionDecl = new SingleVariableDeclaration(this.ast); 181 postLazyInit(this.exceptionDecl, EXCEPTION_PROPERTY); 182 } 183 } 184 } 185 return this.exceptionDecl; 186 } 187 188 199 public void setException(SingleVariableDeclaration exception) { 200 if (exception == null) { 201 throw new IllegalArgumentException (); 202 } 203 ASTNode oldChild = this.exceptionDecl; 204 preReplaceChild(oldChild, exception, EXCEPTION_PROPERTY); 205 this.exceptionDecl= exception; 206 postReplaceChild(oldChild, exception, EXCEPTION_PROPERTY); 207 } 208 209 214 public Block getBody() { 215 if (this.body == null) { 216 synchronized (this) { 218 if (this.body == null) { 219 preLazyInit(); 220 this.body = new Block(this.ast); 221 postLazyInit(this.body, BODY_PROPERTY); 222 } 223 } 224 } 225 return this.body; 226 } 227 228 239 public void setBody(Block body) { 240 if (body == null) { 241 throw new IllegalArgumentException (); 242 } 243 ASTNode oldChild = this.body; 244 preReplaceChild(oldChild, body, BODY_PROPERTY); 245 this.body = body; 246 postReplaceChild(oldChild, body, BODY_PROPERTY); 247 } 248 249 252 int memSize() { 253 return BASE_NODE_SIZE + 2 * 4; 255 } 256 257 260 int treeSize() { 261 return 262 memSize() 263 + (this.exceptionDecl == null ? 0 : getException().treeSize()) 264 + (this.body == null ? 0 : getBody().treeSize()); 265 } 266 } 267 | Popular Tags |