private void checkDecision(DecisionNode decision, ADNodesList.ADNode node) { bool checkAlt = true; // проверка, что альтернативы есть if (decision.alternativeSize() == 0) { ADMistakeFactory.createMistake(MistakesSeriousness.mistakes[MISTAKES.DO_NOT_HAVE_ALT], MistakeAdapter.toString(MISTAKES.DO_NOT_HAVE_ALT), node, ALL_MISTAKES.DO_NOT_HAVE_ALT); checkAlt = false; } // проверка, что альтернатив больше одной if (checkAlt) { if (decision.alternativeSize() == 1) { ADMistakeFactory.createMistake(MistakesSeriousness.mistakes[MISTAKES.ONLY_ONE_ALT], MistakeAdapter.toString(MISTAKES.ONLY_ONE_ALT), node, ALL_MISTAKES.ONLY_ONE_ALT); } } // проверка, что альтернативы не ведут в один и тот же элемент if (checkAlt) { for (int i = 0; i < decision.outSize() - 1; i++) { string targetId = ((ControlFlow)diagramElements.get(decision.getOutId(i))).getTarget(); for (int j = i + 1; j < decision.outSize(); j++) { if (targetId.Equals(((ControlFlow)diagramElements.get(decision.getOutId(j))).getTarget())) { ADMistakeFactory.createMistake(MistakesSeriousness.mistakes[MISTAKES.SAME_TARGET], MistakeAdapter.toString(MISTAKES.SAME_TARGET), node, ALL_MISTAKES.SAME_TARGET); } } if (diagramElements.get(targetId).getType() == ElementType.DECISION) { ADMistakeFactory.createMistake(MistakesSeriousness.mistakes[MISTAKES.NEXT_DECISION], MistakeAdapter.toString(MISTAKES.NEXT_DECISION), node, ALL_MISTAKES.NEXT_DECISION); } } // проверка на последовательность условных операторов string targetId2 = ((ControlFlow)diagramElements.get(decision.getOutId(decision.outSize() - 1))).getTarget(); if (diagramElements.get(targetId2).getType() == ElementType.DECISION) { ADMistakeFactory.createMistake(MistakesSeriousness.mistakes[MISTAKES.NEXT_DECISION], MistakeAdapter.toString(MISTAKES.NEXT_DECISION), node, ALL_MISTAKES.NEXT_DECISION); } } }
// проверка условного перехода public void checkDecision(DecisionNode decision, ADNodesList.ADNode node) { // добавляем вопрос для перехода BaseNode flowIn = diagramElements.get(decision.getInId(0)); string quest = ((ControlFlow)flowIn).getText(); decision.setQuestion(quest.Trim()); // добавляем альтернативы -> проходим по всем выходящим переходам и получаем подписи for (int i = 0; i < decision.outSize(); i++) { BaseNode flow = diagramElements.get(decision.getOutId(i)); decision.addAlternative(((ControlFlow)flow).getText()); } // проверяем подписи альтернатив, если их больше одной bool checkAlt = decision.alternativeSize() >= 2; // поиск совпадающих названий if (checkAlt) { decision.findEqualAlternatives().ForEach(x => ADMistakeFactory.createMistake(Level.HARD, MistakeAdapter.toString(MISTAKES.REPEATED_ALT) + " - " + x, node, ALL_MISTAKES.REPEATED_ALT)); } // проверка на альтернативу без подписи if (checkAlt) { if (decision.findEmptyAlternative()) { ADMistakeFactory.createMistake(Level.HARD, MistakeAdapter.toString(MISTAKES.HAVE_EMPTY_ALT), node, ALL_MISTAKES.HAVE_EMPTY_ALT); } } // проверка, что альтернативы начинаются с заглавных букв //if (checkAlt) // for (int i = 0; i < decision.alternativeSize(); i++) // { // String alter = decision.getAlternative(i); // if (!alter.Equals("")) // if (!alter.Substring(0, 1).ToUpper().Equals(alter.Substring(0, 1))) // ADMistakeFactory.createMistake(Level.EASY, " альтернатива \"" + alter + "\"" + MistakeAdapter.toString(MISTAKES.SMALL_LETTER), node); // } bool checkQuest = true; // проверка, что имеется условие if (decision.getQuestion().Equals("")) { ADMistakeFactory.createMistake(Level.HARD, MistakeAdapter.toString(MISTAKES.HAVE_NOT_QUEST), node, ALL_MISTAKES.HAVE_NOT_QUEST); checkQuest = false; // дальнейшие проверки условия не требуются (его нет) } // проверка на заглавную букву if (checkQuest) { if ((!decision.getQuestion().Substring(0, 1).ToUpper().Equals(decision.getQuestion().Substring(0, 1)))) { ADMistakeFactory.createMistake(Level.EASY, MistakeAdapter.toString(MISTAKES.SMALL_LETTER), node, ALL_MISTAKES.SMALL_LETTER); } } // заканчивается на знак вопроса if (checkQuest) { if ((!decision.getQuestion().EndsWith("?"))) { ADMistakeFactory.createMistake(Level.EASY, MistakeAdapter.toString(MISTAKES.END_WITH_QUEST), node, ALL_MISTAKES.END_WITH_QUEST); } } }