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.reference;
012:
013: import de.uka.ilkd.key.java.ArrayOfExpression;
014: import de.uka.ilkd.key.java.Expression;
015: import de.uka.ilkd.key.java.JavaNonTerminalProgramElement;
016: import de.uka.ilkd.key.java.PositionInfo;
017: import de.uka.ilkd.key.java.ProgramElement;
018: import de.uka.ilkd.key.util.ExtList;
019:
020: /**
021: * Occurs in a constructor declaration as the first statement
022: * as this(...) or super(...) reference.
023: * The Reference knows the constructor declaration it refers to.
024: */
025:
026: public abstract class SpecialConstructorReference extends
027: JavaNonTerminalProgramElement implements ConstructorReference {
028:
029: /**
030: * Arguments
031: */
032: protected final ArrayOfExpression arguments;
033:
034: /**
035: * Special constructor reference.
036: */
037: public SpecialConstructorReference() {
038: this .arguments = null;
039: }
040:
041: /**
042: * Special constructor reference.
043: * @param arguments an expression mutable list.
044: */
045: public SpecialConstructorReference(Expression[] arguments) {
046: this .arguments = new ArrayOfExpression(arguments);
047: }
048:
049: /**
050: * Special constructor reference.
051: * @param arguments an expression mutable list.
052: */
053: public SpecialConstructorReference(ArrayOfExpression arguments) {
054: this .arguments = arguments;
055: }
056:
057: /**
058: * Constructor for the transformation of COMPOST ASTs to KeY.
059: * @param children the children of this AST element as KeY classes.
060: * May contain:
061: * several of Expression (as initializers of the array),
062: * Comments
063: */
064: public SpecialConstructorReference(ExtList children) {
065: super (children);
066: this .arguments = new ArrayOfExpression((Expression[]) children
067: .collect(Expression.class));
068: }
069:
070: /**
071: * Constructor for the transformation of COMPOST ASTs to KeY.
072: * @param children the children of this AST element as KeY classes.
073: * May contain:
074: * several of Expression (as initializers of the array),
075: * Comments
076: */
077: public SpecialConstructorReference(ExtList children, PositionInfo pi) {
078: super (children, pi);
079: this .arguments = new ArrayOfExpression((Expression[]) children
080: .collect(Expression.class));
081: }
082:
083: /**
084: * Returns the number of children of this node.
085: * @return an int giving the number of children of this node
086: */
087: public int getChildCount() {
088: return (arguments != null) ? arguments.size() : 0;
089: }
090:
091: /**
092: * Returns the child at the specified index in this node's "virtual"
093: * child array
094: * @param index an index into this node's "virtual" child array
095: * @return the program element at the given position
096: * @exception ArrayIndexOutOfBoundsException if <tt>index</tt> is out
097: * of bounds
098: */
099: public ProgramElement getChildAt(int index) {
100: if (arguments != null) {
101: return arguments.getExpression(index);
102: }
103: throw new ArrayIndexOutOfBoundsException();
104: }
105:
106: /**
107: * Get the number of expressions in this container.
108: * @return the number of expressions.
109: */
110:
111: public int getExpressionCount() {
112: return (arguments != null) ? arguments.size() : 0;
113: }
114:
115: /*
116: Return the expression at the specified index in this node's
117: "virtual" expression array.
118: @param index an index for an expression.
119: @return the expression with the given index.
120: @exception ArrayIndexOutOfBoundsException if <tt>index</tt> is out
121: of bounds.
122: */
123: public Expression getExpressionAt(int index) {
124: if (arguments != null) {
125: return arguments.getExpression(index);
126: }
127: throw new ArrayIndexOutOfBoundsException();
128: }
129:
130: /**
131: * Get arguments.
132: * @return the expression mutable list.
133: */
134:
135: public ArrayOfExpression getArguments() {
136: return arguments;
137: }
138:
139: }
|