1501 } finally { |
1501 } finally { |
1502 topLevel = null; |
1502 topLevel = null; |
1503 } |
1503 } |
1504 } |
1504 } |
1505 public void visitClassDef(JCClassDecl node) { |
1505 public void visitClassDef(JCClassDecl node) { |
|
1506 super.visitClassDef(node); |
|
1507 // remove generated constructor that may have been added during attribution: |
|
1508 List<JCTree> beforeConstructor = List.nil(); |
|
1509 List<JCTree> defs = node.defs; |
|
1510 while (defs.nonEmpty() && !defs.head.hasTag(Tag.METHODDEF)) { |
|
1511 beforeConstructor = beforeConstructor.prepend(defs.head); |
|
1512 defs = defs.tail; |
|
1513 } |
|
1514 if (defs.nonEmpty() && |
|
1515 (((JCMethodDecl) defs.head).mods.flags & Flags.GENERATEDCONSTR) != 0) { |
|
1516 defs = defs.tail; |
|
1517 while (beforeConstructor.nonEmpty()) { |
|
1518 defs = defs.prepend(beforeConstructor.head); |
|
1519 beforeConstructor = beforeConstructor.tail; |
|
1520 } |
|
1521 node.defs = defs; |
|
1522 } |
1506 if (node.sym != null) { |
1523 if (node.sym != null) { |
1507 node.sym.completer = new ImplicitCompleter(topLevel); |
1524 node.sym.completer = new ImplicitCompleter(topLevel); |
1508 } |
1525 } |
1509 node.sym = null; |
1526 node.sym = null; |
1510 super.visitClassDef(node); |
|
1511 } |
1527 } |
1512 public void visitMethodDef(JCMethodDecl node) { |
1528 public void visitMethodDef(JCMethodDecl node) { |
|
1529 // remove super constructor call that may have been added during attribution: |
|
1530 if (TreeInfo.isConstructor(node) && node.sym != null && node.sym.owner.isEnum() && |
|
1531 node.body.stats.nonEmpty() && TreeInfo.isSuperCall(node.body.stats.head) && |
|
1532 node.body.stats.head.pos == node.body.pos) { |
|
1533 node.body.stats = node.body.stats.tail; |
|
1534 } |
1513 node.sym = null; |
1535 node.sym = null; |
1514 super.visitMethodDef(node); |
1536 super.visitMethodDef(node); |
1515 } |
1537 } |
1516 public void visitVarDef(JCVariableDecl node) { |
1538 public void visitVarDef(JCVariableDecl node) { |
1517 node.sym = null; |
1539 node.sym = null; |