alibaba / jvm-sandbox

Real - time non-invasive AOP framework container based on JVM
GNU Lesser General Public License v3.0
6.69k stars 1.55k forks source link

1.4.0版本支持JDK20相关问题 #455

Open ZhaiMo15 opened 7 months ago

ZhaiMo15 commented 7 months ago

看commit log,在1.4.0的540da04cd2cb936f40626e11e0e90a50d616a9ae提到支撑最新版JDK(JDK20) 但在源码中,如sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm.java中 还有多处ASM7的内容,如 accept(new ClassVisitor(ASM7) 这里是否都需要修改升级?

z529192557 commented 4 months ago

我印象中,这个是指 ASM API VERSION ,和支持的JDK没有关系,org.objectweb.asm.Opcodes 下的versions v1_8,vxx是支持的版本

ZhaiMo15 commented 4 months ago

但是应该是ASM9才支持的JDK11 这里限制了版本 在一些需要check的地方的检查用ASM9的话就会出错

z529192557 commented 4 months ago

ClassVisitor visitRecordComponent visitPermittedSubclass 这两个jdk15的特性,确实需要check ASM8和ASM9, 不过如果你使用的是jdk11+,且你需要增强的类,没有这两个特性(google: java-record permitted-subclass ),那理论上不会报错

ZhaiMo15 commented 4 months ago

确实是visitPermittedSubclass 用的是JDK17

reducm commented 2 months ago

看commit log,在1.4.0的540da04cd2cb936f40626e11e0e90a50d616a9ae提到支撑最新版JDK(JDK20) 但在源码中,如sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm.java中 还有多处ASM7的内容,如 accept(new ClassVisitor(ASM7) 这里是否都需要修改升级?

各种服务升级到sdk21后,asm版本是各种报错,目前暂时是在 ClassStructureImplByAsm.java做了个ugly patch, 原来的代码是写死了ASM7,改成ASM7有问题就换成ASM9,集中在permitted-subclass这个问题