Browse Source

Fixed completion bug.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
0802ed7564
  1. 8
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 75
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs

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

@ -198,6 +198,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
} }
} }
var resolveResult = ResolveExpression(expr); var resolveResult = ResolveExpression(expr);
if (resolveResult == null) { if (resolveResult == null) {
return null; return null;
} }
@ -2154,10 +2155,17 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
if (resolveResult is NamespaceResolveResult) { if (resolveResult is NamespaceResolveResult) {
var nr = (NamespaceResolveResult)resolveResult; var nr = (NamespaceResolveResult)resolveResult;
if (!(resolvedNode.Parent is UsingDeclaration || resolvedNode.Parent != null && resolvedNode.Parent.Parent is UsingDeclaration)) { if (!(resolvedNode.Parent is UsingDeclaration || resolvedNode.Parent != null && resolvedNode.Parent.Parent is UsingDeclaration)) {
var lookup = new MemberLookup(
ctx.CurrentTypeDefinition,
Compilation.MainAssembly
);
foreach (var cl in nr.Namespace.Types) { foreach (var cl in nr.Namespace.Types) {
if (hintType != null && hintType.Kind != TypeKind.Array && cl.Kind == TypeKind.Interface) { if (hintType != null && hintType.Kind != TypeKind.Array && cl.Kind == TypeKind.Interface) {
continue; continue;
} }
if (!lookup.IsAccessible (cl, false))
continue;
result.AddType(cl, false, IsAttributeContext(resolvedNode)); result.AddType(cl, false, IsAttributeContext(resolvedNode));
} }
} }

75
ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs

@ -217,12 +217,27 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
#endregion #endregion
} }
public static IUnresolvedAssembly SystemAssembly { get { return systemAssembly.Value; } }
static readonly Lazy<IUnresolvedAssembly> systemAssembly = new Lazy<IUnresolvedAssembly>( static readonly Lazy<IUnresolvedAssembly> systemAssembly = new Lazy<IUnresolvedAssembly>(
delegate { delegate {
return new CecilLoader().LoadAssemblyFile(typeof(System.ComponentModel.BrowsableAttribute).Assembly.Location); var loader = new CecilLoader();
loader.IncludeInternalMembers = true;
return loader.LoadAssemblyFile(typeof(System.ComponentModel.BrowsableAttribute).Assembly.Location);
}); });
static readonly Lazy<IUnresolvedAssembly> mscorlib = new Lazy<IUnresolvedAssembly>(
delegate {
var loader = new CecilLoader();
loader.IncludeInternalMembers = true;
return loader.LoadAssemblyFile(typeof(object).Assembly.Location);
});
static readonly Lazy<IUnresolvedAssembly> systemCore = new Lazy<IUnresolvedAssembly>(
delegate {
var loader = new CecilLoader();
loader.IncludeInternalMembers = true;
return loader.LoadAssemblyFile(typeof(System.Linq.Enumerable).Assembly.Location);
});
public static CSharpCompletionEngine CreateEngine(string text, out int cursorPosition, params IUnresolvedAssembly[] references) public static CSharpCompletionEngine CreateEngine(string text, out int cursorPosition, params IUnresolvedAssembly[] references)
{ {
string parsedText; string parsedText;
@ -243,7 +258,7 @@ namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
var doc = new ReadOnlyDocument(editorText); var doc = new ReadOnlyDocument(editorText);
IProjectContent pctx = new CSharpProjectContent(); IProjectContent pctx = new CSharpProjectContent();
var refs = new List<IUnresolvedAssembly> { CecilLoaderTests.Mscorlib, CecilLoaderTests.SystemCore, SystemAssembly }; var refs = new List<IUnresolvedAssembly> { mscorlib.Value, systemCore.Value, systemAssembly.Value };
if (references != null) if (references != null)
refs.AddRange (references); refs.AddRange (references);
@ -5566,5 +5581,57 @@ namespace bug
} }
/// <summary>
/// Bug 6849 - Regression: Inaccesible types in completion
/// </summary>
[Test()]
public void TestBug6849()
{
CombinedProviderTest(
@"
namespace bug
{
public class TestClass
{
void Bar()
{
$new System.Collections.Generic.$
}
}
}
", provider => {
// it's likely to be mono specific.
Assert.IsNull(provider.Find("RBTree"));
Assert.IsNull(provider.Find("GenericComparer"));
Assert.IsNull(provider.Find("InternalStringComparer"));
});
}
[Test()]
public void TestBug6849Case2()
{
CombinedProviderTest(
@"
namespace bug
{
public class TestClass
{
void Bar()
{
$System.Collections.Generic.$
}
}
}
", provider => {
// it's likely to be mono specific.
Assert.IsNull(provider.Find("RBTree"));
Assert.IsNull(provider.Find("GenericComparer"));
Assert.IsNull(provider.Find("InternalStringComparer"));
});
}
} }
} }

Loading…
Cancel
Save