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 MonoDevelop.Projects.Dom.ClassType.Enum: if (addedEnums.Contains (resolvedType.DecoratedFullName)) continue; addedEnums.Add (resolvedType.DecoratedFullName); AddEnumMembers (completionList, resolvedType); break; case MonoDevelop.Projects.Dom.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 (this, dom, completionList, Document.CompilationUnit, resolver.CallingType, location); completionList.AutoCompleteEmptyMatch = false; completionList.AutoSelect = false; resolver.AddAccessibleCodeCompletionData (ExpressionContext.MethodBody, cdc); if (addedDelegates.Count > 0) { foreach (var data in completionList) { if (data is MemberCompletionData) ((MemberCompletionData)data).IsDelegateExpected = true; } } return completionList; }
public CompletionDataList CreatePossibleEnumCompletion (NRefactoryResolver resolver, DomLocation location, ExpressionContext context, IEnumerable<IMethod> possibleMethods, int parameter) { CompletionDataList completionList = new ProjectDomCompletionDataList (); var addedEnums = 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 || resolvedType.ClassType != ClassType.Enum) continue; if (addedEnums.Contains (resolvedType.DecoratedFullName)) continue; addedEnums.Add (resolvedType.DecoratedFullName); AddEnumMembers (completionList, resolvedType); } if (addedEnums.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; }