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.stmt; 22 23 import com.github.javaparser.ast.AllFieldsConstructor; 24 import com.github.javaparser.ast.expr.BooleanLiteralExpr; 25 import com.github.javaparser.ast.expr.Expression; 26 import com.github.javaparser.ast.observer.ObservableProperty; 27 import com.github.javaparser.ast.visitor.GenericVisitor; 28 import com.github.javaparser.ast.visitor.VoidVisitor; 29 import java.util.Optional; 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.AssertStmtMetaModel; 34 import com.github.javaparser.metamodel.JavaParserMetaModel; 35 import javax.annotation.Generated; 36 import com.github.javaparser.TokenRange; 37 import com.github.javaparser.metamodel.OptionalProperty; 38 import java.util.function.Consumer; 39 40 /** 41 * A usage of the keyword "assert" 42 * <br/>In <code>assert dead : "Wasn't expecting to be dead here";</code> the check is "dead" and the message is the string. 43 * @author Julio Vilmar Gesser 44 */ 45 public final class AssertStmt extends Statement { 46 47 private Expression check; 48 49 @OptionalProperty 50 private Expression message; 51 52 public AssertStmt() { 53 this(null, new BooleanLiteralExpr(), null); 54 } 55 56 public AssertStmt(final Expression check) { 57 this(null, check, null); 58 } 59 60 @AllFieldsConstructor 61 public AssertStmt(final Expression check, final Expression message) { 62 this(null, check, message); 63 } 64 65 /** 66 * This constructor is used by the parser and is considered private. 67 */ 68 @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator") 69 public AssertStmt(TokenRange tokenRange, Expression check, Expression message) { 70 super(tokenRange); 71 setCheck(check); 72 setMessage(message); 73 customInitialization(); 74 } 75 76 @Override 77 @Generated("com.github.javaparser.generator.core.node.AcceptGenerator") 78 public <R, A> R accept(final GenericVisitor<R, A> v, final A arg) { 79 return v.visit(this, arg); 80 } 81 82 @Override 83 @Generated("com.github.javaparser.generator.core.node.AcceptGenerator") 84 public <A> void accept(final VoidVisitor<A> v, final A arg) { 85 v.visit(this, arg); 86 } 87 88 @Generated("com.github.javaparser.generator.core.node.PropertyGenerator") 89 public Expression getCheck() { 90 return check; 91 } 92 93 @Generated("com.github.javaparser.generator.core.node.PropertyGenerator") 94 public Optional<Expression> getMessage() { 95 return Optional.ofNullable(message); 96 } 97 98 @Generated("com.github.javaparser.generator.core.node.PropertyGenerator") 99 public AssertStmt setCheck(final Expression check) { 100 assertNotNull(check); 101 if (check == this.check) { 102 return (AssertStmt) this; 103 } 104 notifyPropertyChange(ObservableProperty.CHECK, this.check, check); 105 if (this.check != null) 106 this.check.setParentNode(null); 107 this.check = check; 108 setAsParentNodeOf(check); 109 return this; 110 } 111 112 /** 113 * Sets the message 114 * 115 * @param message the message, can be null 116 * @return this, the AssertStmt 117 */ 118 @Generated("com.github.javaparser.generator.core.node.PropertyGenerator") 119 public AssertStmt setMessage(final Expression message) { 120 if (message == this.message) { 121 return (AssertStmt) this; 122 } 123 notifyPropertyChange(ObservableProperty.MESSAGE, this.message, message); 124 if (this.message != null) 125 this.message.setParentNode(null); 126 this.message = message; 127 setAsParentNodeOf(message); 128 return this; 129 } 130 131 @Override 132 @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator") 133 public boolean remove(Node node) { 134 if (node == null) 135 return false; 136 if (message != null) { 137 if (node == message) { 138 removeMessage(); 139 return true; 140 } 141 } 142 return super.remove(node); 143 } 144 145 @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator") 146 public AssertStmt removeMessage() { 147 return setMessage((Expression) null); 148 } 149 150 @Override 151 @Generated("com.github.javaparser.generator.core.node.CloneGenerator") 152 public AssertStmt clone() { 153 return (AssertStmt) accept(new CloneVisitor(), null); 154 } 155 156 @Override 157 @Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator") 158 public AssertStmtMetaModel getMetaModel() { 159 return JavaParserMetaModel.assertStmtMetaModel; 160 } 161 162 @Override 163 @Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator") 164 public boolean replace(Node node, Node replacementNode) { 165 if (node == null) 166 return false; 167 if (node == check) { 168 setCheck((Expression) replacementNode); 169 return true; 170 } 171 if (message != null) { 172 if (node == message) { 173 setMessage((Expression) replacementNode); 174 return true; 175 } 176 } 177 return super.replace(node, replacementNode); 178 } 179 180 @Override 181 @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator") 182 public boolean isAssertStmt() { 183 return true; 184 } 185 186 @Override 187 @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator") 188 public AssertStmt asAssertStmt() { 189 return this; 190 } 191 192 @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator") 193 public void ifAssertStmt(Consumer<AssertStmt> action) { 194 action.accept(this); 195 } 196 197 @Override 198 @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator") 199 public Optional<AssertStmt> toAssertStmt() { 200 return Optional.of(this); 201 } 202 } 203