Address review comments

This commit is contained in:
Owen Mansel-Chan
2025-03-14 11:36:43 +00:00
parent 5c7588822d
commit 7702e9da7d

View File

@@ -54,32 +54,34 @@ class PossiblyConcurrentCallable extends Callable {
}
}
private VarAccess getANonInitializationAccess(Field f) {
result = f.getAnAccess() and
exists(Callable c | c = result.getEnclosingCallable() |
not (
c = f.getDeclaringType().getACallable() and
(c instanceof Constructor or c instanceof InitializerMethod)
)
)
}
/**
* Holds if all accesses to `v` (outside of initializers) are locked in the same way.
*/
predicate alwaysLocked(Field f) {
exists(Variable lock |
forex(VarAccess access |
access = f.getAnAccess() and not access.getEnclosingCallable() instanceof InitializerMethod
|
forex(VarAccess access | access = getANonInitializationAccess(f) |
locallySynchronizedOn(access, _, lock)
)
)
or
exists(RefType thisType |
forex(VarAccess access |
access = f.getAnAccess() and
not access.getEnclosingCallable() instanceof Constructor and
not access.getEnclosingCallable() instanceof InitializerMethod
|
forex(VarAccess access | access = getANonInitializationAccess(f) |
locallySynchronizedOnThis(access, thisType)
)
)
or
exists(RefType classType |
forex(VarAccess access |
access = f.getAnAccess() and not access.getEnclosingCallable() instanceof InitializerMethod
|
forex(VarAccess access | access = getANonInitializationAccess(f) |
locallySynchronizedOnClass(access, classType)
)
)