1+ package  net .cvs0 .core ;
2+ 
3+ import  net .cvs0 .context .ObfuscationContext ;
4+ import  net .cvs0 .utils .BytecodeUtils ;
5+ import  org .objectweb .asm .ClassVisitor ;
6+ import  org .objectweb .asm .FieldVisitor ;
7+ import  org .objectweb .asm .MethodVisitor ;
8+ import  org .objectweb .asm .Opcodes ;
9+ 
10+ public  abstract  class  BaseClassVisitor  extends  ClassVisitor  implements  ContextProvider 
11+ {
12+     protected  final  ObfuscationContext  context ;
13+     protected  String  currentClassName ;
14+ 
15+     protected  BaseClassVisitor (ClassVisitor  classVisitor , ObfuscationContext  context )
16+     {
17+         super (Opcodes .ASM9 , classVisitor );
18+         this .context  = context ;
19+     }
20+ 
21+     @ Override 
22+     public  final  ObfuscationContext  getContext ()
23+     {
24+         return  context ;
25+     }
26+ 
27+     @ Override 
28+     public  final  String  getCurrentClassName ()
29+     {
30+         return  currentClassName ;
31+     }
32+ 
33+     @ Override 
34+     public  void  visit (int  version , int  access , String  name , String  signature , String  superName , String [] interfaces )
35+     {
36+         this .currentClassName  = name ;
37+         super .visit (version , access , name , signature , superName , interfaces );
38+     }
39+ 
40+     @ Override 
41+     public  MethodVisitor  visitMethod (int  access , String  name , String  descriptor , String  signature , String [] exceptions )
42+     {
43+         MethodVisitor  mv  = super .visitMethod (access , name , descriptor , signature , exceptions );
44+         
45+         if  (!shouldProcessMethod (name , access , descriptor )) {
46+             return  mv ;
47+         }
48+         
49+         return  createMethodVisitor (mv , access , name , descriptor , signature , exceptions );
50+     }
51+ 
52+     @ Override 
53+     public  FieldVisitor  visitField (int  access , String  name , String  descriptor , String  signature , Object  value )
54+     {
55+         if  (!shouldProcessField (name , access , descriptor )) {
56+             return  super .visitField (access , name , descriptor , signature , value );
57+         }
58+         
59+         return  createFieldVisitor (super .visitField (access , name , descriptor , signature , value ), 
60+                                 access , name , descriptor , signature , value );
61+     }
62+ 
63+     protected  boolean  shouldProcessMethod (String  name , int  access , String  descriptor )
64+     {
65+         if  (BytecodeUtils .isMethodSkippable (name , access )) {
66+             return  false ;
67+         }
68+         
69+         if  (!context .getConfig ().isInPackageScope (currentClassName )) {
70+             return  false ;
71+         }
72+         
73+         return  !context .getConfig ().shouldKeepMethod (currentClassName , name , descriptor );
74+     }
75+ 
76+     protected  boolean  shouldProcessField (String  name , int  access , String  descriptor )
77+     {
78+         if  (BytecodeUtils .isFieldSkippable (name , access )) {
79+             return  false ;
80+         }
81+         
82+         if  (!context .getConfig ().isInPackageScope (currentClassName )) {
83+             return  false ;
84+         }
85+         
86+         return  !context .getConfig ().shouldKeepField (currentClassName , name );
87+     }
88+ 
89+     protected  boolean  shouldProcessClass ()
90+     {
91+         return  context .getConfig ().isInPackageScope (currentClassName ) &&
92+                !context .getConfig ().shouldKeepClass (currentClassName );
93+     }
94+ 
95+     protected  void  logTransformation (String  message )
96+     {
97+         if  (context .getConfig ().isVerbose ()) {
98+             System .out .println ("["  + getTransformerName () + "] "  + message  + " in "  + currentClassName );
99+         }
100+     }
101+ 
102+     protected  abstract  String  getTransformerName ();
103+ 
104+     protected  MethodVisitor  createMethodVisitor (MethodVisitor  mv , int  access , String  name , 
105+                                               String  descriptor , String  signature , String [] exceptions )
106+     {
107+         return  mv ;
108+     }
109+ 
110+     protected  FieldVisitor  createFieldVisitor (FieldVisitor  fv , int  access , String  name , 
111+                                             String  descriptor , String  signature , Object  value )
112+     {
113+         return  fv ;
114+     }
115+ }
0 commit comments