JavaParser Source Viewer

Home|JavaParser/com/github/javaparser/ast/expr/ArrayCreationExpr.java
1/*
2 * Copyright (C) 2007-2010 JĂșlio Vilmar Gesser.
3 * Copyright (C) 2011, 2013-2020 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 */
21package com.github.javaparser.ast.expr;
22
23import com.github.javaparser.ast.*;
24import com.github.javaparser.ast.observer.ObservableProperty;
25import com.github.javaparser.ast.type.ArrayType;
26import com.github.javaparser.ast.type.ClassOrInterfaceType;
27import com.github.javaparser.ast.type.Type;
28import com.github.javaparser.ast.visitor.CloneVisitor;
29import com.github.javaparser.ast.visitor.GenericVisitor;
30import com.github.javaparser.ast.visitor.VoidVisitor;
31import com.github.javaparser.metamodel.ArrayCreationExprMetaModel;
32import com.github.javaparser.metamodel.JavaParserMetaModel;
33import com.github.javaparser.metamodel.NonEmptyProperty;
34import java.util.Optional;
35import static com.github.javaparser.StaticJavaParser.parseType;
36import static com.github.javaparser.utils.Utils.assertNotNull;
37import com.github.javaparser.TokenRange;
38import com.github.javaparser.metamodel.OptionalProperty;
39import java.util.function.Consumer;
40import com.github.javaparser.ast.Node;
41import com.github.javaparser.ast.Generated;
42
43/**
44 * {@code new int[5][4][][]} or <code>new int[][]{{1},{2,3}}</code>.
45 *
46 * <br>"int" is the element type.
47 * <br>All the brackets are stored in the levels field, from left to right.
48 *
49 * @author Julio Vilmar Gesser
50 */
51public class ArrayCreationExpr extends Expression {
52
53    @NonEmptyProperty
54    private NodeList<ArrayCreationLevellevels;
55
56    private Type elementType;
57
58    @OptionalProperty
59    private ArrayInitializerExpr initializer;
60
61    public ArrayCreationExpr() {
62        this(null, new ClassOrInterfaceType(), new NodeList<>(), new ArrayInitializerExpr());
63    }
64
65    @AllFieldsConstructor
66    public ArrayCreationExpr(Type elementTypeNodeList<ArrayCreationLevellevelsArrayInitializerExpr initializer) {
67        this(nullelementTypelevelsinitializer);
68    }
69
70    public ArrayCreationExpr(Type elementType) {
71        this(nullelementType, new NodeList<>(), new ArrayInitializerExpr());
72    }
73
74    /**
75     * This constructor is used by the parser and is considered private.
76     */
77    @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
78    public ArrayCreationExpr(TokenRange tokenRangeType elementTypeNodeList<ArrayCreationLevellevelsArrayInitializerExpr initializer) {
79        super(tokenRange);
80        setElementType(elementType);
81        setLevels(levels);
82        setInitializer(initializer);
83        customInitialization();
84    }
85
86    @Override
87    @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
88    public <RAR accept(final GenericVisitor<RAvfinal A arg) {
89        return v.visit(this, arg);
90    }
91
92    @Override
93    @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
94    public <Avoid accept(final VoidVisitor<Avfinal A arg) {
95        v.visit(this, arg);
96    }
97
98    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
99    public Optional<ArrayInitializerExprgetInitializer() {
100        return Optional.ofNullable(initializer);
101    }
102
103    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
104    public Type getElementType() {
105        return elementType;
106    }
107
108    /**
109     * Sets the initializer
110     *
111     * @param initializer the initializer, can be null
112     * @return this, the ArrayCreationExpr
113     */
114    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
115    public ArrayCreationExpr setInitializer(final ArrayInitializerExpr initializer) {
116        if (initializer == this.initializer) {
117            return (ArrayCreationExpr) this;
118        }
119        notifyPropertyChange(ObservableProperty.INITIALIZER, this.initializerinitializer);
120        if (this.initializer != null)
121            this.initializer.setParentNode(null);
122        this.initializer = initializer;
123        setAsParentNodeOf(initializer);
124        return this;
125    }
126
127    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
128    public ArrayCreationExpr setElementType(final Type elementType) {
129        assertNotNull(elementType);
130        if (elementType == this.elementType) {
131            return (ArrayCreationExpr) this;
132        }
133        notifyPropertyChange(ObservableProperty.ELEMENT_TYPE, this.elementTypeelementType);
134        if (this.elementType != null)
135            this.elementType.setParentNode(null);
136        this.elementType = elementType;
137        setAsParentNodeOf(elementType);
138        return this;
139    }
140
141    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
142    public NodeList<ArrayCreationLevelgetLevels() {
143        return levels;
144    }
145
146    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
147    public ArrayCreationExpr setLevels(final NodeList<ArrayCreationLevellevels) {
148        assertNotNull(levels);
149        if (levels == this.levels) {
150            return (ArrayCreationExpr) this;
151        }
152        notifyPropertyChange(ObservableProperty.LEVELS, this.levelslevels);
153        if (this.levels != null)
154            this.levels.setParentNode(null);
155        this.levels = levels;
156        setAsParentNodeOf(levels);
157        return this;
158    }
159
160    /**
161     * Takes the element type and wraps it in an ArrayType for every array creation level.
162     */
163    public Type createdType() {
164        Type result = elementType;
165        for (int i = 0i < levels.size(); i++) {
166            result = new ArrayType(resultArrayType.Origin.TYPE, new NodeList<>());
167        }
168        return result;
169    }
170
171    /**
172     * Sets this type to this class and try to import it to the {@link CompilationUnit} if needed
173     *
174     * @param typeClass the type
175     * @return this
176     */
177    public ArrayCreationExpr setElementType(Class<?> typeClass) {
178        tryAddImportToParentCompilationUnit(typeClass);
179        return setElementType(parseType(typeClass.getSimpleName()));
180    }
181
182    public ArrayCreationExpr setElementType(final String type) {
183        return setElementType(parseType(type));
184    }
185
186    @Override
187    @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
188    public boolean remove(Node node) {
189        if (node == null)
190            return false;
191        if (initializer != null) {
192            if (node == initializer) {
193                removeInitializer();
194                return true;
195            }
196        }
197        for (int i = 0i < levels.size(); i++) {
198            if (levels.get(i) == node) {
199                levels.remove(i);
200                return true;
201            }
202        }
203        return super.remove(node);
204    }
205
206    @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
207    public ArrayCreationExpr removeInitializer() {
208        return setInitializer((ArrayInitializerExprnull);
209    }
210
211    @Override
212    @Generated("com.github.javaparser.generator.core.node.CloneGenerator")
213    public ArrayCreationExpr clone() {
214        return (ArrayCreationExpraccept(new CloneVisitor(), null);
215    }
216
217    @Override
218    @Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator")
219    public ArrayCreationExprMetaModel getMetaModel() {
220        return JavaParserMetaModel.arrayCreationExprMetaModel;
221    }
222
223    @Override
224    @Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator")
225    public boolean replace(Node nodeNode replacementNode) {
226        if (node == null)
227            return false;
228        if (node == elementType) {
229            setElementType((TypereplacementNode);
230            return true;
231        }
232        if (initializer != null) {
233            if (node == initializer) {
234                setInitializer((ArrayInitializerExprreplacementNode);
235                return true;
236            }
237        }
238        for (int i = 0i < levels.size(); i++) {
239            if (levels.get(i) == node) {
240                levels.set(i, (ArrayCreationLevelreplacementNode);
241                return true;
242            }
243        }
244        return super.replace(nodereplacementNode);
245    }
246
247    @Override
248    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
249    public boolean isArrayCreationExpr() {
250        return true;
251    }
252
253    @Override
254    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
255    public ArrayCreationExpr asArrayCreationExpr() {
256        return this;
257    }
258
259    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
260    public void ifArrayCreationExpr(Consumer<ArrayCreationExpraction) {
261        action.accept(this);
262    }
263
264    @Override
265    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
266    public Optional<ArrayCreationExprtoArrayCreationExpr() {
267        return Optional.of(this);
268    }
269}
270
MembersX
ArrayCreationExpr:ifArrayCreationExpr
ArrayCreationExpr:setLevels
ArrayCreationExpr:setElementType
ArrayCreationExpr:isArrayCreationExpr
ArrayCreationExpr:levels
ArrayCreationExpr:createdType:Block:result
ArrayCreationExpr:getMetaModel
ArrayCreationExpr:ArrayCreationExpr
ArrayCreationExpr:toArrayCreationExpr
ArrayCreationExpr:getElementType
ArrayCreationExpr:initializer
ArrayCreationExpr:createdType
ArrayCreationExpr:asArrayCreationExpr
ArrayCreationExpr:setInitializer
ArrayCreationExpr:getLevels
ArrayCreationExpr:removeInitializer
ArrayCreationExpr:replace
ArrayCreationExpr:clone
ArrayCreationExpr:elementType
ArrayCreationExpr:accept
ArrayCreationExpr:getInitializer
ArrayCreationExpr:remove
Members
X