File tree Expand file tree Collapse file tree 2 files changed +19
-6
lines changed
java/ql/lib/semmle/code/java Expand file tree Collapse file tree 2 files changed +19
-6
lines changed Original file line number Diff line number Diff line change @@ -2739,4 +2739,14 @@ class RecordPatternExpr extends Expr, @recordpatternexpr {
2739
2739
)
2740
2740
)
2741
2741
}
2742
+
2743
+ /**
2744
+ * Holds if this record pattern declares any identifiers (i.e., at least one leaf declaration is named).
2745
+ */
2746
+ predicate declaresAnyIdentifiers ( ) {
2747
+ exists ( PatternExpr subPattern | subPattern = this .getSubPattern ( _) |
2748
+ subPattern .asRecordPattern ( ) .declaresAnyIdentifiers ( ) or
2749
+ not subPattern .asBindingOrUnnamedPattern ( ) .isAnonymous ( )
2750
+ )
2751
+ }
2742
2752
}
Original file line number Diff line number Diff line change @@ -194,14 +194,17 @@ predicate simpleAstFlowStep(Expr e1, Expr e2) {
194
194
// In the following three cases only record patterns need this flow edge, leading from the bound instanceof
195
195
// or switch tested expression to a record pattern that will read its fields. Simple binding patterns are
196
196
// handled via VariableAssign.getSource instead.
197
- // We only consider unique patterns because cases that declare multiple patterns are not allowed to declare
198
- // any identifiers, so can't participate in dataflow.
199
- exists ( SwitchExpr se |
200
- e1 = se .getExpr ( ) and e2 = se .getACase ( ) .( PatternCase ) .getUniquePattern ( ) .asRecordPattern ( )
197
+ // We only consider patterns that declare any identifiers
198
+ exists ( SwitchExpr se , RecordPatternExpr recordPattern | recordPattern = e2 |
199
+ e1 = se .getExpr ( ) and
200
+ recordPattern = se .getACase ( ) .( PatternCase ) .getAPattern ( ) and
201
+ recordPattern .declaresAnyIdentifiers ( )
201
202
)
202
203
or
203
- exists ( SwitchStmt ss |
204
- e1 = ss .getExpr ( ) and e2 = ss .getACase ( ) .( PatternCase ) .getUniquePattern ( ) .asRecordPattern ( )
204
+ exists ( SwitchStmt ss , RecordPatternExpr recordPattern | recordPattern = e2 |
205
+ e1 = ss .getExpr ( ) and
206
+ recordPattern = ss .getACase ( ) .( PatternCase ) .getAPattern ( ) and
207
+ recordPattern .declaresAnyIdentifiers ( )
205
208
)
206
209
or
207
210
exists ( InstanceOfExpr ioe | e1 = ioe .getExpr ( ) and e2 = ioe .getPattern ( ) .asRecordPattern ( ) )
You can’t perform that action at this time.
0 commit comments