package sk.stuba.fiit.perconik.core.java.dom;
import javax.annotation.Nullable;
import com.google.common.base.Function;
import org.eclipse.jdt.core.dom.ASTNode;
public final class NodeFlatteners {
private NodeFlatteners() {}
private enum ToStringFlattener implements Function<ASTNode, CharSequence> {
INSTANCE;
public CharSequence apply(@Nullable final ASTNode node) {
return node == null ? "" : node.toString();
}
@Override
public String toString() {
return "toString";
}
}
private static <N extends ASTNode, S extends CharSequence> Function<N, S> cast(final Function<?, S> flattener) {
// only for stateless internal singletons shared across all types
@SuppressWarnings("unchecked")
Function<N, S> result = (Function<N, S>) flattener;
return result;
}
public static <N extends ASTNode> Function<N, CharSequence> toStringBased() {
return cast(ToStringFlattener.INSTANCE);
}
}