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.Node; 25 import com.github.javaparser.ast.nodeTypes.NodeWithSimpleName; 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 static com.github.javaparser.utils.Utils.assertNotNull; 30 import com.github.javaparser.ast.visitor.CloneVisitor; 31 import com.github.javaparser.metamodel.MemberValuePairMetaModel; 32 import com.github.javaparser.metamodel.JavaParserMetaModel; 33 import javax.annotation.Generated; 34 import com.github.javaparser.TokenRange; 35 36 /** 37 * A value for a member of an annotation. 38 * In <code>@Counters(a=15)</code> a=15 is a MemberValuePair. Its name is a, and its value is 15. 39 * 40 * @author Julio Vilmar Gesser 41 */ 42 public final class MemberValuePair extends Node implements NodeWithSimpleName<MemberValuePair> { 43 44 private SimpleName name; 45 46 private Expression value; 47 48 public MemberValuePair() { 49 this(null, new SimpleName(), new StringLiteralExpr()); 50 } 51 52 public MemberValuePair(final String name, final Expression value) { 53 this(null, new SimpleName(name), value); 54 } 55 56 @AllFieldsConstructor 57 public MemberValuePair(final SimpleName name, final Expression value) { 58 this(null, name, value); 59 } 60 61 /** 62 * This constructor is used by the parser and is considered private. 63 */ 64 @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator") 65 public MemberValuePair(TokenRange tokenRange, SimpleName name, Expression value) { 66 super(tokenRange); 67 setName(name); 68 setValue(value); 69 customInitialization(); 70 } 71 72 @Override 73 @Generated("com.github.javaparser.generator.core.node.AcceptGenerator") 74 public <R, A> R accept(final GenericVisitor<R, A> v, final A arg) { 75 return v.visit(this, arg); 76 } 77 78 @Override 79 @Generated("com.github.javaparser.generator.core.node.AcceptGenerator") 80 public <A> void accept(final VoidVisitor<A> v, final A arg) { 81 v.visit(this, arg); 82 } 83 84 @Generated("com.github.javaparser.generator.core.node.PropertyGenerator") 85 public SimpleName getName() { 86 return name; 87 } 88 89 @Generated("com.github.javaparser.generator.core.node.PropertyGenerator") 90 public Expression getValue() { 91 return value; 92 } 93 94 @Generated("com.github.javaparser.generator.core.node.PropertyGenerator") 95 public MemberValuePair setName(final SimpleName name) { 96 assertNotNull(name); 97 if (name == this.name) { 98 return (MemberValuePair) this; 99 } 100 notifyPropertyChange(ObservableProperty.NAME, this.name, name); 101 if (this.name != null) 102 this.name.setParentNode(null); 103 this.name = name; 104 setAsParentNodeOf(name); 105 return this; 106 } 107 108 @Generated("com.github.javaparser.generator.core.node.PropertyGenerator") 109 public MemberValuePair setValue(final Expression value) { 110 assertNotNull(value); 111 if (value == this.value) { 112 return (MemberValuePair) this; 113 } 114 notifyPropertyChange(ObservableProperty.VALUE, this.value, value); 115 if (this.value != null) 116 this.value.setParentNode(null); 117 this.value = value; 118 setAsParentNodeOf(value); 119 return this; 120 } 121 122 @Override 123 @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator") 124 public boolean remove(Node node) { 125 if (node == null) 126 return false; 127 return super.remove(node); 128 } 129 130 @Override 131 @Generated("com.github.javaparser.generator.core.node.CloneGenerator") 132 public MemberValuePair clone() { 133 return (MemberValuePair) accept(new CloneVisitor(), null); 134 } 135 136 @Override 137 @Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator") 138 public MemberValuePairMetaModel getMetaModel() { 139 return JavaParserMetaModel.memberValuePairMetaModel; 140 } 141 142 @Override 143 @Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator") 144 public boolean replace(Node node, Node replacementNode) { 145 if (node == null) 146 return false; 147 if (node == name) { 148 setName((SimpleName) replacementNode); 149 return true; 150 } 151 if (node == value) { 152 setValue((Expression) replacementNode); 153 return true; 154 } 155 return super.replace(node, replacementNode); 156 } 157 } 158