blob: dc871e3cdbe2d5c4b3517ed881015e382a7acc54 [file] [log] [blame]
/*
* Copyright (C) 2007-2010 JĂșlio Vilmar Gesser.
* Copyright (C) 2011, 2013-2016 The JavaParser Team.
*
* This file is part of JavaParser.
*
* JavaParser can be used either under the terms of
* a) the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* b) the terms of the Apache License
*
* You should have received a copy of both licenses in LICENCE.LGPL and
* LICENCE.APACHE. Please refer to those files for details.
*
* JavaParser is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*/
package com.github.javaparser.ast.body;
import com.github.javaparser.ast.AllFieldsConstructor;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.expr.AnnotationExpr;
import com.github.javaparser.ast.nodeTypes.NodeWithAnnotations;
import com.github.javaparser.ast.observer.ObservableProperty;
import static com.github.javaparser.utils.Utils.assertNotNull;
import com.github.javaparser.ast.visitor.CloneVisitor;
import com.github.javaparser.metamodel.BodyDeclarationMetaModel;
import com.github.javaparser.metamodel.JavaParserMetaModel;
import javax.annotation.Generated;
import com.github.javaparser.TokenRange;
import java.util.function.Consumer;
import static com.github.javaparser.utils.CodeGenerationUtils.f;
import java.util.Optional;
/**
* Any declaration that can appear between the { and } of a class, interface, or enum.
*
* @author Julio Vilmar Gesser
*/
public abstract class BodyDeclaration<T extends BodyDeclaration<?>> extends Node implements NodeWithAnnotations<T> {
private NodeList<AnnotationExpr> annotations;
public BodyDeclaration() {
this(null, new NodeList<>());
}
@AllFieldsConstructor
public BodyDeclaration(NodeList<AnnotationExpr> annotations) {
this(null, annotations);
}
/**
* This constructor is used by the parser and is considered private.
*/
@Generated("com.github.javaparser.generator.core.node.MainConstructorGenerator")
public BodyDeclaration(TokenRange tokenRange, NodeList<AnnotationExpr> annotations) {
super(tokenRange);
setAnnotations(annotations);
customInitialization();
}
protected BodyDeclaration(TokenRange range) {
this(range, new NodeList<>());
}
@Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
public NodeList<AnnotationExpr> getAnnotations() {
return annotations;
}
@Generated("com.github.javaparser.generator.core.node.PropertyGenerator")
@SuppressWarnings("unchecked")
public T setAnnotations(final NodeList<AnnotationExpr> annotations) {
assertNotNull(annotations);
if (annotations == this.annotations) {
return (T) this;
}
notifyPropertyChange(ObservableProperty.ANNOTATIONS, this.annotations, annotations);
if (this.annotations != null)
this.annotations.setParentNode(null);
this.annotations = annotations;
setAsParentNodeOf(annotations);
return (T) this;
}
@Override
@Generated("com.github.javaparser.generator.core.node.RemoveMethodGenerator")
public boolean remove(Node node) {
if (node == null)
return false;
for (int i = 0; i < annotations.size(); i++) {
if (annotations.get(i) == node) {
annotations.remove(i);
return true;
}
}
return super.remove(node);
}
@Override
@Generated("com.github.javaparser.generator.core.node.CloneGenerator")
public BodyDeclaration<?> clone() {
return (BodyDeclaration<?>) accept(new CloneVisitor(), null);
}
@Override
@Generated("com.github.javaparser.generator.core.node.GetMetaModelGenerator")
public BodyDeclarationMetaModel getMetaModel() {
return JavaParserMetaModel.bodyDeclarationMetaModel;
}
@Override
@Generated("com.github.javaparser.generator.core.node.ReplaceMethodGenerator")
public boolean replace(Node node, Node replacementNode) {
if (node == null)
return false;
for (int i = 0; i < annotations.size(); i++) {
if (annotations.get(i) == node) {
annotations.set(i, (AnnotationExpr) replacementNode);
return true;
}
}
return super.replace(node, replacementNode);
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public boolean isAnnotationDeclaration() {
return false;
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public AnnotationDeclaration asAnnotationDeclaration() {
throw new IllegalStateException(f("%s is not an AnnotationDeclaration", this));
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public boolean isAnnotationMemberDeclaration() {
return false;
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public AnnotationMemberDeclaration asAnnotationMemberDeclaration() {
throw new IllegalStateException(f("%s is not an AnnotationMemberDeclaration", this));
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public boolean isCallableDeclaration() {
return false;
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public CallableDeclaration asCallableDeclaration() {
throw new IllegalStateException(f("%s is not an CallableDeclaration", this));
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public boolean isClassOrInterfaceDeclaration() {
return false;
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public ClassOrInterfaceDeclaration asClassOrInterfaceDeclaration() {
throw new IllegalStateException(f("%s is not an ClassOrInterfaceDeclaration", this));
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public boolean isConstructorDeclaration() {
return false;
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public ConstructorDeclaration asConstructorDeclaration() {
throw new IllegalStateException(f("%s is not an ConstructorDeclaration", this));
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public boolean isEnumConstantDeclaration() {
return false;
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public EnumConstantDeclaration asEnumConstantDeclaration() {
throw new IllegalStateException(f("%s is not an EnumConstantDeclaration", this));
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public boolean isEnumDeclaration() {
return false;
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public EnumDeclaration asEnumDeclaration() {
throw new IllegalStateException(f("%s is not an EnumDeclaration", this));
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public boolean isFieldDeclaration() {
return false;
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public FieldDeclaration asFieldDeclaration() {
throw new IllegalStateException(f("%s is not an FieldDeclaration", this));
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public boolean isInitializerDeclaration() {
return false;
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public InitializerDeclaration asInitializerDeclaration() {
throw new IllegalStateException(f("%s is not an InitializerDeclaration", this));
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public boolean isMethodDeclaration() {
return false;
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public MethodDeclaration asMethodDeclaration() {
throw new IllegalStateException(f("%s is not an MethodDeclaration", this));
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public boolean isTypeDeclaration() {
return false;
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public TypeDeclaration asTypeDeclaration() {
throw new IllegalStateException(f("%s is not an TypeDeclaration", this));
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public void ifAnnotationDeclaration(Consumer<AnnotationDeclaration> action) {
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public void ifAnnotationMemberDeclaration(Consumer<AnnotationMemberDeclaration> action) {
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public void ifCallableDeclaration(Consumer<CallableDeclaration> action) {
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public void ifClassOrInterfaceDeclaration(Consumer<ClassOrInterfaceDeclaration> action) {
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public void ifConstructorDeclaration(Consumer<ConstructorDeclaration> action) {
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public void ifEnumConstantDeclaration(Consumer<EnumConstantDeclaration> action) {
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public void ifEnumDeclaration(Consumer<EnumDeclaration> action) {
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public void ifFieldDeclaration(Consumer<FieldDeclaration> action) {
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public void ifInitializerDeclaration(Consumer<InitializerDeclaration> action) {
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public void ifMethodDeclaration(Consumer<MethodDeclaration> action) {
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public void ifTypeDeclaration(Consumer<TypeDeclaration> action) {
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public Optional<AnnotationDeclaration> toAnnotationDeclaration() {
return Optional.empty();
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public Optional<AnnotationMemberDeclaration> toAnnotationMemberDeclaration() {
return Optional.empty();
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public Optional<CallableDeclaration> toCallableDeclaration() {
return Optional.empty();
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public Optional<ClassOrInterfaceDeclaration> toClassOrInterfaceDeclaration() {
return Optional.empty();
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public Optional<ConstructorDeclaration> toConstructorDeclaration() {
return Optional.empty();
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public Optional<EnumConstantDeclaration> toEnumConstantDeclaration() {
return Optional.empty();
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public Optional<EnumDeclaration> toEnumDeclaration() {
return Optional.empty();
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public Optional<FieldDeclaration> toFieldDeclaration() {
return Optional.empty();
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public Optional<InitializerDeclaration> toInitializerDeclaration() {
return Optional.empty();
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public Optional<MethodDeclaration> toMethodDeclaration() {
return Optional.empty();
}
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public Optional<TypeDeclaration> toTypeDeclaration() {
return Optional.empty();
}
}