2
2
3
3
import jakarta .annotation .Nonnull ;
4
4
import jakarta .enterprise .context .Dependent ;
5
- import org .objectweb .asm .AnnotationVisitor ;
6
- import org .objectweb .asm .Attribute ;
7
5
import org .objectweb .asm .ClassReader ;
8
- import org .objectweb .asm .ClassVisitor ;
9
6
import org .objectweb .asm .ClassWriter ;
10
- import org .objectweb .asm .FieldVisitor ;
11
- import org .objectweb .asm .MethodVisitor ;
12
- import org .objectweb .asm .RecordComponentVisitor ;
13
- import software . coley . recaf . RecafConstants ;
7
+ import org .objectweb .asm .tree . ClassNode ;
8
+ import org .objectweb .asm .tree . FieldNode ;
9
+ import org .objectweb .asm .tree . MethodNode ;
10
+ import org . objectweb . asm . tree . RecordComponentNode ;
14
11
import software .coley .recaf .info .JvmClassInfo ;
15
12
import software .coley .recaf .services .transform .JvmClassTransformer ;
16
13
import software .coley .recaf .services .transform .JvmTransformerContext ;
@@ -31,10 +28,26 @@ public class UnknownAttributeRemovingTransformer implements JvmClassTransformer
31
28
public void transform (@ Nonnull JvmTransformerContext context , @ Nonnull Workspace workspace ,
32
29
@ Nonnull WorkspaceResource resource , @ Nonnull JvmClassBundle bundle ,
33
30
@ Nonnull JvmClassInfo initialClassState ) throws TransformationException {
34
- ClassReader reader = new ClassReader (context .getBytecode (bundle , initialClassState ));
35
- ClassWriter writer = new ClassWriter (reader , 0 );
36
- reader .accept (new UnknownAttributeRemovingVisitor (writer ), 0 );
37
- context .setBytecode (bundle , initialClassState , writer .toByteArray ());
31
+ if (context .isNode (bundle , initialClassState )) {
32
+ ClassNode node = context .getNode (bundle , initialClassState );
33
+ if (node .attrs != null )
34
+ node .attrs .clear ();
35
+ for (FieldNode field : node .fields )
36
+ if (field .attrs != null )
37
+ field .attrs .clear ();
38
+ for (MethodNode method : node .methods )
39
+ if (method .attrs != null )
40
+ method .attrs .clear ();
41
+ if (node .recordComponents != null )
42
+ for (RecordComponentNode recordComponent : node .recordComponents )
43
+ if (recordComponent .attrs != null )
44
+ recordComponent .attrs .clear ();
45
+ } else {
46
+ ClassReader reader = new ClassReader (context .getBytecode (bundle , initialClassState ));
47
+ ClassWriter writer = new ClassWriter (reader , 0 );
48
+ reader .accept (new UnknownAttributeRemovingVisitor (writer ), 0 );
49
+ context .setBytecode (bundle , initialClassState , writer .toByteArray ());
50
+ }
38
51
}
39
52
40
53
@ Nonnull
0 commit comments