Home | History | Annotate | Download | only in expr
      1 /*
      2  * Copyright (C) 2007-2010 Jlio Vilmar Gesser.
      3  * Copyright (C) 2011, 2013-2016 The JavaParser Team.
      4  *
      5  * This file is part of JavaParser.
      6  *
      7  * JavaParser can be used either under the terms of
      8  * a) the GNU Lesser General Public License as published by
      9  *     the Free Software Foundation, either version 3 of the License, or
     10  *     (at your option) any later version.
     11  * b) the terms of the Apache License
     12  *
     13  * You should have received a copy of both licenses in LICENCE.LGPL and
     14  * LICENCE.APACHE. Please refer to those files for details.
     15  *
     16  * JavaParser is distributed in the hope that it will be useful,
     17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     19  * GNU Lesser General Public License for more details.
     20  */
     21 package com.github.javaparser.ast.expr;
     22 
     23 import com.github.javaparser.ast.AllFieldsConstructor;
     24 import com.github.javaparser.ast.NodeList;
     25 import com.github.javaparser.ast.observer.ObservableProperty;
     26 import com.github.javaparser.ast.visitor.GenericVisitor;
     27 import com.github.javaparser.ast.visitor.VoidVisitor;
     28 import java.util.Arrays;
     29 import java.util.List;
     30 import static com.github.javaparser.utils.Utils.assertNotNull;
     31 import com.github.javaparser.ast.Node;
     32 import com.github.javaparser.ast.visitor.CloneVisitor;
     33 import com.github.javaparser.metamodel.ArrayInitializerExprMetaModel;
     34 import com.github.javaparser.metamodel.JavaParserMetaModel;
     35 import javax.annotation.Generated;
     36 import com.github.javaparser.TokenRange;
     37 import java.util.function.Consumer;
     38 import java.util.Optional;
     39 
     40 /**
     41  * The initialization of an array. In the following sample, the outer { } is an ArrayInitializerExpr.
     42  * It has two expressions inside: two ArrayInitializerExprs.
     43  * These have two expressions each, one has 1 and 1, the other two and two.
     44  * <br/><code>new int[][]{{1, 1}, {2, 2}};</code>
     45  *
     46  * @author Julio Vilmar Gesser
     47  */
     48 public final class ArrayInitializerExpr extends Expression {
     49 
     50     private NodeList<Expression> values;
     51 
     52     public ArrayInitializerExpr() {
     53         this(null, new NodeList<>());
     54     }
     55 
     56     @AllFieldsConstructor
     57     public ArrayInitializerExpr(NodeList<Expression> values) {
     58         this(null, values);
     59     }
     60 
     61     /**
     62      * This constructor is used by the parser and is considered private.
     63      */
     64     @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
     65     public ArrayInitializerExpr(TokenRange tokenRange, NodeList<Expression> values) {
     66         super(tokenRange);
     67         setValues(values);
     68         customInitialization();
     69     }
     70 
     71     @Override
     72     @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
     73     public <R, A> R accept(final GenericVisitor<R, A> v, final A arg) {
     74         return v.visit(this, arg);
     75     }
     76 
     77     @Override
     78     @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
     79     public <A> void accept(final VoidVisitor<A> v, final A arg) {
     80         v.visit(this, arg);
     81     }
     82 
     83     @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
     84     public NodeList<Expression> getValues() {
     85         return values;
     86     }
     87 
     88     @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
     89     public ArrayInitializerExpr setValues(final NodeList<Expression> values) {
     90         assertNotNull(values);
     91         if (values == this.values) {
     92             return (ArrayInitializerExpr) this;
     93         }
     94         notifyPropertyChange(ObservableProperty.VALUES, this.values, values);
     95         if (this.values != null)
     96             this.values.setParentNode(null);
     97         this.values = values;
     98         setAsParentNodeOf(values);
     99         return this;
    100     }
    101 
    102     @Override
    103     @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
    104     public boolean remove(Node node) {
    105         if (node == null)
    106             return false;
    107         for (int i = 0; i < values.size(); i++) {
    108             if (values.get(i) == node) {
    109                 values.remove(i);
    110                 return true;
    111             }
    112         }
    113         return super.remove(node);
    114     }
    115 
    116     @Override
    117     @Generated("com.github.javaparser.generator.core.node.CloneGenerator")
    118     public ArrayInitializerExpr clone() {
    119         return (ArrayInitializerExpr) accept(new CloneVisitor(), null);
    120     }
    121 
    122     @Override
    123     @Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator")
    124     public ArrayInitializerExprMetaModel getMetaModel() {
    125         return JavaParserMetaModel.arrayInitializerExprMetaModel;
    126     }
    127 
    128     @Override
    129     @Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator")
    130     public boolean replace(Node node, Node replacementNode) {
    131         if (node == null)
    132             return false;
    133         for (int i = 0; i < values.size(); i++) {
    134             if (values.get(i) == node) {
    135                 values.set(i, (Expression) replacementNode);
    136                 return true;
    137             }
    138         }
    139         return super.replace(node, replacementNode);
    140     }
    141 
    142     @Override
    143     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    144     public boolean isArrayInitializerExpr() {
    145         return true;
    146     }
    147 
    148     @Override
    149     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    150     public ArrayInitializerExpr asArrayInitializerExpr() {
    151         return this;
    152     }
    153 
    154     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    155     public void ifArrayInitializerExpr(Consumer<ArrayInitializerExpr> action) {
    156         action.accept(this);
    157     }
    158 
    159     @Override
    160     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    161     public Optional<ArrayInitializerExpr> toArrayInitializerExpr() {
    162         return Optional.of(this);
    163     }
    164 }
    165