Skip to content

Commit

Permalink
Review 1
Browse files Browse the repository at this point in the history
  • Loading branch information
Tim-Pohlmann committed Aug 24, 2023
1 parent 9634fad commit 29004b0
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -208,13 +208,19 @@ private ProgramState ProcessInvocation(SymbolicContext context, IInvocationOpera
}

private static ProgramState ProcessAddMethod(ProgramState state, IMethodSymbol method, IOperation instance) =>
AddMethods.Contains(method.Name) ? SetOperationAndSymbolConstraint(state, instance, CollectionConstraint.NotEmpty) : null;
AddMethods.Contains(method.Name)
? SetOperationAndSymbolConstraint(state, instance, CollectionConstraint.NotEmpty)
: 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;
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) =>
method.Name == nameof(ICollection<int>.Clear) ? SetOperationAndSymbolConstraint(state, instance, CollectionConstraint.Empty) : state;
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));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -429,18 +429,28 @@ public void Method_Set_Empty(List<int> list, HashSet<int> set, Queue<int> queue,
dict.Clear(); // Compliant
dict.Clear(); // Noncompliant

var empty = new List<int>();
list.Add(5);
list.Intersect(empty); // Compliant
list.Clear(); // FN

list.Add(5);
list.RemoveAll(x => true); // Compliant
list.Clear(); // FN
list.Add(5);
list.RemoveAll(x => x == 1); // Compliant
list.Clear(); // Compliant

set.Add(5);
set.RemoveWhere(x => true); // Compliant
set.Clear(); // FN
set.Add(5);
set.RemoveWhere(x => x == 1); // Compliant
set.Clear(); // Compliant

var empty = new List<int>();
set.Add(5);
set.IntersectWith(empty); // Compliant
set.Clear(); // FN
var notEmpty = new List<int> { 1 };
set.Add(5);
set.IntersectWith(notEmpty); // Compliant
set.Clear(); // Compliant
}
}

Expand Down

0 comments on commit 29004b0

Please sign in to comment.