@Override public Boolean caseRichStringLiteral(RichStringLiteral object) { String value = object.getValue(); List<TextLine> lines = TextLines.splitString(value); if (lines.isEmpty()) { Literal literal = factory.createLiteral(); literal.setLength(0); literal.setOffset(0); literal.setLiteral(object); addToCurrentLine(literal); } else { for (TextLine textLine : lines) { Literal literal = factory.createLiteral(); literal.setLength(textLine.length()); literal.setOffset(textLine.getRelativeOffset()); literal.setLiteral(object); addToCurrentLine(literal); if (textLine.hasTrailingLineBreak()) { LineBreak lineBreak = factory.createLineBreak(); lineBreak.setLength(textLine.getDelimiterLength()); lineBreak.setOffset(textLine.getRelativeOffset() + textLine.length()); lineBreak.setLiteral(object); addToCurrentLine(lineBreak); currentLine = null; } } } return Boolean.TRUE; }
@Override public Boolean caseRichStringForLoop(RichStringForLoop object) { ForLoopStart start = factory.createForLoopStart(); start.setLoop(object); addToCurrentLine(start); doSwitch(object.getEachExpression()); ForLoopEnd end = factory.createForLoopEnd(); end.setStart(start); addToCurrentLine(end); return Boolean.TRUE; }
protected void addToCurrentLine(LinePart part) { if (currentLine == null) { currentLine = factory.createLine(); if (!(part instanceof Literal) && !result.getLines().isEmpty()) { Line prevLine = result.getLines().get(result.getLines().size() - 1); LineBreak lineBreak = (LineBreak) prevLine.getParts().get(prevLine.getParts().size() - 1); Literal literal = factory.createLiteral(); literal.setLength(0); literal.setOffset(lineBreak.getLiteral().getValue().length()); literal.setLiteral(lineBreak.getLiteral()); currentLine.getParts().add(literal); } result.getLines().add(currentLine); } if (part != null) currentLine.getParts().add(part); }
@Override public Boolean defaultCase(EObject object) { if (object instanceof XExpression) { // caseXExpression does not work since object.ePackage != Xtend2Switch.modelPackage PrintedExpression printedExpression = factory.createPrintedExpression(); printedExpression.setExpression((XExpression) object); addToCurrentLine(printedExpression); } return Boolean.TRUE; }
@Override public Boolean caseRichStringIf(RichStringIf object) { IfConditionStart start = factory.createIfConditionStart(); start.setRichStringIf(object); addToCurrentLine(start); doSwitch(object.getThen()); for (RichStringElseIf elseIf : object.getElseIfs()) { ElseIfCondition elseIfStart = factory.createElseIfCondition(); elseIfStart.setIfConditionStart(start); elseIfStart.setRichStringElseIf(elseIf); addToCurrentLine(elseIfStart); doSwitch(elseIf.getThen()); } if (object.getElse() != null) { ElseStart elseStart = factory.createElseStart(); elseStart.setIfConditionStart(start); addToCurrentLine(elseStart); doSwitch(object.getElse()); } EndIf end = factory.createEndIf(); end.setIfConditionStart(start); addToCurrentLine(end); return Boolean.TRUE; }
@Override public Boolean caseRichString(RichString object) { if (result == null) { result = factory.createProcessedRichString(); result.setRichString(object); } List<XExpression> elements = object.getExpressions(); for (XExpression element : elements) { doSwitch(element); } if (currentLine == null && !result.getLines().isEmpty()) { // add next line with empty text since the previous ends with a line break addToCurrentLine(null); } return Boolean.TRUE; }