private void handleNegation(List<String> propertyNames, BlockStatement newCode, NotExpression not, VariableScope variableScope) { Expression subExpression = not.getExpression(); if (subExpression instanceof BinaryExpression) { ArgumentListExpression arguments = new ArgumentListExpression(); BlockStatement currentBody = new BlockStatement(); ClosureExpression newClosureExpression = new ClosureExpression(new Parameter[0], currentBody); newClosureExpression.setVariableScope(new VariableScope()); arguments.addExpression(newClosureExpression); addBinaryExpressionToNewBody(propertyNames, currentBody, (BinaryExpression) subExpression, false, variableScope); newCode.addStatement(new ExpressionStatement(new MethodCallExpression(new VariableExpression("this"), "not", arguments))); } else { sourceUnit.getErrorCollector().addError(new LocatedMessage("You can only negate a binary expressions in queries.", Token.newString(not.getText(), not.getLineNumber(), not.getColumnNumber()), sourceUnit)); } }