public CompletionDataList CreateParameterCompletion (NRefactoryResolver resolver, DomLocation location, ExpressionContext context, IEnumerable<IMethod> possibleMethods, int parameter)
{
CompletionDataList completionList = new ProjectDomCompletionDataList ();
var addedEnums = new HashSet<string> ();
var addedDelegates = new HashSet<string> ();
IType resolvedType = null;
foreach (var method in possibleMethods) {
if (method.Parameters.Count <= parameter)
continue;
resolvedType = dom.GetType (method.Parameters [parameter].ReturnType);
if (resolvedType == null)
continue;
switch (resolvedType.ClassType) {
case ClassType.Enum:
if (addedEnums.Contains (resolvedType.DecoratedFullName))
continue;
addedEnums.Add (resolvedType.DecoratedFullName);
AddEnumMembers (completionList, resolvedType);
break;
case ClassType.Delegate:
if (addedDelegates.Contains (resolvedType.DecoratedFullName))
continue;
addedDelegates.Add (resolvedType.DecoratedFullName);
string parameterDefinition = AddDelegateHandlers (completionList, resolvedType, false, addedDelegates.Count == 1);
string varName = "Handle" + method.Parameters [parameter].ReturnType.Name + method.Parameters [parameter].Name;
completionList.Add (new EventCreationCompletionData (textEditorData, varName, resolvedType, null, parameterDefinition, resolver.Unit.GetMemberAt (location), resolvedType) { AddSemicolon = false });
break;
}
}
if (addedEnums.Count + addedDelegates.Count == 0)
return null;
CompletionDataCollector cdc = new CompletionDataCollector (dom, completionList, Document.CompilationUnit, resolver.CallingType, location);
completionList.AutoCompleteEmptyMatch = false;
completionList.AutoSelect = false;
resolver.AddAccessibleCodeCompletionData (context, cdc);
return completionList;
}