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; 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( private static MutableDataFlowInfoForArguments createIndependentDataFlowInfoForArgumentsForCall(
@NotNull DataFlowInfo initialDataFlowInfo, @NotNull DataFlowInfo initialDataFlowInfo,
Map<ValueArgument, DataFlowInfo> dataFlowInfoForArgumentsMap @NotNull Map<ValueArgument, DataFlowInfo> dataFlowInfoForArgumentsMap
) { ) {
return new MutableDataFlowInfoForArguments(initialDataFlowInfo) { return new ControlStructureDataFlowInfo(initialDataFlowInfo, dataFlowInfoForArgumentsMap);
@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);
}
};
} }
public static MutableDataFlowInfoForArguments createDataFlowInfoForArgumentsForIfCall( public static MutableDataFlowInfoForArguments createDataFlowInfoForArgumentsForIfCall(