001: // This file is part of KeY - Integrated Deductive Software Design
002: // Copyright (C) 2001-2007 Universitaet Karlsruhe, Germany
003: // Universitaet Koblenz-Landau, Germany
004: // Chalmers University of Technology, Sweden
005: //
006: // The KeY system is protected by the GNU General Public License.
007: // See LICENSE.TXT for details.
008: //
009: //
010:
011: package de.uka.ilkd.key.java.statement;
012:
013: import de.uka.ilkd.key.java.*;
014: import de.uka.ilkd.key.java.visitor.Visitor;
015: import de.uka.ilkd.key.util.ExtList;
016:
017: /**
018: * Finally.
019: *
020: */
021: public class Finally extends BranchImp {
022:
023: /**
024: * Body.
025: */
026: protected StatementBlock body;
027:
028: /**
029: * Finally.
030: */
031: public Finally() {
032: body = null;
033: }
034:
035: /**
036: * Finally.
037: * @param body a statement.
038: */
039: public Finally(StatementBlock body) {
040: this .body = body;
041: }
042:
043: /**
044: * Constructor for the transformation of COMPOST ASTs to KeY.
045: * @param children the children of this AST element as KeY classes.
046: * May contain: a Body (as body of the Finally), Comments
047: */
048: public Finally(ExtList children) {
049: super (children);
050: body = (StatementBlock) children.get(StatementBlock.class);
051: }
052:
053: /**
054: * Returns the number of children of this node.
055: * @return an int giving the number of children of this node
056: */
057: public int getChildCount() {
058: int result = 0;
059: if (body != null)
060: result++;
061: return result;
062: }
063:
064: /**
065: * Returns the child at the specified index in this node's "virtual"
066: * child array
067: * @param index an index into this node's "virtual" child array
068: * @return the program element at the given position
069: * @exception ArrayIndexOutOfBoundsException if <tt>index</tt> is out
070: * of bounds
071: */
072: public ProgramElement getChildAt(int index) {
073: if (body != null) {
074: if (index == 0)
075: return body;
076: index--;
077: }
078: throw new ArrayIndexOutOfBoundsException();
079: }
080:
081: /**
082: * Get the number of statements in this container.
083: * @return the number of statements.
084: */
085: public int getStatementCount() {
086: return (body != null) ? 1 : 0;
087: }
088:
089: /*
090: Return the statement at the specified index in this node's
091: "virtual" statement array.
092: @param index an index for a statement.
093: @return the statement with the given index.
094: @exception ArrayIndexOutOfBoundsException if <tt>index</tt> is out
095: of bounds.
096: */
097: public Statement getStatementAt(int index) {
098: if (body != null && index == 0) {
099: return body;
100: }
101: throw new ArrayIndexOutOfBoundsException();
102: }
103:
104: /**
105: * Get body.
106: * @return the statement.
107: */
108: public Statement getBody() {
109: return body;
110: }
111:
112: public SourceElement getLastElement() {
113: return body;
114: }
115:
116: /** calls the corresponding method of a visitor in order to
117: * perform some action/transformation on this element
118: * @param v the Visitor
119: */
120: public void visit(Visitor v) {
121: v.performActionOnFinally(this );
122: }
123:
124: public void prettyPrint(PrettyPrinter p) throws java.io.IOException {
125: p.printFinally(this);
126: }
127: }
|