1616import io .dongtai .log .DongTaiLog ;
1717import io .dongtai .log .ErrorCode ;
1818import org .apache .commons .lang3 .time .StopWatch ;
19- import org .objectweb .asm .*;
19+ import org .objectweb .asm .ClassReader ;
20+ import org .objectweb .asm .ClassVisitor ;
21+ import org .objectweb .asm .ClassWriter ;
2022
2123import java .io .File ;
2224import java .lang .dongtai .SpyDispatcherHandler ;
2729import java .security .CodeSource ;
2830import java .security .ProtectionDomain ;
2931import java .util .*;
32+ import java .util .concurrent .ConcurrentHashMap ;
33+ import java .util .concurrent .ConcurrentSkipListSet ;
3034
3135import static org .apache .commons .io .FileUtils .writeByteArrayToFile ;
32- import static org .objectweb .asm .ClassWriter .*;
36+ import static org .objectweb .asm .ClassWriter .COMPUTE_FRAMES ;
37+ import static org .objectweb .asm .ClassWriter .COMPUTE_MAXS ;
3338
3439/**
3540@@ -119,6 +124,8 @@ public byte[] transform(final ClassLoader loader,
119124 final Class <?> classBeingRedefined ,
120125 final ProtectionDomain protectionDomain ,
121126 final byte [] srcByteCodeArray ) {
127+
128+ // TODO 那下面这段逻辑是否就可以去掉了?
122129 String threadName = Thread .currentThread ().getName ();
123130 if (threadName .startsWith ("DongTai-IAST-Core" )) {
124131 return null ;
@@ -172,12 +179,10 @@ public byte[] transform(final ClassLoader loader,
172179 }
173180 final String className = classContext .getClassName ();
174181
175- Set <String > ancestors = classDiagram .getDiagram (className );
182+ // 设置类的祖先类
183+ Set <String > ancestors = classDiagram .getClassAncestorSet (className );
176184 if (ancestors == null ) {
177- classDiagram .setLoader (loader );
178- classDiagram .saveAncestors (className , classContext .getSuperClassName (), classContext .getInterfaces ());
179- ancestors = classDiagram .getAncestors (className , classContext .getSuperClassName (),
180- classContext .getInterfaces ());
185+ ancestors = classDiagram .updateAncestorsByClassContext (loader , classContext );
181186 }
182187 classContext .setAncestors (ancestors );
183188
@@ -288,9 +293,9 @@ public Class<?>[] findForRetransform() {
288293 continue ;
289294 }
290295 String className = clazz .getName ();
291- Set <String > diagram = classDiagram .getDiagram (className );
296+ Set <String > diagram = classDiagram .getClassAncestorSet (className );
292297 if (diagram == null ) {
293- diagram = new HashSet < String > ();
298+ diagram = ConcurrentHashMap . newKeySet ();
294299 Queue <Class <?>> classQueue = new LinkedList <Class <?>>();
295300
296301 classQueue .add (clazz );
@@ -305,7 +310,7 @@ public Class<?>[] findForRetransform() {
305310 Class <?>[] interfaces = currentClazz .getInterfaces ();
306311 Collections .addAll (classQueue , interfaces );
307312 }
308- classDiagram .setDiagram (className , diagram );
313+ classDiagram .setClassAncestorSet (className , diagram );
309314 }
310315 for (String clazzName : diagram ) {
311316 if (this .policyManager .isHookClass (clazzName ) ||
0 commit comments