1/* 2 * Copyright (C) 2007-2010 Júlio 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 */ 21package com.github.javaparser.ast.expr; 22 23import com.github.javaparser.ast.AllFieldsConstructor; 24import com.github.javaparser.ast.nodeTypes.NodeWithName; 25import com.github.javaparser.ast.observer.ObservableProperty; 26import static com.github.javaparser.utils.Utils.assertNotNull; 27import com.github.javaparser.ast.Node; 28import com.github.javaparser.ast.visitor.CloneVisitor; 29import com.github.javaparser.metamodel.AnnotationExprMetaModel; 30import com.github.javaparser.metamodel.JavaParserMetaModel; 31import javax.annotation.Generated; 32import com.github.javaparser.TokenRange; 33import java.util.function.Consumer; 34import java.util.Optional; 35 36/** 37 * A base class for the different types of annotations. 38 * 39 * @author Julio Vilmar Gesser 40 */ 41public abstract class AnnotationExpr extends Expression implements NodeWithName<AnnotationExpr> { 42 43 protected Name name; 44 45 public AnnotationExpr() { 46 this(null, new Name()); 47 } 48 49 @AllFieldsConstructor 50 public AnnotationExpr(Name name) { 51 this(null, name); 52 } 53 54 /** 55 * This constructor is used by the parser and is considered private. 56 */ 57 @Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator") 58 public AnnotationExpr(TokenRange tokenRange, Name name) { 59 super(tokenRange); 60 setName(name); 61 customInitialization(); 62 } 63 64 @Generated("com.github.javaparser.generator.core.node.PropertyGenerator") 65 public Name getName() { 66 return name; 67 } 68 69 @Generated("com.github.javaparser.generator.core.node.PropertyGenerator") 70 public AnnotationExpr setName(final Name name) { 71 assertNotNull(name); 72 if (name == this.name) { 73 return (AnnotationExpr) this; 74 } 75 notifyPropertyChange(ObservableProperty.NAME, this.name, name); 76 if (this.name != null) 77 this.name.setParentNode(null); 78 this.name = name; 79 setAsParentNodeOf(name); 80 return this; 81 } 82 83 @Override 84 @Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator") 85 public boolean remove(Node node) { 86 if (node == null) 87 return false; 88 return super.remove(node); 89 } 90 91 @Override 92 @Generated("com.github.javaparser.generator.core.node.CloneGenerator") 93 public AnnotationExpr clone() { 94 return (AnnotationExpr) accept(new CloneVisitor(), null); 95 } 96 97 @Override 98 @Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator") 99 public AnnotationExprMetaModel getMetaModel() { 100 return JavaParserMetaModel.annotationExprMetaModel; 101 } 102 103 @Override 104 @Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator") 105 public boolean replace(Node node, Node replacementNode) { 106 if (node == null) 107 return false; 108 if (node == name) { 109 setName((Name) replacementNode); 110 return true; 111 } 112 return super.replace(node, replacementNode); 113 } 114 115 @Override 116 @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator") 117 public boolean isAnnotationExpr() { 118 return true; 119 } 120 121 @Override 122 @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator") 123 public AnnotationExpr asAnnotationExpr() { 124 return this; 125 } 126 127 @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator") 128 public void ifAnnotationExpr(Consumer<AnnotationExpr> action) { 129 action.accept(this); 130 } 131 132 @Override 133 @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator") 134 public Optional<AnnotationExpr> toAnnotationExpr() { 135 return Optional.of(this); 136 } 137} 138