use of org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.BooleanLiteral in project xtext-core by eclipse.
the class ConditionSimplifier method caseNotExpression.
@Override
public Expression caseNotExpression(NotExpression object) {
if (object.getExpression() instanceof NotExpression)
return doSwitch(((NotExpression) object.getExpression()).getExpression());
Expression result = doSwitch(object.getExpression());
if (result instanceof BooleanLiteral) {
BooleanLiteral casted = (BooleanLiteral) result;
casted.setValue(!casted.isValue());
return casted;
} else {
object.setExpression(result);
return object;
}
}
use of org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.BooleanLiteral in project xtext-core by eclipse.
the class ConditionSimplifier method caseOrExpression.
@Override
public Expression caseOrExpression(OrExpression object) {
if (object.getRight() == null)
return doSwitch(object.getLeft());
if (object.getLeft() == null)
return doSwitch(object.getRight());
Expression left = doSwitch(object.getLeft());
Expression right = doSwitch(object.getRight());
if (areSemanticallyEqual(left, right))
return left;
if (left instanceof BooleanLiteral) {
if (((BooleanLiteral) left).isValue()) {
return left;
}
return right;
}
if (right instanceof BooleanLiteral) {
if (((BooleanLiteral) right).isValue()) {
return right;
}
return left;
}
if (left instanceof AndExpression) {
AndExpression leftAsAnd = (AndExpression) left;
if (areSemanticallyEqual(leftAsAnd.getLeft(), right) || areSemanticallyEqual(leftAsAnd.getRight(), right))
return right;
} else if (right instanceof AndExpression) {
AndExpression rightAsAnd = (AndExpression) right;
if (areSemanticallyEqual(rightAsAnd.getLeft(), left) || areSemanticallyEqual(rightAsAnd.getRight(), left))
return left;
}
if (left instanceof OrExpression) {
OrExpression leftAsOr = (OrExpression) left;
if (areSemanticallyEqual(leftAsOr.getLeft(), right) || areSemanticallyEqual(leftAsOr.getRight(), right))
return left;
} else if (right instanceof OrExpression) {
OrExpression rightAsOr = (OrExpression) right;
if (areSemanticallyEqual(rightAsOr.getLeft(), left) || areSemanticallyEqual(rightAsOr.getRight(), left))
return right;
}
if (left instanceof NotExpression) {
if (areSemanticallyEqual(((NotExpression) left).getExpression(), right)) {
BooleanLiteral result = SimpleExpressionsFactory.eINSTANCE.createBooleanLiteral();
result.setValue(true);
return result;
}
} else if (right instanceof NotExpression) {
if (areSemanticallyEqual(left, ((NotExpression) right).getExpression())) {
BooleanLiteral result = SimpleExpressionsFactory.eINSTANCE.createBooleanLiteral();
result.setValue(true);
return result;
}
}
object.setLeft(left);
object.setRight(right);
return object;
}
use of org.eclipse.xtext.xtext.generator.parser.antlr.splitting.simpleExpressions.BooleanLiteral in project xtext-core by eclipse.
the class ConditionSimplifier method caseAndExpression.
@Override
public Expression caseAndExpression(AndExpression object) {
if (object.getRight() == null)
return doSwitch(object.getLeft());
if (object.getLeft() == null)
return doSwitch(object.getRight());
Expression left = doSwitch(object.getLeft());
Expression right = doSwitch(object.getRight());
if (areSemanticallyEqual(left, right))
return left;
if (left instanceof BooleanLiteral) {
if (((BooleanLiteral) left).isValue()) {
return right;
}
return left;
}
if (right instanceof BooleanLiteral) {
if (((BooleanLiteral) right).isValue()) {
return left;
}
return right;
}
if (left instanceof NotExpression) {
if (areSemanticallyEqual(((NotExpression) left).getExpression(), right)) {
BooleanLiteral result = SimpleExpressionsFactory.eINSTANCE.createBooleanLiteral();
result.setValue(false);
return result;
}
} else if (right instanceof NotExpression) {
if (areSemanticallyEqual(left, ((NotExpression) right).getExpression())) {
BooleanLiteral result = SimpleExpressionsFactory.eINSTANCE.createBooleanLiteral();
result.setValue(false);
return result;
}
}
object.setLeft(left);
object.setRight(right);
return object;
}
Aggregations