package org.xpect.text; import java.util.Arrays; import java.util.List; import org.eclipse.xtext.util.Strings; import com.google.common.base.Joiner; import com.google.common.collect.Lists; public class TextBlock implements ITextBlock { private static void collectLines(Object obj, List<String> lines) { if (obj == null) { lines.add("(null)"); } else if (obj instanceof Iterable<?>) { for (Object o : ((Iterable<?>) obj)) collectLines(o, lines); } else { lines.addAll(new Text(obj.toString()).splitIntoLines()); } } public static ITextBlock get(Object obj) { if (obj instanceof ITextBlock) return (ITextBlock) obj; List<String> lines = Lists.newArrayList(); collectLines(obj, lines); if (lines.isEmpty()) return ITextBlock.EMPTY; for (String line : lines) if (!Strings.isEmpty(line)) return new TextBlock(lines.toArray(new String[lines.size()])); return ITextBlock.EMPTY; } private final String[] lines; private TextBlock(String[] lines) { super(); this.lines = lines; } public List<String> getLines() { return Arrays.asList(lines); } @Override public String toString() { return Joiner.on('\n').join(lines); } }