JavaParser Source Viewer

Home|JavaParser/com/github/javaparser/ast/expr/UnaryExpr.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.AllFieldsConstructor;
24import com.github.javaparser.ast.nodeTypes.NodeWithExpression;
25import com.github.javaparser.ast.observer.ObservableProperty;
26import com.github.javaparser.ast.visitor.GenericVisitor;
27import com.github.javaparser.ast.visitor.VoidVisitor;
28import static com.github.javaparser.utils.Utils.assertNotNull;
29import com.github.javaparser.ast.Node;
30import com.github.javaparser.ast.visitor.CloneVisitor;
31import com.github.javaparser.metamodel.DerivedProperty;
32import com.github.javaparser.metamodel.UnaryExprMetaModel;
33import com.github.javaparser.metamodel.JavaParserMetaModel;
34import com.github.javaparser.printer.Printable;
35import com.github.javaparser.TokenRange;
36import java.util.function.Consumer;
37import java.util.Optional;
38import com.github.javaparser.ast.Generated;
39
40/**
41 * An expression where an operator is applied to a single expression.
42 * It supports the operators that are found in the UnaryExpr.Operator enum.
43 * <br>{@code 11++}
44 * <br>{@code ++11}
45 * <br>{@code ~1}
46 * <br>{@code -333}
47 *
48 * @author Julio Vilmar Gesser
49 */
50public class UnaryExpr extends Expression implements NodeWithExpression<UnaryExpr> {
51
52    public enum Operator implements Printable {
53
54        PLUS("+", false),
55        MINUS("-", false),
56        PREFIX_INCREMENT("++", false),
57        PREFIX_DECREMENT("--", false),
58        LOGICAL_COMPLEMENT("!", false),
59        BITWISE_COMPLEMENT("~", false),
60        POSTFIX_INCREMENT("++", true),
61        POSTFIX_DECREMENT("--", true);
62
63        private final String codeRepresentation;
64
65        private final boolean isPostfix;
66
67        Operator(String codeRepresentationboolean isPostfix) {
68            this.codeRepresentation = codeRepresentation;
69            this.isPostfix = isPostfix;
70        }
71
72        public String asString() {
73            return codeRepresentation;
74        }
75
76        public boolean isPostfix() {
77            return isPostfix;
78        }
79
80        public boolean isPrefix() {
81            return !isPostfix();
82        }
83    }
84
85    private Expression expression;
86
87    private Operator operator;
88
89    public UnaryExpr() {
90        this(null, new IntegerLiteralExpr(), Operator.POSTFIX_INCREMENT);
91    }
92
93    @AllFieldsConstructor
94    public UnaryExpr(final Expression expressionfinal Operator operator) {
95        this(nullexpressionoperator);
96    }
97
98    /**
99     * This constructor is used by the parser and is considered private.
100     */
101    @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
102    public UnaryExpr(TokenRange tokenRangeExpression expressionOperator operator) {
103        super(tokenRange);
104        setExpression(expression);
105        setOperator(operator);
106        customInitialization();
107    }
108
109    @Override
110    @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
111    public <RAR accept(final GenericVisitor<RAvfinal A arg) {
112        return v.visit(this, arg);
113    }
114
115    @Override
116    @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
117    public <Avoid accept(final VoidVisitor<Avfinal A arg) {
118        v.visit(this, arg);
119    }
120
121    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
122    public Expression getExpression() {
123        return expression;
124    }
125
126    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
127    public Operator getOperator() {
128        return operator;
129    }
130
131    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
132    public UnaryExpr setExpression(final Expression expression) {
133        assertNotNull(expression);
134        if (expression == this.expression) {
135            return (UnaryExpr) this;
136        }
137        notifyPropertyChange(ObservableProperty.EXPRESSION, this.expressionexpression);
138        if (this.expression != null)
139            this.expression.setParentNode(null);
140        this.expression = expression;
141        setAsParentNodeOf(expression);
142        return this;
143    }
144
145    @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
146    public UnaryExpr setOperator(final Operator operator) {
147        assertNotNull(operator);
148        if (operator == this.operator) {
149            return (UnaryExpr) this;
150        }
151        notifyPropertyChange(ObservableProperty.OPERATOR, this.operatoroperator);
152        this.operator = operator;
153        return this;
154    }
155
156    @Override
157    @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
158    public boolean remove(Node node) {
159        if (node == null)
160            return false;
161        return super.remove(node);
162    }
163
164    @DerivedProperty
165    public boolean isPostfix() {
166        return operator.isPostfix();
167    }
168
169    @DerivedProperty
170    public boolean isPrefix() {
171        return !isPostfix();
172    }
173
174    @Override
175    @Generated("com.github.javaparser.generator.core.node.CloneGenerator")
176    public UnaryExpr clone() {
177        return (UnaryExpraccept(new CloneVisitor(), null);
178    }
179
180    @Override
181    @Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator")
182    public UnaryExprMetaModel getMetaModel() {
183        return JavaParserMetaModel.unaryExprMetaModel;
184    }
185
186    @Override
187    @Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator")
188    public boolean replace(Node nodeNode replacementNode) {
189        if (node == null)
190            return false;
191        if (node == expression) {
192            setExpression((ExpressionreplacementNode);
193            return true;
194        }
195        return super.replace(nodereplacementNode);
196    }
197
198    @Override
199    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
200    public boolean isUnaryExpr() {
201        return true;
202    }
203
204    @Override
205    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
206    public UnaryExpr asUnaryExpr() {
207        return this;
208    }
209
210    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
211    public void ifUnaryExpr(Consumer<UnaryExpraction) {
212        action.accept(this);
213    }
214
215    @Override
216    @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
217    public Optional<UnaryExprtoUnaryExpr() {
218        return Optional.of(this);
219    }
220}
221
MembersX
UnaryExpr:getExpression
UnaryExpr:isUnaryExpr
UnaryExpr:Operator:PLUS
UnaryExpr:Operator:PREFIX_INCREMENT
UnaryExpr:setOperator
UnaryExpr:Operator:codeRepresentation
UnaryExpr:remove
UnaryExpr:expression
UnaryExpr:Operator:isPostfix
UnaryExpr:Operator:Operator
UnaryExpr:Operator:LOGICAL_COMPLEMENT
UnaryExpr:Operator:POSTFIX_INCREMENT
UnaryExpr:UnaryExpr
UnaryExpr:toUnaryExpr
UnaryExpr:getMetaModel
UnaryExpr:Operator:POSTFIX_DECREMENT
UnaryExpr:asUnaryExpr
UnaryExpr:Operator:MINUS
UnaryExpr:Operator:PREFIX_DECREMENT
UnaryExpr:accept
UnaryExpr:setExpression
UnaryExpr:ifUnaryExpr
UnaryExpr:clone
UnaryExpr:isPrefix
UnaryExpr:replace
UnaryExpr:getOperator
UnaryExpr:isPostfix
UnaryExpr:Operator:BITWISE_COMPLEMENT
UnaryExpr:Operator:asString
UnaryExpr:operator
UnaryExpr:Operator:isPrefix
Members
X