
org.walkmod.javalang.ast.body.BodyDeclaration Maven / Gradle / Ivy
The newest version!
/*
* Copyright (C) 2013 Raquel Pau and Albert Coroleu.
*
* Walkmod is free software: you can redistribute it and/or modify it under the terms of 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.
*
* Walkmod 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.
*
* You should have received a copy of the GNU Lesser General Public License along with Walkmod. If
* not, see .
*/
package org.walkmod.javalang.ast.body;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.walkmod.javalang.ast.Node;
import org.walkmod.javalang.ast.ScopeAware;
import org.walkmod.javalang.ast.ScopeAwareUtil;
import org.walkmod.javalang.ast.SymbolDefinition;
import org.walkmod.javalang.ast.expr.AnnotationExpr;
import org.walkmod.merger.MergeEngine;
/**
* @author Julio Vilmar Gesser
*/
public abstract class BodyDeclaration extends Node implements ScopeAware {
private JavadocComment javaDoc;
private List annotations;
public BodyDeclaration() {}
public BodyDeclaration(List annotations, JavadocComment javaDoc) {
setJavaDoc(javaDoc);
setAnnotations(annotations);
}
public BodyDeclaration(int beginLine, int beginColumn, int endLine, int endColumn, List annotations,
JavadocComment javaDoc) {
super(beginLine, beginColumn, endLine, endColumn);
setJavaDoc(javaDoc);
setAnnotations(annotations);
}
@Override
public List getChildren() {
List children = new LinkedList();
if (javaDoc != null) {
children.add(javaDoc);
}
if (annotations != null) {
children.addAll(annotations);
}
return children;
}
@Override
public boolean removeChild(Node child) {
boolean result = false;
if (child != null) {
if (child instanceof AnnotationExpr) {
if (annotations != null) {
List aux = new LinkedList(annotations);
result = aux.remove(child);
this.annotations = aux;
}
} else if (child instanceof JavadocComment) {
if (javaDoc != null && javaDoc.equals(child)) {
javaDoc = null;
result = true;
}
}
}
if (result) {
updateReferences(child);
}
return result;
}
public final JavadocComment getJavaDoc() {
return javaDoc;
}
public final List getAnnotations() {
return annotations;
}
public final void setJavaDoc(JavadocComment javaDoc) {
this.javaDoc = javaDoc;
setAsParentNodeOf(javaDoc);
}
public final void setAnnotations(List annotations) {
this.annotations = annotations;
setAsParentNodeOf(annotations);
}
public void merge(BodyDeclaration remoteBodyDeclaration, MergeEngine configuration) {
List resultAnnotations = new LinkedList();
configuration.apply(getAnnotations(), remoteBodyDeclaration.getAnnotations(), resultAnnotations,
AnnotationExpr.class);
setAnnotations(resultAnnotations);
setJavaDoc((JavadocComment) (configuration.apply(getJavaDoc(), remoteBodyDeclaration.getJavaDoc(),
JavadocComment.class)));
}
@Override
public boolean replaceChildNode(Node oldChild, Node newChild) {
if (newChild instanceof JavadocComment) {
setJavaDoc((JavadocComment) newChild);
return true;
}
boolean update = false;
if (annotations != null) {
List auxAnn = new LinkedList(annotations);
update = replaceChildNodeInList(oldChild, newChild, auxAnn);
if (update) {
annotations = auxAnn;
}
}
return update;
}
@Override
public Map getVariableDefinitions() {
return ScopeAwareUtil.getVariableDefinitions(this);
}
@Override
public Map> getMethodDefinitions() {
return ScopeAwareUtil.getMethodDefinitions(BodyDeclaration.this);
}
@Override
public Map getTypeDefinitions() {
return ScopeAwareUtil.getTypeDefinitions(BodyDeclaration.this);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy