Create special data flow info for ControlStructure. It will be used in new inference for special calls.

This commit is contained in:
Stanislav Erokhin
2016-10-19 14:53:46 +03:00
parent dbe867e2c0
commit dce373b807
@@ -189,23 +189,35 @@ public class ControlStructureTypingUtils {
return function;
}
public static class ControlStructureDataFlowInfo extends MutableDataFlowInfoForArguments {
public final Map<ValueArgument, DataFlowInfo> dataFlowInfoForArgumentsMap;
ControlStructureDataFlowInfo(
@NotNull DataFlowInfo initialDataFlowInfo,
@NotNull Map<ValueArgument, DataFlowInfo> map
) {
super(initialDataFlowInfo);
dataFlowInfoForArgumentsMap = map;
}
@Override
public void updateInfo(@NotNull ValueArgument valueArgument, @NotNull DataFlowInfo dataFlowInfo) {
dataFlowInfoForArgumentsMap.put(valueArgument, dataFlowInfo);
}
@NotNull
@Override
public DataFlowInfo getInfo(@NotNull ValueArgument valueArgument) {
return dataFlowInfoForArgumentsMap.get(valueArgument);
}
}
private static MutableDataFlowInfoForArguments createIndependentDataFlowInfoForArgumentsForCall(
@NotNull DataFlowInfo initialDataFlowInfo,
Map<ValueArgument, DataFlowInfo> dataFlowInfoForArgumentsMap
@NotNull Map<ValueArgument, DataFlowInfo> dataFlowInfoForArgumentsMap
) {
return new MutableDataFlowInfoForArguments(initialDataFlowInfo) {
@Override
public void updateInfo(@NotNull ValueArgument valueArgument, @NotNull DataFlowInfo dataFlowInfo) {
dataFlowInfoForArgumentsMap.put(valueArgument, dataFlowInfo);
}
@NotNull
@Override
public DataFlowInfo getInfo(@NotNull ValueArgument valueArgument) {
return dataFlowInfoForArgumentsMap.get(valueArgument);
}
};
return new ControlStructureDataFlowInfo(initialDataFlowInfo, dataFlowInfoForArgumentsMap);
}
public static MutableDataFlowInfoForArguments createDataFlowInfoForArgumentsForIfCall(