From 936c0206ea4849b37511b6897ce101c2b7555745 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 1 Nov 2023 18:21:11 +0000 Subject: [PATCH] Adapt ancillary analyses to record patterns --- java/ql/lib/semmle/code/java/Dependency.qll | 4 ++-- java/ql/lib/semmle/code/java/DependencyCounts.qll | 2 +- java/ql/lib/semmle/code/java/controlflow/Guards.qll | 2 +- java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/java/ql/lib/semmle/code/java/Dependency.qll b/java/ql/lib/semmle/code/java/Dependency.qll index 7c01a43e186..5378569dd67 100644 --- a/java/ql/lib/semmle/code/java/Dependency.qll +++ b/java/ql/lib/semmle/code/java/Dependency.qll @@ -80,9 +80,9 @@ predicate depends(RefType t, RefType dep) { usesType(ioe.getCheckedType(), dep) ) or - // the type accessed in a pattern-switch case statement in `t`. + // A type accessed in a pattern-switch case statement in `t`. exists(PatternCase pc | t = pc.getEnclosingCallable().getDeclaringType() | - usesType(pc.getPattern().getType(), dep) + usesType(pc.getPattern().getAChildExpr*().getType(), dep) ) ) } diff --git a/java/ql/lib/semmle/code/java/DependencyCounts.qll b/java/ql/lib/semmle/code/java/DependencyCounts.qll index 788c090bd1e..05a7be6e8f7 100644 --- a/java/ql/lib/semmle/code/java/DependencyCounts.qll +++ b/java/ql/lib/semmle/code/java/DependencyCounts.qll @@ -105,7 +105,7 @@ predicate numDepends(RefType t, RefType dep, int value) { or // the type accessed in a pattern-switch case statement in `t`. exists(PatternCase pc | elem = pc and t = pc.getEnclosingCallable().getDeclaringType() | - usesType(pc.getDecl().getType(), dep) + usesType(pc.getPattern().getAChildExpr*().getType(), dep) ) ) } diff --git a/java/ql/lib/semmle/code/java/controlflow/Guards.qll b/java/ql/lib/semmle/code/java/controlflow/Guards.qll index 157bb0d9a99..b0e1d40ffcc 100644 --- a/java/ql/lib/semmle/code/java/controlflow/Guards.qll +++ b/java/ql/lib/semmle/code/java/controlflow/Guards.qll @@ -180,7 +180,7 @@ private predicate switchCaseControls(SwitchCase sc, BasicBlock bb) { selector = sc.getSelectorExpr() and ( if sc instanceof PatternCase - then caseblock.getFirstNode() = sc.(PatternCase).getPattern().getControlFlowNode() + then caseblock.getANode() = sc.(PatternCase).getPattern().getControlFlowNode() else ( caseblock.getFirstNode() = sc.getControlFlowNode() and // Check there is no fall-through edge from a previous case: diff --git a/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll b/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll index 1cfc327a3a5..b06e9a2097f 100644 --- a/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll +++ b/java/ql/lib/semmle/code/java/dispatch/ObjFlow.qll @@ -82,7 +82,7 @@ private predicate step(Node n1, Node n2) { ) or exists(PatternCase pc | - pc.getPattern() = def.(BaseSsaUpdate).getDefiningExpr() and + pc.getPattern().asBindingPattern() = def.(BaseSsaUpdate).getDefiningExpr() and ( pc.getSwitch().getExpr() = n1.asExpr() or