Skip to content

Commit 35c0509

Browse files
authored
Merge pull request #28 from babltiga/enhancer-callback-filter
CGLIB Enhancer Callback Filter
2 parents cbabd74 + 014484d commit 35c0509

File tree

1 file changed

+69
-2
lines changed

1 file changed

+69
-2
lines changed

ipp-v3-java-devkit/src/main/java/com/intuit/ipp/query/GenerateQuery.java

Lines changed: 69 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,12 @@
1515
*******************************************************************************/
1616
package com.intuit.ipp.query;
1717

18+
import java.lang.reflect.Method;
1819
import java.util.Calendar;
1920
import java.util.Date;
2021

22+
import net.sf.cglib.proxy.Callback;
23+
import net.sf.cglib.proxy.CallbackFilter;
2124
import net.sf.cglib.proxy.Enhancer;
2225

2326
import com.intuit.ipp.core.IEntity;
@@ -27,6 +30,7 @@
2730
import com.intuit.ipp.query.expr.NumberPath;
2831
import com.intuit.ipp.query.expr.StringPath;
2932
import com.intuit.ipp.util.Logger;
33+
import net.sf.cglib.proxy.NoOp;
3034

3135
/**
3236
* Class used to generate the query string
@@ -76,7 +80,8 @@ public static <T> T createQueryEntity(Class<T> cl) {
7680
} else {
7781
enhancer.setSuperclass(cl);
7882
}
79-
enhancer.setCallback(new MyMethodInterceptor());
83+
enhancer.setCallbackFilter(CALLBACK_FILTER);
84+
enhancer.setCallbacks(new Callback[] {NoOp.INSTANCE, new MyMethodInterceptor()});
8085
return (T) enhancer.create();
8186
}
8287

@@ -96,7 +101,8 @@ public static <T> T createQueryEntity(T entity) {
96101
//enhancer.setCallback(new MyMethodInterceptor());
97102
} else {
98103
enhancer.setSuperclass(cl);
99-
enhancer.setCallback(new MyMethodInterceptor());
104+
enhancer.setCallbackFilter(CALLBACK_FILTER);
105+
enhancer.setCallbacks(new Callback[] {NoOp.INSTANCE, new MyMethodInterceptor()});
100106
}
101107
return (T) enhancer.create();
102108
}
@@ -257,4 +263,65 @@ public static void resetQueryMessage() {
257263
setMessage(new QueryMessage());
258264
}
259265

266+
/**
267+
* Callback filter which will filter out callback triggers for several {@link Object} methods.
268+
*/
269+
private static final CallbackFilter CALLBACK_FILTER = new CallbackFilter() {
270+
271+
@Override
272+
public int accept(Method method) {
273+
if (isFinalizeMethod(method) || isCloneMethod(method) || isEqualsMethod(method)
274+
|| isHashCodeMethod(method) || isToStringMethod(method)) {
275+
return 0;
276+
}
277+
return 1;
278+
}
279+
280+
/**
281+
* Determine whether the given method is a "finalize" method.
282+
* @see java.lang.Object#finalize()
283+
*/
284+
private boolean isFinalizeMethod(Method method) {
285+
return (method != null && method.getName().equals("finalize") &&
286+
method.getParameterTypes().length == 0);
287+
}
288+
289+
/**
290+
* Determine whether the given method is a "finalize" method.
291+
* @see java.lang.Object#finalize()
292+
*/
293+
private boolean isCloneMethod(Method method) {
294+
return (method != null && method.getName().equals("clone") &&
295+
method.getParameterTypes().length == 0);
296+
}
297+
298+
/**
299+
* Determine whether the given method is an "equals" method.
300+
* @see java.lang.Object#equals(Object)
301+
*/
302+
private boolean isEqualsMethod(Method method) {
303+
if (method == null || !method.getName().equals("equals")) {
304+
return false;
305+
}
306+
Class<?>[] paramTypes = method.getParameterTypes();
307+
return (paramTypes.length == 1 && paramTypes[0] == Object.class);
308+
}
309+
310+
/**
311+
* Determine whether the given method is a "hashCode" method.
312+
* @see java.lang.Object#hashCode()
313+
*/
314+
private boolean isHashCodeMethod(Method method) {
315+
return (method != null && method.getName().equals("hashCode") && method.getParameterTypes().length == 0);
316+
}
317+
318+
/**
319+
* Determine whether the given method is a "toString" method.
320+
* @see java.lang.Object#toString()
321+
*/
322+
private boolean isToStringMethod(Method method) {
323+
return (method != null && method.getName().equals("toString") && method.getParameterTypes().length == 0);
324+
}
325+
};
326+
260327
}

0 commit comments

Comments
 (0)