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.PrettyPrinter;
014: import de.uka.ilkd.key.java.ProgramElement;
015: import de.uka.ilkd.key.java.SourceElement;
016: import de.uka.ilkd.key.java.Statement;
017: import de.uka.ilkd.key.java.visitor.Visitor;
018: import de.uka.ilkd.key.util.ExtList;
019:
020: /**
021: * Else.
022: */
023:
024: public class Else extends BranchImp {
025:
026: /**
027: * Body.
028: */
029: protected Statement body;
030:
031: /**
032: * Constructor for the transformation of COMPOST ASTs to KeY.
033: * @param children the children of this AST element as KeY classes.
034: * May contain: a Body (as body of Else), Comments
035: */
036: public Else(ExtList children) {
037: super (children);
038: body = (Statement) children.get(Statement.class);
039: }
040:
041: /**
042: * Constructor for the transformation of COMPOST ASTs to KeY.
043: * @param body Statement that is the body of the else part
044: */
045: public Else(Statement body) {
046: this .body = body;
047: }
048:
049: public SourceElement getLastElement() {
050: return body.getLastElement();
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: return (body != null) ? 1 : 0;
059: }
060:
061: /**
062: * Returns the child at the specified index in this node's "virtual"
063: * child array
064: * @param index an index into this node's "virtual" child array
065: * @return the program element at the given position
066: * @exception ArrayIndexOutOfBoundsException if <tt>index</tt> is out
067: * of bounds
068: */
069: public ProgramElement getChildAt(int index) {
070: if (body != null) {
071: if (index == 0)
072: return body;
073: }
074: throw new ArrayIndexOutOfBoundsException();
075: }
076:
077: /**
078: * Get the number of statements in this container.
079: * @return the number of statements.
080: */
081: public int getStatementCount() {
082: return (body != null) ? 1 : 0;
083: }
084:
085: /*
086: Return the statement at the specified index in this node's
087: "virtual" statement array.
088: @param index an index for a statement.
089: @return the statement with the given index.
090: @exception ArrayIndexOutOfBoundsException if <tt>index</tt> is out
091: of bounds.
092: */
093: public Statement getStatementAt(int index) {
094: if (body != null && index == 0) {
095: return body;
096: }
097: throw new ArrayIndexOutOfBoundsException();
098: }
099:
100: /**
101: * The body may be empty (null), to define a fall-through.
102: * Attaching an {@link EmptyStatement} would create a single ";".
103: */
104: public Statement getBody() {
105: return body;
106: }
107:
108: /** calls the corresponding method of a visitor in order to
109: * perform some action/transformation on this element
110: * @param v the Visitor
111: */
112: public void visit(Visitor v) {
113: v.performActionOnElse(this );
114: }
115:
116: public void prettyPrint(PrettyPrinter p) throws java.io.IOException {
117: p.printElse(this);
118: }
119: }
|