summaryrefslogtreecommitdiff
path: root/src/main/java/io/devnulllabs/openjava/ptree/ArrayAllocationExpression.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/io/devnulllabs/openjava/ptree/ArrayAllocationExpression.java')
-rw-r--r--src/main/java/io/devnulllabs/openjava/ptree/ArrayAllocationExpression.java151
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);
+ }
+
+}