private static void addGTCodesInReads(ExpressionItem expressionItem, Set<String> gtCodes) { if (expressionItem instanceof BinaryExpression) { BinaryExpression binaryExpression = (BinaryExpression) expressionItem; addGTCodesInReads(binaryExpression.getLeft(), gtCodes); addGTCodesInReads(binaryExpression.getRight(), gtCodes); } else if (expressionItem instanceof UnaryExpression) { UnaryExpression unaryExpression = (UnaryExpression) expressionItem; addGTCodesInReads(unaryExpression.getOperand(), gtCodes); } else if (expressionItem instanceof FunctionalExpression) { FunctionalExpression functionalExpression = (FunctionalExpression) expressionItem; for (ExpressionItem expressionItemAux : functionalExpression.getItems()) { addGTCodesInReads(expressionItemAux, gtCodes); } } else if (expressionItem instanceof AssignmentExpression) { AssignmentExpression assignmentExpression = (AssignmentExpression) expressionItem; addGTCodesInReads(assignmentExpression.getAssignment(), gtCodes); } else if (expressionItem instanceof MultipleAssignmentExpression) { MultipleAssignmentExpression multipleAssignmentExpression = (MultipleAssignmentExpression) expressionItem; for (AssignmentExpression assignmentExpression : multipleAssignmentExpression.getAssignmentExpressions()) { addGTCodesInReads(assignmentExpression, gtCodes); } } else if (expressionItem instanceof Variable) { Variable variable = (Variable) expressionItem; gtCodes.add(variable.getCode()); } else if (expressionItem instanceof ConstantExpression) { //Do nothing } else { throw new RuntimeException("Unkown expression '" + expressionItem.getClass().getName() + "'"); } }
return false; ExpressionItem assignmentExpressionItem = guideAssignmentExpression.getAssignmentExpression().getAssignment(); if (assignmentExpressionItem instanceof ConstantExpression) { ConstantExpression constantExpression = (ConstantExpression) assignmentExpressionItem;
AssignmentExpression assignmentExpression) { String gtCode = assignmentExpression.getVariable().getCode(); ExpressionItem expressionItemAux = assignmentExpression.getAssignment(); String attribute = assignmentExpression.getVariable().getAttribute(); GTCodeRuleLineElement gtCodeRuleLineElement =
private void addSimpleConditionsFromExpressionItems(ExpressionItem expressionItem, Collection<BinaryExpression> simpleConditionsExpressionItems) { if (expressionItem instanceof BinaryExpression) { BinaryExpression binaryExpression = (BinaryExpression) expressionItem; if (OperatorKind.AND.equals(binaryExpression.getOperator()) || OperatorKind.OR.equals(binaryExpression.getOperator())) { addSimpleConditionsFromExpressionItems(binaryExpression.getLeft(), simpleConditionsExpressionItems); addSimpleConditionsFromExpressionItems(binaryExpression.getRight(), simpleConditionsExpressionItems); return; } else { if (isArithmeticOperator(binaryExpression.getOperator())) { addSimpleConditionsFromComplexExpressions(binaryExpression.getLeft(), simpleConditionsExpressionItems); addSimpleConditionsFromComplexExpressions(binaryExpression.getRight(), simpleConditionsExpressionItems); } if (!(binaryExpression.getLeft() instanceof Variable) || !(binaryExpression.getRight() instanceof ConstantExpression)) { return; //Skip conditions that are not like format 'variable op constant' } } simpleConditionsExpressionItems.add(binaryExpression); } else if (expressionItem instanceof AssignmentExpression) { AssignmentExpression assignmentExpression = (AssignmentExpression) expressionItem; addSimpleConditionsFromExpressionItems(assignmentExpression.getAssignment(), simpleConditionsExpressionItems); } }
private void addExpressionNodes(String guideId, ExpressionItem currentExpressionItem, GraphNode graphNode) throws InternalErrorException { if (currentExpressionItem instanceof BinaryExpression) { BinaryExpression binaryExpression = (BinaryExpression) currentExpressionItem; if (OperatorKind.OR.equals(binaryExpression.getOperator()) || OperatorKind.AND.equals(binaryExpression.getOperator())) { addExpressionNodes(guideId, binaryExpression.getLeft(), graphNode); addExpressionNodes(guideId, binaryExpression.getRight(), graphNode); return; } else if (isArithmeticOperator(binaryExpression.getOperator())) { addSimpleConditionsFromComplexExpressions(guideId, binaryExpression.getLeft(), graphNode); addSimpleConditionsFromComplexExpressions(guideId, binaryExpression.getRight(), graphNode); } } else if (currentExpressionItem instanceof AssignmentExpression) { AssignmentExpression assignmentExpression = (AssignmentExpression) currentExpressionItem; addExpressionNodes(guideId, assignmentExpression.getAssignment(), graphNode); } addExpressionToNode(guideId, currentExpressionItem, graphNode); }