Skip to content

Commit 827bfd1

Browse files
authored
Change no longer supported CGLIB to ByteBuddy (#171)
1 parent 06f5be3 commit 827bfd1

File tree

11 files changed

+43
-62
lines changed

11 files changed

+43
-62
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@
9191
<guava.version>33.0.0-jre</guava.version>
9292
<codegen.version>0.6.8</codegen.version>
9393
<mysema.lang.version>0.2.4</mysema.lang.version>
94-
<cglib.version>3.3.0</cglib.version>
94+
<byte-buddy.version>1.14.10</byte-buddy.version>
9595
<slf4j.version>2.0.9</slf4j.version>
9696
<surefire.version>3.2.3</surefire.version>
9797
<animal-sniffer.version>1.23</animal-sniffer.version>

querydsl-codegen-utils/src/main/java/com/querydsl/codegen/utils/support/ClassUtils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,8 @@ public static Class<?> normalize(Class<?> clazz) {
7979
return Collection.class;
8080
} else if (Map.class.isAssignableFrom(clazz)) {
8181
return Map.class;
82-
// check for CGLIB generated classes
83-
} else if (clazz.getName().contains("$$")) {
82+
// check for Easy Mock or Byte Buddy generated classes
83+
} else if (clazz.getName().contains("$$") || clazz.getName().contains("$ByteBuddy$")) {
8484
Class<?> zuper = clazz.getSuperclass();
8585
if (zuper != null && !Object.class.equals(zuper)) {
8686
return zuper;

querydsl-collections/pom.xml

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,6 @@
5353
<scope>test</scope>
5454
</dependency>
5555

56-
<dependency>
57-
<groupId>cglib</groupId>
58-
<artifactId>cglib</artifactId>
59-
<version>${cglib.version}</version>
60-
<scope>test</scope>
61-
</dependency>
62-
6356
<dependency>
6457
<groupId>org.openjdk.jmh</groupId>
6558
<artifactId>jmh-core</artifactId>

querydsl-core/pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@
3131

3232
<!-- alias dependencies -->
3333
<dependency>
34-
<groupId>cglib</groupId>
35-
<artifactId>cglib</artifactId>
36-
<version>${cglib.version}</version>
34+
<groupId>net.bytebuddy</groupId>
35+
<artifactId>byte-buddy</artifactId>
36+
<version>${byte-buddy.version}</version>
3737
<optional>true</optional>
3838
</dependency>
3939

querydsl-core/src/main/java/com/querydsl/core/alias/AliasFactory.java

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,14 @@
1717
import com.querydsl.core.types.Expression;
1818
import com.querydsl.core.types.Path;
1919
import com.querydsl.core.types.PathMetadataFactory;
20+
import java.lang.reflect.InvocationTargetException;
2021
import java.util.Collections;
2122
import java.util.Map;
2223
import java.util.WeakHashMap;
2324
import java.util.concurrent.ConcurrentHashMap;
24-
import net.sf.cglib.proxy.Enhancer;
25-
import net.sf.cglib.proxy.MethodInterceptor;
25+
import net.bytebuddy.ByteBuddy;
26+
import net.bytebuddy.implementation.MethodDelegation;
27+
import net.bytebuddy.matcher.ElementMatchers;
2628
import org.jetbrains.annotations.Nullable;
2729

2830
/**
@@ -98,21 +100,26 @@ public <A> A createAliasForVariable(Class<A> cl, String var) {
98100
* @param path underlying expression
99101
* @return proxy instance
100102
*/
101-
@SuppressWarnings("unchecked")
102103
protected <A> A createProxy(Class<A> cl, Expression<?> path) {
103-
Enhancer enhancer = new Enhancer();
104-
enhancer.setClassLoader(AliasFactory.class.getClassLoader());
105-
if (cl.isInterface()) {
106-
enhancer.setInterfaces(new Class<?>[] {cl, ManagedObject.class});
107-
} else {
108-
enhancer.setSuperclass(cl);
109-
enhancer.setInterfaces(new Class<?>[] {ManagedObject.class});
104+
try {
105+
return new ByteBuddy()
106+
.subclass(cl)
107+
.implement(ManagedObject.class)
108+
.method(ElementMatchers.any())
109+
.intercept(
110+
MethodDelegation.to(
111+
new PropertyAccessInvocationHandler(path, this, pathFactory, typeSystem)))
112+
.make()
113+
.load(AliasFactory.class.getClassLoader())
114+
.getLoaded()
115+
.getDeclaredConstructor()
116+
.newInstance();
117+
} catch (InvocationTargetException
118+
| InstantiationException
119+
| IllegalAccessException
120+
| NoSuchMethodException e) {
121+
throw new RuntimeException(e);
110122
}
111-
// creates one handler per proxy
112-
MethodInterceptor handler =
113-
new PropertyAccessInvocationHandler(path, this, pathFactory, typeSystem);
114-
enhancer.setCallback(handler);
115-
return (A) enhancer.create();
116123
}
117124

118125
/**

querydsl-core/src/main/java/com/querydsl/core/alias/ManagedObject.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
import com.querydsl.core.types.Path;
1717

18-
/** {@code ManagedObject} is a tagging interface for CGLIB alias proxies */
18+
/** {@code ManagedObject} is a tagging interface for Byte Buddy alias proxies */
1919
public interface ManagedObject {
2020

2121
/**

querydsl-core/src/main/java/com/querydsl/core/alias/PropertyAccessInvocationHandler.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@
1313
*/
1414
package com.querydsl.core.alias;
1515

16-
import com.querydsl.core.types.*;
16+
import com.querydsl.core.types.Expression;
17+
import com.querydsl.core.types.ParameterizedExpression;
18+
import com.querydsl.core.types.Path;
19+
import com.querydsl.core.types.PathMetadata;
20+
import com.querydsl.core.types.PathMetadataFactory;
1721
import com.querydsl.core.util.BeanUtils;
1822
import com.querydsl.core.util.ReflectionUtils;
1923
import java.lang.reflect.Array;
@@ -27,17 +31,19 @@
2731
import java.util.Date;
2832
import java.util.Map;
2933
import java.util.concurrent.ConcurrentHashMap;
30-
import net.sf.cglib.proxy.MethodInterceptor;
31-
import net.sf.cglib.proxy.MethodProxy;
34+
import net.bytebuddy.implementation.bind.annotation.AllArguments;
35+
import net.bytebuddy.implementation.bind.annotation.Origin;
36+
import net.bytebuddy.implementation.bind.annotation.RuntimeType;
37+
import net.bytebuddy.implementation.bind.annotation.This;
3238
import org.jetbrains.annotations.Nullable;
3339

3440
/**
35-
* {@code PropertyAccessInvocationHandler} is the main InvocationHandler class for the CGLIB alias
36-
* proxies
41+
* {@code PropertyAccessInvocationHandler} is the main InvocationHandler class for the Byte Buddy
42+
* alias proxies
3743
*
3844
* @author tiwe
3945
*/
40-
class PropertyAccessInvocationHandler implements MethodInterceptor {
46+
public class PropertyAccessInvocationHandler {
4147

4248
private static final int RETURN_VALUE = 42;
4349

@@ -65,9 +71,8 @@ class PropertyAccessInvocationHandler implements MethodInterceptor {
6571
}
6672

6773
// CHECKSTYLE:OFF
68-
@Override
69-
public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy)
70-
throws Throwable {
74+
@RuntimeType
75+
public Object intercept(@This Object proxy, @AllArguments Object[] args, @Origin Method method) {
7176
// CHECKSTYLE:ON
7277
Object rv = null;
7378

querydsl-jpa/pom.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,6 @@
7777
<artifactId>jakarta.validation-api</artifactId>
7878
<scope>test</scope>
7979
</dependency>
80-
<dependency>
81-
<groupId>cglib</groupId>
82-
<artifactId>cglib</artifactId>
83-
<version>${cglib.version}</version>
84-
<scope>test</scope>
85-
</dependency>
8680
<dependency>
8781
<groupId>org.eclipse.persistence</groupId>
8882
<artifactId>eclipselink</artifactId>

querydsl-lucene3/pom.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,6 @@
4343
</dependency>
4444

4545
<!-- test -->
46-
<dependency>
47-
<groupId>cglib</groupId>
48-
<artifactId>cglib</artifactId>
49-
<version>${cglib.version}</version>
50-
<scope>test</scope>
51-
</dependency>
5246
<dependency>
5347
<groupId>io.github.openfeign.querydsl</groupId>
5448
<artifactId>querydsl-core</artifactId>

querydsl-sql-spatial/pom.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,6 @@
4444
</dependency>
4545

4646
<!-- test -->
47-
<dependency>
48-
<groupId>cglib</groupId>
49-
<artifactId>cglib</artifactId>
50-
<version>${cglib.version}</version>
51-
<scope>test</scope>
52-
</dependency>
5347
<dependency>
5448
<groupId>org.hsqldb</groupId>
5549
<artifactId>hsqldb</artifactId>

0 commit comments

Comments
 (0)