22
33import jakarta .annotation .Nonnull ;
44import jakarta .enterprise .context .Dependent ;
5- import org .objectweb .asm .AnnotationVisitor ;
6- import org .objectweb .asm .Attribute ;
75import org .objectweb .asm .ClassReader ;
8- import org .objectweb .asm .ClassVisitor ;
96import 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 ;
1411import software .coley .recaf .info .JvmClassInfo ;
1512import software .coley .recaf .services .transform .JvmClassTransformer ;
1613import software .coley .recaf .services .transform .JvmTransformerContext ;
@@ -31,10 +28,26 @@ public class UnknownAttributeRemovingTransformer implements JvmClassTransformer
3128 public void transform (@ Nonnull JvmTransformerContext context , @ Nonnull Workspace workspace ,
3229 @ Nonnull WorkspaceResource resource , @ Nonnull JvmClassBundle bundle ,
3330 @ 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+ }
3851 }
3952
4053 @ Nonnull
0 commit comments