update
This commit is contained in:
@@ -115,7 +115,7 @@ public class JdtDataFlowModel implements DataFlowModel {
|
||||
|
||||
// Handle ClassInstanceCreation
|
||||
if (expr instanceof ClassInstanceCreation cic) {
|
||||
objectFieldBindings.computeIfAbsent(cic, k -> buildFieldBindingsFromCic(cic, paramBindings, instanceFieldBindings));
|
||||
getOrCreateFieldBindings(cic, paramBindings, instanceFieldBindings);
|
||||
visited.remove(expr);
|
||||
return List.of(cic);
|
||||
}
|
||||
@@ -310,6 +310,31 @@ public class JdtDataFlowModel implements DataFlowModel {
|
||||
return null;
|
||||
}
|
||||
|
||||
private Map<IVariableBinding, Expression> getOrCreateFieldBindings(
|
||||
ClassInstanceCreation cic,
|
||||
Map<IVariableBinding, Expression> paramBindings,
|
||||
Map<IVariableBinding, Expression> instanceFieldBindings) {
|
||||
Map<IVariableBinding, Expression> bindings = objectFieldBindings.get(cic);
|
||||
if (bindings == null) {
|
||||
bindings = new HashMap<>();
|
||||
objectFieldBindings.put(cic, bindings);
|
||||
Map<IVariableBinding, Expression> built = buildFieldBindingsFromCic(cic, paramBindings, instanceFieldBindings);
|
||||
bindings.putAll(built);
|
||||
}
|
||||
return bindings;
|
||||
}
|
||||
|
||||
private Map<IVariableBinding, Expression> getOrCreateFieldBindings(ClassInstanceCreation cic) {
|
||||
Map<IVariableBinding, Expression> bindings = objectFieldBindings.get(cic);
|
||||
if (bindings == null) {
|
||||
bindings = new HashMap<>();
|
||||
objectFieldBindings.put(cic, bindings);
|
||||
Map<IVariableBinding, Expression> built = buildFieldBindingsFromCic(cic);
|
||||
bindings.putAll(built);
|
||||
}
|
||||
return bindings;
|
||||
}
|
||||
|
||||
private Map<IVariableBinding, Expression> buildFieldBindingsFromCic(ClassInstanceCreation cic) {
|
||||
return buildFieldBindingsFromCic(cic, new HashMap<>(), new HashMap<>());
|
||||
}
|
||||
@@ -472,7 +497,7 @@ public class JdtDataFlowModel implements DataFlowModel {
|
||||
MethodDeclaration md = findMethodDeclarationInType(concreteType, mb);
|
||||
if (md != null) {
|
||||
Map<IVariableBinding, Expression> concreteFieldBindings =
|
||||
objectFieldBindings.computeIfAbsent(cic, k -> buildFieldBindingsFromCic((ClassInstanceCreation) k));
|
||||
getOrCreateFieldBindings(cic);
|
||||
|
||||
// Apply flow-sensitive intermediate local variable mutations
|
||||
if (receiver instanceof SimpleName sn) {
|
||||
|
||||
Reference in New Issue
Block a user