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.NodeList;
     25 import com.github.javaparser.ast.observer.ObservableProperty;
     26 import com.github.javaparser.ast.visitor.GenericVisitor;
     27 import com.github.javaparser.ast.visitor.VoidVisitor;
     28 import java.util.Arrays;
     29 import java.util.List;
     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.NormalAnnotationExprMetaModel;
     34 import com.github.javaparser.metamodel.JavaParserMetaModel;
     35 import javax.annotation.Generated;
     36 import com.github.javaparser.TokenRange;
     37 import java.util.function.Consumer;
     38 import java.util.Optional;
     39 
     40 /**
     41  * An annotation that has zero or more key-value pairs.<br/><code>@Mapping(a=5, d=10)</code>
     42  * @author Julio Vilmar Gesser
     43  */
     44 public final class NormalAnnotationExpr extends AnnotationExpr {
     45 
     46     private NodeList<MemberValuePair> pairs;
     47 
     48     public NormalAnnotationExpr() {
     49         this(null, new Name(), new NodeList<>());
     50     }
     51 
     52     @AllFieldsConstructor
     53     public NormalAnnotationExpr(final Name name, final NodeList<MemberValuePair> pairs) {
     54         this(null, name, pairs);
     55     }
     56 
     57     /**
     58      * This constructor is used by the parser and is considered private.
     59      */
     60     @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
     61     public NormalAnnotationExpr(TokenRange tokenRange, Name name, NodeList<MemberValuePair> pairs) {
     62         super(tokenRange, name);
     63         setPairs(pairs);
     64         customInitialization();
     65     }
     66 
     67     @Override
     68     @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
     69     public <R, A> R accept(final GenericVisitor<R, A> v, final A arg) {
     70         return v.visit(this, arg);
     71     }
     72 
     73     @Override
     74     @Generated("com.github.javaparser.generator.core.node.AcceptGenerator")
     75     public <A> void accept(final VoidVisitor<A> v, final A arg) {
     76         v.visit(this, arg);
     77     }
     78 
     79     @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
     80     public NodeList<MemberValuePair> getPairs() {
     81         return pairs;
     82     }
     83 
     84     @Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
     85     public NormalAnnotationExpr setPairs(final NodeList<MemberValuePair> pairs) {
     86         assertNotNull(pairs);
     87         if (pairs == this.pairs) {
     88             return (NormalAnnotationExpr) this;
     89         }
     90         notifyPropertyChange(ObservableProperty.PAIRS, this.pairs, pairs);
     91         if (this.pairs != null)
     92             this.pairs.setParentNode(null);
     93         this.pairs = pairs;
     94         setAsParentNodeOf(pairs);
     95         return this;
     96     }
     97 
     98     /**
     99      * adds a pair to this annotation
    100      *
    101      * @return this, the {@link NormalAnnotationExpr}
    102      */
    103     public NormalAnnotationExpr addPair(String key, String value) {
    104         return addPair(key, new NameExpr(value));
    105     }
    106 
    107     /**
    108      * adds a pair to this annotation
    109      *
    110      * @return this, the {@link NormalAnnotationExpr}
    111      */
    112     public NormalAnnotationExpr addPair(String key, NameExpr value) {
    113         MemberValuePair memberValuePair = new MemberValuePair(key, value);
    114         getPairs().add(memberValuePair);
    115         return this;
    116     }
    117 
    118     @Override
    119     @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
    120     public boolean remove(Node node) {
    121         if (node == null)
    122             return false;
    123         for (int i = 0; i < pairs.size(); i++) {
    124             if (pairs.get(i) == node) {
    125                 pairs.remove(i);
    126                 return true;
    127             }
    128         }
    129         return super.remove(node);
    130     }
    131 
    132     @Override
    133     @Generated("com.github.javaparser.generator.core.node.CloneGenerator")
    134     public NormalAnnotationExpr clone() {
    135         return (NormalAnnotationExpr) accept(new CloneVisitor(), null);
    136     }
    137 
    138     @Override
    139     @Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator")
    140     public NormalAnnotationExprMetaModel getMetaModel() {
    141         return JavaParserMetaModel.normalAnnotationExprMetaModel;
    142     }
    143 
    144     @Override
    145     @Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator")
    146     public boolean replace(Node node, Node replacementNode) {
    147         if (node == null)
    148             return false;
    149         for (int i = 0; i < pairs.size(); i++) {
    150             if (pairs.get(i) == node) {
    151                 pairs.set(i, (MemberValuePair) replacementNode);
    152                 return true;
    153             }
    154         }
    155         return super.replace(node, replacementNode);
    156     }
    157 
    158     @Override
    159     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    160     public boolean isNormalAnnotationExpr() {
    161         return true;
    162     }
    163 
    164     @Override
    165     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    166     public NormalAnnotationExpr asNormalAnnotationExpr() {
    167         return this;
    168     }
    169 
    170     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    171     public void ifNormalAnnotationExpr(Consumer<NormalAnnotationExpr> action) {
    172         action.accept(this);
    173     }
    174 
    175     @Override
    176     @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
    177     public Optional<NormalAnnotationExpr> toNormalAnnotationExpr() {
    178         return Optional.of(this);
    179     }
    180 }
    181