Browse Source

Fixed Issue #109 'Code Completion shows 'ushort' in global scope'.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
90bea8ed51
  1. 18
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs
  2. 21
      ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs

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

@ -627,7 +627,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
} }
var contextList = new CompletionDataWrapper(this); var contextList = new CompletionDataWrapper(this);
var identifierStart = GetExpressionAtCursor(); var identifierStart = GetExpressionAtCursor();
if (identifierStart != null) { if (identifierStart != null) {
if (identifierStart.Node is TypeParameterDeclaration) { if (identifierStart.Node is TypeParameterDeclaration) {
return null; return null;
@ -1136,6 +1135,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return wrapper.Result; return wrapper.Result;
} }
} }
/* if (Unit != null && (node == null || node is TypeDeclaration)) { /* if (Unit != null && (node == null || node is TypeDeclaration)) {
var constructor = Unit.GetNodeAt<ConstructorDeclaration>( var constructor = Unit.GetNodeAt<ConstructorDeclaration>(
location.Line, location.Line,
@ -1181,6 +1181,9 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
void AddContextCompletion(CompletionDataWrapper wrapper, CSharpResolver state, AstNode node) void AddContextCompletion(CompletionDataWrapper wrapper, CSharpResolver state, AstNode node)
{ {
int i = offset - 1;
var isInGlobalDelegate = node == null && state.CurrentTypeDefinition == null && GetPreviousToken(ref i, true) == "delegate";
if (state != null && !(node is AstType)) { if (state != null && !(node is AstType)) {
foreach (var variable in state.LocalVariables) { foreach (var variable in state.LocalVariables) {
if (variable.Region.IsInside(location.Line, location.Column - 1)) { if (variable.Region.IsInside(location.Line, location.Column - 1)) {
@ -1211,9 +1214,11 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return t.GetAllBaseTypeDefinitions().Any(bt => bt.Equals(attribute)) ? t : null; return t.GetAllBaseTypeDefinitions().Any(bt => bt.Equals(attribute)) ? t : null;
}; };
} }
AddTypesAndNamespaces(wrapper, state, node, typePred); if (node != null || state.CurrentTypeDefinition != null || isInGlobalDelegate) {
AddTypesAndNamespaces(wrapper, state, node, typePred);
wrapper.Result.Add(factory.CreateLiteralCompletionData("global")); wrapper.Result.Add(factory.CreateLiteralCompletionData("global"));
}
if (!(node is AstType)) { if (!(node is AstType)) {
if (currentMember != null || node is Expression) { if (currentMember != null || node is Expression) {
@ -1224,7 +1229,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
} else if (currentType != null) { } else if (currentType != null) {
AddKeywords(wrapper, typeLevelKeywords); AddKeywords(wrapper, typeLevelKeywords);
} else { } else {
AddKeywords(wrapper, globalLevelKeywords); if (!isInGlobalDelegate)
AddKeywords(wrapper, globalLevelKeywords);
} }
var prop = currentMember as IUnresolvedProperty; var prop = currentMember as IUnresolvedProperty;
if (prop != null && prop.Setter != null && prop.Setter.Region.IsInside(location)) { if (prop != null && prop.Setter != null && prop.Setter.Region.IsInside(location)) {
@ -1242,7 +1248,9 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
AddKeywords(wrapper, parameterTypePredecessorKeywords); AddKeywords(wrapper, parameterTypePredecessorKeywords);
} }
} }
AddKeywords(wrapper, primitiveTypesKeywords);
if (node != null || state.CurrentTypeDefinition != null || isInGlobalDelegate)
AddKeywords(wrapper, primitiveTypesKeywords);
if (currentMember != null && (node is IdentifierExpression || node is SimpleType) && (node.Parent is ExpressionStatement || node.Parent is ForeachStatement || node.Parent is UsingStatement)) { if (currentMember != null && (node is IdentifierExpression || node is SimpleType) && (node.Parent is ExpressionStatement || node.Parent is ForeachStatement || node.Parent is UsingStatement)) {
wrapper.AddCustom("var"); wrapper.AddCustom("var");
wrapper.AddCustom("dynamic"); wrapper.AddCustom("dynamic");

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

@ -5449,8 +5449,25 @@ public class FooBar
}); });
} }
[Test()]
public void TestGlobalPrimitiveTypes()
{
CombinedProviderTest(
@"$u$", provider => {
Assert.IsNotNull(provider.Find("using"));
Assert.IsNull(provider.Find("ushort"));
});
}
[Test()]
public void TestGlobalPrimitiveTypesCase2()
{
CombinedProviderTest(
@"$delegate u$", provider => {
Assert.IsNotNull(provider.Find("ushort"));
Assert.IsNotNull(provider.Find("System"));
Assert.IsNull(provider.Find("using"));
});
}
} }
} }

Loading…
Cancel
Save