private AbstractPSystem executeOneLine( AbstractPSystem sys, UmlSource source, final IteratorCounter2 it) { final CommandControl commandControl = isValid2(it); if (commandControl == CommandControl.NOT_OK) { final ErrorUml err = new ErrorUml( ErrorUmlType.SYNTAX_ERROR, "Syntax Error?", it.currentNum(), it.peek().getLocation()); if (OptionFlags.getInstance().isUseSuggestEngine()) { final SuggestEngine engine = new SuggestEngine(source, this); final SuggestEngineResult result = engine.tryToSuggest(sys); if (result.getStatus() == SuggestEngineStatus.ONE_SUGGESTION) { err.setSuggest(result); } } sys = new PSystemError(source, err, null); } else if (commandControl == CommandControl.OK_PARTIAL) { final IteratorCounter2 saved = it.cloneMe(); final CommandExecutionResult result = manageMultiline2(it, sys); if (result.isOk() == false) { sys = new PSystemError( source, new ErrorUml( ErrorUmlType.EXECUTION_ERROR, result.getError(), it.currentNum() - 1, saved.next().getLocation()), null); } } else if (commandControl == CommandControl.OK) { final CharSequence line = it.next(); final BlocLines lines = BlocLines.single(line); Command cmd = getFirstCommandOkForLines(lines); final CommandExecutionResult result = sys.executeCommand(cmd, lines); if (result.isOk() == false) { sys = new PSystemError( source, new ErrorUml( ErrorUmlType.EXECUTION_ERROR, result.getError(), it.currentNum() - 1, ((CharSequence2) line).getLocation()), result.getDebugLines()); } if (result.getNewDiagram() != null) { sys = result.getNewDiagram(); } } else { assert false; } return sys; }
public final Diagram createSystem(UmlSource source) { final IteratorCounter2 it = source.iterator2(); final CharSequence2 startLine = it.next(); if (StartUtils.isArobaseStartDiagram(startLine) == false) { throw new UnsupportedOperationException(); } if (source.isEmpty()) { return buildEmptyError(source, startLine.getLocation()); } AbstractPSystem sys = createEmptyDiagram(); while (it.hasNext()) { if (StartUtils.isArobaseEndDiagram(it.peek())) { if (sys == null) { return null; } final String err = sys.checkFinalError(); if (err != null) { return buildEmptyError(source, err, it.peek().getLocation()); } if (source.getTotalLineCount() == 2) { return buildEmptyError(source, it.peek().getLocation()); } sys.makeDiagramReady(); if (sys.isOk() == false) { return null; } sys.setSource(source); return sys; } sys = executeOneLine(sys, source, it); if (sys instanceof PSystemError) { return sys; } } sys.setSource(source); return sys; }