Skip to content

Commit beed4b2

Browse files
committed
version 0.2.2.1 update
修复读锁逻辑BUG
1 parent caa6735 commit beed4b2

File tree

3 files changed

+33
-9
lines changed

3 files changed

+33
-9
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,7 @@
4040
<tr>
4141
<td>0.2.2.0</td><td>完成读锁开发,目前可基于注解动态生成读写锁和读锁</td><td>2022年1月28日</td>
4242
</tr>
43+
<tr>
44+
<td>0.2.2.1</td><td>修复读锁逻辑BUG</td><td>2022年1月28日</td>
45+
</tr>
4346
</table>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.springframework.lock.annotation;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
@Retention(RetentionPolicy.RUNTIME)
9+
@Target(ElementType.METHOD)
10+
public @interface WriteLock {
11+
}

src/main/java/org/springframework/lock/processor/ReadLockProcessor.java

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,24 +65,34 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
6565
@Override
6666
public void visitClassDef(JCTree.JCClassDecl jcClassDecl) {
6767
// 在抽象树中找出所有的变量
68-
boolean foundLock = false;
68+
boolean foundReadWriteLock = false;
69+
boolean foundReadLock = false;
6970
for (JCTree jcTree : jcClassDecl.defs) {
7071
if (jcTree.getKind().equals(Tree.Kind.VARIABLE)) {
7172
JCTree.JCVariableDecl var = (JCTree.JCVariableDecl) jcTree;
72-
if ("java.util.concurrent.locks.ReadWriteLock".equalsIgnoreCase(var.vartype.type.toString()) || "java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock".equals(var.vartype.type.toString())) {
73+
if ("java.util.concurrent.locks.ReadWriteLock".equalsIgnoreCase(var.vartype.type.toString()) && "$lock".equals(var.name.toString())) {
74+
// 找到了类中的读写锁,不修改语法树
75+
messager.printMessage(Diagnostic.Kind.NOTE, "已发现" + clz.getQualifiedName() + "类中的读写锁" + var.name);
76+
foundReadWriteLock = true;
77+
}
78+
if ("$readLock".equals(var.name.toString())){
7379
// 找到了类中的读锁,不修改语法树
7480
messager.printMessage(Diagnostic.Kind.NOTE, "已发现" + clz.getQualifiedName() + "类中的读锁" + var.name);
75-
foundLock = true;
76-
break;
81+
foundReadLock = true;
7782
}
83+
if (foundReadWriteLock && foundReadLock)
84+
break;
7885
}
7986
}
80-
if (!foundLock){
81-
messager.printMessage(Diagnostic.Kind.NOTE, "将为类" + clz.getQualifiedName() + "动态生成读锁");
82-
// 修改语法树
83-
JCVariableDecl lock = makeReadWriteLock();
84-
JCVariableDecl readLock = makeReadLock();
87+
// 修改语法树
88+
JCVariableDecl lock = makeReadWriteLock();
89+
JCVariableDecl readLock = makeReadLock();
90+
if (!foundReadWriteLock) {
91+
messager.printMessage(Diagnostic.Kind.NOTE, "将为类" + clz.getQualifiedName() + "动态生成读写锁");
8592
jcClassDecl.defs = jcClassDecl.defs.append(lock);
93+
}
94+
if (!foundReadLock) {
95+
messager.printMessage(Diagnostic.Kind.NOTE, "将为类" + clz.getQualifiedName() + "动态生成读锁");
8696
jcClassDecl.defs = jcClassDecl.defs.append(readLock);
8797
}
8898
super.visitClassDef(jcClassDecl);

0 commit comments

Comments
 (0)