Class InsertIsPresentChecksVisitor
- java.lang.Object
-
- de.monticore.tf.odrules.subConstraints.InsertIsPresentChecksVisitor
-
- All Implemented Interfaces:
CommonExpressionsVisitor2,de.monticore.visitor.IVisitor
public class InsertIsPresentChecksVisitor extends java.lang.Object implements CommonExpressionsVisitor2
Created by Alexander Wilts on 16.01.2017.This visitor inserts isPresent()-checks into expressions that contain optional variables.
Let $O be an optional variable in this expression: isValid($O). In case that no value is present for $O, the evaluation of this expression would produce a NoSuchElementException. In order to prevent this we add an isPresent()-check to the expression like this: !$O.isPresent || isValid($O)
Additionally we have to consider the context of the optional. The isPresent-Check has to be implemented differently depending on whether the optional is used inside an OR-Expression or an AND-Expression.
Examples for normal variable $A and optional variable $O:
$A && $Oresults in$A && (!$O.isPresent || isValid($O))$A|| $O results in$A || ($O.isPresent && isValid($O))
-
-
Field Summary
Fields Modifier and Type Field Description protected HierarchyHelperhierarchyHelperprotected java.util.List<ASTMatchingObject>lhsObjectsbooleanoptionalInOrPresentASTExpressionsubConstraint
-
Constructor Summary
Constructors Constructor Description InsertIsPresentChecksVisitor(java.util.List<ASTMatchingObject> lhsObjects, HierarchyHelper hierarchyHelper, ASTExpression subConstraint)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description ASTExpressionreplaceNode(ASTExpression node)voidvisit(ASTBooleanAndOpExpression node)voidvisit(ASTBooleanNotExpression node)voidvisit(ASTBooleanOrOpExpression node)voidvisit(ASTBracketExpression node)voidvisit(ASTCallExpression node)voidvisit(ASTEqualsExpression node)voidvisit(ASTFieldAccessExpression node)voidvisit(ASTLogicalNotExpression node)voidvisit(ASTPlusExpression node)-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface de.monticore.expressions.commonexpressions._visitor.CommonExpressionsVisitor2
endVisit, endVisit, endVisit, endVisit, endVisit, endVisit, endVisit, endVisit, endVisit, endVisit, endVisit, endVisit, endVisit, endVisit, endVisit, endVisit, endVisit, endVisit, endVisit, endVisit, endVisit, endVisit, endVisit, endVisit, endVisit, endVisit, endVisit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit
-
-
-
-
Field Detail
-
optionalInOrPresent
public boolean optionalInOrPresent
-
lhsObjects
protected java.util.List<ASTMatchingObject> lhsObjects
-
hierarchyHelper
protected HierarchyHelper hierarchyHelper
-
subConstraint
public ASTExpression subConstraint
-
-
Constructor Detail
-
InsertIsPresentChecksVisitor
public InsertIsPresentChecksVisitor(java.util.List<ASTMatchingObject> lhsObjects, HierarchyHelper hierarchyHelper, ASTExpression subConstraint)
-
-
Method Detail
-
visit
public void visit(ASTCallExpression node)
- Specified by:
visitin interfaceCommonExpressionsVisitor2
-
visit
public void visit(ASTFieldAccessExpression node)
- Specified by:
visitin interfaceCommonExpressionsVisitor2
-
visit
public void visit(ASTBooleanNotExpression node)
- Specified by:
visitin interfaceCommonExpressionsVisitor2
-
visit
public void visit(ASTLogicalNotExpression node)
- Specified by:
visitin interfaceCommonExpressionsVisitor2
-
visit
public void visit(ASTEqualsExpression node)
- Specified by:
visitin interfaceCommonExpressionsVisitor2
-
visit
public void visit(ASTPlusExpression node)
- Specified by:
visitin interfaceCommonExpressionsVisitor2
-
visit
public void visit(ASTBracketExpression node)
- Specified by:
visitin interfaceCommonExpressionsVisitor2
-
visit
public void visit(ASTBooleanAndOpExpression node)
- Specified by:
visitin interfaceCommonExpressionsVisitor2
-
visit
public void visit(ASTBooleanOrOpExpression node)
- Specified by:
visitin interfaceCommonExpressionsVisitor2
-
replaceNode
public ASTExpression replaceNode(ASTExpression node)
-
-