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.observer.ObservableProperty;
     25 import com.github.javaparser.ast.visitor.GenericVisitor;
     26 import com.github.javaparser.ast.visitor.VoidVisitor;
     27 import java.util.Optional;
     28 import com.github.javaparser.ast.Node;
     29 import com.github.javaparser.ast.visitor.CloneVisitor;
     30 import com.github.javaparser.metamodel.EnclosedExprMetaModel;
     31 import com.github.javaparser.metamodel.JavaParserMetaModel;
     32 import javax.annotation.Generated;
     33 import com.github.javaparser.TokenRange;
     34 import static com.github.javaparser.utils.Utils.assertNotNull;
     35 import java.util.function.Consumer;
     36 
     37 /**
     38  * An expression between ( ).
     39  * <br/><code>(1+1)</code>
     40  *
     41  * @author Julio Vilmar Gesser
     42  */
     43 public final class EnclosedExpr extends Expression {
     44 
     45     private Expression inner;
     46 
     47     public EnclosedExpr() {
     48         this(null, new StringLiteralExpr());
     49     }
     50 
     51     @AllFieldsConstructor
     52     public EnclosedExpr(final Expression inner) {
     53         this(null, inner);
     54     }
     55 
     56     /**
     57      * This constructor is used by the parser and is considered private.
     58      */
     59     @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
     60     public EnclosedExpr(TokenRange tokenRange, Expression inner) {
     61         super(tokenRange);
     62         setInner(inner);
     63         customInitialization();
     64     }
     65 
     66     @Override
     67     @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
     68     public <R, A> R accept(final GenericVisitor<R, A> v, final A arg) {
     69         return v.visit(this, arg);
     70     }
     71 
     72     @Override
     73     @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
     74     public <A> void accept(final VoidVisitor<A> v, final A arg) {
     75         v.visit(this, arg);
     76     }
     77 
     78     @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
     79     public Expression getInner() {
     80         return inner;
     81     }
     82 
     83     /**
     84      * Sets the inner expression
     85      *
     86      * @param inner the inner expression, can be null
     87      * @return this, the EnclosedExpr
     88      */
     89     @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
     90     public EnclosedExpr setInner(final Expression inner) {
     91         assertNotNull(inner);
     92         if (inner == this.inner) {
     93             return (EnclosedExpr) this;
     94         }
     95         notifyPropertyChange(ObservableProperty.INNER, this.inner, inner);
     96         if (this.inner != null)
     97             this.inner.setParentNode(null);
     98         this.inner = inner;
     99         setAsParentNodeOf(inner);
    100         return this;
    101     }
    102 
    103     @Override
    104     @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
    105     public boolean remove(Node node) {
    106         if (node == null)
    107             return false;
    108         return super.remove(node);
    109     }
    110 
    111     @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
    112     public EnclosedExpr removeInner() {
    113         return setInner((Expression) null);
    114     }
    115 
    116     @Override
    117     @Generated("com.github.javaparser.generator.core.node.CloneGenerator")
    118     public EnclosedExpr clone() {
    119         return (EnclosedExpr) accept(new CloneVisitor(), null);
    120     }
    121 
    122     @Override
    123     @Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator")
    124     public EnclosedExprMetaModel getMetaModel() {
    125         return JavaParserMetaModel.enclosedExprMetaModel;
    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         if (node == inner) {
    134             setInner((Expression) replacementNode);
    135             return true;
    136         }
    137         return super.replace(node, replacementNode);
    138     }
    139 
    140     @Override
    141     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    142     public boolean isEnclosedExpr() {
    143         return true;
    144     }
    145 
    146     @Override
    147     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    148     public EnclosedExpr asEnclosedExpr() {
    149         return this;
    150     }
    151 
    152     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    153     public void ifEnclosedExpr(Consumer<EnclosedExpr> action) {
    154         action.accept(this);
    155     }
    156 
    157     @Override
    158     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    159     public Optional<EnclosedExpr> toEnclosedExpr() {
    160         return Optional.of(this);
    161     }
    162 }
    163