diff --git a/java/ql/src/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll b/java/ql/src/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll index 4f964e22249..69917ccadbf 100644 --- a/java/ql/src/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll +++ b/java/ql/src/semmle/code/java/dataflow/internal/DataFlowImplCommon.qll @@ -687,6 +687,11 @@ private module ImplCommon { override predicate validFor(Node n) { any() } } + pragma[noinline] + private predicate hasUnreachableNode(DataFlowCall call, DataFlowCallable callable) { + isUnreachableInCall(any(Node n | n.getEnclosingCallable() = callable), call) + } + class LocalCallContextSpecificCall extends LocalCallContext, TSpecificLocalCall { LocalCallContextSpecificCall() { this = TSpecificLocalCall(call) } @@ -701,9 +706,7 @@ private module ImplCommon { } override predicate validFor(Node n) { - exists(Node n2 | - isUnreachableInCall(n2, call) and n2.getEnclosingCallable() = n.getEnclosingCallable() - ) + hasUnreachableNode(call, n.getEnclosingCallable()) } }