@@ -79,9 +79,11 @@ public void visitClassDef(JCTree.JCClassDecl jcClassDecl) {
7979 }
8080 if (!foundLock ){
8181 messager .printMessage (Diagnostic .Kind .NOTE , "将为类" + clz .getQualifiedName () + "动态生成读锁" );
82- // TODO 修改语法树
82+ // 修改语法树
8383 JCVariableDecl lock = makeReadWriteLock ();
84- jcClassDecl .defs = jcClassDecl .defs .prepend (lock );
84+ JCVariableDecl readLock = makeReadLock ();
85+ jcClassDecl .defs = jcClassDecl .defs .append (lock );
86+ jcClassDecl .defs = jcClassDecl .defs .append (readLock );
8587 }
8688 super .visitClassDef (jcClassDecl );
8789 }
@@ -93,16 +95,27 @@ public void visitClassDef(JCTree.JCClassDecl jcClassDecl) {
9395 }
9496
9597 private JCVariableDecl makeReadWriteLock (){
96- JCModifiers modifiers = this .treeMaker .Modifiers (Flags .PRIVATE );
98+ JCModifiers modifiers = this .treeMaker .Modifiers (Flags .PRIVATE + Flags . FINAL );
9799 JCVariableDecl var = this .treeMaker .VarDef (
98100 modifiers ,
99- this .names .fromString ("lock" ),
101+ this .names .fromString ("$ lock" ),
100102 this .memberAccess ("java.util.concurrent.locks.ReentrantReadWriteLock" ),
101103 this .treeMaker .NewClass (null , nil (), treeMaker .Ident (names .fromString ("ReentrantReadWriteLock" )), nil (), null )
102104 );
103105 return var ;
104106 }
105107
108+ private JCVariableDecl makeReadLock (){
109+ JCModifiers modifiers = this .treeMaker .Modifiers (Flags .PRIVATE + Flags .FINAL );
110+ JCVariableDecl var = this .treeMaker .VarDef (
111+ modifiers ,
112+ this .names .fromString ("$readLock" ),
113+ this .memberAccess ("java.util.concurrent.locks.Lock" ),
114+ treeMaker .Apply (nil (), treeMaker .Select (treeMaker .Ident (names .fromString ("$lock" )), names .fromString ("readLock" )), nil ())
115+ );
116+ return var ;
117+ }
118+
106119 private JCExpression memberAccess (String components ) {
107120 String [] componentArray = components .split ("\\ ." );
108121 JCTree .JCExpression expr = treeMaker .Ident (this .names .fromString (componentArray [0 ]));
0 commit comments