Browse Source

* CSharpCompletionEngine.cs: Fixed some bugs in global/type context.

* KeywordTests.cs:
* CodeCompletionBugTests.cs: Fixed some bugs in global/type context
newNRvisualizers
Mike Krüger 14 years ago
parent
commit
f5730d5729
  1. 14
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 20
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs
  3. 52
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/KeywordTests.cs

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

@ -370,7 +370,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
AddKeywords (dataList, linqKeywords); AddKeywords (dataList, linqKeywords);
return dataList.Result; return dataList.Result;
} }
if (!(char.IsLetter (completionChar) || completionChar == '_') && (identifierStart == null || !(identifierStart.Item2 is ArrayInitializerExpression))) if (!(char.IsLetter (completionChar) || completionChar == '_') && (identifierStart == null || !(identifierStart.Item2 is ArrayInitializerExpression)))
return controlSpace ? DefaultControlSpaceItems () : null; return controlSpace ? DefaultControlSpaceItems () : null;
char prevCh = offset > 2 ? document.GetCharAt (offset - 2) : '\0'; char prevCh = offset > 2 ? document.GetCharAt (offset - 2) : '\0';
@ -388,12 +387,13 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
if (!char.IsLetterOrDigit (last) && last != '_') if (!char.IsLetterOrDigit (last) && last != '_')
return null; return null;
} }
if (identifierStart == null) var contextList = new CompletionDataWrapper (this);
return null; if (identifierStart == null) {
AddContextCompletion (contextList, GetState (), null);
return contextList.Result;
}
CSharpResolver csResolver; CSharpResolver csResolver;
AstNode n = identifierStart.Item2; AstNode n = identifierStart.Item2;
var contextList = new CompletionDataWrapper (this);
if (n is ArrayInitializerExpression) { if (n is ArrayInitializerExpression) {
var initalizerResult = ResolveExpression (identifierStart.Item1, n.Parent, identifierStart.Item3); var initalizerResult = ResolveExpression (identifierStart.Item1, n.Parent, identifierStart.Item3);
if (initalizerResult != null) { if (initalizerResult != null) {
@ -554,6 +554,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
void AddContextCompletion (CompletionDataWrapper wrapper, CSharpResolver state, AstNode node) void AddContextCompletion (CompletionDataWrapper wrapper, CSharpResolver state, AstNode node)
{ {
Console.WriteLine ("!!!!");
if (state == null) if (state == null)
return; return;
foreach (var variable in state.LocalVariables) { foreach (var variable in state.LocalVariables) {
@ -586,6 +587,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
} else if (state.CurrentTypeDefinition != null) { } else if (state.CurrentTypeDefinition != null) {
AddKeywords (wrapper, typeLevelKeywords); AddKeywords (wrapper, typeLevelKeywords);
} else { } else {
Console.WriteLine ("3");
AddKeywords (wrapper, globalLevelKeywords); AddKeywords (wrapper, globalLevelKeywords);
} }
@ -866,7 +868,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
case "static": case "static":
wrapper = new CompletionDataWrapper (this); wrapper = new CompletionDataWrapper (this);
var state = GetState (); var state = GetState ();
AddTypesAndNamespaces (wrapper, state, null, m => false); AddTypesAndNamespaces (wrapper, state, null, null, m => false);
AddKeywords (wrapper, typeLevelKeywords); AddKeywords (wrapper, typeLevelKeywords);
AddKeywords (wrapper, primitiveTypesKeywords); AddKeywords (wrapper, primitiveTypesKeywords);
return wrapper.Result; return wrapper.Result;

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

@ -3596,6 +3596,26 @@ public class Test
Assert.IsNotNull (provider.Find ("C"), "class 'C' not found."); Assert.IsNotNull (provider.Find ("C"), "class 'C' not found.");
} }
/// <summary>
/// Bug 1744 - [New Resolver] Issues while typing a property
/// </summary>
[Test()]
public void Test1744 ()
{
var provider = CreateProvider (
@"
public class Test
{
$public $
}
");
Assert.IsNotNull (provider, "provider not found.");
Assert.IsNotNull (provider.Find ("void"), "class 'void' not found.");
Assert.IsNotNull (provider.Find ("Test"), "class 'Test' not found.");
Assert.IsNotNull (provider.Find ("System"), "namespace 'System' not found.");
}
[Test()] [Test()]
public void TestCompletionInTryCatch () public void TestCompletionInTryCatch ()
{ {

52
ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/KeywordTests.cs

@ -86,7 +86,59 @@ void Test (string t)
Assert.IsNotNull (provider.Find ("case"), "keyword 'case' not found."); Assert.IsNotNull (provider.Find ("case"), "keyword 'case' not found.");
} }
[Test()]
public void ModifierKeywordTest ()
{
var provider = CodeCompletionBugTests.CreateProvider (
@"
$p$
");
Assert.IsNotNull (provider, "provider == null");
Assert.IsNotNull (provider.Find ("public"), "keyword 'public' not found.");
Assert.IsNotNull (provider.Find ("namespace"), "keyword 'namespace' not found.");
}
[Test()]
public void ModifierKeywordTestCtrlSpace ()
{
var provider = CodeCompletionBugTests.CreateCtrlSpaceProvider (
@"
$p$
");
Assert.IsNotNull (provider, "provider == null");
Assert.IsNotNull (provider.Find ("public"), "keyword 'public' not found.");
Assert.IsNotNull (provider.Find ("namespace"), "keyword 'namespace' not found.");
}
[Test()]
public void ModifierKeywordTestCase2 ()
{
var provider = CodeCompletionBugTests.CreateProvider (
@"
class Test
{
$p$
}
");
Assert.IsNotNull (provider, "provider == null");
Assert.IsNotNull (provider.Find ("public"), "keyword 'public' not found.");
Assert.IsNull (provider.Find ("namespace"), "keyword 'namespace' found.");
}
[Test()]
public void ModifierKeywordTestCase2CrtlSpace ()
{
var provider = CodeCompletionBugTests.CreateCtrlSpaceProvider (
@"
class Test
{
$p$
}
");
Assert.IsNotNull (provider, "provider == null");
Assert.IsNotNull (provider.Find ("public"), "keyword 'public' not found.");
Assert.IsNull (provider.Find ("namespace"), "keyword 'namespace' found.");
}
} }
} }

Loading…
Cancel
Save