Browse Source

Fixed ref/out/params keywords.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
0907829b0e
  1. 49
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 39
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/KeywordTests.cs

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

@ -864,59 +864,65 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -864,59 +864,65 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return wrapper.Result;
}
void AddContextCompletion (CompletionDataWrapper wrapper, CSharpResolver state, AstNode node)
void AddContextCompletion(CompletionDataWrapper wrapper, CSharpResolver state, AstNode node)
{
if (state != null && !(node is AstType)) {
foreach (var variable in state.LocalVariables) {
if (variable.Region.IsInside (location.Line, location.Column - 1))
if (variable.Region.IsInside(location.Line, location.Column - 1)) {
continue;
wrapper.AddVariable (variable);
}
wrapper.AddVariable(variable);
}
}
if (currentMember is IUnresolvedParameterizedMember && !(node is AstType)) {
var param = (IParameterizedMember)currentMember.CreateResolved (ctx);
var param = (IParameterizedMember)currentMember.CreateResolved(ctx);
foreach (var p in param.Parameters) {
wrapper.AddVariable (p);
wrapper.AddVariable(p);
}
}
if (currentMember is IUnresolvedMethod) {
var method = (IUnresolvedMethod)currentMember;
foreach (var p in method.TypeParameters) {
wrapper.AddTypeParameter (p);
wrapper.AddTypeParameter(p);
}
}
Predicate<IType> typePred = null;
if (IsAttributeContext (node)) {
var attribute = Compilation.FindType (KnownTypeCode.Attribute);
if (IsAttributeContext(node)) {
var attribute = Compilation.FindType(KnownTypeCode.Attribute);
typePred = t => {
return t.GetAllBaseTypeDefinitions ().Any (bt => bt.Equals (attribute));
return t.GetAllBaseTypeDefinitions().Any(bt => bt.Equals(attribute));
};
}
AddTypesAndNamespaces (wrapper, state, node, typePred);
AddTypesAndNamespaces(wrapper, state, node, typePred);
wrapper.Result.Add (factory.CreateLiteralCompletionData ("global"));
wrapper.Result.Add(factory.CreateLiteralCompletionData("global"));
if (!(node is AstType)) {
if (currentMember != null) {
AddKeywords (wrapper, statementStartKeywords);
AddKeywords (wrapper, expressionLevelKeywords);
AddKeywords(wrapper, statementStartKeywords);
AddKeywords(wrapper, expressionLevelKeywords);
} else if (currentType != null) {
AddKeywords (wrapper, typeLevelKeywords);
AddKeywords(wrapper, typeLevelKeywords);
} else {
AddKeywords (wrapper, globalLevelKeywords);
AddKeywords(wrapper, globalLevelKeywords);
}
var prop = currentMember as IUnresolvedProperty;
if (prop != null && prop.Setter != null && prop.Setter.Region.IsInside (location))
wrapper.AddCustom ("value");
if (currentMember is IUnresolvedEvent)
wrapper.AddCustom ("value");
if (prop != null && prop.Setter != null && prop.Setter.Region.IsInside(location)) {
wrapper.AddCustom("value");
}
if (currentMember is IUnresolvedEvent) {
wrapper.AddCustom("value");
}
if (IsInSwitchContext (node)) {
wrapper.AddCustom ("case");
if (IsInSwitchContext(node)) {
wrapper.AddCustom("case");
}
} else {
if (((AstType)node).Parent is ParameterDeclaration)
AddKeywords(wrapper, parameterTypePredecessorKeywords);
}
AddKeywords (wrapper, primitiveTypesKeywords);
@ -2522,6 +2528,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion @@ -2522,6 +2528,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
"override", "readonly", "virtual", "volatile"
};
static string[] linqKeywords = new string[] { "from", "where", "select", "group", "into", "orderby", "join", "let", "in", "on", "equals", "by", "ascending", "descending" };
static string[] parameterTypePredecessorKeywords = new string[] { "out", "ref", "params" };
#endregion
}
}

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

@ -405,6 +405,45 @@ class Test @@ -405,6 +405,45 @@ class Test
});
}
[Test()]
public void RefOutParamsTest1 ()
{
CodeCompletionBugTests.CombinedProviderTest (
@"using System;
class Test
{
$public void MyMethod (o$
}
", (provider) => {
Console.WriteLine (provider.Count);
Assert.IsNotNull (provider.Find ("ref"), "keyword 'ref' not found.");
Assert.IsNotNull (provider.Find ("out"), "keyword 'out' not found.");
Assert.IsNotNull (provider.Find ("params"), "keyword 'params' not found.");
});
}
[Test()]
public void RefOutParamsTest ()
{
CodeCompletionBugTests.CombinedProviderTest (
@"using System;
class Test
{
public void MyMethod ()
{
$Call(i$
}
}
", (provider) => {
Console.WriteLine (provider.Count);
Assert.IsNotNull (provider.Find ("ref"), "keyword 'ref' not found.");
Assert.IsNotNull (provider.Find ("out"), "keyword 'out' not found.");
Assert.IsNull (provider.Find ("params"), "keyword 'params' found.");
});
}
[Test()]
public void VariableDeclarationTestMethodDeclarationCase ()
{

Loading…
Cancel
Save