Browse Source

Don't keep the per-using scope and per-type definiton caches around longer than necessary.

newNRvisualizers
Daniel Grunwald 15 years ago
parent
commit
8a05ada508
  1. 24
      ICSharpCode.NRefactory/CSharp/Resolver/CSharpResolver.cs
  2. 7
      ICSharpCode.NRefactory/CSharp/Resolver/ResolveVisitor.cs

24
ICSharpCode.NRefactory/CSharp/Resolver/CSharpResolver.cs

@ -105,17 +105,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -105,17 +105,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
if (value == null) {
currentTypeDefinition = null;
} else {
if (currentTypeDefinition != null && currentTypeDefinition.TypeDefinition == value)
return;
CacheManager cache = context.CacheManager;
if (cache != null) {
currentTypeDefinition = cache.GetThreadLocal(value) as TypeDefinitionCache;
if (currentTypeDefinition == null) {
currentTypeDefinition = new TypeDefinitionCache(value);
cache.SetThreadLocal(value, currentTypeDefinition);
}
} else {
if (currentTypeDefinition == null || currentTypeDefinition.TypeDefinition != value) {
currentTypeDefinition = new TypeDefinitionCache(value);
}
}
@ -148,17 +138,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -148,17 +138,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
if (value == null) {
currentUsingScope = null;
} else {
if (currentUsingScope != null && currentUsingScope.UsingScope == value)
return;
CacheManager cache = context.CacheManager;
if (cache != null) {
currentUsingScope = cache.GetThreadLocal(value) as UsingScopeCache;
if (currentUsingScope == null) {
currentUsingScope = new UsingScopeCache(value);
cache.SetThreadLocal(value, currentUsingScope);
}
} else {
if (currentUsingScope == null || currentUsingScope.UsingScope != value) {
currentUsingScope = new UsingScopeCache(value);
}
}

7
ICSharpCode.NRefactory/CSharp/Resolver/ResolveVisitor.cs

@ -376,6 +376,9 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -376,6 +376,9 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
resolver.CurrentUsingScope = parsedFile.GetUsingScope(namespaceDeclaration.StartLocation);
}
ScanChildren(namespaceDeclaration);
// merge undecided lambdas before leaving the using scope so that
// the resolver can make better use of its cache
MergeUndecidedLambdas();
if (resolver.CurrentUsingScope != null)
return new NamespaceResolveResult(resolver.CurrentUsingScope.NamespaceName);
else
@ -415,6 +418,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -415,6 +418,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
}
}
// merge undecided lambdas before leaving the type definition so that
// the resolver can make better use of its cache
MergeUndecidedLambdas();
return newTypeDefinition != null ? new TypeResolveResult(newTypeDefinition) : errorResult;
} finally {
resolver.CurrentTypeDefinition = previousTypeDefinition;

Loading…
Cancel
Save