private bool IsInvalidCall(MethodNode callingMethod, MethodNode calledMethod) { var aggregateOfCalledMethod = this.aggregateForMethod.GetOrDefault(calledMethod); var aggregateOfCallingMethod = this.aggregateForMethod.GetOrDefault(callingMethod); return PatternMatch.For<Tuple<AggregateNode, AggregateNode>, bool>() .When(x => x.Item1 == x.Item2).Return(_ => false) .When(x => x.Item1 == null && x.Item2 == null).Return(_ => false) .When(x => x.Item1 != null && x.Item2 == null).Return(_ => false) .When(x => x.Item1 == null && x.Item2 != null).Return(t => calledMethod.GetContainer() != aggregateOfCalledMethod) .Default(_ => true) .Match(Tuple.Create(aggregateOfCallingMethod, aggregateOfCalledMethod)); }