From 802cd236972f4f0bce3f7263298763f9fdbb1b59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Fri, 10 Feb 2012 09:08:51 +0100 Subject: [PATCH] Fixed "assertion problem". Failed code was: -------------------------------- using System; using System.Collections.Generic; namespace MyApp { public interface ISubject { } public class Test { public void Foo (IObserver observer) { var rightSubs = new List> (); var rightVals = new List (); Observer.Create (v => { ISubject rsub = new ReplaySubject (); foreach (var r }, () => sub.OnCompleted ()); } } } ------------------------------------ --- .../Resolver/ResolveVisitor.cs | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs b/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs index 7bbc02e882..2d93b6dd28 100644 --- a/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs +++ b/ICSharpCode.NRefactory.CSharp/Resolver/ResolveVisitor.cs @@ -176,15 +176,16 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver } // We shouldn't scan nodes that were already resolved. - Debug.Assert(!resolveResultCache.ContainsKey(node)); - // Doing so should be harmless since we allow scanning twice, but it indicates - // a bug in the logic that causes the scan. - - bool oldResolverEnabled = resolverEnabled; - resolverEnabled = false; - StoreCurrentState(node); - node.AcceptVisitor(this, null); - resolverEnabled = oldResolverEnabled; + if (!resolveResultCache.ContainsKey(node)) { + // Doing so should be harmless since we allow scanning twice, but it indicates + // a bug in the logic that causes the scan. + + bool oldResolverEnabled = resolverEnabled; + resolverEnabled = false; + StoreCurrentState(node); + node.AcceptVisitor(this, null); + resolverEnabled = oldResolverEnabled; + } break; case ResolveVisitorNavigationMode.Resolve: Resolve(node);