package sk.stuba.fiit.perconik.core.java.dom;
import org.eclipse.jdt.core.dom.ASTNode;
import org.eclipse.jdt.core.dom.Annotation;
import org.eclipse.jdt.core.dom.Comment;
import org.eclipse.jdt.core.dom.Expression;
import org.eclipse.jdt.core.dom.Name;
import org.eclipse.jdt.core.dom.Statement;
import static sk.stuba.fiit.perconik.core.java.dom.NodeClassFilter.of;
public final class NodeClassFilters {
private static final NodeClassFilter<?, Annotation> annotations = of(Annotation.class);
private static final NodeClassFilter<?, Comment> comments = of(Comment.class);
private static final NodeClassFilter<?, Expression> expressions = of(Expression.class);
private static final NodeClassFilter<?, Name> names = of(Name.class);
private static final NodeClassFilter<?, Statement> statements = of(Statement.class);
private NodeClassFilters() {}
private static <N extends ASTNode, F extends ASTNode> NodeClassFilter<N, F> cast(final NodeClassFilter<?, ?> filter) {
// only for stateless internal singletons shared across all types
@SuppressWarnings("unchecked")
NodeClassFilter<N, F> result = (NodeClassFilter<N, F>) filter;
return result;
}
public static <N extends ASTNode> NodeClassFilter<N, Annotation> annotations() {
return cast(annotations);
}
public static <N extends ASTNode> NodeClassFilter<N, Comment> comments() {
return cast(comments);
}
public static <N extends ASTNode> NodeClassFilter<N, Expression> expressions() {
return cast(expressions);
}
public static <N extends ASTNode> NodeClassFilter<N, Name> names() {
return cast(names);
}
public static <N extends ASTNode> NodeClassFilter<N, Statement> statements() {
return cast(statements);
}
}