diff options
Diffstat (limited to 'src/main/java/io/devnulllabs/openjava/ptree/ArrayAllocationExpression.java')
-rw-r--r-- | src/main/java/io/devnulllabs/openjava/ptree/ArrayAllocationExpression.java | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/src/main/java/io/devnulllabs/openjava/ptree/ArrayAllocationExpression.java b/src/main/java/io/devnulllabs/openjava/ptree/ArrayAllocationExpression.java new file mode 100644 index 0000000..f5ad74d --- /dev/null +++ b/src/main/java/io/devnulllabs/openjava/ptree/ArrayAllocationExpression.java @@ -0,0 +1,151 @@ +/* + * ArrayAllocationExpression.java 1.0 + * + * + * Jun 20, 1997 by mich + * Sep 29, 1997 by bv + * Oct 10, 1997 by mich + * + * @see io.devnulllabs.openjava.ptree.ParseTree + * @version 1.0 last updated: Oct 10, 1997 + * @author Michiaki Tatsubori + */ +package io.devnulllabs.openjava.ptree; + +import io.devnulllabs.openjava.mop.Environment; +import io.devnulllabs.openjava.mop.OJClass; +import io.devnulllabs.openjava.ptree.util.ParseTreeVisitor; + +/** + * The <code>ArrayAllocationExpression</code> class represents + * an expression which allocates a new array object. + * <br> + * This expression is like: + * <br><blockquote><pre> + * new Object[2][3] + * </pre></blockquote><br> + * or: + * <br><blockquote><pre> + * new String[]{ "this", "is", "a", "test" } + * </pre></blockquote><br> + * The latter is supported from JDK 1.1. + * + * @see io.devnulllabs.openjava.ptree.Expression + * @see io.devnulllabs.openjava.ptree.TypeName + * @see io.devnulllabs.openjava.ptree.ExpressionList + * @see io.devnulllabs.openjava.ptree.ArrayInitializer + */ +public class ArrayAllocationExpression extends NonLeaf implements Expression { + + /** + * Allocates a new ptree object. + * + * @param typename the type name. + * @param dimlist the dimension expression list. + */ + public ArrayAllocationExpression( + TypeName typename, + ExpressionList dimlist) { + this(typename, dimlist, null); + } + + /** + * Allocates a new ptree object. + * + * @param typename the type name. + * @param dimlist the dimension expression list. + * @param ainit the array initializer. + * If this is null, no initializer will be + * provided this allocation with. + */ + public ArrayAllocationExpression( + TypeName typename, + ExpressionList dimlist, + ArrayInitializer ainit) { + super(); + if (dimlist == null) + dimlist = new ExpressionList(); + set(typename, dimlist, ainit); + } + + public ArrayAllocationExpression(OJClass type, ExpressionList args) { + this(TypeName.forOJClass(type), args); + } + + public ArrayAllocationExpression( + OJClass type, + ExpressionList args, + ArrayInitializer ainit) { + this(TypeName.forOJClass(type), args, ainit); + } + + ArrayAllocationExpression() { + super(); + } + + /** + * Gets the type name of the array. + * + * @return the type name of the array. + */ + public TypeName getTypeName() { + return (TypeName) elementAt(0); + } + + /** + * Sets the type name of the array. + * + * @param typename the type name of the array. + */ + public void setTypeName(TypeName typename) { + setElementAt(typename, 0); + } + + /** + * Gets the dimexpr list of the array. + * + * @return the dimexpr list of the array. + */ + public ExpressionList getDimExprList() { + return (ExpressionList) elementAt(1); + } + + /** + * Sets the dimexpr list of the array. + * + * @param dimlist the dimexpr list of the array. + */ + public void setDimExprList(ExpressionList dimlist) { + setElementAt(dimlist, 1); + } + + /** + * Gets the initializer of this array allocation. + * + * @return the initializer. + */ + public ArrayInitializer getInitializer() { + return (ArrayInitializer) elementAt(2); + } + + /** + * Sets the initializer of this array allocation. + * + * @param ainit the initializer. + * If this is null, no initializer will be set. + */ + public void setInitializer(ArrayInitializer ainit) { + setElementAt(ainit, 2); + } + + public OJClass getType(Environment env) throws Exception { + TypeName tname = getTypeName(); + String dims = TypeName.stringFromDimension(getDimExprList().size()); + return env.lookupClass(env.toQualifiedName(tname + dims)); + } + + public void accept(ParseTreeVisitor v) throws ParseTreeException { + v.visit(this); + } + +} |