我有一个数据 struct ,它的成员不是线程安全的,调用者需要适当地锁定资源以进行读写.以下是一个最小的代码示例:
class ExampleResource : LockableProjectItem {
override val readWriteLock: ReadWriteLock = ReentrantReadWriteLock()
@RequiresReadLock
val nonThreadSafeMember: String = ""
}
interface LockableProjectItem {
val readWriteLock: ReadWriteLock
}
fun <T : LockableProjectItem, Out> T.readLock(block: T.() -> Out): Out {
try {
readWriteLock.readLock().lock()
return block(this)
} finally {
readWriteLock.readLock().unlock()
}
}
fun <T : LockableProjectItem, Out> T.writeLock(block: T.() -> Out): Out {
try {
readWriteLock.writeLock().lock()
return block(this)
} finally {
readWriteLock.writeLock().unlock()
}
}
annotation class RequiresReadLock
然后,呼叫ExampleResource.nonThreadSafeMember
可能如下所示:
val resource = ExampleResource()
val readResult = resource.readLock { nonThreadSafeMember }
为了确保调用者知道需要锁定资源,我希望IDE对任何用@RequiresReadLock
注释且没有用readLock
块括起来的成员发出警告.有没有办法在IntelliJ中做到这一点,而不是为IDE编写一个定制插件?