001 /* This file was generated with JastAdd2 (http://jastadd.org) version R20130213 */ 002 package AST; 003 004 import java.util.HashSet; 005 import java.io.File; 006 import java.util.*; 007 import beaver.*; 008 import java.util.ArrayList; 009 import java.util.zip.*; 010 import java.io.*; 011 import java.io.FileNotFoundException; 012 import java.util.Collection; 013 /** 014 * @production MethodDecl : {@link MemberDecl} ::= <span class="component">{@link Modifiers}</span> <span class="component">TypeAccess:{@link Access}</span> <span class="component"><ID:String></span> <span class="component">Parameter:{@link ParameterDeclaration}*</span> <span class="component">Exception:{@link Access}*</span> <span class="component">[{@link Block}]</span>; 015 * @ast node 016 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/java.ast:95 017 */ 018 public class MethodDecl extends MemberDecl implements Cloneable, SimpleSet, Iterator, ExceptionHolder { 019 /** 020 * @apilevel low-level 021 */ 022 public void flushCache() { 023 } 024 /** 025 * @apilevel internal 026 */ 027 public void flushCollectionCache() { 028 } 029 /** 030 * @apilevel internal 031 */ 032 @SuppressWarnings({"unchecked", "cast"}) 033 public MethodDecl clone() throws CloneNotSupportedException { 034 MethodDecl node = (MethodDecl)super.clone(); 035 node.accessibleFrom_TypeDecl_values = null; 036 node.throwsException_TypeDecl_values = null; 037 node.signature_computed = false; 038 node.signature_value = null; 039 node.moreSpecificThan_MethodDecl_values = null; 040 node.overrides_MethodDecl_values = null; 041 node.hides_MethodDecl_values = null; 042 node.parameterDeclaration_String_values = null; 043 node.type_computed = false; 044 node.type_value = null; 045 node.attributes_computed = false; 046 node.attributes_value = null; 047 node.descName_computed = false; 048 node.descName_value = null; 049 node.bytecodes_ConstantPool_values = null; 050 node.flags_computed = false; 051 node.offsetBeforeParameters_computed = false; 052 node.offsetAfterParameters_computed = false; 053 node.resultOffset_computed = false; 054 node.usesTypeVariable_computed = false; 055 node.sourceMethodDecl_computed = false; 056 node.sourceMethodDecl_value = null; 057 node.handlesException_TypeDecl_values = null; 058 node.in$Circle(false); 059 node.is$Final(false); 060 return node; 061 } 062 /** 063 * @apilevel internal 064 */ 065 @SuppressWarnings({"unchecked", "cast"}) 066 public MethodDecl copy() { 067 068 try { 069 MethodDecl node = (MethodDecl) clone(); 070 node.parent = null; 071 if(children != null) 072 node.children = (ASTNode[]) children.clone(); 073 074 return node; 075 } catch (CloneNotSupportedException e) { 076 throw new Error("Error: clone not supported for " + getClass().getName()); 077 } 078 079 }/** 080 * Create a deep copy of the AST subtree at this node. 081 * The copy is dangling, i.e. has no parent. 082 * @return dangling copy of the subtree at this node 083 * @apilevel low-level 084 */ 085 @SuppressWarnings({"unchecked", "cast"}) 086 public MethodDecl fullCopy() { 087 088 MethodDecl tree = (MethodDecl) copy(); 089 if (children != null) { 090 for (int i = 0; i < children.length; ++i) { 091 092 ASTNode child = (ASTNode) children[i]; 093 if(child != null) { 094 child = child.fullCopy(); 095 tree.setChild(child, i); 096 } 097 } 098 } 099 return tree; 100 101 } /** 102 * @ast method 103 * @aspect BoundNames 104 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/BoundNames.jrag:77 105 */ 106 public Access createBoundAccess(List args) { 107 if(isStatic()) { 108 return hostType().createQualifiedAccess().qualifiesAccess( 109 new BoundMethodAccess(name(), args, this) 110 ); 111 } 112 return new BoundMethodAccess(name(), args, this); 113 } 114 /** 115 * @ast method 116 * @aspect DataStructures 117 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:154 118 */ 119 public SimpleSet add(Object o) { 120 return new SimpleSetImpl().add(this).add(o); 121 } 122 /** 123 * @ast method 124 * @aspect DataStructures 125 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:158 126 */ 127 public boolean isSingleton() { return true; } 128 /** 129 * @ast method 130 * @aspect DataStructures 131 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:159 132 */ 133 public boolean isSingleton(Object o) { return contains(o); } 134 /** 135 * @ast method 136 * @aspect DataStructures 137 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:162 138 */ 139 140 private MethodDecl iterElem; 141 /** 142 * @ast method 143 * @aspect DataStructures 144 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:163 145 */ 146 public Iterator iterator() { iterElem = this; return this; } 147 /** 148 * @ast method 149 * @aspect DataStructures 150 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:164 151 */ 152 public boolean hasNext() { return iterElem != null; } 153 /** 154 * @ast method 155 * @aspect DataStructures 156 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:165 157 */ 158 public Object next() { Object o = iterElem; iterElem = null; return o; } 159 /** 160 * @ast method 161 * @aspect DataStructures 162 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:166 163 */ 164 public void remove() { throw new UnsupportedOperationException(); } 165 /** 166 * @ast method 167 * @aspect NameCheck 168 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/NameCheck.jrag:101 169 */ 170 public void nameCheck() { 171 // 8.4 172 // 8.4.2 173 if(!hostType().methodsSignature(signature()).contains(this)) 174 error("method with signature " + signature() + " is multiply declared in type " + hostType().typeName()); 175 // 8.4.3.4 176 if(isNative() && hasBlock()) 177 error("native methods must have an empty semicolon body"); 178 // 8.4.5 179 if(isAbstract() && hasBlock()) 180 error("abstract methods must have an empty semicolon body"); 181 // 8.4.5 182 if(!hasBlock() && !(isNative() || isAbstract())) 183 error("only abstract and native methods may have an empty semicolon body"); 184 } 185 /** 186 * @ast method 187 * @aspect PrettyPrint 188 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/PrettyPrint.jadd:176 189 */ 190 public void toString(StringBuffer s) { 191 s.append(indent()); 192 getModifiers().toString(s); 193 getTypeAccess().toString(s); 194 s.append(" " + name() + "("); 195 if(getNumParameter() > 0) { 196 getParameter(0).toString(s); 197 for(int i = 1; i < getNumParameter(); i++) { 198 s.append(", "); 199 getParameter(i).toString(s); 200 } 201 } 202 s.append(")"); 203 if(getNumException() > 0) { 204 s.append(" throws "); 205 getException(0).toString(s); 206 for(int i = 1; i < getNumException(); i++) { 207 s.append(", "); 208 getException(i).toString(s); 209 } 210 } 211 if(hasBlock()) { 212 s.append(" "); 213 getBlock().toString(s); 214 } 215 else { 216 s.append(";"); 217 } 218 } 219 /** 220 * @ast method 221 * @aspect TypeCheck 222 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeCheck.jrag:386 223 */ 224 public void typeCheck() { 225 // Thrown vs super class method see MethodDecl.nameCheck 226 // 8.4.4 227 TypeDecl exceptionType = typeThrowable(); 228 for(int i = 0; i < getNumException(); i++) { 229 TypeDecl typeDecl = getException(i).type(); 230 if(!typeDecl.instanceOf(exceptionType)) 231 error(signature() + " throws non throwable type " + typeDecl.fullName()); 232 } 233 234 // check returns 235 if(!isVoid() && hasBlock() && getBlock().canCompleteNormally()) 236 error("the body of a non void method may not complete normally"); 237 238 } 239 /** 240 * @ast method 241 * @aspect CodeGeneration 242 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:867 243 */ 244 public void emitInvokeMethod(CodeGeneration gen, TypeDecl hostType) { 245 if(hostType.isInterfaceDecl()) { 246 int size = type().variableSize() - 1; 247 for(int i = 0; i < getNumParameter(); i++) 248 size -= getParameter(i).type().variableSize(); 249 String classname = hostType.constantPoolName(); 250 String desc = descName(); 251 String name = name(); 252 int index = gen.constantPool().addInterfaceMethodref(classname, name, desc); 253 int numArg = 1; // instance 254 for(int i = 0; i < getNumParameter(); i++) 255 numArg += getParameter(i).type().variableSize(); 256 gen.emit(Bytecode.INVOKEINTERFACE, size).add2(index).add(numArg).add(0); 257 } 258 else { 259 String classname = hostType.constantPoolName(); 260 String desc = descName(); 261 String name = name(); 262 int index = gen.constantPool().addMethodref(classname, name, desc); 263 if(isStatic()) { 264 int size = type().variableSize(); 265 for(int i = 0; i < getNumParameter(); i++) 266 size -= getParameter(i).type().variableSize(); 267 gen.emit(Bytecode.INVOKESTATIC, size).add2(index); 268 } 269 else { 270 int size = type().variableSize() - 1; 271 for(int i = 0; i < getNumParameter(); i++) 272 size -= getParameter(i).type().variableSize(); 273 gen.emit(Bytecode.INVOKEVIRTUAL, size).add2(index); 274 } 275 } 276 } 277 /** 278 * @ast method 279 * @aspect CodeGeneration 280 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CodeGeneration.jrag:901 281 */ 282 public void emitInvokeSpecialMethod(CodeGeneration gen, TypeDecl hostType) { 283 String classname = hostType.constantPoolName(); 284 String desc = descName(); 285 String name = name(); 286 int index = gen.constantPool().addMethodref(classname, name, desc); 287 int size = type().variableSize() - 1; 288 for(int i = 0; i < getNumParameter(); i++) 289 size -= getParameter(i).type().variableSize(); 290 gen.emit(Bytecode.INVOKESPECIAL, size).add2(index); 291 } 292 /** 293 * @ast method 294 * @aspect CreateBCode 295 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:84 296 */ 297 private void generateBytecodes(CodeGeneration gen) { 298 int label = gen.variableScopeLabel(); 299 if(!isStatic()) 300 gen.addLocalVariableEntryAtCurrentPC("this", hostType().typeDescriptor(), 0, label); 301 for(int i = 0; i < getNumParameter(); i++) { 302 ParameterDeclaration p = (ParameterDeclaration)getParameter(i); 303 gen.addLocalVariableEntryAtCurrentPC( 304 p.name(), p.type().typeDescriptor(), p.localNum(), label 305 ); 306 } 307 createBCode(gen); 308 if(type() instanceof VoidType) // TODO: canCompleteNormally check as well 309 gen.emitReturn(); 310 gen.addVariableScopeLabel(label); 311 } 312 /** 313 * @ast method 314 * @aspect CreateBCode 315 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:125 316 */ 317 public void createBCode(CodeGeneration gen) { 318 try { 319 if(hasBlock()) { 320 gen.maxLocals = Math.max(gen.maxLocals, getBlock().localNum()); 321 getBlock().createBCode(gen); 322 } 323 } catch (Error e) { 324 System.err.println(hostType().typeName() + ": " + this); 325 throw e; 326 } 327 } 328 /** 329 * @ast method 330 * @aspect GenerateClassfile 331 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/GenerateClassfile.jrag:244 332 */ 333 public void generateMethod(DataOutputStream out, ConstantPool cp) throws IOException { 334 out.writeChar(flags()); 335 out.writeChar(cp.addUtf8(name())); 336 out.writeChar(cp.addUtf8(descName())); 337 out.writeChar(attributes().size()); 338 for(Iterator itera = attributes().iterator(); itera.hasNext();) 339 ((Attribute)itera.next()).emit(out); 340 } 341 /** 342 * @ast method 343 * @aspect GenerateClassfile 344 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/GenerateClassfile.jrag:263 345 */ 346 public void touchMethod(ConstantPool cp) { 347 cp.addUtf8(name()); 348 cp.addUtf8(descName()); 349 attributes(); 350 } 351 /** 352 * @ast method 353 * @aspect GenerateClassfile 354 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/GenerateClassfile.jrag:363 355 */ 356 public boolean clear() { 357 if(hasBlock()) { 358 getBlock().clear(); 359 setBlock(new Block(new List())); 360 } 361 bytecodes_ConstantPool_values = null; 362 return false; 363 } 364 /** 365 * @ast method 366 * @aspect InnerClasses 367 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:199 368 */ 369 public MethodDecl createAccessor(TypeDecl methodQualifier) { 370 MethodDecl m = (MethodDecl)methodQualifier.getAccessor(this, "method"); 371 if(m != null) return m; 372 373 int accessorIndex = methodQualifier.accessorCounter++; 374 375 List parameterList = new List(); 376 for(int i = 0; i < getNumParameter(); i++) 377 parameterList.add(new ParameterDeclaration( 378 // We don't need to create a qualified access to the type here 379 // since there can be no ambiguity concerning unqualified 380 // type names in an inner/enclosing class 381 // Jesper 2012-05-04 382 // FALSE! We need to create a qualified access in case the 383 // method we are generating an access for is not declared 384 // in the methodQualifier type 385 getParameter(i).type().createQualifiedAccess(), 386 getParameter(i).name())); 387 List exceptionList = new List(); 388 for(int i = 0; i < getNumException(); i++) 389 exceptionList.add((Access) getException(i).fullCopy()); 390 391 // add synthetic flag to modifiers 392 Modifiers modifiers = new Modifiers(new List()); 393 if(getModifiers().isStatic()) 394 modifiers.addModifier(new Modifier("static")); 395 modifiers.addModifier(new Modifier("synthetic")); 396 modifiers.addModifier(new Modifier("public")); 397 // build accessor declaration 398 m = new MethodDecl( 399 modifiers, 400 getTypeAccess().type().createQualifiedAccess(), 401 name() + "$access$" + accessorIndex, 402 parameterList, 403 exceptionList, 404 new Opt( 405 new Block( 406 new List().add( 407 createAccessorStmt() 408 ) 409 ) 410 ) 411 ); 412 m = methodQualifier.addMemberMethod(m); 413 methodQualifier.addAccessor(this, "method", m); 414 return m; 415 } 416 /** 417 * @ast method 418 * @aspect InnerClasses 419 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:247 420 */ 421 private Stmt createAccessorStmt() { 422 List argumentList = new List(); 423 for(int i = 0; i < getNumParameter(); i++) 424 argumentList.add(new VarAccess(getParameter(i).name())); 425 Access access = new BoundMethodAccess(name(), argumentList, this); 426 if(!isStatic()) 427 access = new ThisAccess("this").qualifiesAccess(access); 428 return isVoid() ? (Stmt) new ExprStmt(access) : new ReturnStmt(new Opt(access)); 429 } 430 /** 431 * @ast method 432 * @aspect InnerClasses 433 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/InnerClasses.jrag:257 434 */ 435 public MethodDecl createSuperAccessor(TypeDecl methodQualifier) { 436 MethodDecl m = (MethodDecl)methodQualifier.getAccessor(this, "method_super"); 437 if(m != null) return m; 438 439 int accessorIndex = methodQualifier.accessorCounter++; 440 List parameters = new List(); 441 List args = new List(); 442 for(int i = 0; i < getNumParameter(); i++) { 443 parameters.add(new ParameterDeclaration(getParameter(i).type(), getParameter(i).name())); 444 args.add(new VarAccess(getParameter(i).name())); 445 } 446 Stmt stmt; 447 if(type().isVoid()) 448 stmt = new ExprStmt(new SuperAccess("super").qualifiesAccess(new MethodAccess(name(), args))); 449 else 450 stmt = new ReturnStmt(new Opt(new SuperAccess("super").qualifiesAccess(new MethodAccess(name(), args)))); 451 m = new MethodDecl( 452 new Modifiers(new List().add(new Modifier("synthetic"))), 453 type().createQualifiedAccess(), 454 name() + "$access$" + accessorIndex, 455 parameters, 456 new List(), 457 new Opt( 458 new Block( 459 new List().add(stmt) 460 ) 461 ) 462 ); 463 m = methodQualifier.addMemberMethod(m); 464 methodQualifier.addAccessor(this, "method_super", m); 465 return m; 466 } 467 /** 468 * @ast method 469 * @aspect LookupParTypeDecl 470 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:1242 471 */ 472 public BodyDecl substitutedBodyDecl(Parameterization parTypeDecl) { 473 //System.out.println("Begin substituting " + signature() + " in " + hostType().typeName() + " with " + parTypeDecl.typeSignature()); 474 MethodDecl m = new MethodDeclSubstituted( 475 (Modifiers)getModifiers().fullCopy(), 476 getTypeAccess().type().substituteReturnType(parTypeDecl), 477 getID(), 478 getParameterList().substitute(parTypeDecl), 479 getExceptionList().substitute(parTypeDecl), 480 substituteBody(parTypeDecl), 481 this 482 ); 483 //System.out.println("End substituting " + signature()); 484 return m; 485 } 486 /** 487 * @ast method 488 * @aspect LookupParTypeDecl 489 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:1257 490 */ 491 public Opt substituteBody(Parameterization parTypeDecl) { 492 return new Opt(); 493 } 494 /** 495 * @ast method 496 * @aspect AnnotationsCodegen 497 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/AnnotationsCodegen.jrag:84 498 */ 499 public void addRuntimeVisibleParameterAnnotationsAttribute(Collection c) { 500 boolean foundVisibleAnnotations = false; 501 Collection annotations = new ArrayList(getNumParameter()); 502 for(int i = 0; i < getNumParameter(); i++) { 503 Collection a = getParameter(i).getModifiers().runtimeVisibleAnnotations(); 504 if(!a.isEmpty()) foundVisibleAnnotations = true; 505 annotations.add(a); 506 } 507 if(foundVisibleAnnotations) 508 c.add(new ParameterAnnotationsAttribute(hostType().constantPool(), annotations, "RuntimeVisibleParameterAnnotations")); 509 } 510 /** 511 * @ast method 512 * @aspect AnnotationsCodegen 513 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/AnnotationsCodegen.jrag:105 514 */ 515 public void addRuntimeInvisibleParameterAnnotationsAttribute(Collection c) { 516 boolean foundInvisibleAnnotations = false; 517 Collection annotations = new ArrayList(getNumParameter()); 518 for(int i = 0; i < getNumParameter(); i++) { 519 Collection a = getParameter(i).getModifiers().runtimeInvisibleAnnotations(); 520 if(!a.isEmpty()) foundInvisibleAnnotations = true; 521 annotations.add(a); 522 } 523 if(foundInvisibleAnnotations) 524 c.add(new ParameterAnnotationsAttribute(hostType().constantPool(), annotations, "RuntimeInvisibleParameterAnnotations")); 525 } 526 /** 527 * @ast method 528 * @aspect GenericsCodegen 529 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/GenericsCodegen.jrag:236 530 */ 531 public void transformation() { 532 super.transformation(); 533 HashSet processed = new HashSet(); 534 for(Iterator iter = hostType().bridgeCandidates(signature()).iterator(); iter.hasNext(); ) { 535 MethodDecl m = (MethodDecl)iter.next(); 536 if(this.overrides(m)) { 537 MethodDecl erased = m.erasedMethod(); 538 if(!erased.signature().equals(signature()) || erased.type().erasure() != type().erasure()) { 539 StringBuffer keyBuffer = new StringBuffer(); 540 for(int i = 0; i < getNumParameter(); i++) { 541 keyBuffer.append(erased.getParameter(i).type().erasure().fullName()); 542 } 543 keyBuffer.append(erased.type().erasure().fullName()); 544 String key = keyBuffer.toString(); 545 if(!processed.contains(key)) { 546 processed.add(key); 547 548 List args = new List(); 549 List parameters = new List(); 550 for(int i = 0; i < getNumParameter(); i++) { 551 args.add(new CastExpr(getParameter(i).type().erasure().createBoundAccess(), new VarAccess("p" + i))); 552 parameters.add(new ParameterDeclaration(erased.getParameter(i).type().erasure(), "p" + i)); 553 } 554 Stmt stmt; 555 if(type().isVoid()) { 556 stmt = new ExprStmt( 557 createBoundAccess( 558 args 559 ) 560 ); 561 } 562 else { 563 stmt = new ReturnStmt( 564 createBoundAccess( 565 args 566 ) 567 ); 568 } 569 List modifiersList = new List(); 570 if(isPublic()) 571 modifiersList.add(new Modifier("public")); 572 else if(isProtected()) 573 modifiersList.add(new Modifier("protected")); 574 else if(isPrivate()) 575 modifiersList.add(new Modifier("private")); 576 MethodDecl bridge = new BridgeMethodDecl( 577 new Modifiers(modifiersList), 578 erased.type().erasure().createBoundAccess(), 579 erased.name(), 580 parameters, 581 (List)getExceptionList().fullCopy(), 582 new Opt( 583 new Block( 584 new List().add(stmt) 585 ) 586 ) 587 ); 588 hostType().addBodyDecl(bridge); 589 } 590 } 591 } 592 } 593 } 594 /** 595 * Check if the method is missing a SafeVarargs annotation. 596 * @ast method 597 * @aspect SafeVarargs 598 * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/SafeVarargs.jrag:151 599 */ 600 public void checkWarnings() { 601 // check for illegal use of @SafeVarargs 602 super.checkWarnings(); 603 604 if (!suppressWarnings("unchecked") && 605 !hasAnnotationSafeVarargs() && 606 isVariableArity() && 607 !getParameter(getNumParameter()-1).type().isReifiable()) 608 warning("possible heap pollution for " + 609 "variable arity parameter"); 610 } 611 /** 612 * @ast method 613 * 614 */ 615 public MethodDecl() { 616 super(); 617 618 619 } 620 /** 621 * Initializes the child array to the correct size. 622 * Initializes List and Opt nta children. 623 * @apilevel internal 624 * @ast method 625 * @ast method 626 * 627 */ 628 public void init$Children() { 629 children = new ASTNode[5]; 630 setChild(new List(), 2); 631 setChild(new List(), 3); 632 setChild(new Opt(), 4); 633 } 634 /** 635 * @ast method 636 * 637 */ 638 public MethodDecl(Modifiers p0, Access p1, String p2, List<ParameterDeclaration> p3, List<Access> p4, Opt<Block> p5) { 639 setChild(p0, 0); 640 setChild(p1, 1); 641 setID(p2); 642 setChild(p3, 2); 643 setChild(p4, 3); 644 setChild(p5, 4); 645 } 646 /** 647 * @ast method 648 * 649 */ 650 public MethodDecl(Modifiers p0, Access p1, beaver.Symbol p2, List<ParameterDeclaration> p3, List<Access> p4, Opt<Block> p5) { 651 setChild(p0, 0); 652 setChild(p1, 1); 653 setID(p2); 654 setChild(p3, 2); 655 setChild(p4, 3); 656 setChild(p5, 4); 657 } 658 /** 659 * @apilevel low-level 660 * @ast method 661 * 662 */ 663 protected int numChildren() { 664 return 5; 665 } 666 /** 667 * @apilevel internal 668 * @ast method 669 * 670 */ 671 public boolean mayHaveRewrite() { 672 return false; 673 } 674 /** 675 * Replaces the Modifiers child. 676 * @param node The new node to replace the Modifiers child. 677 * @apilevel high-level 678 * @ast method 679 * 680 */ 681 public void setModifiers(Modifiers node) { 682 setChild(node, 0); 683 } 684 /** 685 * Retrieves the Modifiers child. 686 * @return The current node used as the Modifiers child. 687 * @apilevel high-level 688 * @ast method 689 * 690 */ 691 public Modifiers getModifiers() { 692 return (Modifiers)getChild(0); 693 } 694 /** 695 * Retrieves the Modifiers child. 696 * <p><em>This method does not invoke AST transformations.</em></p> 697 * @return The current node used as the Modifiers child. 698 * @apilevel low-level 699 * @ast method 700 * 701 */ 702 public Modifiers getModifiersNoTransform() { 703 return (Modifiers)getChildNoTransform(0); 704 } 705 /** 706 * Replaces the TypeAccess child. 707 * @param node The new node to replace the TypeAccess child. 708 * @apilevel high-level 709 * @ast method 710 * 711 */ 712 public void setTypeAccess(Access node) { 713 setChild(node, 1); 714 } 715 /** 716 * Retrieves the TypeAccess child. 717 * @return The current node used as the TypeAccess child. 718 * @apilevel high-level 719 * @ast method 720 * 721 */ 722 public Access getTypeAccess() { 723 return (Access)getChild(1); 724 } 725 /** 726 * Retrieves the TypeAccess child. 727 * <p><em>This method does not invoke AST transformations.</em></p> 728 * @return The current node used as the TypeAccess child. 729 * @apilevel low-level 730 * @ast method 731 * 732 */ 733 public Access getTypeAccessNoTransform() { 734 return (Access)getChildNoTransform(1); 735 } 736 /** 737 * Replaces the lexeme ID. 738 * @param value The new value for the lexeme ID. 739 * @apilevel high-level 740 * @ast method 741 * 742 */ 743 public void setID(String value) { 744 tokenString_ID = value; 745 } 746 /** 747 * @apilevel internal 748 * @ast method 749 * 750 */ 751 752 /** 753 * @apilevel internal 754 */ 755 protected String tokenString_ID; 756 /** 757 * @ast method 758 * 759 */ 760 761 public int IDstart; 762 /** 763 * @ast method 764 * 765 */ 766 767 public int IDend; 768 /** 769 * JastAdd-internal setter for lexeme ID using the Beaver parser. 770 * @apilevel internal 771 * @ast method 772 * 773 */ 774 public void setID(beaver.Symbol symbol) { 775 if(symbol.value != null && !(symbol.value instanceof String)) 776 throw new UnsupportedOperationException("setID is only valid for String lexemes"); 777 tokenString_ID = (String)symbol.value; 778 IDstart = symbol.getStart(); 779 IDend = symbol.getEnd(); 780 } 781 /** 782 * Retrieves the value for the lexeme ID. 783 * @return The value for the lexeme ID. 784 * @apilevel high-level 785 * @ast method 786 * 787 */ 788 public String getID() { 789 return tokenString_ID != null ? tokenString_ID : ""; 790 } 791 /** 792 * Replaces the Parameter list. 793 * @param list The new list node to be used as the Parameter list. 794 * @apilevel high-level 795 * @ast method 796 * 797 */ 798 public void setParameterList(List<ParameterDeclaration> list) { 799 setChild(list, 2); 800 } 801 /** 802 * Retrieves the number of children in the Parameter list. 803 * @return Number of children in the Parameter list. 804 * @apilevel high-level 805 * @ast method 806 * 807 */ 808 public int getNumParameter() { 809 return getParameterList().getNumChild(); 810 } 811 /** 812 * Retrieves the number of children in the Parameter list. 813 * Calling this method will not trigger rewrites.. 814 * @return Number of children in the Parameter list. 815 * @apilevel low-level 816 * @ast method 817 * 818 */ 819 public int getNumParameterNoTransform() { 820 return getParameterListNoTransform().getNumChildNoTransform(); 821 } 822 /** 823 * Retrieves the element at index {@code i} in the Parameter list.. 824 * @param i Index of the element to return. 825 * @return The element at position {@code i} in the Parameter list. 826 * @apilevel high-level 827 * @ast method 828 * 829 */ 830 @SuppressWarnings({"unchecked", "cast"}) 831 public ParameterDeclaration getParameter(int i) { 832 return (ParameterDeclaration)getParameterList().getChild(i); 833 } 834 /** 835 * Append an element to the Parameter list. 836 * @param node The element to append to the Parameter list. 837 * @apilevel high-level 838 * @ast method 839 * 840 */ 841 public void addParameter(ParameterDeclaration node) { 842 List<ParameterDeclaration> list = (parent == null || state == null) ? getParameterListNoTransform() : getParameterList(); 843 list.addChild(node); 844 } 845 /** 846 * @apilevel low-level 847 * @ast method 848 * 849 */ 850 public void addParameterNoTransform(ParameterDeclaration node) { 851 List<ParameterDeclaration> list = getParameterListNoTransform(); 852 list.addChild(node); 853 } 854 /** 855 * Replaces the Parameter list element at index {@code i} with the new node {@code node}. 856 * @param node The new node to replace the old list element. 857 * @param i The list index of the node to be replaced. 858 * @apilevel high-level 859 * @ast method 860 * 861 */ 862 public void setParameter(ParameterDeclaration node, int i) { 863 List<ParameterDeclaration> list = getParameterList(); 864 list.setChild(node, i); 865 } 866 /** 867 * Retrieves the Parameter list. 868 * @return The node representing the Parameter list. 869 * @apilevel high-level 870 * @ast method 871 * 872 */ 873 public List<ParameterDeclaration> getParameters() { 874 return getParameterList(); 875 } 876 /** 877 * Retrieves the Parameter list. 878 * <p><em>This method does not invoke AST transformations.</em></p> 879 * @return The node representing the Parameter list. 880 * @apilevel low-level 881 * @ast method 882 * 883 */ 884 public List<ParameterDeclaration> getParametersNoTransform() { 885 return getParameterListNoTransform(); 886 } 887 /** 888 * Retrieves the Parameter list. 889 * @return The node representing the Parameter list. 890 * @apilevel high-level 891 * @ast method 892 * 893 */ 894 @SuppressWarnings({"unchecked", "cast"}) 895 public List<ParameterDeclaration> getParameterList() { 896 List<ParameterDeclaration> list = (List<ParameterDeclaration>)getChild(2); 897 list.getNumChild(); 898 return list; 899 } 900 /** 901 * Retrieves the Parameter list. 902 * <p><em>This method does not invoke AST transformations.</em></p> 903 * @return The node representing the Parameter list. 904 * @apilevel low-level 905 * @ast method 906 * 907 */ 908 @SuppressWarnings({"unchecked", "cast"}) 909 public List<ParameterDeclaration> getParameterListNoTransform() { 910 return (List<ParameterDeclaration>)getChildNoTransform(2); 911 } 912 /** 913 * Replaces the Exception list. 914 * @param list The new list node to be used as the Exception list. 915 * @apilevel high-level 916 * @ast method 917 * 918 */ 919 public void setExceptionList(List<Access> list) { 920 setChild(list, 3); 921 } 922 /** 923 * Retrieves the number of children in the Exception list. 924 * @return Number of children in the Exception list. 925 * @apilevel high-level 926 * @ast method 927 * 928 */ 929 public int getNumException() { 930 return getExceptionList().getNumChild(); 931 } 932 /** 933 * Retrieves the number of children in the Exception list. 934 * Calling this method will not trigger rewrites.. 935 * @return Number of children in the Exception list. 936 * @apilevel low-level 937 * @ast method 938 * 939 */ 940 public int getNumExceptionNoTransform() { 941 return getExceptionListNoTransform().getNumChildNoTransform(); 942 } 943 /** 944 * Retrieves the element at index {@code i} in the Exception list.. 945 * @param i Index of the element to return. 946 * @return The element at position {@code i} in the Exception list. 947 * @apilevel high-level 948 * @ast method 949 * 950 */ 951 @SuppressWarnings({"unchecked", "cast"}) 952 public Access getException(int i) { 953 return (Access)getExceptionList().getChild(i); 954 } 955 /** 956 * Append an element to the Exception list. 957 * @param node The element to append to the Exception list. 958 * @apilevel high-level 959 * @ast method 960 * 961 */ 962 public void addException(Access node) { 963 List<Access> list = (parent == null || state == null) ? getExceptionListNoTransform() : getExceptionList(); 964 list.addChild(node); 965 } 966 /** 967 * @apilevel low-level 968 * @ast method 969 * 970 */ 971 public void addExceptionNoTransform(Access node) { 972 List<Access> list = getExceptionListNoTransform(); 973 list.addChild(node); 974 } 975 /** 976 * Replaces the Exception list element at index {@code i} with the new node {@code node}. 977 * @param node The new node to replace the old list element. 978 * @param i The list index of the node to be replaced. 979 * @apilevel high-level 980 * @ast method 981 * 982 */ 983 public void setException(Access node, int i) { 984 List<Access> list = getExceptionList(); 985 list.setChild(node, i); 986 } 987 /** 988 * Retrieves the Exception list. 989 * @return The node representing the Exception list. 990 * @apilevel high-level 991 * @ast method 992 * 993 */ 994 public List<Access> getExceptions() { 995 return getExceptionList(); 996 } 997 /** 998 * Retrieves the Exception list. 999 * <p><em>This method does not invoke AST transformations.</em></p> 1000 * @return The node representing the Exception list. 1001 * @apilevel low-level 1002 * @ast method 1003 * 1004 */ 1005 public List<Access> getExceptionsNoTransform() { 1006 return getExceptionListNoTransform(); 1007 } 1008 /** 1009 * Retrieves the Exception list. 1010 * @return The node representing the Exception list. 1011 * @apilevel high-level 1012 * @ast method 1013 * 1014 */ 1015 @SuppressWarnings({"unchecked", "cast"}) 1016 public List<Access> getExceptionList() { 1017 List<Access> list = (List<Access>)getChild(3); 1018 list.getNumChild(); 1019 return list; 1020 } 1021 /** 1022 * Retrieves the Exception list. 1023 * <p><em>This method does not invoke AST transformations.</em></p> 1024 * @return The node representing the Exception list. 1025 * @apilevel low-level 1026 * @ast method 1027 * 1028 */ 1029 @SuppressWarnings({"unchecked", "cast"}) 1030 public List<Access> getExceptionListNoTransform() { 1031 return (List<Access>)getChildNoTransform(3); 1032 } 1033 /** 1034 * Replaces the optional node for the Block child. This is the {@code Opt} node containing the child Block, not the actual child! 1035 * @param opt The new node to be used as the optional node for the Block child. 1036 * @apilevel low-level 1037 * @ast method 1038 * 1039 */ 1040 public void setBlockOpt(Opt<Block> opt) { 1041 setChild(opt, 4); 1042 } 1043 /** 1044 * Check whether the optional Block child exists. 1045 * @return {@code true} if the optional Block child exists, {@code false} if it does not. 1046 * @apilevel high-level 1047 * @ast method 1048 * 1049 */ 1050 public boolean hasBlock() { 1051 return getBlockOpt().getNumChild() != 0; 1052 } 1053 /** 1054 * Retrieves the (optional) Block child. 1055 * @return The Block child, if it exists. Returns {@code null} otherwise. 1056 * @apilevel low-level 1057 * @ast method 1058 * 1059 */ 1060 @SuppressWarnings({"unchecked", "cast"}) 1061 public Block getBlock() { 1062 return (Block)getBlockOpt().getChild(0); 1063 } 1064 /** 1065 * Replaces the (optional) Block child. 1066 * @param node The new node to be used as the Block child. 1067 * @apilevel high-level 1068 * @ast method 1069 * 1070 */ 1071 public void setBlock(Block node) { 1072 getBlockOpt().setChild(node, 0); 1073 } 1074 /** 1075 * @apilevel low-level 1076 * @ast method 1077 * 1078 */ 1079 @SuppressWarnings({"unchecked", "cast"}) 1080 public Opt<Block> getBlockOpt() { 1081 return (Opt<Block>)getChild(4); 1082 } 1083 /** 1084 * Retrieves the optional node for child Block. This is the {@code Opt} node containing the child Block, not the actual child! 1085 * <p><em>This method does not invoke AST transformations.</em></p> 1086 * @return The optional node for child Block. 1087 * @apilevel low-level 1088 * @ast method 1089 * 1090 */ 1091 @SuppressWarnings({"unchecked", "cast"}) 1092 public Opt<Block> getBlockOptNoTransform() { 1093 return (Opt<Block>)getChildNoTransform(4); 1094 } 1095 /** 1096 * @ast method 1097 * @aspect Enums 1098 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Enums.jrag:717 1099 */ 1100 1101 public void checkModifiers() { 1102 super.checkModifiers(); 1103 if(hostType().isClassDecl()) { 1104 // 8.4.3.1 1105 if(!hostType().isEnumDecl() && isAbstract() && !hostType().isAbstract()) 1106 error("class must be abstract to include abstract methods"); 1107 // 8.4.3.1 1108 if(isAbstract() && isPrivate()) 1109 error("method may not be abstract and private"); 1110 // 8.4.3.1 1111 // 8.4.3.2 1112 if(isAbstract() && isStatic()) 1113 error("method may not be abstract and static"); 1114 if(isAbstract() && isSynchronized()) 1115 error("method may not be abstract and synchronized"); 1116 // 8.4.3.4 1117 if(isAbstract() && isNative()) 1118 error("method may not be abstract and native"); 1119 if(isAbstract() && isStrictfp()) 1120 error("method may not be abstract and strictfp"); 1121 if(isNative() && isStrictfp()) 1122 error("method may not be native and strictfp"); 1123 } 1124 if(hostType().isInterfaceDecl()) { 1125 // 9.4 1126 if(isStatic()) 1127 error("interface method " + signature() + " in " + 1128 hostType().typeName() + " may not be static"); 1129 if(isStrictfp()) 1130 error("interface method " + signature() + " in " + 1131 hostType().typeName() + " may not be strictfp"); 1132 if(isNative()) 1133 error("interface method " + signature() + " in " + 1134 hostType().typeName() + " may not be native"); 1135 if(isSynchronized()) 1136 error("interface method " + signature() + " in " + 1137 hostType().typeName() + " may not be synchronized"); 1138 if(isProtected()) 1139 error("interface method " + signature() + " in " + 1140 hostType().typeName() + " may not be protected"); 1141 if(isPrivate()) 1142 error("interface method " + signature() + " in " + 1143 hostType().typeName() + " may not be private"); 1144 else if(isFinal()) 1145 error("interface method " + signature() + " in " + 1146 hostType().typeName() + " may not be final"); 1147 } 1148 } 1149 /** 1150 * @ast method 1151 * @aspect MethodDecl 1152 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupMethod.jrag:148 1153 */ 1154 private boolean refined_MethodDecl_MethodDecl_moreSpecificThan_MethodDecl(MethodDecl m) 1155 { 1156 if(getNumParameter() == 0) 1157 return false; 1158 for(int i = 0; i < getNumParameter(); i++) { 1159 if(!getParameter(i).type().instanceOf(m.getParameter(i).type())) 1160 return false; 1161 } 1162 return true; 1163 } 1164 /** 1165 * @ast method 1166 * @aspect Attributes 1167 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/Attributes.jrag:189 1168 */ 1169 private Collection refined_Attributes_MethodDecl_attributes() 1170 { 1171 ArrayList l = new ArrayList(); 1172 l.add(new ExceptionsAttribute(bytecodes(hostType().constantPool()), this)); 1173 if(isAbstract() || isNative()) return l; 1174 l.add(new CodeAttribute(bytecodes(hostType().constantPool()), this)); 1175 if(getModifiers().isSynthetic()) 1176 l.add(new SyntheticAttribute(hostType().constantPool())); 1177 return l; 1178 } 1179 /** 1180 * @ast method 1181 * @aspect Flags 1182 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/Flags.jrag:40 1183 */ 1184 private int refined_Flags_MethodDecl_flags() 1185 { 1186 int res = 0; 1187 if(isPublic()) res |= Modifiers.ACC_PUBLIC; 1188 if(isPrivate()) res |= Modifiers.ACC_PRIVATE; 1189 if(isProtected()) res |= Modifiers.ACC_PROTECTED; 1190 if(isStatic()) res |= Modifiers.ACC_STATIC; 1191 if(isFinal()) res |= Modifiers.ACC_FINAL; 1192 if(isSynchronized()) res |= Modifiers.ACC_SYNCHRONIZED; 1193 if(isNative()) res |= Modifiers.ACC_NATIVE; 1194 if(isAbstract()) res |= Modifiers.ACC_ABSTRACT; 1195 if(isStrictfp() || (hostType().isStrictfp() && !hostType().isInterfaceDecl())) res |= Modifiers.ACC_STRICT; 1196 return res; 1197 } 1198 /** 1199 * @ast method 1200 * @aspect AnnotationsCodegen 1201 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/AnnotationsCodegen.jrag:23 1202 */ 1203 private Collection refined_AnnotationsCodegen_MethodDecl_attributes() 1204 { 1205 Collection c = refined_Attributes_MethodDecl_attributes(); 1206 getModifiers().addRuntimeVisibleAnnotationsAttribute(c); 1207 getModifiers().addRuntimeInvisibleAnnotationsAttribute(c); 1208 addRuntimeVisibleParameterAnnotationsAttribute(c); 1209 addRuntimeInvisibleParameterAnnotationsAttribute(c); 1210 return c; 1211 } 1212 protected java.util.Map accessibleFrom_TypeDecl_values; 1213 /** 1214 * @attribute syn 1215 * @aspect AccessControl 1216 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/AccessControl.jrag:77 1217 */ 1218 @SuppressWarnings({"unchecked", "cast"}) 1219 public boolean accessibleFrom(TypeDecl type) { 1220 Object _parameters = type; 1221 if(accessibleFrom_TypeDecl_values == null) accessibleFrom_TypeDecl_values = new java.util.HashMap(4); 1222 if(accessibleFrom_TypeDecl_values.containsKey(_parameters)) { 1223 return ((Boolean)accessibleFrom_TypeDecl_values.get(_parameters)).booleanValue(); 1224 } 1225 ASTNode$State state = state(); 1226 int num = state.boundariesCrossed; 1227 boolean isFinal = this.is$Final(); 1228 boolean accessibleFrom_TypeDecl_value = accessibleFrom_compute(type); 1229 if(isFinal && num == state().boundariesCrossed){ accessibleFrom_TypeDecl_values.put(_parameters, Boolean.valueOf(accessibleFrom_TypeDecl_value)); } 1230 return accessibleFrom_TypeDecl_value; 1231 } 1232 /** 1233 * @apilevel internal 1234 */ 1235 private boolean accessibleFrom_compute(TypeDecl type) { 1236 if(isPublic()) { 1237 return true; 1238 } 1239 else if(isProtected()) { 1240 if(hostPackage().equals(type.hostPackage())) 1241 return true; 1242 if(type.withinBodyThatSubclasses(hostType()) != null) 1243 return true; 1244 return false; 1245 } 1246 else if(isPrivate()) 1247 return hostType().topLevelType() == type.topLevelType(); 1248 else 1249 return hostPackage().equals(type.hostPackage()); 1250 } 1251 /** 1252 * @attribute syn 1253 * @aspect DataStructures 1254 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:152 1255 */ 1256 public int size() { 1257 ASTNode$State state = state(); 1258 try { return 1; } 1259 finally { 1260 } 1261 } 1262 /** 1263 * @attribute syn 1264 * @aspect DataStructures 1265 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:153 1266 */ 1267 public boolean isEmpty() { 1268 ASTNode$State state = state(); 1269 try { return false; } 1270 finally { 1271 } 1272 } 1273 /** 1274 * @attribute syn 1275 * @aspect DataStructures 1276 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DataStructures.jrag:157 1277 */ 1278 public boolean contains(Object o) { 1279 ASTNode$State state = state(); 1280 try { return this == o; } 1281 finally { 1282 } 1283 } 1284 /** 1285 * @attribute syn 1286 * @aspect ErrorCheck 1287 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ErrorCheck.jrag:22 1288 */ 1289 public int lineNumber() { 1290 ASTNode$State state = state(); 1291 try { return getLine(IDstart); } 1292 finally { 1293 } 1294 } 1295 protected java.util.Map throwsException_TypeDecl_values; 1296 /** 1297 * @attribute syn 1298 * @aspect ExceptionHandling 1299 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ExceptionHandling.jrag:146 1300 */ 1301 @SuppressWarnings({"unchecked", "cast"}) 1302 public boolean throwsException(TypeDecl exceptionType) { 1303 Object _parameters = exceptionType; 1304 if(throwsException_TypeDecl_values == null) throwsException_TypeDecl_values = new java.util.HashMap(4); 1305 if(throwsException_TypeDecl_values.containsKey(_parameters)) { 1306 return ((Boolean)throwsException_TypeDecl_values.get(_parameters)).booleanValue(); 1307 } 1308 ASTNode$State state = state(); 1309 int num = state.boundariesCrossed; 1310 boolean isFinal = this.is$Final(); 1311 boolean throwsException_TypeDecl_value = throwsException_compute(exceptionType); 1312 if(isFinal && num == state().boundariesCrossed){ throwsException_TypeDecl_values.put(_parameters, Boolean.valueOf(throwsException_TypeDecl_value)); } 1313 return throwsException_TypeDecl_value; 1314 } 1315 /** 1316 * @apilevel internal 1317 */ 1318 private boolean throwsException_compute(TypeDecl exceptionType) { 1319 for(int i = 0; i < getNumException(); i++) 1320 if(exceptionType.instanceOf(getException(i).type())) 1321 return true; 1322 return false; 1323 } 1324 /** 1325 * @attribute syn 1326 * @aspect MethodDecl 1327 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupMethod.jrag:131 1328 */ 1329 public String name() { 1330 ASTNode$State state = state(); 1331 try { return getID(); } 1332 finally { 1333 } 1334 } 1335 /** 1336 * @apilevel internal 1337 */ 1338 protected boolean signature_computed = false; 1339 /** 1340 * @apilevel internal 1341 */ 1342 protected String signature_value; 1343 /** 1344 * @attribute syn 1345 * @aspect MethodSignature15 1346 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/MethodSignature.jrag:347 1347 */ 1348 @SuppressWarnings({"unchecked", "cast"}) 1349 public String signature() { 1350 if(signature_computed) { 1351 return signature_value; 1352 } 1353 ASTNode$State state = state(); 1354 int num = state.boundariesCrossed; 1355 boolean isFinal = this.is$Final(); 1356 signature_value = signature_compute(); 1357 if(isFinal && num == state().boundariesCrossed){ signature_computed = true; } 1358 return signature_value; 1359 } 1360 /** 1361 * @apilevel internal 1362 */ 1363 private String signature_compute() { 1364 StringBuffer s = new StringBuffer(); 1365 s.append(name() + "("); 1366 for(int i = 0; i < getNumParameter(); i++) { 1367 if(i != 0) s.append(", "); 1368 s.append(getParameter(i).type().erasure().typeName()); 1369 } 1370 s.append(")"); 1371 return s.toString(); 1372 1373 } 1374 /** 1375 * @attribute syn 1376 * @aspect MethodDecl 1377 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupMethod.jrag:146 1378 */ 1379 public boolean sameSignature(MethodDecl m) { 1380 ASTNode$State state = state(); 1381 try { return signature().equals(m.signature()); } 1382 finally { 1383 } 1384 } 1385 protected java.util.Map moreSpecificThan_MethodDecl_values; 1386 /** 1387 * @attribute syn 1388 * @aspect MethodSignature15 1389 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/MethodSignature.jrag:155 1390 */ 1391 @SuppressWarnings({"unchecked", "cast"}) 1392 public boolean moreSpecificThan(MethodDecl m) { 1393 Object _parameters = m; 1394 if(moreSpecificThan_MethodDecl_values == null) moreSpecificThan_MethodDecl_values = new java.util.HashMap(4); 1395 if(moreSpecificThan_MethodDecl_values.containsKey(_parameters)) { 1396 return ((Boolean)moreSpecificThan_MethodDecl_values.get(_parameters)).booleanValue(); 1397 } 1398 ASTNode$State state = state(); 1399 int num = state.boundariesCrossed; 1400 boolean isFinal = this.is$Final(); 1401 boolean moreSpecificThan_MethodDecl_value = moreSpecificThan_compute(m); 1402 if(isFinal && num == state().boundariesCrossed){ moreSpecificThan_MethodDecl_values.put(_parameters, Boolean.valueOf(moreSpecificThan_MethodDecl_value)); } 1403 return moreSpecificThan_MethodDecl_value; 1404 } 1405 /** 1406 * @apilevel internal 1407 */ 1408 private boolean moreSpecificThan_compute(MethodDecl m) { 1409 if(!isVariableArity() && !m.isVariableArity()) 1410 return refined_MethodDecl_MethodDecl_moreSpecificThan_MethodDecl(m); 1411 int num = Math.max(getNumParameter(), m.getNumParameter()); 1412 for(int i = 0; i < num; i++) { 1413 TypeDecl t1 = i < getNumParameter() - 1 ? getParameter(i).type() : getParameter(getNumParameter()-1).type().componentType(); 1414 TypeDecl t2 = i < m.getNumParameter() - 1 ? m.getParameter(i).type() : m.getParameter(m.getNumParameter()-1).type().componentType(); 1415 if(!t1.instanceOf(t2)) 1416 return false; 1417 } 1418 return true; 1419 } 1420 protected java.util.Map overrides_MethodDecl_values; 1421 /** 1422 * @attribute syn 1423 * @aspect MethodDecl 1424 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupMethod.jrag:200 1425 */ 1426 @SuppressWarnings({"unchecked", "cast"}) 1427 public boolean overrides(MethodDecl m) { 1428 Object _parameters = m; 1429 if(overrides_MethodDecl_values == null) overrides_MethodDecl_values = new java.util.HashMap(4); 1430 if(overrides_MethodDecl_values.containsKey(_parameters)) { 1431 return ((Boolean)overrides_MethodDecl_values.get(_parameters)).booleanValue(); 1432 } 1433 ASTNode$State state = state(); 1434 int num = state.boundariesCrossed; 1435 boolean isFinal = this.is$Final(); 1436 boolean overrides_MethodDecl_value = overrides_compute(m); 1437 if(isFinal && num == state().boundariesCrossed){ overrides_MethodDecl_values.put(_parameters, Boolean.valueOf(overrides_MethodDecl_value)); } 1438 return overrides_MethodDecl_value; 1439 } 1440 /** 1441 * @apilevel internal 1442 */ 1443 private boolean overrides_compute(MethodDecl m) { return !isStatic() && !m.isPrivate() && m.accessibleFrom(hostType()) && 1444 hostType().instanceOf(m.hostType()) && m.signature().equals(signature()); } 1445 protected java.util.Map hides_MethodDecl_values; 1446 /** 1447 * @attribute syn 1448 * @aspect MethodDecl 1449 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupMethod.jrag:204 1450 */ 1451 @SuppressWarnings({"unchecked", "cast"}) 1452 public boolean hides(MethodDecl m) { 1453 Object _parameters = m; 1454 if(hides_MethodDecl_values == null) hides_MethodDecl_values = new java.util.HashMap(4); 1455 if(hides_MethodDecl_values.containsKey(_parameters)) { 1456 return ((Boolean)hides_MethodDecl_values.get(_parameters)).booleanValue(); 1457 } 1458 ASTNode$State state = state(); 1459 int num = state.boundariesCrossed; 1460 boolean isFinal = this.is$Final(); 1461 boolean hides_MethodDecl_value = hides_compute(m); 1462 if(isFinal && num == state().boundariesCrossed){ hides_MethodDecl_values.put(_parameters, Boolean.valueOf(hides_MethodDecl_value)); } 1463 return hides_MethodDecl_value; 1464 } 1465 /** 1466 * @apilevel internal 1467 */ 1468 private boolean hides_compute(MethodDecl m) { return isStatic() && !m.isPrivate() && m.accessibleFrom(hostType()) && 1469 hostType().instanceOf(m.hostType()) && m.signature().equals(signature()); } 1470 protected java.util.Map parameterDeclaration_String_values; 1471 /** 1472 * @attribute syn 1473 * @aspect VariableScope 1474 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupVariable.jrag:99 1475 */ 1476 @SuppressWarnings({"unchecked", "cast"}) 1477 public SimpleSet parameterDeclaration(String name) { 1478 Object _parameters = name; 1479 if(parameterDeclaration_String_values == null) parameterDeclaration_String_values = new java.util.HashMap(4); 1480 if(parameterDeclaration_String_values.containsKey(_parameters)) { 1481 return (SimpleSet)parameterDeclaration_String_values.get(_parameters); 1482 } 1483 ASTNode$State state = state(); 1484 int num = state.boundariesCrossed; 1485 boolean isFinal = this.is$Final(); 1486 SimpleSet parameterDeclaration_String_value = parameterDeclaration_compute(name); 1487 if(isFinal && num == state().boundariesCrossed){ parameterDeclaration_String_values.put(_parameters, parameterDeclaration_String_value); } 1488 return parameterDeclaration_String_value; 1489 } 1490 /** 1491 * @apilevel internal 1492 */ 1493 private SimpleSet parameterDeclaration_compute(String name) { 1494 for(int i = 0; i < getNumParameter(); i++) 1495 if(getParameter(i).name().equals(name)) 1496 return (ParameterDeclaration)getParameter(i); 1497 return SimpleSet.emptySet; 1498 } 1499 /** 1500 * @attribute syn 1501 * @aspect Modifiers 1502 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:214 1503 */ 1504 public boolean isSynthetic() { 1505 ASTNode$State state = state(); 1506 try { return getModifiers().isSynthetic(); } 1507 finally { 1508 } 1509 } 1510 /** 1511 * @attribute syn 1512 * @aspect Modifiers 1513 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:224 1514 */ 1515 public boolean isPublic() { 1516 ASTNode$State state = state(); 1517 try { return getModifiers().isPublic() || hostType().isInterfaceDecl(); } 1518 finally { 1519 } 1520 } 1521 /** 1522 * @attribute syn 1523 * @aspect Modifiers 1524 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:225 1525 */ 1526 public boolean isPrivate() { 1527 ASTNode$State state = state(); 1528 try { return getModifiers().isPrivate(); } 1529 finally { 1530 } 1531 } 1532 /** 1533 * @attribute syn 1534 * @aspect Modifiers 1535 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:226 1536 */ 1537 public boolean isProtected() { 1538 ASTNode$State state = state(); 1539 try { return getModifiers().isProtected(); } 1540 finally { 1541 } 1542 } 1543 /** 1544 * @attribute syn 1545 * @aspect Modifiers 1546 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:227 1547 */ 1548 public boolean isAbstract() { 1549 ASTNode$State state = state(); 1550 try { return getModifiers().isAbstract() || hostType().isInterfaceDecl(); } 1551 finally { 1552 } 1553 } 1554 /** 1555 * @attribute syn 1556 * @aspect Modifiers 1557 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:228 1558 */ 1559 public boolean isStatic() { 1560 ASTNode$State state = state(); 1561 try { return getModifiers().isStatic(); } 1562 finally { 1563 } 1564 } 1565 /** 1566 * @attribute syn 1567 * @aspect Modifiers 1568 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:230 1569 */ 1570 public boolean isFinal() { 1571 ASTNode$State state = state(); 1572 try { return getModifiers().isFinal() || hostType().isFinal() || isPrivate(); } 1573 finally { 1574 } 1575 } 1576 /** 1577 * @attribute syn 1578 * @aspect Modifiers 1579 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:231 1580 */ 1581 public boolean isSynchronized() { 1582 ASTNode$State state = state(); 1583 try { return getModifiers().isSynchronized(); } 1584 finally { 1585 } 1586 } 1587 /** 1588 * @attribute syn 1589 * @aspect Modifiers 1590 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:232 1591 */ 1592 public boolean isNative() { 1593 ASTNode$State state = state(); 1594 try { return getModifiers().isNative(); } 1595 finally { 1596 } 1597 } 1598 /** 1599 * @attribute syn 1600 * @aspect Modifiers 1601 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:233 1602 */ 1603 public boolean isStrictfp() { 1604 ASTNode$State state = state(); 1605 try { return getModifiers().isStrictfp(); } 1606 finally { 1607 } 1608 } 1609 /** 1610 * @attribute syn 1611 * @aspect PrettyPrint 1612 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/PrettyPrint.jadd:800 1613 */ 1614 public String dumpString() { 1615 ASTNode$State state = state(); 1616 try { return getClass().getName() + " [" + getID() + "]"; } 1617 finally { 1618 } 1619 } 1620 /** 1621 * @apilevel internal 1622 */ 1623 protected boolean type_computed = false; 1624 /** 1625 * @apilevel internal 1626 */ 1627 protected TypeDecl type_value; 1628 /** 1629 * @attribute syn 1630 * @aspect TypeAnalysis 1631 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:269 1632 */ 1633 @SuppressWarnings({"unchecked", "cast"}) 1634 public TypeDecl type() { 1635 if(type_computed) { 1636 return type_value; 1637 } 1638 ASTNode$State state = state(); 1639 int num = state.boundariesCrossed; 1640 boolean isFinal = this.is$Final(); 1641 type_value = type_compute(); 1642 if(isFinal && num == state().boundariesCrossed){ type_computed = true; } 1643 return type_value; 1644 } 1645 /** 1646 * @apilevel internal 1647 */ 1648 private TypeDecl type_compute() { return getTypeAccess().type(); } 1649 /** 1650 * @attribute syn 1651 * @aspect TypeAnalysis 1652 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeAnalysis.jrag:271 1653 */ 1654 public boolean isVoid() { 1655 ASTNode$State state = state(); 1656 try { return type().isVoid(); } 1657 finally { 1658 } 1659 } 1660 /** 1661 * @attribute syn 1662 * @aspect TypeHierarchyCheck 1663 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeHierarchyCheck.jrag:237 1664 */ 1665 public boolean mayOverrideReturn(MethodDecl m) { 1666 ASTNode$State state = state(); 1667 try { 1668 return type().instanceOf(m.type()); 1669 } 1670 finally { 1671 } 1672 } 1673 /** 1674 * @apilevel internal 1675 */ 1676 protected boolean attributes_computed = false; 1677 /** 1678 * @apilevel internal 1679 */ 1680 protected Collection attributes_value; 1681 /** 1682 * @attribute syn 1683 * @aspect GenericsCodegen 1684 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/GenericsCodegen.jrag:317 1685 */ 1686 @SuppressWarnings({"unchecked", "cast"}) 1687 public Collection attributes() { 1688 if(attributes_computed) { 1689 return attributes_value; 1690 } 1691 ASTNode$State state = state(); 1692 int num = state.boundariesCrossed; 1693 boolean isFinal = this.is$Final(); 1694 attributes_value = attributes_compute(); 1695 if(isFinal && num == state().boundariesCrossed){ attributes_computed = true; } 1696 return attributes_value; 1697 } 1698 /** 1699 * @apilevel internal 1700 */ 1701 private Collection attributes_compute() { 1702 Collection c = refined_AnnotationsCodegen_MethodDecl_attributes(); 1703 if(needsSignatureAttribute()) 1704 c.add(new SignatureAttribute(hostType().constantPool(), methodTypeSignature())); 1705 return c; 1706 } 1707 /** 1708 * @apilevel internal 1709 */ 1710 protected boolean descName_computed = false; 1711 /** 1712 * @apilevel internal 1713 */ 1714 protected String descName_value; 1715 /** 1716 * @attribute syn 1717 * @aspect ConstantPoolNames 1718 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/ConstantPoolNames.jrag:34 1719 */ 1720 @SuppressWarnings({"unchecked", "cast"}) 1721 public String descName() { 1722 if(descName_computed) { 1723 return descName_value; 1724 } 1725 ASTNode$State state = state(); 1726 int num = state.boundariesCrossed; 1727 boolean isFinal = this.is$Final(); 1728 descName_value = descName_compute(); 1729 if(isFinal && num == state().boundariesCrossed){ descName_computed = true; } 1730 return descName_value; 1731 } 1732 /** 1733 * @apilevel internal 1734 */ 1735 private String descName_compute() { 1736 StringBuffer b = new StringBuffer(); 1737 b.append("("); 1738 for (int i=0; i<getNumParameter(); i++) 1739 b.append(getParameter(i).type().typeDescriptor()); 1740 b.append(")"); 1741 if(type().elementType().isUnknown()) { 1742 System.out.println(getTypeAccess().dumpTree()); 1743 throw new Error("Error generating descName for " + signature() + ", did not expect unknown return type"); 1744 } 1745 b.append(type().typeDescriptor()); 1746 return b.toString(); 1747 } 1748 protected java.util.Map bytecodes_ConstantPool_values; 1749 /** 1750 * @attribute syn 1751 * @aspect CreateBCode 1752 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/CreateBCode.jrag:71 1753 */ 1754 @SuppressWarnings({"unchecked", "cast"}) 1755 public CodeGeneration bytecodes(ConstantPool constantPool) { 1756 Object _parameters = constantPool; 1757 if(bytecodes_ConstantPool_values == null) bytecodes_ConstantPool_values = new java.util.HashMap(4); 1758 if(bytecodes_ConstantPool_values.containsKey(_parameters)) { 1759 return (CodeGeneration)bytecodes_ConstantPool_values.get(_parameters); 1760 } 1761 ASTNode$State state = state(); 1762 int num = state.boundariesCrossed; 1763 boolean isFinal = this.is$Final(); 1764 CodeGeneration bytecodes_ConstantPool_value = bytecodes_compute(constantPool); 1765 if(isFinal && num == state().boundariesCrossed){ bytecodes_ConstantPool_values.put(_parameters, bytecodes_ConstantPool_value); } 1766 return bytecodes_ConstantPool_value; 1767 } 1768 /** 1769 * @apilevel internal 1770 */ 1771 private CodeGeneration bytecodes_compute(ConstantPool constantPool) { 1772 //if(options().verbose()) 1773 // System.out.println("Generating bytecodes for " + signature() + " in " + hostType().fullName()); 1774 CodeGeneration gen = new CodeGeneration(constantPool); 1775 generateBytecodes(gen); 1776 if(!gen.numberFormatError()) 1777 return gen; 1778 gen = new CodeGeneration(constantPool, true); 1779 generateBytecodes(gen); 1780 if(!gen.numberFormatError()) 1781 return gen; 1782 throw new Error("Could not generate code for " + signature() + " in " + hostType().typeName()); 1783 } 1784 /** 1785 * @apilevel internal 1786 */ 1787 protected boolean flags_computed = false; 1788 /** 1789 * @apilevel internal 1790 */ 1791 protected int flags_value; 1792 /** 1793 * @attribute syn 1794 * @aspect VariableArityParametersCodegen 1795 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/VariableArityParametersCodegen.jrag:84 1796 */ 1797 @SuppressWarnings({"unchecked", "cast"}) 1798 public int flags() { 1799 if(flags_computed) { 1800 return flags_value; 1801 } 1802 ASTNode$State state = state(); 1803 int num = state.boundariesCrossed; 1804 boolean isFinal = this.is$Final(); 1805 flags_value = flags_compute(); 1806 if(isFinal && num == state().boundariesCrossed){ flags_computed = true; } 1807 return flags_value; 1808 } 1809 /** 1810 * @apilevel internal 1811 */ 1812 private int flags_compute() { 1813 int res = refined_Flags_MethodDecl_flags(); 1814 if(isVariableArity()) 1815 res |= Modifiers.ACC_VARARGS; 1816 return res; 1817 } 1818 /** 1819 * @attribute syn 1820 * @aspect GenerateClassfile 1821 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/GenerateClassfile.jrag:296 1822 */ 1823 public boolean isBytecodeMethod() { 1824 ASTNode$State state = state(); 1825 try { return true; } 1826 finally { 1827 } 1828 } 1829 /** 1830 * @attribute syn 1831 * @aspect GenerateClassfile 1832 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/GenerateClassfile.jrag:325 1833 */ 1834 public boolean flush() { 1835 ASTNode$State state = state(); 1836 try { return false; } 1837 finally { 1838 } 1839 } 1840 /** 1841 * @apilevel internal 1842 */ 1843 protected boolean offsetBeforeParameters_computed = false; 1844 /** 1845 * @apilevel internal 1846 */ 1847 protected int offsetBeforeParameters_value; 1848 /** 1849 * @attribute syn 1850 * @aspect LocalNum 1851 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/LocalNum.jrag:17 1852 */ 1853 @SuppressWarnings({"unchecked", "cast"}) 1854 public int offsetBeforeParameters() { 1855 if(offsetBeforeParameters_computed) { 1856 return offsetBeforeParameters_value; 1857 } 1858 ASTNode$State state = state(); 1859 int num = state.boundariesCrossed; 1860 boolean isFinal = this.is$Final(); 1861 offsetBeforeParameters_value = offsetBeforeParameters_compute(); 1862 if(isFinal && num == state().boundariesCrossed){ offsetBeforeParameters_computed = true; } 1863 return offsetBeforeParameters_value; 1864 } 1865 /** 1866 * @apilevel internal 1867 */ 1868 private int offsetBeforeParameters_compute() { return isStatic() ? 0 : 1; } 1869 /** 1870 * @apilevel internal 1871 */ 1872 protected boolean offsetAfterParameters_computed = false; 1873 /** 1874 * @apilevel internal 1875 */ 1876 protected int offsetAfterParameters_value; 1877 /** 1878 * @attribute syn 1879 * @aspect LocalNum 1880 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/LocalNum.jrag:19 1881 */ 1882 @SuppressWarnings({"unchecked", "cast"}) 1883 public int offsetAfterParameters() { 1884 if(offsetAfterParameters_computed) { 1885 return offsetAfterParameters_value; 1886 } 1887 ASTNode$State state = state(); 1888 int num = state.boundariesCrossed; 1889 boolean isFinal = this.is$Final(); 1890 offsetAfterParameters_value = offsetAfterParameters_compute(); 1891 if(isFinal && num == state().boundariesCrossed){ offsetAfterParameters_computed = true; } 1892 return offsetAfterParameters_value; 1893 } 1894 /** 1895 * @apilevel internal 1896 */ 1897 private int offsetAfterParameters_compute() { 1898 if(getNumParameter() == 0) 1899 return offsetBeforeParameters(); 1900 return getParameter(getNumParameter()-1).localNum() + 1901 getParameter(getNumParameter()-1).type().variableSize(); 1902 } 1903 /** 1904 * @apilevel internal 1905 */ 1906 protected boolean resultOffset_computed = false; 1907 /** 1908 * @apilevel internal 1909 */ 1910 protected int resultOffset_value; 1911 /** 1912 * @attribute syn 1913 * @aspect LocalNum 1914 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/LocalNum.jrag:50 1915 */ 1916 @SuppressWarnings({"unchecked", "cast"}) 1917 public int resultOffset() { 1918 if(resultOffset_computed) { 1919 return resultOffset_value; 1920 } 1921 ASTNode$State state = state(); 1922 int num = state.boundariesCrossed; 1923 boolean isFinal = this.is$Final(); 1924 resultOffset_value = resultOffset_compute(); 1925 if(isFinal && num == state().boundariesCrossed){ resultOffset_computed = true; } 1926 return resultOffset_value; 1927 } 1928 /** 1929 * @apilevel internal 1930 */ 1931 private int resultOffset_compute() { return type().isVoid() ? 0 : type().variableSize(); } 1932 /* It is also a compile-time error if any method declared in an annotation type has a 1933 signature that is override-equivalent to that of any public or protected method 1934 declared in class Object or in the interface annotation.Annotation* @attribute syn 1935 * @aspect Annotations 1936 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Annotations.jrag:139 1937 */ 1938 public boolean annotationMethodOverride() { 1939 ASTNode$State state = state(); 1940 try { return !hostType().ancestorMethods(signature()).isEmpty(); } 1941 finally { 1942 } 1943 } 1944 /** 1945 * @attribute syn 1946 * @aspect Annotations 1947 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Annotations.jrag:283 1948 */ 1949 public boolean hasAnnotationSuppressWarnings(String s) { 1950 ASTNode$State state = state(); 1951 try { return getModifiers().hasAnnotationSuppressWarnings(s); } 1952 finally { 1953 } 1954 } 1955 /** 1956 * @attribute syn 1957 * @aspect Annotations 1958 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Annotations.jrag:323 1959 */ 1960 public boolean isDeprecated() { 1961 ASTNode$State state = state(); 1962 try { return getModifiers().hasDeprecatedAnnotation(); } 1963 finally { 1964 } 1965 } 1966 /** 1967 * @apilevel internal 1968 */ 1969 protected boolean usesTypeVariable_computed = false; 1970 /** 1971 * @apilevel internal 1972 */ 1973 protected boolean usesTypeVariable_value; 1974 /** 1975 * @attribute syn 1976 * @aspect LookupParTypeDecl 1977 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:1062 1978 */ 1979 @SuppressWarnings({"unchecked", "cast"}) 1980 public boolean usesTypeVariable() { 1981 if(usesTypeVariable_computed) { 1982 return usesTypeVariable_value; 1983 } 1984 ASTNode$State state = state(); 1985 int num = state.boundariesCrossed; 1986 boolean isFinal = this.is$Final(); 1987 usesTypeVariable_value = usesTypeVariable_compute(); 1988 if(isFinal && num == state().boundariesCrossed){ usesTypeVariable_computed = true; } 1989 return usesTypeVariable_value; 1990 } 1991 /** 1992 * @apilevel internal 1993 */ 1994 private boolean usesTypeVariable_compute() { return getModifiers().usesTypeVariable() || getTypeAccess().usesTypeVariable() || 1995 getParameterList().usesTypeVariable() || getExceptionList().usesTypeVariable(); } 1996 /** 1997 * @apilevel internal 1998 */ 1999 protected boolean sourceMethodDecl_computed = false; 2000 /** 2001 * @apilevel internal 2002 */ 2003 protected MethodDecl sourceMethodDecl_value; 2004 /** 2005 * @attribute syn 2006 * @aspect SourceDeclarations 2007 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Generics.jrag:1511 2008 */ 2009 @SuppressWarnings({"unchecked", "cast"}) 2010 public MethodDecl sourceMethodDecl() { 2011 if(sourceMethodDecl_computed) { 2012 return sourceMethodDecl_value; 2013 } 2014 ASTNode$State state = state(); 2015 int num = state.boundariesCrossed; 2016 boolean isFinal = this.is$Final(); 2017 sourceMethodDecl_value = sourceMethodDecl_compute(); 2018 if(isFinal && num == state().boundariesCrossed){ sourceMethodDecl_computed = true; } 2019 return sourceMethodDecl_value; 2020 } 2021 /** 2022 * @apilevel internal 2023 */ 2024 private MethodDecl sourceMethodDecl_compute() { return this; } 2025 /** 2026 * @attribute syn 2027 * @aspect GenericsParTypeDecl 2028 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/GenericsParTypeDecl.jrag:67 2029 */ 2030 public boolean visibleTypeParameters() { 2031 ASTNode$State state = state(); 2032 try { return !isStatic(); } 2033 finally { 2034 } 2035 } 2036 /** 2037 * @attribute syn 2038 * @aspect MethodSignature15 2039 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/MethodSignature.jrag:284 2040 */ 2041 public int arity() { 2042 ASTNode$State state = state(); 2043 try { return getNumParameter(); } 2044 finally { 2045 } 2046 } 2047 /* The method is then a variable arity method. Otherwise, it is a fixed arity method.* @attribute syn 2048 * @aspect VariableArityParameters 2049 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/VariableArityParameters.jrag:33 2050 */ 2051 public boolean isVariableArity() { 2052 ASTNode$State state = state(); 2053 try { return getNumParameter() == 0 ? false : getParameter(getNumParameter()-1).isVariableArity(); } 2054 finally { 2055 } 2056 } 2057 /** 2058 * @attribute syn 2059 * @aspect VariableArityParameters 2060 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/VariableArityParameters.jrag:38 2061 */ 2062 public ParameterDeclaration lastParameter() { 2063 ASTNode$State state = state(); 2064 try { return getParameter(getNumParameter() - 1); } 2065 finally { 2066 } 2067 } 2068 /** 2069 * @attribute syn 2070 * @aspect GenericsCodegen 2071 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/GenericsCodegen.jrag:56 2072 */ 2073 public MethodDecl erasedMethod() { 2074 ASTNode$State state = state(); 2075 try { return this; } 2076 finally { 2077 } 2078 } 2079 /** 2080 * @attribute syn 2081 * @aspect GenericsCodegen 2082 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/GenericsCodegen.jrag:363 2083 */ 2084 public boolean needsSignatureAttribute() { 2085 ASTNode$State state = state(); 2086 try { 2087 if(type().needsSignatureAttribute()) 2088 return true; 2089 for(int i = 0; i < getNumParameter(); i++) 2090 if(getParameter(i).type().needsSignatureAttribute()) 2091 return true; 2092 return false; 2093 } 2094 finally { 2095 } 2096 } 2097 /** 2098 * @attribute syn 2099 * @aspect GenericsCodegen 2100 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Backend/GenericsCodegen.jrag:482 2101 */ 2102 public String methodTypeSignature() { 2103 ASTNode$State state = state(); 2104 try { 2105 StringBuffer buf = new StringBuffer(); 2106 buf.append("("); 2107 for(int i = 0; i < getNumParameter(); i++) 2108 buf.append(getParameter(i).type().classTypeSignature()); 2109 buf.append(")"); 2110 buf.append(type().classTypeSignature()); 2111 for(int i = 0; i < getNumException(); i++) 2112 buf.append("^" + getException(i).type().classTypeSignature()); 2113 return buf.toString(); 2114 } 2115 finally { 2116 } 2117 } 2118 /** 2119 * @return true if the modifier list includes the SafeVarargs annotation 2120 * @attribute syn 2121 * @aspect SafeVarargs 2122 * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/SafeVarargs.jrag:20 2123 */ 2124 public boolean hasAnnotationSafeVarargs() { 2125 ASTNode$State state = state(); 2126 try { return getModifiers().hasAnnotationSafeVarargs(); } 2127 finally { 2128 } 2129 } 2130 /** 2131 * It is an error if the SafeVarargs annotation is used on something 2132 * that is not a variable arity method or constructor. 2133 * @attribute syn 2134 * @aspect SafeVarargs 2135 * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/SafeVarargs.jrag:56 2136 */ 2137 public boolean hasIllegalAnnotationSafeVarargs() { 2138 ASTNode$State state = state(); 2139 try { return hasAnnotationSafeVarargs() && (!isVariableArity() || (!isFinal() && !isStatic())); } 2140 finally { 2141 } 2142 } 2143 /** 2144 * @attribute syn 2145 * @aspect SuppressWarnings 2146 * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/SuppressWarnings.jrag:24 2147 */ 2148 public boolean suppressWarnings(String type) { 2149 ASTNode$State state = state(); 2150 try { return hasAnnotationSuppressWarnings(type) || withinSuppressWarnings(type); } 2151 finally { 2152 } 2153 } 2154 protected java.util.Map handlesException_TypeDecl_values; 2155 /** 2156 * @attribute inh 2157 * @aspect ExceptionHandling 2158 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ExceptionHandling.jrag:51 2159 */ 2160 @SuppressWarnings({"unchecked", "cast"}) 2161 public boolean handlesException(TypeDecl exceptionType) { 2162 Object _parameters = exceptionType; 2163 if(handlesException_TypeDecl_values == null) handlesException_TypeDecl_values = new java.util.HashMap(4); 2164 if(handlesException_TypeDecl_values.containsKey(_parameters)) { 2165 return ((Boolean)handlesException_TypeDecl_values.get(_parameters)).booleanValue(); 2166 } 2167 ASTNode$State state = state(); 2168 int num = state.boundariesCrossed; 2169 boolean isFinal = this.is$Final(); 2170 boolean handlesException_TypeDecl_value = getParent().Define_boolean_handlesException(this, null, exceptionType); 2171 if(isFinal && num == state().boundariesCrossed){ handlesException_TypeDecl_values.put(_parameters, Boolean.valueOf(handlesException_TypeDecl_value)); } 2172 return handlesException_TypeDecl_value; 2173 } 2174 /** 2175 * @attribute inh 2176 * @aspect LookupMethod 2177 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupMethod.jrag:14 2178 */ 2179 @SuppressWarnings({"unchecked", "cast"}) 2180 public MethodDecl unknownMethod() { 2181 ASTNode$State state = state(); 2182 MethodDecl unknownMethod_value = getParent().Define_MethodDecl_unknownMethod(this, null); 2183 return unknownMethod_value; 2184 } 2185 /** 2186 * @attribute inh 2187 * @aspect SuppressWarnings 2188 * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/SuppressWarnings.jrag:17 2189 */ 2190 @SuppressWarnings({"unchecked", "cast"}) 2191 public boolean withinSuppressWarnings(String s) { 2192 ASTNode$State state = state(); 2193 boolean withinSuppressWarnings_String_value = getParent().Define_boolean_withinSuppressWarnings(this, null, s); 2194 return withinSuppressWarnings_String_value; 2195 } 2196 /** 2197 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:437 2198 * @apilevel internal 2199 */ 2200 public boolean Define_boolean_isDAbefore(ASTNode caller, ASTNode child, Variable v) { 2201 if(caller == getBlockOptNoTransform()) { 2202 return v.isFinal() && (v.isClassVariable() || v.isInstanceVariable()) ? true : isDAbefore(v); 2203 } 2204 else { return getParent().Define_boolean_isDAbefore(this, caller, v); 2205 } 2206 } 2207 /** 2208 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/DefiniteAssignment.jrag:868 2209 * @apilevel internal 2210 */ 2211 public boolean Define_boolean_isDUbefore(ASTNode caller, ASTNode child, Variable v) { 2212 if(caller == getBlockOptNoTransform()) { 2213 return v.isFinal() && (v.isClassVariable() || v.isInstanceVariable()) ? false : true; 2214 } 2215 else { return getParent().Define_boolean_isDUbefore(this, caller, v); 2216 } 2217 } 2218 /** 2219 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/ExceptionHandling.jrag:143 2220 * @apilevel internal 2221 */ 2222 public boolean Define_boolean_handlesException(ASTNode caller, ASTNode child, TypeDecl exceptionType) { 2223 if(caller == getBlockOptNoTransform()) { 2224 return throwsException(exceptionType) || handlesException(exceptionType); 2225 } 2226 else { return getParent().Define_boolean_handlesException(this, caller, exceptionType); 2227 } 2228 } 2229 /** 2230 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/LookupVariable.jrag:46 2231 * @apilevel internal 2232 */ 2233 public SimpleSet Define_SimpleSet_lookupVariable(ASTNode caller, ASTNode child, String name) { 2234 if(caller == getParameterListNoTransform()) { 2235 int childIndex = caller.getIndexOfChild(child); 2236 return parameterDeclaration(name); 2237 } 2238 else if(caller == getBlockOptNoTransform()){ 2239 SimpleSet set = parameterDeclaration(name); 2240 // A declaration of a method parameter name shadows any other variable declarations 2241 if(!set.isEmpty()) return set; 2242 // Delegate to other declarations in scope 2243 return lookupVariable(name); 2244 } 2245 else { return getParent().Define_SimpleSet_lookupVariable(this, caller, name); 2246 } 2247 } 2248 /** 2249 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:271 2250 * @apilevel internal 2251 */ 2252 public boolean Define_boolean_mayBePublic(ASTNode caller, ASTNode child) { 2253 if(caller == getModifiersNoTransform()) { 2254 return true; 2255 } 2256 else { return getParent().Define_boolean_mayBePublic(this, caller); 2257 } 2258 } 2259 /** 2260 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:272 2261 * @apilevel internal 2262 */ 2263 public boolean Define_boolean_mayBeProtected(ASTNode caller, ASTNode child) { 2264 if(caller == getModifiersNoTransform()) { 2265 return true; 2266 } 2267 else { return getParent().Define_boolean_mayBeProtected(this, caller); 2268 } 2269 } 2270 /** 2271 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:273 2272 * @apilevel internal 2273 */ 2274 public boolean Define_boolean_mayBePrivate(ASTNode caller, ASTNode child) { 2275 if(caller == getModifiersNoTransform()) { 2276 return true; 2277 } 2278 else { return getParent().Define_boolean_mayBePrivate(this, caller); 2279 } 2280 } 2281 /** 2282 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:274 2283 * @apilevel internal 2284 */ 2285 public boolean Define_boolean_mayBeAbstract(ASTNode caller, ASTNode child) { 2286 if(caller == getModifiersNoTransform()) { 2287 return true; 2288 } 2289 else { return getParent().Define_boolean_mayBeAbstract(this, caller); 2290 } 2291 } 2292 /** 2293 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:275 2294 * @apilevel internal 2295 */ 2296 public boolean Define_boolean_mayBeStatic(ASTNode caller, ASTNode child) { 2297 if(caller == getModifiersNoTransform()) { 2298 return true; 2299 } 2300 else { return getParent().Define_boolean_mayBeStatic(this, caller); 2301 } 2302 } 2303 /** 2304 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:276 2305 * @apilevel internal 2306 */ 2307 public boolean Define_boolean_mayBeFinal(ASTNode caller, ASTNode child) { 2308 if(caller == getModifiersNoTransform()) { 2309 return true; 2310 } 2311 else { return getParent().Define_boolean_mayBeFinal(this, caller); 2312 } 2313 } 2314 /** 2315 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:277 2316 * @apilevel internal 2317 */ 2318 public boolean Define_boolean_mayBeSynchronized(ASTNode caller, ASTNode child) { 2319 if(caller == getModifiersNoTransform()) { 2320 return true; 2321 } 2322 else { return getParent().Define_boolean_mayBeSynchronized(this, caller); 2323 } 2324 } 2325 /** 2326 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:278 2327 * @apilevel internal 2328 */ 2329 public boolean Define_boolean_mayBeNative(ASTNode caller, ASTNode child) { 2330 if(caller == getModifiersNoTransform()) { 2331 return true; 2332 } 2333 else { return getParent().Define_boolean_mayBeNative(this, caller); 2334 } 2335 } 2336 /** 2337 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/Modifiers.jrag:279 2338 * @apilevel internal 2339 */ 2340 public boolean Define_boolean_mayBeStrictfp(ASTNode caller, ASTNode child) { 2341 if(caller == getModifiersNoTransform()) { 2342 return true; 2343 } 2344 else { return getParent().Define_boolean_mayBeStrictfp(this, caller); 2345 } 2346 } 2347 /** 2348 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/NameCheck.jrag:246 2349 * @apilevel internal 2350 */ 2351 public ASTNode Define_ASTNode_enclosingBlock(ASTNode caller, ASTNode child) { 2352 if(caller == getBlockOptNoTransform()) { 2353 return this; 2354 } 2355 else { return getParent().Define_ASTNode_enclosingBlock(this, caller); 2356 } 2357 } 2358 /** 2359 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/SyntacticClassification.jrag:82 2360 * @apilevel internal 2361 */ 2362 public NameType Define_NameType_nameType(ASTNode caller, ASTNode child) { 2363 if(caller == getExceptionListNoTransform()) { 2364 int childIndex = caller.getIndexOfChild(child); 2365 return NameType.TYPE_NAME; 2366 } 2367 else if(caller == getParameterListNoTransform()) { 2368 int childIndex = caller.getIndexOfChild(child); 2369 return NameType.TYPE_NAME; 2370 } 2371 else if(caller == getTypeAccessNoTransform()) { 2372 return NameType.TYPE_NAME; 2373 } 2374 else { return getParent().Define_NameType_nameType(this, caller); 2375 } 2376 } 2377 /** 2378 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeCheck.jrag:405 2379 * @apilevel internal 2380 */ 2381 public TypeDecl Define_TypeDecl_returnType(ASTNode caller, ASTNode child) { 2382 if(caller == getBlockOptNoTransform()) { 2383 return type(); 2384 } 2385 else { return getParent().Define_TypeDecl_returnType(this, caller); 2386 } 2387 } 2388 /** 2389 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/TypeHierarchyCheck.jrag:142 2390 * @apilevel internal 2391 */ 2392 public boolean Define_boolean_inStaticContext(ASTNode caller, ASTNode child) { 2393 if(caller == getBlockOptNoTransform()) { 2394 return isStatic(); 2395 } 2396 else { return getParent().Define_boolean_inStaticContext(this, caller); 2397 } 2398 } 2399 /** 2400 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/UnreachableStatements.jrag:33 2401 * @apilevel internal 2402 */ 2403 public boolean Define_boolean_reachable(ASTNode caller, ASTNode child) { 2404 if(caller == getBlockOptNoTransform()) { 2405 return true; 2406 } 2407 else { return getParent().Define_boolean_reachable(this, caller); 2408 } 2409 } 2410 /** 2411 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:61 2412 * @apilevel internal 2413 */ 2414 public boolean Define_boolean_isMethodParameter(ASTNode caller, ASTNode child) { 2415 if(caller == getParameterListNoTransform()) { 2416 int childIndex = caller.getIndexOfChild(child); 2417 return true; 2418 } 2419 else { return getParent().Define_boolean_isMethodParameter(this, caller); 2420 } 2421 } 2422 /** 2423 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:62 2424 * @apilevel internal 2425 */ 2426 public boolean Define_boolean_isConstructorParameter(ASTNode caller, ASTNode child) { 2427 if(caller == getParameterListNoTransform()) { 2428 int childIndex = caller.getIndexOfChild(child); 2429 return false; 2430 } 2431 else { return getParent().Define_boolean_isConstructorParameter(this, caller); 2432 } 2433 } 2434 /** 2435 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Frontend/VariableDeclaration.jrag:63 2436 * @apilevel internal 2437 */ 2438 public boolean Define_boolean_isExceptionHandlerParameter(ASTNode caller, ASTNode child) { 2439 if(caller == getParameterListNoTransform()) { 2440 int childIndex = caller.getIndexOfChild(child); 2441 return false; 2442 } 2443 else { return getParent().Define_boolean_isExceptionHandlerParameter(this, caller); 2444 } 2445 } 2446 /** 2447 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/LocalNum.jrag:52 2448 * @apilevel internal 2449 */ 2450 public int Define_int_localNum(ASTNode caller, ASTNode child) { 2451 if(caller == getBlockOptNoTransform()) { 2452 return offsetAfterParameters() + 2453 resultOffset(); 2454 } 2455 else if(caller == getParameterListNoTransform()) { 2456 int index = caller.getIndexOfChild(child); 2457 { 2458 if(index == 0) 2459 return offsetBeforeParameters(); 2460 return getParameter(index-1).localNum() + getParameter(index-1).type().variableSize(); 2461 } 2462 } 2463 else { return getParent().Define_int_localNum(this, caller); 2464 } 2465 } 2466 /** 2467 * @declaredat /home/jesper/svn/JastAddJ/Java1.4Backend/LocalNum.jrag:45 2468 * @apilevel internal 2469 */ 2470 public int Define_int_resultSaveLocalNum(ASTNode caller, ASTNode child) { 2471 if(caller == getBlockOptNoTransform()) { 2472 return offsetAfterParameters(); 2473 } 2474 else { return getParent().Define_int_resultSaveLocalNum(this, caller); 2475 } 2476 } 2477 /** 2478 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/Annotations.jrag:86 2479 * @apilevel internal 2480 */ 2481 public boolean Define_boolean_mayUseAnnotationTarget(ASTNode caller, ASTNode child, String name) { 2482 if(caller == getModifiersNoTransform()) { 2483 return name.equals("METHOD"); 2484 } 2485 else { return getParent().Define_boolean_mayUseAnnotationTarget(this, caller, name); 2486 } 2487 } 2488 /** 2489 * @declaredat /home/jesper/svn/JastAddJ/Java1.5Frontend/VariableArityParameters.jrag:22 2490 * @apilevel internal 2491 */ 2492 public boolean Define_boolean_variableArityValid(ASTNode caller, ASTNode child) { 2493 if(caller == getParameterListNoTransform()) { 2494 int i = caller.getIndexOfChild(child); 2495 return i == getNumParameter() - 1; 2496 } 2497 else { return getParent().Define_boolean_variableArityValid(this, caller); 2498 } 2499 } 2500 /** 2501 * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/PreciseRethrow.jrag:50 2502 * @apilevel internal 2503 */ 2504 public boolean Define_boolean_inhModifiedInScope(ASTNode caller, ASTNode child, Variable var) { 2505 if(caller == getParameterListNoTransform()) { 2506 int childIndex = caller.getIndexOfChild(child); 2507 return getBlock().modifiedInScope(var); 2508 } 2509 else { return getParent().Define_boolean_inhModifiedInScope(this, caller, var); 2510 } 2511 } 2512 /** 2513 * @declaredat /home/jesper/svn/JastAddJ/Java7Frontend/PreciseRethrow.jrag:124 2514 * @apilevel internal 2515 */ 2516 public boolean Define_boolean_isCatchParam(ASTNode caller, ASTNode child) { 2517 if(caller == getParameterListNoTransform()) { 2518 int childIndex = caller.getIndexOfChild(child); 2519 return false; 2520 } 2521 else { return getParent().Define_boolean_isCatchParam(this, caller); 2522 } 2523 } 2524 /** 2525 * @apilevel internal 2526 */ 2527 public ASTNode rewriteTo() { 2528 return super.rewriteTo(); 2529 } 2530 }