Browse Source

[Completion] Filter out namespaces that only contain inaccessible

types.
newNRvisualizers
Mike Krüger 14 years ago
parent
commit
c0972c8c95
  1. 9
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 16
      ICSharpCode.NRefactory.CSharp/Completion/CompletionDataWrapper.cs

9
ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs

@ -1425,7 +1425,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1425,7 +1425,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
foreach (var curNs in n.Namespace.ChildNamespaces) {
wrapper.AddNamespace(curNs);
wrapper.AddNamespace(lookup, curNs);
}
}
}
@ -2169,12 +2169,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -2169,12 +2169,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
var result = new CompletionDataWrapper(this);
if (resolveResult is NamespaceResolveResult) {
var nr = (NamespaceResolveResult)resolveResult;
if (!(resolvedNode.Parent is UsingDeclaration || resolvedNode.Parent != null && resolvedNode.Parent.Parent is UsingDeclaration)) {
var lookup = new MemberLookup(
ctx.CurrentTypeDefinition,
Compilation.MainAssembly
);
if (!(resolvedNode.Parent is UsingDeclaration || resolvedNode.Parent != null && resolvedNode.Parent.Parent is UsingDeclaration)) {
foreach (var cl in nr.Namespace.Types) {
if (hintType != null && hintType.Kind != TypeKind.Array && cl.Kind == TypeKind.Interface) {
continue;
@ -2185,7 +2184,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -2185,7 +2184,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
}
foreach (var ns in nr.Namespace.ChildNamespaces) {
result.AddNamespace(ns);
result.AddNamespace(lookup, ns);
}
} else if (resolveResult is TypeResolveResult) {
var type = resolveResult.Type;
@ -2306,7 +2305,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -2306,7 +2305,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
foreach (var ns in nr.Namespace.ChildNamespaces) {
namespaceContents.AddNamespace(ns);
namespaceContents.AddNamespace(lookup, ns);
}
return namespaceContents.Result;
}

16
ICSharpCode.NRefactory.CSharp/Completion/CompletionDataWrapper.cs

@ -67,10 +67,24 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -67,10 +67,24 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
HashSet<string> usedNamespaces = new HashSet<string> ();
public void AddNamespace (INamespace ns)
bool IsAccessible(MemberLookup lookup, INamespace ns)
{
if (ns.Types.Any (t => lookup.IsAccessible (t, false)))
return true;
foreach (var child in ns.ChildNamespaces)
if (IsAccessible (lookup, child))
return true;
return false;
}
public void AddNamespace (MemberLookup lookup, INamespace ns)
{
if (usedNamespaces.Contains (ns.Name))
return;
if (!IsAccessible (lookup, ns)) {
usedNamespaces.Add (ns.Name);
return;
}
usedNamespaces.Add (ns.Name);
result.Add (Factory.CreateNamespaceCompletionData (ns));
}

Loading…
Cancel
Save