package com.freetmp.mbg.merge.declaration;
import com.freetmp.mbg.merge.AbstractMerger;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.comments.Comment;
import org.apache.commons.lang3.StringUtils;
import java.util.List;
/**
* Created by LiuPin on 2015/4/20.
*/
public class MethodDeclarationMerger extends AbstractMerger<MethodDeclaration> {
@Override public MethodDeclaration doMerge(MethodDeclaration first, MethodDeclaration second) {
MethodDeclaration md = new MethodDeclaration();
md.setName(first.getName());
md.setType(mergeSingle(first.getType(), second.getType()));
md.setJavaDoc(mergeSingle(first.getJavaDoc(), second.getJavaDoc()));
md.setModifiers(mergeModifiers(first.getModifiers(), second.getModifiers()));
md.setDefault(first.isDefault() || second.isDefault());
md.setArrayCount(Math.max(first.getArrayCount(), second.getArrayCount()));
md.setAnnotations(mergeCollections(first.getAnnotations(), second.getAnnotations()));
md.setThrows(mergeListNoDuplicate(first.getThrows(), second.getThrows(), false));
md.setParameters(mergeCollectionsInOrder(first.getParameters(), second.getParameters()));
md.setTypeParameters(mergeCollectionsInOrder(first.getTypeParameters(), second.getTypeParameters()));
md.setBody(mergeSingle(first.getBody(), second.getBody()));
return md;
}
@Override public boolean doIsEquals(MethodDeclaration first, MethodDeclaration second) {
if (!StringUtils.equals(first.getName(), second.getName())) return false;
if (!isParametersEquals(first.getParameters(), second.getParameters())) return false;
if (!isTypeParameterEquals(first.getTypeParameters(), second.getTypeParameters())) return false;
return true;
}
}