Java: Add FieldValueNode to break up cartesian step relation.

This commit is contained in:
Anders Schack-Mulligen
2021-10-08 15:57:09 +02:00
parent 3a1836c9f6
commit abf508eeeb
6 changed files with 88 additions and 42 deletions

View File

@@ -189,10 +189,9 @@ private predicate flowStep(RelevantNode n1, RelevantNode n2) {
n2.(ImplicitInstanceAccess).getInstanceAccess().(OwnInstanceAccess).getEnclosingCallable() = c
)
or
exists(Field f |
f.getAnAssignedValue() = n1.asExpr() and
n2.asExpr().(FieldRead).getField() = f
)
n2.(FieldValueNode).getField().getAnAssignedValue() = n1.asExpr()
or
n2.asExpr().(FieldRead).getField() = n1.(FieldValueNode).getField()
or
exists(EnumType enum, Method getValue |
enum.getAnEnumConstant().getAnAssignedValue() = n1.asExpr() and

View File

@@ -94,10 +94,9 @@ private predicate step(Node n1, Node n2) {
n2.(ImplicitInstanceAccess).getInstanceAccess().(OwnInstanceAccess).getEnclosingCallable() = c
)
or
exists(Field f |
f.getAnAssignedValue() = n1.asExpr() and
n2.asExpr().(FieldRead).getField() = f
)
n2.(FieldValueNode).getField().getAnAssignedValue() = n1.asExpr()
or
n2.asExpr().(FieldRead).getField() = n1.(FieldValueNode).getField()
or
n2.asExpr().(CastExpr).getExpr() = n1.asExpr()
or
@@ -132,7 +131,7 @@ private predicate step(Node n1, Node n2) {
or
exists(Field v |
containerStep(n1.asExpr(), v.getAnAccess()) and
n2.asExpr() = v.getAnAccess()
n2.(FieldValueNode).getField() = v
)
}