@java.lang.SuppressWarnings("unchecked") public class DetachedCriteriaTransformer extends org.codehaus.groovy.ast.ClassCodeVisitorSupport
ClassCodeVisitorSupport that transforms where methods into detached criteria queries
Modifiers | Name | Description |
---|---|---|
private class |
DetachedCriteriaTransformer.ClosureAndArguments |
Modifiers | Name | Description |
---|---|---|
private static java.util.Map<java.lang.String, java.lang.String> |
AGGREGATE_FUNCTIONS |
|
static java.lang.String |
AND_OPERATOR |
|
private static java.util.Set<java.lang.String> |
CANDIDATE_METHODS |
|
static java.util.Set<java.lang.String> |
CANDIDATE_METHODS_WHERE_ONLY |
|
static org.codehaus.groovy.ast.ClassNode |
DETACHED_CRITERIA_CLASS_NODE |
|
private static java.lang.Class<?>[] |
EMPTY_JAVA_CLASS_ARRAY |
|
static java.lang.String |
EQUALS_OPERATOR |
|
static org.codehaus.groovy.ast.ClassNode |
FUNCTION_CALL_CRITERION |
|
static java.lang.String |
IS_NULL_CRITERION |
|
private static java.util.Map<java.lang.String, java.lang.String> |
METHOD_TO_SUBQUERY_MAP |
|
private static java.util.Map<java.lang.String, java.lang.String> |
OPERATOR_TO_CRITERIA_METHOD_MAP |
|
private static java.util.Map<java.lang.String, org.codehaus.groovy.ast.ClassNode> |
OPERATOR_TO_CRITERION_METHOD_MAP |
|
static java.lang.String |
OR_OPERATOR |
|
private static java.util.Map<java.lang.String, java.lang.String> |
PROPERTY_COMPARISON_OPERATOR_TO_CRITERIA_METHOD_MAP |
|
private static java.util.Map<java.lang.String, java.lang.String> |
SIZE_OPERATOR_TO_CRITERIA_METHOD_MAP |
|
private static java.util.Set<java.lang.String> |
SUPPORTED_FUNCTIONS |
|
private static java.lang.Object |
TRANSFORMED_MARKER |
|
static org.codehaus.groovy.ast.expr.ConstantExpression |
WHERE_LAZY |
|
protected java.util.Set<org.codehaus.groovy.ast.expr.Expression> |
aliasExpressions |
|
protected java.util.Map<java.lang.String, java.lang.Object> |
aliases |
|
protected org.codehaus.groovy.ast.ClassNode |
currentClassNode |
|
protected java.util.Map<java.lang.String, org.codehaus.groovy.ast.ClassNode> |
detachedCriteriaVariables |
|
private org.codehaus.groovy.control.SourceUnit |
sourceUnit |
|
protected java.util.Map<java.lang.String, org.codehaus.groovy.ast.ClassNode> |
staticDetachedCriteriaVariables |
Constructor and description |
---|
DetachedCriteriaTransformer
(org.codehaus.groovy.control.SourceUnit sourceUnit) |
Type Params | Return Type | Name and description |
---|---|---|
|
private void |
addBinaryExpressionToNewBody(java.util.List<java.lang.String> propertyNames, org.codehaus.groovy.ast.stmt.BlockStatement newCode, org.codehaus.groovy.ast.expr.BinaryExpression be, boolean addAll, org.codehaus.groovy.ast.VariableScope variableScope) |
|
private void |
addBlockStatementToNewQuery(org.codehaus.groovy.ast.stmt.BlockStatement blockStatement, org.codehaus.groovy.ast.stmt.BlockStatement newCode, boolean addAll, java.util.List<java.lang.String> propertyNames, org.codehaus.groovy.ast.VariableScope variableScope) |
|
private void |
addCriteriaCall(org.codehaus.groovy.ast.stmt.BlockStatement newCode, java.lang.String operator, org.codehaus.groovy.ast.expr.Expression leftExpression, org.codehaus.groovy.ast.expr.Expression rightExpression, java.lang.String propertyName, java.util.List<java.lang.String> propertyNames, boolean addAll, java.lang.String methodToCall, org.codehaus.groovy.ast.VariableScope variableScope) |
|
private void |
addCriteriaCallMethodExpression(org.codehaus.groovy.ast.stmt.BlockStatement newCode, java.lang.String operator, org.codehaus.groovy.ast.expr.Expression leftExpression, org.codehaus.groovy.ast.expr.Expression rightExpression, java.lang.String propertyName, java.util.List<java.lang.String> propertyNames, boolean addAll, org.codehaus.groovy.ast.VariableScope variableScope) |
|
private void |
addProjectionToCurrentBody(org.codehaus.groovy.ast.stmt.BlockStatement currentBody, java.lang.String functionName, java.lang.String aggregatePropertyName, org.codehaus.groovy.ast.VariableScope variableScope) |
|
private void |
addStatementToNewQuery(org.codehaus.groovy.ast.stmt.Statement statement, org.codehaus.groovy.ast.stmt.BlockStatement newCode, boolean addAll, java.util.List<java.lang.String> propertyNames, org.codehaus.groovy.ast.VariableScope variableScope) |
|
private org.codehaus.groovy.ast.stmt.Statement |
flattenStatementIfNecessary(org.codehaus.groovy.ast.stmt.BlockStatement blockStatement) |
|
private org.codehaus.groovy.ast.ClassNode |
getAssociationTypeFromGenerics(org.codehaus.groovy.ast.ClassNode type) |
|
protected org.codehaus.groovy.ast.ClassNode |
getParameterizedDetachedCriteriaClassNode(org.codehaus.groovy.ast.ClassNode classNode) |
|
private java.util.List<java.lang.String> |
getPropertyNamesForAssociation(org.codehaus.groovy.ast.ClassNode type) |
|
private org.codehaus.groovy.ast.ClassNode |
getPropertyType(java.lang.String prop) |
|
private org.codehaus.groovy.ast.ClassNode |
getPropertyTypeFromGenerics(java.lang.String propertyName, org.codehaus.groovy.ast.ClassNode classNode) |
|
protected org.codehaus.groovy.control.SourceUnit |
getSourceUnit() |
|
private org.codehaus.groovy.ast.expr.ClassExpression |
getTargetClassExpresssion(org.codehaus.groovy.ast.expr.Expression objectExpression) |
|
private void |
handleAssociationMethodCallExpression(org.codehaus.groovy.ast.stmt.BlockStatement newCode, org.codehaus.groovy.ast.expr.MethodCallExpression methodCall, java.util.List<java.lang.String> propertyNames, org.codehaus.groovy.ast.VariableScope variableScope) |
|
private void |
handleAssociationQueryViaPropertyExpression(org.codehaus.groovy.ast.expr.PropertyExpression pe, org.codehaus.groovy.ast.expr.Expression oppositeSide, java.lang.String operator, org.codehaus.groovy.ast.stmt.BlockStatement newCode, java.util.List<java.lang.String> propertyNames, java.lang.String functionName, org.codehaus.groovy.ast.VariableScope variableScope) |
|
private void |
handleBinaryExpressionSide(org.codehaus.groovy.ast.expr.Expression expressionSide, org.codehaus.groovy.ast.expr.Expression oppositeSide, java.lang.String operator, org.codehaus.groovy.ast.stmt.BlockStatement newCode, boolean addAll, java.util.List<java.lang.String> propertyNames, org.codehaus.groovy.ast.VariableScope variableScope) |
|
private org.codehaus.groovy.ast.expr.ClosureExpression |
handleDetachedCriteriaCast(org.codehaus.groovy.ast.expr.Expression initializationExpression) |
|
private void |
handleFunctionCall(org.codehaus.groovy.ast.stmt.BlockStatement newCode, java.lang.String operator, org.codehaus.groovy.ast.expr.Expression rightExpression, java.lang.String functionName, org.codehaus.groovy.ast.expr.Expression propertyNameExpression) |
|
private void |
handleNegation(java.util.List<java.lang.String> propertyNames, org.codehaus.groovy.ast.stmt.BlockStatement newCode, org.codehaus.groovy.ast.expr.NotExpression not, org.codehaus.groovy.ast.VariableScope variableScope) |
|
private boolean |
hasClosureArgument(org.codehaus.groovy.ast.expr.ArgumentListExpression arguments) |
|
private boolean |
isAssociationMethodCall(java.util.List<java.lang.String> propertyNames, java.lang.String methodName, org.codehaus.groovy.ast.expr.ArgumentListExpression arguments) |
|
private boolean |
isCandidateMethod(java.lang.String methodName, org.codehaus.groovy.ast.expr.Expression arguments, java.util.Set<java.lang.String> candidateMethods) |
|
private boolean |
isCandidateMethodCallForTransform(org.codehaus.groovy.ast.expr.Expression objectExpression, org.codehaus.groovy.ast.expr.Expression method, org.codehaus.groovy.ast.expr.Expression arguments) |
|
private boolean |
isCandidateWhereMethod(org.codehaus.groovy.ast.expr.Expression method, org.codehaus.groovy.ast.expr.Expression arguments) |
|
private boolean |
isCandidateWhereMethod(java.lang.String methodName, org.codehaus.groovy.ast.expr.Expression arguments) |
|
private boolean |
isDetachedCriteriaVariable(org.codehaus.groovy.ast.expr.VariableExpression ve) |
|
private boolean |
isFunctionCall(org.codehaus.groovy.ast.expr.MethodCallExpression mce) |
|
private boolean |
isFunctionCall(org.codehaus.groovy.ast.expr.MethodCallExpression mce, java.lang.String methodName, org.codehaus.groovy.ast.expr.Expression objectExpression) |
|
private boolean |
isObjectExpressionWhereCall(org.codehaus.groovy.ast.expr.Expression objectExpression) |
|
private void |
logTransformationError(org.codehaus.groovy.ast.ASTNode astNode, java.lang.Exception e) |
<K, V> |
private static java.util.Map |
newMap(java.lang.Object keysAndValues) |
<T> |
private static java.util.Set<T> |
newSet(T values) |
|
public void |
transformClosureExpression(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.expr.ClosureExpression closureExpression) |
|
public void |
visitClass(org.codehaus.groovy.ast.ClassNode node) |
|
public void |
visitDeclarationExpression(org.codehaus.groovy.ast.expr.DeclarationExpression expression) |
|
public void |
visitField(org.codehaus.groovy.ast.FieldNode node) |
|
public void |
visitMethod(org.codehaus.groovy.ast.MethodNode node) |
|
private void |
visitMethodCall(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.expr.Expression arguments) |
|
public void |
visitMethodCallExpression(org.codehaus.groovy.ast.expr.MethodCallExpression call) |
|
private void |
visitMethodCallOnDetachedCriteria(org.codehaus.groovy.ast.ClassNode classNode, org.codehaus.groovy.ast.expr.ArgumentListExpression arguments) |
|
public void |
visitStaticMethodCallExpression(org.codehaus.groovy.ast.expr.StaticMethodCallExpression call) |
Methods inherited from class | Name |
---|---|
class org.codehaus.groovy.ast.ClassCodeVisitorSupport |
org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitMethod(org.codehaus.groovy.ast.MethodNode), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitField(org.codehaus.groovy.ast.FieldNode), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitAnnotations(org.codehaus.groovy.ast.AnnotatedNode), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitImports(org.codehaus.groovy.ast.ModuleNode), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitBlockStatement(org.codehaus.groovy.ast.stmt.BlockStatement), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitForLoop(org.codehaus.groovy.ast.stmt.ForStatement), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitWhileLoop(org.codehaus.groovy.ast.stmt.WhileStatement), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitDoWhileLoop(org.codehaus.groovy.ast.stmt.DoWhileStatement), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitIfElse(org.codehaus.groovy.ast.stmt.IfStatement), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitExpressionStatement(org.codehaus.groovy.ast.stmt.ExpressionStatement), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitReturnStatement(org.codehaus.groovy.ast.stmt.ReturnStatement), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitAssertStatement(org.codehaus.groovy.ast.stmt.AssertStatement), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitTryCatchFinally(org.codehaus.groovy.ast.stmt.TryCatchStatement), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitSwitch(org.codehaus.groovy.ast.stmt.SwitchStatement), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitCaseStatement(org.codehaus.groovy.ast.stmt.CaseStatement), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitBreakStatement(org.codehaus.groovy.ast.stmt.BreakStatement), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitContinueStatement(org.codehaus.groovy.ast.stmt.ContinueStatement), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitThrowStatement(org.codehaus.groovy.ast.stmt.ThrowStatement), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitSynchronizedStatement(org.codehaus.groovy.ast.stmt.SynchronizedStatement), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitCatchStatement(org.codehaus.groovy.ast.stmt.CatchStatement), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitDeclarationExpression(org.codehaus.groovy.ast.expr.DeclarationExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitProperty(org.codehaus.groovy.ast.PropertyNode), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitConstructor(org.codehaus.groovy.ast.ConstructorNode), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitPackage(org.codehaus.groovy.ast.PackageNode), org.codehaus.groovy.ast.ClassCodeVisitorSupport#addError(java.lang.String, org.codehaus.groovy.ast.ASTNode), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitClass(org.codehaus.groovy.ast.ClassNode), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitClosureExpression(org.codehaus.groovy.ast.expr.ClosureExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitConstantExpression(org.codehaus.groovy.ast.expr.ConstantExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitTupleExpression(org.codehaus.groovy.ast.expr.TupleExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitEmptyStatement(org.codehaus.groovy.ast.stmt.EmptyStatement), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitMethodCallExpression(org.codehaus.groovy.ast.expr.MethodCallExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitTernaryExpression(org.codehaus.groovy.ast.expr.TernaryExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitBinaryExpression(org.codehaus.groovy.ast.expr.BinaryExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitPrefixExpression(org.codehaus.groovy.ast.expr.PrefixExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitPostfixExpression(org.codehaus.groovy.ast.expr.PostfixExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitBooleanExpression(org.codehaus.groovy.ast.expr.BooleanExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitLambdaExpression(org.codehaus.groovy.ast.expr.LambdaExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitMapExpression(org.codehaus.groovy.ast.expr.MapExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitMapEntryExpression(org.codehaus.groovy.ast.expr.MapEntryExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitListExpression(org.codehaus.groovy.ast.expr.ListExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitRangeExpression(org.codehaus.groovy.ast.expr.RangeExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitPropertyExpression(org.codehaus.groovy.ast.expr.PropertyExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitAttributeExpression(org.codehaus.groovy.ast.expr.AttributeExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitFieldExpression(org.codehaus.groovy.ast.expr.FieldExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitClassExpression(org.codehaus.groovy.ast.expr.ClassExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitVariableExpression(org.codehaus.groovy.ast.expr.VariableExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitGStringExpression(org.codehaus.groovy.ast.expr.GStringExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitArrayExpression(org.codehaus.groovy.ast.expr.ArrayExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitSpreadExpression(org.codehaus.groovy.ast.expr.SpreadExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitSpreadMapExpression(org.codehaus.groovy.ast.expr.SpreadMapExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitNotExpression(org.codehaus.groovy.ast.expr.NotExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitUnaryMinusExpression(org.codehaus.groovy.ast.expr.UnaryMinusExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitUnaryPlusExpression(org.codehaus.groovy.ast.expr.UnaryPlusExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitCastExpression(org.codehaus.groovy.ast.expr.CastExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitClosureListExpression(org.codehaus.groovy.ast.expr.ClosureListExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitBytecodeExpression(org.codehaus.groovy.classgen.BytecodeExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitArgumentlistExpression(org.codehaus.groovy.ast.expr.ArgumentListExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitStaticMethodCallExpression(org.codehaus.groovy.ast.expr.StaticMethodCallExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitConstructorCallExpression(org.codehaus.groovy.ast.expr.ConstructorCallExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitShortTernaryExpression(org.codehaus.groovy.ast.expr.ElvisOperatorExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitMethodPointerExpression(org.codehaus.groovy.ast.expr.MethodPointerExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitMethodReferenceExpression(org.codehaus.groovy.ast.expr.MethodReferenceExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitBitwiseNegationExpression(org.codehaus.groovy.ast.expr.BitwiseNegationExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#wait(long), org.codehaus.groovy.ast.ClassCodeVisitorSupport#wait(long, int), org.codehaus.groovy.ast.ClassCodeVisitorSupport#wait(), org.codehaus.groovy.ast.ClassCodeVisitorSupport#equals(java.lang.Object), org.codehaus.groovy.ast.ClassCodeVisitorSupport#toString(), org.codehaus.groovy.ast.ClassCodeVisitorSupport#hashCode(), org.codehaus.groovy.ast.ClassCodeVisitorSupport#getClass(), org.codehaus.groovy.ast.ClassCodeVisitorSupport#notify(), org.codehaus.groovy.ast.ClassCodeVisitorSupport#notifyAll(), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitEmptyExpression(org.codehaus.groovy.ast.expr.EmptyExpression), org.codehaus.groovy.ast.ClassCodeVisitorSupport#visitListOfExpressions(java.util.List) |