Home | History | Annotate | Download | only in stmt
      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