1 11 12 package org.eclipse.jdt.core.dom; 13 14 import java.util.ArrayList ; 15 import java.util.List ; 16 17 import org.eclipse.jdt.core.compiler.InvalidInputException; 18 import org.eclipse.jdt.internal.compiler.parser.Scanner; 19 import org.eclipse.jdt.internal.compiler.parser.TerminalTokens; 20 21 30 public class Javadoc extends Comment { 31 32 37 public static final SimplePropertyDescriptor COMMENT_PROPERTY = 38 new SimplePropertyDescriptor(Javadoc.class, "comment", String .class, MANDATORY); 40 44 public static final ChildListPropertyDescriptor TAGS_PROPERTY = 45 new ChildListPropertyDescriptor(Javadoc.class, "tags", TagElement.class, CYCLE_RISK); 47 48 54 private static final List PROPERTY_DESCRIPTORS_2_0; 55 56 62 private static final List PROPERTY_DESCRIPTORS_3_0; 63 64 static { 65 List properyList = new ArrayList (3); 66 createPropertyList(Javadoc.class, properyList); 67 addProperty(COMMENT_PROPERTY, properyList); 68 addProperty(TAGS_PROPERTY, properyList); 69 PROPERTY_DESCRIPTORS_2_0 = reapPropertyList(properyList); 70 71 properyList = new ArrayList (2); 72 createPropertyList(Javadoc.class, properyList); 73 addProperty(TAGS_PROPERTY, properyList); 74 PROPERTY_DESCRIPTORS_3_0 = reapPropertyList(properyList); 75 } 76 77 87 public static List propertyDescriptors(int apiLevel) { 88 if (apiLevel == AST.JLS2_INTERNAL) { 89 return PROPERTY_DESCRIPTORS_2_0; 90 } else { 91 return PROPERTY_DESCRIPTORS_3_0; 92 } 93 } 94 95 99 private static final String MINIMAL_DOC_COMMENT = "/** */"; 101 108 private String comment = MINIMAL_DOC_COMMENT; 109 110 115 private ASTNode.NodeList tags = 116 new ASTNode.NodeList(TAGS_PROPERTY); 117 118 130 Javadoc(AST ast) { 131 super(ast); 132 } 133 134 137 final List internalStructuralPropertiesForType(int apiLevel) { 138 return propertyDescriptors(apiLevel); 139 } 140 141 144 final Object internalGetSetObjectProperty(SimplePropertyDescriptor property, boolean get, Object value) { 145 if (property == COMMENT_PROPERTY) { 146 if (get) { 147 return getComment(); 148 } else { 149 setComment((String ) value); 150 return null; 151 } 152 } 153 return super.internalGetSetObjectProperty(property, get, value); 155 } 156 157 160 final List internalGetChildListProperty(ChildListPropertyDescriptor property) { 161 if (property == TAGS_PROPERTY) { 162 return tags(); 163 } 164 return super.internalGetChildListProperty(property); 166 } 167 168 171 final int getNodeType0() { 172 return JAVADOC; 173 } 174 175 178 ASTNode clone0(AST target) { 179 Javadoc result = new Javadoc(target); 180 result.setSourceRange(this.getStartPosition(), this.getLength()); 181 if (this.ast.apiLevel == AST.JLS2_INTERNAL) { 182 result.setComment(getComment()); 183 } 184 result.tags().addAll(ASTNode.copySubtrees(target, tags())); 185 return result; 186 } 187 188 191 final boolean subtreeMatch0(ASTMatcher matcher, Object other) { 192 return matcher.match(this, other); 194 } 195 196 199 void accept0(ASTVisitor visitor) { 200 boolean visitChildren = visitor.visit(this); 201 if (visitChildren) { 202 acceptChildren(visitor, this.tags); 204 } 205 visitor.endVisit(this); 206 } 207 208 219 public String getComment() { 220 supportedOnlyIn2(); 221 return this.comment; 222 } 223 224 237 public void setComment(String docComment) { 238 supportedOnlyIn2(); 239 if (docComment == null) { 240 throw new IllegalArgumentException (); 241 } 242 char[] source = docComment.toCharArray(); 243 Scanner scanner = this.ast.scanner; 244 scanner.resetTo(0, source.length); 245 scanner.setSource(source); 246 try { 247 int token; 248 boolean onlyOneComment = false; 249 while ((token = scanner.getNextToken()) != TerminalTokens.TokenNameEOF) { 250 switch(token) { 251 case TerminalTokens.TokenNameCOMMENT_JAVADOC : 252 if (onlyOneComment) { 253 throw new IllegalArgumentException (); 254 } 255 onlyOneComment = true; 256 break; 257 default: 258 onlyOneComment = false; 259 } 260 } 261 if (!onlyOneComment) { 262 throw new IllegalArgumentException (); 263 } 264 } catch (InvalidInputException e) { 265 throw new IllegalArgumentException (); 266 } 267 preValueChange(COMMENT_PROPERTY); 268 this.comment = docComment; 269 postValueChange(COMMENT_PROPERTY); 270 } 271 272 297 public List tags() { 298 return this.tags; 299 } 300 301 304 int memSize() { 305 int size = super.memSize() + 2 * 4; 306 if (this.comment != MINIMAL_DOC_COMMENT) { 307 size += stringSize(this.comment); 309 } 310 return size; 311 } 312 313 316 int treeSize() { 317 return memSize() + this.tags.listSize(); 318 } 319 } 320 | Popular Tags |