|
|
|
|
@ -464,7 +464,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
@@ -464,7 +464,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
|
|
|
|
|
return accCtx; |
|
|
|
|
return DefaultControlSpaceItems (null, controlSpace); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
CSharpResolver csResolver; |
|
|
|
|
AstNode n = identifierStart.Item2; |
|
|
|
|
// Handle foreach (type name _
|
|
|
|
|
@ -769,13 +768,13 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
@@ -769,13 +768,13 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
|
|
|
|
|
|
|
|
|
|
void AddContextCompletion (CompletionDataWrapper wrapper, CSharpResolver state, AstNode node) |
|
|
|
|
{ |
|
|
|
|
if (state != null) { |
|
|
|
|
if (state != null && !(node is AstType)) { |
|
|
|
|
foreach (var variable in state.LocalVariables) { |
|
|
|
|
wrapper.AddVariable (variable); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (currentMember is IUnresolvedParameterizedMember) { |
|
|
|
|
if (currentMember is IUnresolvedParameterizedMember && !(node is AstType)) { |
|
|
|
|
var param = (IParameterizedMember)currentMember.CreateResolved (ctx); |
|
|
|
|
foreach (var p in param.Parameters) { |
|
|
|
|
wrapper.AddVariable (p); |
|
|
|
|
@ -799,25 +798,28 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
@@ -799,25 +798,28 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
|
|
|
|
|
AddTypesAndNamespaces (wrapper, state, node, typePred); |
|
|
|
|
|
|
|
|
|
wrapper.Result.Add (factory.CreateLiteralCompletionData ("global")); |
|
|
|
|
if (currentMember != null) { |
|
|
|
|
AddKeywords (wrapper, statementStartKeywords); |
|
|
|
|
AddKeywords (wrapper, expressionLevelKeywords); |
|
|
|
|
} else if (currentType != null) { |
|
|
|
|
AddKeywords (wrapper, typeLevelKeywords); |
|
|
|
|
} else { |
|
|
|
|
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 (IsInSwitchContext (node)) { |
|
|
|
|
wrapper.AddCustom ("case"); |
|
|
|
|
if (!(node is AstType)) { |
|
|
|
|
if (currentMember != null) { |
|
|
|
|
AddKeywords (wrapper, statementStartKeywords); |
|
|
|
|
AddKeywords (wrapper, expressionLevelKeywords); |
|
|
|
|
} else if (currentType != null) { |
|
|
|
|
AddKeywords (wrapper, typeLevelKeywords); |
|
|
|
|
} else { |
|
|
|
|
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 (IsInSwitchContext (node)) { |
|
|
|
|
wrapper.AddCustom ("case"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
AddKeywords (wrapper, primitiveTypesKeywords); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
AddKeywords (wrapper, primitiveTypesKeywords); |
|
|
|
|
wrapper.Result.AddRange (factory.CreateCodeTemplateCompletionData ()); |
|
|
|
|
|
|
|
|
|
if (node != null && node.Role == AstNode.Roles.Argument) { |
|
|
|
|
@ -854,7 +856,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
@@ -854,7 +856,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
|
|
|
|
|
|
|
|
|
|
void AddTypesAndNamespaces (CompletionDataWrapper wrapper, CSharpResolver state, AstNode node, Predicate<IType> typePred = null, Predicate<IMember> memberPred = null) |
|
|
|
|
{ |
|
|
|
|
var currentMember = ctx.CurrentMember; |
|
|
|
|
if (currentType != null) { |
|
|
|
|
for (var ct = currentType; ct != null; ct = ct.DeclaringTypeDefinition) { |
|
|
|
|
foreach (var nestedType in ct.NestedTypes) { |
|
|
|
|
@ -866,7 +867,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
@@ -866,7 +867,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (this.currentMember != null) { |
|
|
|
|
if (this.currentMember != null && !(node is AstType)) { |
|
|
|
|
var def = ctx.CurrentTypeDefinition ?? Compilation.MainAssembly.GetTypeDefinition (currentType); |
|
|
|
|
foreach (var member in def.GetMembers ()) { |
|
|
|
|
if (member is IMethod && ((IMethod)member).FullName == "System.Object.Finalize") |
|
|
|
|
@ -1005,7 +1006,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
@@ -1005,7 +1006,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
|
|
|
|
|
isAsType = resolved.Item1.Type; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var isAsWrapper = new CompletionDataWrapper (this); |
|
|
|
|
AddTypesAndNamespaces (isAsWrapper, GetState (), null, t => isAsType == null || t.GetDefinition ().IsDerivedFrom (isAsType.GetDefinition ())); |
|
|
|
|
return isAsWrapper.Result; |
|
|
|
|
@ -1944,9 +1944,10 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
@@ -1944,9 +1944,10 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
|
|
|
|
|
var baseUnit = ParseStub (""); |
|
|
|
|
var tmpUnit = baseUnit; |
|
|
|
|
AstNode expr = baseUnit.GetNodeAt<IdentifierExpression> (location.Line, location.Column - 1); |
|
|
|
|
|
|
|
|
|
if (expr == null) |
|
|
|
|
expr = baseUnit.GetNodeAt<Attribute> (location.Line, location.Column - 1); |
|
|
|
|
if (expr == null) |
|
|
|
|
expr = baseUnit.GetNodeAt<AstType> (location.Line, location.Column - 1); |
|
|
|
|
|
|
|
|
|
// try insertStatement
|
|
|
|
|
if (expr == null && baseUnit.GetNodeAt<EmptyStatement> (location.Line, location.Column) != null) { |
|
|
|
|
|