package org.springframework.roo.classpath.antlrjavaparser.details;
import java.util.LinkedList;
import java.util.List;
import org.springframework.roo.classpath.details.comments.CommentStructure;
import com.github.antlrjavaparser.api.BlockComment;
import com.github.antlrjavaparser.api.Comment;
import com.github.antlrjavaparser.api.LineComment;
import com.github.antlrjavaparser.api.Node;
import com.github.antlrjavaparser.api.body.JavadocComment;
/**
* @author Mike De Haan
*/
public class JavaParserCommentMetadataBuilder {
/**
* Adapt the any comments to the roo interface
*
* @param parserNode The antlr-java-parser node from which the comments will
* be read
* @param commentStructure The roo structure from which to retrieve comments
* @return List of comments from the antlr-java-parser package
*/
public static void updateCommentsToRoo(
final CommentStructure commentStructure, final Node parserNode) {
// Nothing to do here
if (parserNode == null || commentStructure == null) {
return;
}
commentStructure.setBeginComments(adaptToRooComments(parserNode
.getBeginComments()));
commentStructure.setInternalComments(adaptToRooComments(parserNode
.getInternalComments()));
commentStructure.setEndComments(adaptToRooComments(parserNode
.getEndComments()));
}
/**
* Adapt the any comments to the antlr-java-parser interface
*
* @param parserNode The antlr-java-parser node to where the comments will
* be set
* @param commentStructure The roo structure from which to retrieve comments
* @return List of comments from the antlr-java-parser package
*/
public static void updateCommentsToJavaParser(final Node parserNode,
final CommentStructure commentStructure) {
// Nothing to do here
if (parserNode == null || commentStructure == null) {
return;
}
parserNode.setBeginComments(adaptComments(commentStructure
.getBeginComments()));
parserNode.setInternalComments(adaptComments(commentStructure
.getInternalComments()));
parserNode.setEndComments(adaptComments(commentStructure
.getEndComments()));
}
/**
* Adapt a roo comment to antlr-java-parser comment
*
* @param antlrComments List of comments from the antlr-java-parser package
* @return List of comments from the roo package
*/
private static List<org.springframework.roo.classpath.details.comments.AbstractComment> adaptToRooComments(
final List<Comment> antlrComments) {
// Nothing to do here
if (antlrComments == null || antlrComments.size() == 0) {
return null;
}
final List<org.springframework.roo.classpath.details.comments.AbstractComment> comments = new LinkedList<org.springframework.roo.classpath.details.comments.AbstractComment>();
for (final Comment antlrComment : antlrComments) {
comments.add(adaptToRooComment(antlrComment));
}
return comments;
}
/**
* Adapt a roo comment to antlr-java-parser comment
*
* @param antlrComment
* @return
*/
private static org.springframework.roo.classpath.details.comments.AbstractComment adaptToRooComment(
final Comment antlrComment) {
org.springframework.roo.classpath.details.comments.AbstractComment comment;
if (antlrComment instanceof LineComment) {
comment = new org.springframework.roo.classpath.details.comments.LineComment();
}
else if (antlrComment instanceof JavadocComment) {
comment = new org.springframework.roo.classpath.details.comments.JavadocComment();
}
else {
comment = new org.springframework.roo.classpath.details.comments.BlockComment();
}
comment.setComment(antlrComment.getContent());
return comment;
}
/**
* Adapt the roo interface to the antlr-java-parser interface
*
* @param rooComments List of comments from the roo package
* @return List of comments from the antlr-java-parser package
*/
private static List<Comment> adaptComments(
final List<org.springframework.roo.classpath.details.comments.AbstractComment> rooComments) {
// Nothing to do here
if (rooComments == null || rooComments.size() == 0) {
return null;
}
final List<Comment> comments = new LinkedList<Comment>();
for (final org.springframework.roo.classpath.details.comments.AbstractComment rooComment : rooComments) {
comments.add(adaptComment(rooComment));
}
return comments;
}
/**
* Adapt the roo interface to the antlr-java-parser interface
*
* @param rooComment
* @return
*/
private static Comment adaptComment(
final org.springframework.roo.classpath.details.comments.AbstractComment rooComment) {
Comment comment;
if (rooComment instanceof org.springframework.roo.classpath.details.comments.LineComment) {
comment = new LineComment();
}
else if (rooComment instanceof org.springframework.roo.classpath.details.comments.JavadocComment) {
comment = new JavadocComment();
}
else {
comment = new BlockComment();
}
comment.setContent(rooComment.getComment());
return comment;
}
}