1+ package orc .scalagraalagent ;
2+
3+ import java .util .logging .Logger ;
4+
5+ import org .objectweb .asm .AnnotationVisitor ;
6+ import org .objectweb .asm .ClassVisitor ;
7+ import org .objectweb .asm .FieldVisitor ;
8+ import org .objectweb .asm .Opcodes ;
9+ import org .objectweb .asm .Type ;
10+
11+ public class MarkModulesAsCompileConstant extends ClassVisitor {
12+ private static final Logger logger = Logger .getLogger ("orc.scalagraalagent" );
13+
14+ private String className ;
15+
16+ public MarkModulesAsCompileConstant (ClassVisitor cv ) {
17+ super (Opcodes .ASM6 , cv );
18+ this .cv = cv ;
19+ }
20+
21+ @ Override
22+ public void visit (int version , int access , String name , String signature , String superName , String [] interfaces ) {
23+ this .className = name ;
24+ super .visit (version , access , name , signature , superName , interfaces );
25+ }
26+
27+ @ Override
28+ public FieldVisitor visitField (int access , String name , String descriptor , String signature , Object value ) {
29+ if (name .equals ("MODULE$" ) && (access & Opcodes .ACC_STATIC ) == Opcodes .ACC_STATIC ) {
30+ FieldVisitor fv = super .visitField (access | Opcodes .ACC_FINAL , name , descriptor , signature , value );
31+
32+ logger .fine (() -> "Set " + this .className .replace ('/' , '.' ) + "." + name + " as final." );
33+
34+ return fv ;
35+ } else {
36+ return super .visitField (access , name , descriptor , signature , value );
37+ }
38+ }
39+ }
0 commit comments