diff --git a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll index 229c526d2701..94464bd263f2 100644 --- a/java/ql/lib/semmle/code/java/ControlFlowGraph.qll +++ b/java/ql/lib/semmle/code/java/ControlFlowGraph.qll @@ -400,6 +400,7 @@ private module ControlFlowGraphImpl { /** * Gets a statement that always throws an exception or calls `exit`. */ + pragma[assume_small_delta] private Stmt nonReturningStmt() { result instanceof ThrowStmt or @@ -421,6 +422,7 @@ private module ControlFlowGraphImpl { /** * Gets an expression that always throws an exception or calls `exit`. */ + pragma[assume_small_delta] private Expr nonReturningExpr() { result = nonReturningMethodAccess() or diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index 2c969a8d4428..73de88dd4da9 100644 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -2026,6 +2026,7 @@ class TypeAccess extends Expr, Annotatable, @typeaccess { override CompilationUnit getCompilationUnit() { result = Expr.super.getCompilationUnit() } /** Gets a printable representation of this expression. */ + pragma[assume_small_delta] override string toString() { result = this.getQualifier().toString() + "." + this.getType().toString() or diff --git a/java/ql/lib/semmle/code/java/Member.qll b/java/ql/lib/semmle/code/java/Member.qll index 9aa1f8d31c0b..a4e28973ae5d 100644 --- a/java/ql/lib/semmle/code/java/Member.qll +++ b/java/ql/lib/semmle/code/java/Member.qll @@ -660,6 +660,7 @@ class FieldDeclaration extends ExprParent, @fielddecl, Annotatable { /** Gets the number of fields declared in this declaration. */ int getNumField() { result = max(int idx | fieldDeclaredIn(_, this, idx) | idx) + 1 } + pragma[assume_small_delta] override string toString() { if this.getNumField() = 1 then result = this.getTypeAccess() + " " + this.getField(0) + ";" diff --git a/java/ql/lib/semmle/code/java/Type.qll b/java/ql/lib/semmle/code/java/Type.qll index b3fb3ce8e88f..12602527f90f 100644 --- a/java/ql/lib/semmle/code/java/Type.qll +++ b/java/ql/lib/semmle/code/java/Type.qll @@ -304,6 +304,7 @@ private predicate hasSubtypeStar1(RefType t, RefType sub) { /** * Holds if `hasSubtype*(t, sub)`, but manual-magic'ed with `getAWildcardLowerBound(sub)`. */ +pragma[assume_small_delta] pragma[nomagic] private predicate hasSubtypeStar2(RefType t, RefType sub) { sub = t and getAWildcardLowerBound(sub) diff --git a/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll b/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll index 011932bc48b2..25b394586568 100644 --- a/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll +++ b/java/ql/lib/semmle/code/java/dataflow/NullGuards.qll @@ -42,6 +42,7 @@ EqualityTest varEqualityTestExpr(SsaVariable v1, SsaVariable v2, boolean isEqual } /** Gets an expression that is provably not `null`. */ +pragma[assume_small_delta] Expr clearlyNotNullExpr(Expr reason) { result instanceof ClassInstanceExpr and reason = result or @@ -236,6 +237,7 @@ Expr directNullGuard(SsaVariable v, boolean branch, boolean isnull) { * If `result` evaluates to `branch`, then `v` is guaranteed to be null if `isnull` * is true, and non-null if `isnull` is false. */ +pragma[assume_small_delta] Guard nullGuard(SsaVariable v, boolean branch, boolean isnull) { result = directNullGuard(v, branch, isnull) or exists(boolean branch0 | implies_v3(result, branch, nullGuard(v, branch0, isnull), branch0)) diff --git a/java/ql/lib/semmle/code/java/dataflow/SSA.qll b/java/ql/lib/semmle/code/java/dataflow/SSA.qll index fa8007afbf33..9273a34391f2 100644 --- a/java/ql/lib/semmle/code/java/dataflow/SSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/SSA.qll @@ -61,6 +61,7 @@ class SsaSourceVariable extends TSsaSourceVariable { * accessed from nested callables are therefore associated with several * `SsaSourceVariable`s. */ + pragma[assume_small_delta] cached VarAccess getAnAccess() { exists(LocalScopeVariable v, Callable c | diff --git a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll index c3fd63cbf263..4bc17e8c4b4b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll +++ b/java/ql/lib/semmle/code/java/dataflow/TypeFlow.qll @@ -313,6 +313,7 @@ private module ForAll { * Holds if `t` is a candidate bound for `n` that is also valid for data coming * through the edges into `n` ranked from `1` to `r`. */ + pragma[assume_small_delta] private predicate flowJoin(int r, TypeFlowNode n, T::Typ t) { ( r = 1 and candJoinType(n, t) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll index a0acc69cbffb..ddb6dd9235e5 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/TaintTrackingUtil.qll @@ -620,6 +620,7 @@ private MethodAccess callReturningSameType(Expr ref) { result.getMethod().getReturnType() = ref.getType() } +pragma[assume_small_delta] private SrcRefType entrypointType() { exists(RemoteFlowSource s, RefType t | s instanceof DataFlow::ExplicitParameterNode and diff --git a/java/ql/lib/semmle/code/java/dispatch/DispatchFlow.qll b/java/ql/lib/semmle/code/java/dispatch/DispatchFlow.qll index 17b5f76f89ba..2087f076fa9b 100644 --- a/java/ql/lib/semmle/code/java/dispatch/DispatchFlow.qll +++ b/java/ql/lib/semmle/code/java/dispatch/DispatchFlow.qll @@ -29,6 +29,7 @@ private Callable dispatchCand(Call c) { /** * Holds if `t` and all its enclosing types are public. */ +pragma[assume_small_delta] private predicate veryPublic(RefType t) { t.isPublic() and ( diff --git a/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll b/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll index 29e93f426dcf..81a303256d0c 100644 --- a/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll +++ b/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll @@ -206,6 +206,7 @@ private predicate relevantNodeBack(ObjNode n) { exists(ObjNode mid | objStep(n, mid) and relevantNodeBack(mid)) } +pragma[assume_small_delta] private predicate relevantNode(ObjNode n) { source(_, n) and relevantNodeBack(n) or diff --git a/java/ql/lib/semmle/code/java/frameworks/Rmi.qll b/java/ql/lib/semmle/code/java/frameworks/Rmi.qll index 74a449086cf9..19428afae92b 100644 --- a/java/ql/lib/semmle/code/java/frameworks/Rmi.qll +++ b/java/ql/lib/semmle/code/java/frameworks/Rmi.qll @@ -11,6 +11,7 @@ class RemoteCallableMethod extends Method { RemoteCallableMethod() { remoteCallableMethod(this) } } +pragma[assume_small_delta] private predicate remoteCallableMethod(Method method) { method.getDeclaringType().getASupertype() instanceof TypeRemote or diff --git a/java/ql/lib/semmle/code/java/frameworks/jackson/JacksonSerializability.qll b/java/ql/lib/semmle/code/java/frameworks/jackson/JacksonSerializability.qll index 6d77591b3237..400f96598c10 100644 --- a/java/ql/lib/semmle/code/java/frameworks/jackson/JacksonSerializability.qll +++ b/java/ql/lib/semmle/code/java/frameworks/jackson/JacksonSerializability.qll @@ -152,6 +152,7 @@ class JacksonSerializableField extends SerializableField { /** A field that may be deserialized using the Jackson JSON framework. */ class JacksonDeserializableField extends DeserializableField { + pragma[assume_small_delta] JacksonDeserializableField() { exists(JacksonDeserializableType superType | superType = this.getDeclaringType().getAnAncestor() and