Skip to content

Commit

Permalink
Refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
Tim-Pohlmann committed Aug 23, 2023
1 parent 1d88703 commit 744acfa
Showing 1 changed file with 14 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -207,44 +207,24 @@ private ProgramState ProcessInvocation(SymbolicContext context, IInvocationOpera
invocation.Arguments.Any(x => x.ToArgument().Parameter.Type.Is(KnownType.System_Func_T_TResult));
}

private static ProgramState ProcessAddMethod(ProgramState state, IMethodSymbol method, IOperation instance)
{
if (AddMethods.Contains(method.Name))
{
state = state.SetOperationConstraint(instance, CollectionConstraint.NotEmpty);
if (instance.TrackedSymbol(state) is { } symbol)
{
state = state.SetSymbolConstraint(symbol, CollectionConstraint.NotEmpty);
}
return state;
}
return null;
}
private static ProgramState ProcessAddMethod(ProgramState state, IMethodSymbol method, IOperation instance) =>
AddMethods.Contains(method.Name) ? SetOperationAndSymbolConstraint(state, instance, CollectionConstraint.NotEmpty) : null;

private static ProgramState ProcessRemoveMethod(ProgramState state, IMethodSymbol method, IOperation instance)
{
if (RemoveMethods.Contains(method.Name))
{
var value = (state[instance] ?? SymbolicValue.Empty).WithoutConstraint(CollectionConstraint.NotEmpty);
state = state.SetOperationValue(instance, value);
if (instance.TrackedSymbol(state) is { } symbol)
{
state = state.SetSymbolValue(symbol, value);
}
return state;
}
return null;
}
private static ProgramState ProcessRemoveMethod(ProgramState state, IMethodSymbol method, IOperation instance) =>
RemoveMethods.Contains(method.Name) ? SetOperationAndSymbolValue(state, instance, (state[instance] ?? SymbolicValue.Empty).WithoutConstraint(CollectionConstraint.NotEmpty)) : null;

private static ProgramState ProcessClearMethod(ProgramState state, IMethodSymbol method, IOperation instance)
private static ProgramState ProcessClearMethod(ProgramState state, IMethodSymbol method, IOperation instance) =>
method.Name == nameof(ICollection<int>.Clear) ? SetOperationAndSymbolConstraint(state, instance, CollectionConstraint.Empty) : state;

private static ProgramState SetOperationAndSymbolConstraint(ProgramState state, IOperation instance, SymbolicConstraint constraint) =>
SetOperationAndSymbolValue(state, instance, (state[instance] ?? SymbolicValue.Empty).WithConstraint(constraint));

private static ProgramState SetOperationAndSymbolValue(ProgramState state, IOperation instance, SymbolicValue value)
{
if (method.Name == nameof(ICollection<int>.Clear))
state = state.SetOperationValue(instance, value);
if (instance.TrackedSymbol(state) is { } symbol)
{
state = state.SetOperationConstraint(instance, CollectionConstraint.Empty);
if (instance.TrackedSymbol(state) is { } symbol)
{
state = state.SetSymbolConstraint(symbol, CollectionConstraint.Empty);
}
state = state.SetSymbolValue(symbol, value);
}
return state;
}
Expand Down

0 comments on commit 744acfa

Please sign in to comment.