Browse Source

Fixed attribute context cases.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
c3b136b156
  1. 20
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 11
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs
  3. 45
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionAccessibleTests.cs
  4. 4
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ParameterCompletionTests.cs

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

@ -165,6 +165,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -165,6 +165,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
if (IsInsideCommentOrString ())
return Enumerable.Empty<ICompletionData> ();
var expr = GetExpressionBeforeCursor ();
Console.WriteLine ("bef:" + expr);
if (expr == null)
return null;
// do not complete <number>. (but <number>.<number>.)
@ -432,7 +433,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -432,7 +433,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
var contextList = new CompletionDataWrapper (this);
var identifierStart = GetExpressionAtCursor ();
Console.WriteLine ("is:" + identifierStart);
if (identifierStart != null && identifierStart.Item2 is TypeParameterDeclaration)
return null;
@ -505,7 +506,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -505,7 +506,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
}
foreach (var method in mgr.Methods) {
if (idx < method.Parameters.Count && method.Parameters[idx].Type.Kind == TypeKind.Delegate) {
if (idx < method.Parameters.Count && method.Parameters [idx].Type.Kind == TypeKind.Delegate) {
AutoSelect = false;
AutoCompleteEmptyMatch = false;
}
@ -516,7 +517,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -516,7 +517,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
idx++;
foreach (var list in mgr.GetExtensionMethods ()) {
foreach (var method in list) {
if (idx < method.Parameters.Count && method.Parameters[idx].Type.Kind == TypeKind.Delegate) {
if (idx < method.Parameters.Count && method.Parameters [idx].Type.Kind == TypeKind.Delegate) {
AutoSelect = false;
AutoCompleteEmptyMatch = false;
}
@ -1955,7 +1956,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1955,7 +1956,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
baseUnit = ParseStub ("A a;", false);
type = baseUnit.GetNodeAt<MemberType> (location);
}
if (type != null) {
if (currentType == null) {
var tsvisitor2 = new TypeSystemConvertVisitor (this.CSharpParsedFile.FileName);
@ -1970,8 +1970,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1970,8 +1970,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return Tuple.Create (CSharpParsedFile, (AstNode)target, Unit);
}
}
if (currentMember == null && currentType == null)
return null;
baseUnit = ParseStub ("a()", false);
var curNode = baseUnit.GetNodeAt (location);
@ -1986,8 +1984,13 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -1986,8 +1984,13 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
if (curNode is AttributedNode || baseUnit.GetNodeAt<Expression> (location) == null) {
baseUnit = ParseStub ("a()};");
}
var memberLocation = currentMember != null ? currentMember.Region.Begin : currentType.Region.Begin;
var mref = baseUnit.GetNodeAt<MemberReferenceExpression> (location);
if (currentMember == null && currentType == null) {
if (mref != null)
return Tuple.Create (CSharpParsedFile, (AstNode)mref.Target, baseUnit);
return null;
}
var memberLocation = currentMember != null ? currentMember.Region.Begin : currentType.Region.Begin;
if (mref == null) {
var invoke = baseUnit.GetNodeAt<InvocationExpression> (location);
if (invoke != null)
@ -2120,8 +2123,9 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -2120,8 +2123,9 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
expr = baseUnit.GetNodeAt<AnonymousTypeCreateExpression> (location.Line, location.Column);
if (expr != null)
expr = baseUnit.GetNodeAt<Expression> (location.Line, location.Column) ?? expr;
if (expr == null)
expr = baseUnit.GetNodeAt<Attribute> (location.Line, location.Column);
}
if (expr == null)
return null;
var member = Unit.GetNodeAt<AttributedNode> (memberLocation);

11
ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngineBase.cs

@ -317,17 +317,20 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -317,17 +317,20 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
switch (t.Item1) {
case '(':
wrapper.Append (')');
didAppendSemicolon = false;
if (appendSemicolon)
didAppendSemicolon = false;
lastBracket = ')';
break;
case '[':
wrapper.Append (']');
didAppendSemicolon = false;
if (appendSemicolon)
didAppendSemicolon = false;
lastBracket = ']';
break;
case '<':
wrapper.Append ('>');
didAppendSemicolon = false;
if (appendSemicolon)
didAppendSemicolon = false;
lastBracket = '>';
break;
case '{':
@ -505,7 +508,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -505,7 +508,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
// var newContent = ProjectContent.UpdateProjectContent (CSharpParsedFile, file);
var csResolver = new CSharpAstResolver(new CSharpResolver (ctx), unit, CSharpParsedFile);
var csResolver = new CSharpAstResolver(GetState (), unit, CSharpParsedFile);
var result = csResolver.Resolve (resolveNode);
var state = csResolver.GetResolverStateBefore (resolveNode);

45
ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionAccessibleTests.cs

@ -30,7 +30,6 @@ using System; @@ -30,7 +30,6 @@ using System;
using NUnit.Framework;
using System.Diagnostics;
namespace ICSharpCode.NRefactory.CSharp.CodeCompletion
{
[TestFixture]
@ -1125,9 +1124,8 @@ public static void Query(MySqlConnection conn, string database, string table) @@ -1125,9 +1124,8 @@ public static void Query(MySqlConnection conn, string database, string table)
Assert.IsNotNull (provider, "provider == null");
Assert.IsNotNull (provider.Find ("WriteLine"), "method 'WriteLine' not found.");
}
[Test()]
public void TestAttributeContext ()
public void TestAttributeContextClass ()
{
var provider = CodeCompletionBugTests.CreateProvider (@"
using System;
@ -1137,6 +1135,38 @@ class Test { @@ -1137,6 +1135,38 @@ class Test {
}");
Assert.IsNotNull (provider, "provider == null");
Assert.IsNotNull (provider.Find ("Obsolete"), "attribute 'Obsolete' not found.");
Assert.IsNotNull (provider.Find ("Serializable"), "attribute 'Serializable' not found.");
}
[Test()]
public void TestAttributeContextInNamespace ()
{
var provider = CodeCompletionBugTests.CreateProvider (@"
using System;
namespace Test {
$[O$
class Test {
}
}
");
Assert.IsNotNull (provider, "provider == null");
Assert.IsNotNull (provider.Find ("Obsolete"), "attribute 'Obsolete' not found.");
Assert.IsNotNull (provider.Find ("Serializable"), "attribute 'Serializable' not found.");
}
[Test()]
public void TestAttributeContextMember ()
{
var provider = CodeCompletionBugTests.CreateProvider (@"
using System;
class Test {
$[O$
}");
Assert.IsNotNull (provider, "provider == null");
Assert.IsNotNull (provider.Find ("Obsolete"), "attribute 'Obsolete' not found.");
Assert.IsNotNull (provider.Find ("Serializable"), "attribute 'Serializable' not found.");
}
[Test()]
@ -1166,6 +1196,15 @@ $$ @@ -1166,6 +1196,15 @@ $$
Assert.IsNotNull (provider.Find ("Test"), "class 'Test' not found.");
}
[Test()]
public void TestAttributeContextParameterCompletion ()
{
var provider = CodeCompletionBugTests.CreateProvider (@"$[Obsolete(System.$");
Assert.IsNotNull (provider, "provider == null");
Assert.IsNotNull (provider.Find ("Console"), "'Console' not found.");
}
/// <summary>
/// Bug 3320 - Constants accessed by class name do not show in completion list
/// </summary>

4
ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/ParameterCompletionTests.cs

@ -407,7 +407,8 @@ class TestClass @@ -407,7 +407,8 @@ class TestClass
public void TestBug434701 ()
{
IParameterDataProvider provider = CreateProvider (
@"class TestAttribute : System.Attribute
@"namespace Test {
class TestAttribute : System.Attribute
{
public Test (int a)
{
@ -417,6 +418,7 @@ class TestClass @@ -417,6 +418,7 @@ class TestClass
$[Test ($
class AClass
{
}
}");
Assert.IsNotNull (provider, "provider was not created.");
Assert.AreEqual (1, provider.OverloadCount);

Loading…
Cancel
Save