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