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