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