private void AddBufferedMembers() { foreach (string name in _memberEntries.Keys) { List <MemberEntry> membersWithSameName = _memberEntries[name]; MemberEntry entry = membersWithSameName[0]; if (membersWithSameName.Count == 1) { string preText = MaskIdentifier(name); IntelliPromptMemberListItem item = new IntelliPromptMemberListItem(name, entry.ImageIndex, entry.Description, preText, String.Empty); _members.Add(item); } else { StringBuilder sb = new StringBuilder(); sb.Append("(Ambiguous name -- choose from the following:)"); foreach (MemberEntry entryWithSameName in membersWithSameName) { sb.Append("<br/>"); sb.Append(entryWithSameName.Description); } string description = sb.ToString(); string preText = MaskIdentifier(name); IntelliPromptMemberListItem item = new IntelliPromptMemberListItem(name, AMBIGUOUS_NAME_IMG_INDEX, description, preText, String.Empty); _members.Add(item); } } }
private void AddWithoutDuplicationCheck(string name, string fullname, string datatype, int imageIndex) { string preText = MaskIdentifier(name); string description = String.Format(CultureInfo.CurrentCulture, "<b>{0}</b> : {1}", fullname, datatype); IntelliPromptMemberListItem item = new IntelliPromptMemberListItem(name, imageIndex, description, preText, String.Empty); _members.Add(item); }
/// <summary> /// Add <see cref="IntelliPromptMemberListItem"/> items that indicate the language keywords to a <see cref="Hashtable"/>. /// </summary> /// <param name="memberListItemHashtable">A <see cref="Hashtable"/> of <see cref="IntelliPromptMemberListItem"/> objects, keyed by name.</param> protected void AddKeywordMemberListItems(Hashtable memberListItemHashtable) { for (int id = CSharpTokenID.ContextualKeywordStart + 1; id < CSharpTokenID.ContextualKeywordEnd; id++) { string keyword = CSharpTokenID.GetTokenKey(id).ToLower(); memberListItemHashtable[keyword] = new IntelliPromptMemberListItem(keyword, (int)ActiproSoftware.Products.SyntaxEditor.IconResource.Keyword); } for (int id = CSharpTokenID.KeywordStart + 1; id < CSharpTokenID.KeywordEnd; id++) { string keyword = CSharpTokenID.GetTokenKey(id).ToLower(); memberListItemHashtable[keyword] = new IntelliPromptMemberListItem(keyword, (int)ActiproSoftware.Products.SyntaxEditor.IconResource.Keyword); } }
private void AddBufferedFunctions() { foreach (string functionName in _functionsTable.Keys) { List <InvocableBinding> functionList = _functionsTable[functionName]; InvocableBinding invocable = functionList[0]; string description; if (invocable is FunctionBinding) { if (functionList.Count == 1) { description = String.Format(CultureInfo.CurrentCulture, "<b>{0}</b> : {1}", invocable.Name, invocable.ReturnType.Name); } else { description = String.Format(CultureInfo.CurrentCulture, "<b>{0}</b> : {1} (+ {2} Overloadings)", invocable.Name, invocable.ReturnType.Name, functionList.Count); } } else { MethodBinding method = (MethodBinding)invocable; if (functionList.Count == 1) { description = String.Format(CultureInfo.CurrentCulture, "{0}.<b>{1}</b> : {2}", method.DeclaringType.Name, method.Name, method.ReturnType.Name); } else { description = String.Format(CultureInfo.CurrentCulture, "{0}.<b>{1}</b> : {2} (+ {3} Overloadings)", method.DeclaringType.Name, method.Name, method.ReturnType.Name, functionList.Count); } } string preText = MaskIdentifier(invocable.Name); IntelliPromptMemberListItem item = new IntelliPromptMemberListItem(invocable.Name, FUNCTION_IMG_INDEX, description, preText, String.Empty); _members.Add(item); } }
private void AddBufferedMembers() { foreach (string name in _memberEntries.Keys) { List<MemberEntry> membersWithSameName = _memberEntries[name]; MemberEntry entry = membersWithSameName[0]; if (membersWithSameName.Count == 1) { string preText = MaskIdentifier(name); IntelliPromptMemberListItem item = new IntelliPromptMemberListItem(name, entry.ImageIndex, entry.Description, preText, String.Empty); _members.Add(item); } else { StringBuilder sb = new StringBuilder(); sb.Append("(Ambiguous name -- choose from the following:)"); foreach (MemberEntry entryWithSameName in membersWithSameName) { sb.Append("<br/>"); sb.Append(entryWithSameName.Description); } string description = sb.ToString(); string preText = MaskIdentifier(name); IntelliPromptMemberListItem item = new IntelliPromptMemberListItem(name, AMBIGUOUS_NAME_IMG_INDEX, description, preText, String.Empty); _members.Add(item); } } }
public void AcceptRelation(TableRefBinding parentBinding, TableRefBinding childBinding, TableRelation relation) { ColumnBindingCollection parentColumns; if (parentBinding.TableBinding == relation.ParentTable) parentColumns = relation.ParentColumns; else parentColumns = relation.ChildColumns; ColumnBindingCollection childColumns; if (childBinding.TableBinding == relation.ChildTable) childColumns = relation.ChildColumns; else childColumns = relation.ParentColumns; // Item in member list: // ~~~~~~~~~~~~~~~~~~~~ // parentRef(col1, col2) ---> childRef(col1, col2) StringBuilder sb = new StringBuilder(); sb.Append(parentBinding.Name); sb.Append(" ("); for (int i = 0; i < relation.ColumnCount; i++) { if (i > 0) sb.Append(", "); sb.Append(parentColumns[i].Name); } sb.Append(") ---> "); sb.Append(childBinding.Name); sb.Append(" ("); for (int i = 0; i < relation.ColumnCount; i++) { if (i > 0) sb.Append(", "); sb.Append(childColumns[i].Name); } sb.Append(")"); string name = sb.ToString(); sb.Length = 0; // Description: // ~~~~~~~~~~~~ // Relation <b>parentTable parentRef</b> ---> <b>ChildTable childRef</b> <br/> // ON (parentRef.Col1 = childRef.Col1 AND parentRef.Col2 = childRef.Col2) sb.Append("Relation <br/>"); sb.Append("<b>"); sb.Append(MaskIdentifier(parentBinding.TableBinding.Name)); sb.Append(" AS "); sb.Append(MaskIdentifier(parentBinding.Name)); sb.Append("</b>"); sb.Append(" ---> "); sb.Append("<b>"); sb.Append(MaskIdentifier(childBinding.TableBinding.Name)); sb.Append(" AS "); sb.Append(MaskIdentifier(childBinding.Name)); sb.Append("</b><br/>ON ("); for (int i = 0; i < relation.ColumnCount; i++) { if (i > 0) sb.Append(" AND "); sb.Append(MaskIdentifier(parentBinding.Name)); sb.Append("."); sb.Append(MaskIdentifier(parentColumns[i].Name)); sb.Append(" = "); sb.Append(MaskIdentifier(childBinding.Name)); sb.Append("."); sb.Append(MaskIdentifier(childColumns[i].Name)); } sb.Append(")"); string description = sb.ToString(); sb.Length = 0; // PreText: // ~~~~~~~~ // parentAlias.Col1 = childAlias.Col1 AND parentAlias.Col2 = childAlias.Col2 for (int i = 0; i < relation.ColumnCount; i++) { if (i > 0) sb.Append(" AND "); sb.Append(MaskIdentifier(parentBinding.Name)); sb.Append("."); sb.Append(MaskIdentifier(parentColumns[i].Name)); sb.Append(" = "); sb.Append(MaskIdentifier(childBinding.Name)); sb.Append("."); sb.Append(MaskIdentifier(childColumns[i].Name)); } string preText = sb.ToString(); sb.Length = 0; IntelliPromptMemberListItem item = new IntelliPromptMemberListItem(name, RELATION_IMG_INDEX, description, preText, String.Empty); _members.Add(item); }
private void AddBufferedFunctions() { foreach (string functionName in _functionsTable.Keys) { List<InvocableBinding> functionList = _functionsTable[functionName]; InvocableBinding invocable = functionList[0]; string description; if (invocable is FunctionBinding) { if (functionList.Count == 1) description = String.Format(CultureInfo.CurrentCulture, "<b>{0}</b> : {1}", invocable.Name, invocable.ReturnType.Name); else description = String.Format(CultureInfo.CurrentCulture, "<b>{0}</b> : {1} (+ {2} Overloadings)", invocable.Name, invocable.ReturnType.Name, functionList.Count); } else { MethodBinding method = (MethodBinding) invocable; if (functionList.Count == 1) description = String.Format(CultureInfo.CurrentCulture, "{0}.<b>{1}</b> : {2}", method.DeclaringType.Name, method.Name, method.ReturnType.Name); else description = String.Format(CultureInfo.CurrentCulture, "{0}.<b>{1}</b> : {2} (+ {3} Overloadings)", method.DeclaringType.Name, method.Name, method.ReturnType.Name, functionList.Count); } string preText = MaskIdentifier(invocable.Name); IntelliPromptMemberListItem item = new IntelliPromptMemberListItem(invocable.Name, FUNCTION_IMG_INDEX, description, preText, String.Empty); _members.Add(item); } }
private static void AutoCompleteUserOptions(string fullString) { string[] words = fullString.ToLower().Split('.'); if (words.Length == 1 && "UserOptions".IndexOf(words[0], StringComparison.InvariantCultureIgnoreCase) == 0) { IntelliPromptMemberListItem item = new IntelliPromptMemberListItem("UserOptions", (int)ActiproSoftware.Products.SyntaxEditor.IconResource.PublicField, "UserOptions"); Editor.IntelliPrompt.MemberList.Add(item); return; } for (int i = 0; i < Project.Instance.UserOptions.Count; i++) { if (words.Length == 1 && Project.Instance.UserOptions[i].VariableName.ToLower().IndexOf(words[0]) == 0) { // AutoComplete IntelliPromptMemberListItem item = new IntelliPromptMemberListItem(Project.Instance.UserOptions[i].VariableName, (int)ActiproSoftware.Products.SyntaxEditor.IconResource.PublicField, "(user option) " + Project.Instance.UserOptions[i].VarType + " " + Project.Instance.UserOptions[i].VariableName); bool alreadyExists = false; for (int itemCounter = 0; itemCounter < Editor.IntelliPrompt.MemberList.Count; itemCounter++) { if (Editor.IntelliPrompt.MemberList[itemCounter].Text == Project.Instance.UserOptions[i].VariableName) { alreadyExists = true; break; } } if (!alreadyExists) { Editor.IntelliPrompt.MemberList.Add(item); } } } }
private static void AutoCompleteSpecialWords(string fullString) { string[] words = fullString.ToLower().Split('.'); string[] specialWords = new[] { "Write", "WriteLine", "WriteFormat", "SkipCurrentFile" }; foreach (string specialWord in specialWords) { if (words.Length == 1 && specialWord.ToLower().IndexOf(words[0]) == 0) { // AutoComplete IntelliPromptMemberListItem item = new IntelliPromptMemberListItem(specialWord, (int)ActiproSoftware.Products.SyntaxEditor.IconResource.InternalMethod, specialWord); bool alreadyExists = false; for (int itemCounter = 0; itemCounter < Editor.IntelliPrompt.MemberList.Count; itemCounter++) { if (Editor.IntelliPrompt.MemberList[itemCounter].Text == specialWord) { alreadyExists = true; break; } } if (!alreadyExists) { Editor.IntelliPrompt.MemberList.Add(item); } } } }
private static void AutoCompleteLocalVariables(string fullString, SyntaxEditor editor) { // Let's find if this variable was declared anywhere string parentVar2 = fullString; if (fullString.IndexOf(".") > 0) { parentVar2 = fullString.Substring(0, fullString.IndexOf(".")); } Regex regex = new Regex(@"([a-zA-Z0-9]+)\s+(" + parentVar2 + "[a-zA-Z0-9]+)", RegexOptions.RightToLeft | RegexOptions.Multiline); MatchCollection matches = regex.Matches(editor.Text, editor.Caret.Offset - fullString.Length); foreach (Match match in matches) { if (match != null) { string dataTypeName = match.Value; string variableName; if (match.Groups.Count > 1) { dataTypeName = match.Groups[1].Value.Trim(); variableName = match.Groups[2].Value.Trim(); bool alreadyExists = false; for (int itemCounter = 0; itemCounter < Editor.IntelliPrompt.MemberList.Count; itemCounter++) { if (Editor.IntelliPrompt.MemberList[itemCounter].Text == variableName) { alreadyExists = true; break; } } if (!alreadyExists) { IntelliPromptMemberListItem item = new IntelliPromptMemberListItem(variableName, (int)ActiproSoftware.Products.SyntaxEditor.IconResource.InternalField, "(local variable) " + dataTypeName + " " + variableName); Editor.IntelliPrompt.MemberList.Add(item); } } } } return; }
private static void AutoCompleteFunctions(string fullString) { string[] words = fullString.ToLower().Split('.'); for (int i = 0; i < Project.Instance.Functions.Count; i++) { if (words.Length == 1 && Project.Instance.Functions[i].Name.ToLower().IndexOf(words[0]) == 0) { // AutoComplete IntelliPromptMemberListItem item = new IntelliPromptMemberListItem(Project.Instance.Functions[i].Name, (int)ActiproSoftware.Products.SyntaxEditor.IconResource.PublicField, "(function) " + Project.Instance.Functions[i].ReturnType + " " + Project.Instance.Functions[i].Name); bool alreadyExists = false; for (int itemCounter = 0; itemCounter < Editor.IntelliPrompt.MemberList.Count; itemCounter++) { if (Editor.IntelliPrompt.MemberList[itemCounter].Text == Project.Instance.Functions[i].Name) { alreadyExists = true; break; } } if (!alreadyExists) { Editor.IntelliPrompt.MemberList.Add(item); } } } }
public void AcceptRelation(TableRefBinding parentBinding, TableRefBinding childBinding, TableRelation relation) { ColumnBindingCollection parentColumns; if (parentBinding.TableBinding == relation.ParentTable) { parentColumns = relation.ParentColumns; } else { parentColumns = relation.ChildColumns; } ColumnBindingCollection childColumns; if (childBinding.TableBinding == relation.ChildTable) { childColumns = relation.ChildColumns; } else { childColumns = relation.ParentColumns; } // Item in member list: // ~~~~~~~~~~~~~~~~~~~~ // parentRef(col1, col2) ---> childRef(col1, col2) StringBuilder sb = new StringBuilder(); sb.Append(parentBinding.Name); sb.Append(" ("); for (int i = 0; i < relation.ColumnCount; i++) { if (i > 0) { sb.Append(", "); } sb.Append(parentColumns[i].Name); } sb.Append(") ---> "); sb.Append(childBinding.Name); sb.Append(" ("); for (int i = 0; i < relation.ColumnCount; i++) { if (i > 0) { sb.Append(", "); } sb.Append(childColumns[i].Name); } sb.Append(")"); string name = sb.ToString(); sb.Length = 0; // Description: // ~~~~~~~~~~~~ // Relation <b>parentTable parentRef</b> ---> <b>ChildTable childRef</b> <br/> // ON (parentRef.Col1 = childRef.Col1 AND parentRef.Col2 = childRef.Col2) sb.Append("Relation <br/>"); sb.Append("<b>"); sb.Append(MaskIdentifier(parentBinding.TableBinding.Name)); sb.Append(" AS "); sb.Append(MaskIdentifier(parentBinding.Name)); sb.Append("</b>"); sb.Append(" ---> "); sb.Append("<b>"); sb.Append(MaskIdentifier(childBinding.TableBinding.Name)); sb.Append(" AS "); sb.Append(MaskIdentifier(childBinding.Name)); sb.Append("</b><br/>ON ("); for (int i = 0; i < relation.ColumnCount; i++) { if (i > 0) { sb.Append(" AND "); } sb.Append(MaskIdentifier(parentBinding.Name)); sb.Append("."); sb.Append(MaskIdentifier(parentColumns[i].Name)); sb.Append(" = "); sb.Append(MaskIdentifier(childBinding.Name)); sb.Append("."); sb.Append(MaskIdentifier(childColumns[i].Name)); } sb.Append(")"); string description = sb.ToString(); sb.Length = 0; // PreText: // ~~~~~~~~ // parentAlias.Col1 = childAlias.Col1 AND parentAlias.Col2 = childAlias.Col2 for (int i = 0; i < relation.ColumnCount; i++) { if (i > 0) { sb.Append(" AND "); } sb.Append(MaskIdentifier(parentBinding.Name)); sb.Append("."); sb.Append(MaskIdentifier(parentColumns[i].Name)); sb.Append(" = "); sb.Append(MaskIdentifier(childBinding.Name)); sb.Append("."); sb.Append(MaskIdentifier(childColumns[i].Name)); } string preText = sb.ToString(); sb.Length = 0; IntelliPromptMemberListItem item = new IntelliPromptMemberListItem(name, RELATION_IMG_INDEX, description, preText, String.Empty); _members.Add(item); }
/// <summary> /// Provides the core functionality to show an IntelliPrompt member list based on the current context in a <see cref="SyntaxEditor"/>. /// </summary> /// <param name="language">The <see cref="DotNetLanguage"/> to use for quick info formatting.</param> /// <param name="syntaxEditor">The <see cref="SyntaxEditor"/> that will display the IntelliPrompt member list.</param> /// <param name="completeWord">Whether to complete the word.</param> /// <returns> /// <c>true</c> if an auto-complete occurred or if a IntelliPrompt member list is displayed; otherwise, <c>false</c>. /// </returns> internal bool ShowIntelliPromptMemberList(DotNetLanguage language, SyntaxEditor syntaxEditor, SyntaxEditor toEditor, bool completeWord, string parameterName) { // Try and ensure the compilation unit is up-to-date SemanticParserService.WaitForParse(SemanticParserServiceRequest.GetParseHashKey(syntaxEditor.Document, syntaxEditor.Document)); // Get the context //DotNetContext context = this.GetContext(syntaxEditor, syntaxEditor.Caret.Offset, true, false); DotNetContext context = this.GetContext(syntaxEditor, syntaxEditor.Document.GetText(LineTerminator.Newline).Length - 1, true, false); // Initialize the member list IntelliPromptMemberList memberList = toEditor.IntelliPrompt.MemberList;// syntaxEditor.IntelliPrompt.MemberList; memberList.ResetAllowedCharacters(); memberList.Clear(); memberList.ImageList = SyntaxEditor.ReflectionImageList; memberList.Context = context; // GFH if (completeWord && context.InitializationTextRange.StartOffset >= 0) { string partialWord = syntaxEditor.Document.GetText(LineTerminator.Newline).Substring(context.InitializationTextRange.StartOffset, context.InitializationTextRange.Length); if (parameterName.StartsWith(partialWord)) { memberList.Add(new IntelliPromptMemberListItem(parameterName, (int)ActiproSoftware.Products.SyntaxEditor.IconResource.PrivateProperty)); } } // Get the member list items Hashtable memberListItemHashtable = new Hashtable(); switch (context.Type) { case DotNetContextType.AnyCode: // Fill with everything if (context.ProjectResolver != null) { // Fill with child namespace names in the global and imported namespaces //context.ProjectResolver.AddMemberListItemsForChildNamespaces(memberListItemHashtable, null); //foreach (string namespaceName in context.ImportedNamespaces) // context.ProjectResolver.AddMemberListItemsForChildNamespaces(memberListItemHashtable, namespaceName); //// Fill with the types in the global and imported namespaces //context.ProjectResolver.AddMemberListItemsForTypes(memberListItemHashtable, context.TypeDeclarationNode, null, DomBindingFlags.Default, true); //foreach (string namespaceName in context.ImportedNamespaces) // context.ProjectResolver.AddMemberListItemsForTypes(memberListItemHashtable, context.TypeDeclarationNode, namespaceName, DomBindingFlags.Default, true); // Fill with static members of parent types if ((context.TypeDeclarationNode != null) && (context.TypeDeclarationNode.DeclaringType is IDomType)) { context.ProjectResolver.AddMemberListItemsForDeclaringTypeMembers(memberListItemHashtable, context.TypeDeclarationNode, (IDomType)context.TypeDeclarationNode.DeclaringType, DomBindingFlags.Static | DomBindingFlags.AllAccessTypes); } // Fill with nested types if (context.TypeDeclarationNode != null) { context.ProjectResolver.AddMemberListItemsForNestedTypes(memberListItemHashtable, context.TypeDeclarationNode, context.TypeDeclarationNode, DomBindingFlags.Default, true); } // Fill with members if in a member (pay attention to if member is instance or static) if (context.TypeDeclarationNode != null) { if (context.MemberDeclarationNode != null) { if (!((IDomMember)context.MemberDeclarationNode).IsStatic) { // Fill with extension methods context.ProjectResolver.AddMemberListItemsForExtensionMethods(memberListItemHashtable, context, context.TypeDeclarationNode, DomBindingFlags.Instance | context.AdditionalBindingFlags | DomBindingFlags.AllAccessTypes); } // Fill with members context.ProjectResolver.AddMemberListItemsForMembers(memberListItemHashtable, context.TypeDeclarationNode, context.TypeDeclarationNode, (this.LanguageType == DotNetLanguage.CSharp ? DomBindingFlags.ExcludeIndexers : DomBindingFlags.None) | DomBindingFlags.Static | (((IDomMember)context.MemberDeclarationNode).IsStatic ? DomBindingFlags.None : DomBindingFlags.Instance) | context.AdditionalBindingFlags | DomBindingFlags.AllAccessTypes); } else { // Not within a member so fill with static members context.ProjectResolver.AddMemberListItemsForMembers(memberListItemHashtable, context.TypeDeclarationNode, context.TypeDeclarationNode, (this.LanguageType == DotNetLanguage.CSharp ? DomBindingFlags.ExcludeIndexers : DomBindingFlags.None) | DomBindingFlags.Static | context.AdditionalBindingFlags | DomBindingFlags.AllAccessTypes); } } // Fill with variables defined in the scope context.ProjectResolver.AddMemberListItemsForVariables(memberListItemHashtable, context); // Fill with language keywords //this.AddKeywordMemberListItems(memberListItemHashtable); // Fill with code snippets if (this.CodeSnippetsEnabled) { context.ProjectResolver.AddMemberListItemsForCodeSnippets(memberListItemHashtable); } } break; case DotNetContextType.BaseAccess: // If the context is in an instance member declaration... if ((context.ProjectResolver != null) && (context.MemberDeclarationNode != null) && (!((IDomMember)context.MemberDeclarationNode).IsStatic)) { if (context.TargetItem.Type == DotNetContextItemType.Base) { // Fill with extension methods context.ProjectResolver.AddMemberListItemsForExtensionMethods(memberListItemHashtable, context, (IDomType)context.TargetItem.ResolvedInfo, DomBindingFlags.Instance | context.AdditionalBindingFlags | DomBindingFlags.Public | DomBindingFlags.Family | DomBindingFlags.Assembly); // Fill with instance type members context.ProjectResolver.AddMemberListItemsForMembers(memberListItemHashtable, context.TypeDeclarationNode, (IDomType)context.TargetItem.ResolvedInfo, (this.LanguageType == DotNetLanguage.CSharp ? DomBindingFlags.ExcludeIndexers : DomBindingFlags.None) | DomBindingFlags.Instance | context.AdditionalBindingFlags | DomBindingFlags.Public | DomBindingFlags.Family | DomBindingFlags.Assembly); } } break; case DotNetContextType.DocumentationCommentTag: // Add tags if (context.ProjectResolver != null) { context.ProjectResolver.AddMemberListItemsForDocumentationComments(memberListItemHashtable, context, (syntaxEditor.Caret.Offset > 0) && (syntaxEditor.Document[syntaxEditor.Caret.Offset - 1] != '<')); } break; case DotNetContextType.AsType: case DotNetContextType.IsTypeOfType: case DotNetContextType.TryCastType: case DotNetContextType.TypeOfType: if (context.ProjectResolver != null) { if (context.TargetItem != null) { switch (context.TargetItem.Type) { case DotNetContextItemType.Namespace: case DotNetContextItemType.NamespaceAlias: // Fill with child namespaces and types context.ProjectResolver.AddMemberListItemsForChildNamespaces(memberListItemHashtable, context.TargetItem.ResolvedInfo.ToString()); context.ProjectResolver.AddMemberListItemsForTypes(memberListItemHashtable, context.TypeDeclarationNode, context.TargetItem.ResolvedInfo.ToString(), DomBindingFlags.Default, false); break; case DotNetContextItemType.Type: // Fill with nested types context.ProjectResolver.AddMemberListItemsForNestedTypes(memberListItemHashtable, context.TypeDeclarationNode, (IDomType)context.TargetItem.ResolvedInfo, DomBindingFlags.Default, false); break; } } else { // VB requires New added for As specifications if ((context.Type == DotNetContextType.AsType) && (language == DotNetLanguage.VB)) { memberListItemHashtable["New"] = new IntelliPromptMemberListItem("New", (int)ActiproSoftware.Products.SyntaxEditor.IconResource.Keyword); } // Fill with native types context.ProjectResolver.AddMemberListItemsForNativeTypes(language, memberListItemHashtable, context); // Fill with child namespace names in the global and imported namespaces context.ProjectResolver.AddMemberListItemsForChildNamespaces(memberListItemHashtable, null); foreach (string namespaceName in context.ImportedNamespaces) { context.ProjectResolver.AddMemberListItemsForChildNamespaces(memberListItemHashtable, namespaceName); } // Fill with the types in the imported namespaces context.ProjectResolver.AddMemberListItemsForTypes(memberListItemHashtable, context.TypeDeclarationNode, null, DomBindingFlags.Default, false); foreach (string namespaceName in context.ImportedNamespaces) { context.ProjectResolver.AddMemberListItemsForTypes(memberListItemHashtable, context.TypeDeclarationNode, namespaceName, DomBindingFlags.Default, false); } // Fill with nested types if (context.TypeDeclarationNode != null) { context.ProjectResolver.AddMemberListItemsForNestedTypes(memberListItemHashtable, context.TypeDeclarationNode, context.TypeDeclarationNode, DomBindingFlags.Default, true); } } } break; case DotNetContextType.NamespaceTypeOrMember: if (context.ProjectResolver != null) { switch (context.TargetItem.Type) { case DotNetContextItemType.Namespace: case DotNetContextItemType.NamespaceAlias: // Fill with child namespaces and types context.ProjectResolver.AddMemberListItemsForChildNamespaces(memberListItemHashtable, context.TargetItem.ResolvedInfo.ToString()); context.ProjectResolver.AddMemberListItemsForTypes(memberListItemHashtable, context.TypeDeclarationNode, context.TargetItem.ResolvedInfo.ToString(), DomBindingFlags.Default, false); break; case DotNetContextItemType.Constant: case DotNetContextItemType.Type: // Add nested types if (context.TargetItem.ResolvedInfo is IDomType) { // Fill with nested types context.ProjectResolver.AddMemberListItemsForNestedTypes(memberListItemHashtable, context.TypeDeclarationNode, (IDomType)context.TargetItem.ResolvedInfo, DomBindingFlags.Default, false); } // If the context is in a type declaration... if (context.TypeDeclarationNode != null) { // Fill with static type members context.ProjectResolver.AddMemberListItemsForMembers(memberListItemHashtable, context.TypeDeclarationNode, (IDomType)context.TargetItem.ResolvedInfo, (this.LanguageType == DotNetLanguage.CSharp ? DomBindingFlags.ExcludeIndexers : DomBindingFlags.None) | DomBindingFlags.Static | context.AdditionalBindingFlags | DomBindingFlags.AllAccessTypes); } break; case DotNetContextItemType.Member: // If the context is in a type declaration... if (context.TypeDeclarationNode != null) { // Fill with instance type members of member return type IDomType type = context.ProjectResolver.ConstructAndResolveContextItemMemberReturnType(context, context.Items.Length - 1); if (type != null) { // Fill with extension methods context.ProjectResolver.AddMemberListItemsForExtensionMethods(memberListItemHashtable, context, type, DomBindingFlags.Instance | context.AdditionalBindingFlags | DomBindingFlags.AllAccessTypes); // Fill with instance type members context.ProjectResolver.AddMemberListItemsForMembers(memberListItemHashtable, context.TypeDeclarationNode, type, (this.LanguageType == DotNetLanguage.CSharp ? DomBindingFlags.ExcludeIndexers : DomBindingFlags.None) | DomBindingFlags.Instance | context.AdditionalBindingFlags | DomBindingFlags.AllAccessTypes); } } break; case DotNetContextItemType.ArrayItem: case DotNetContextItemType.Parameter: case DotNetContextItemType.Variable: // If the context is in a member declaration... if (context.MemberDeclarationNode != null) { // Fill with extension methods context.ProjectResolver.AddMemberListItemsForExtensionMethods(memberListItemHashtable, context, (IDomType)context.TargetItem.ResolvedInfo, DomBindingFlags.Instance | context.AdditionalBindingFlags | DomBindingFlags.AllAccessTypes); // Fill with instance type members context.ProjectResolver.AddMemberListItemsForMembers(memberListItemHashtable, context.TypeDeclarationNode, (IDomType)context.TargetItem.ResolvedInfo, (this.LanguageType == DotNetLanguage.CSharp ? DomBindingFlags.ExcludeIndexers : DomBindingFlags.None) | DomBindingFlags.Instance | context.AdditionalBindingFlags | DomBindingFlags.AllAccessTypes); } break; } } break; case DotNetContextType.NativeType: // If the context is in a member declaration... if ((context.ProjectResolver != null) && (context.TypeDeclarationNode != null)) { if (context.TargetItem.Type == DotNetContextItemType.Type) { // Fill with static type members context.ProjectResolver.AddMemberListItemsForMembers(memberListItemHashtable, context.TypeDeclarationNode, (IDomType)context.TargetItem.ResolvedInfo, (this.LanguageType == DotNetLanguage.CSharp ? DomBindingFlags.ExcludeIndexers : DomBindingFlags.None) | DomBindingFlags.Static | context.AdditionalBindingFlags | DomBindingFlags.Public); } } break; case DotNetContextType.NewObjectDeclaration: if ((context.ProjectResolver != null) && (context.TypeDeclarationNode != null)) { if (context.TargetItem == null) { // Fill with child namespace names in the global and imported namespaces context.ProjectResolver.AddMemberListItemsForChildNamespaces(memberListItemHashtable, null); foreach (string namespaceName in context.ImportedNamespaces) { context.ProjectResolver.AddMemberListItemsForChildNamespaces(memberListItemHashtable, namespaceName); } // Fill with the creatable types in the global and imported namespaces context.ProjectResolver.AddMemberListItemsForTypes(memberListItemHashtable, context.TypeDeclarationNode, null, DomBindingFlags.Default | DomBindingFlags.HasConstructor, false); foreach (string namespaceName in context.ImportedNamespaces) { context.ProjectResolver.AddMemberListItemsForTypes(memberListItemHashtable, context.TypeDeclarationNode, namespaceName, DomBindingFlags.Default | DomBindingFlags.HasConstructor, false); } // Fill with the creatable nested types context.ProjectResolver.AddMemberListItemsForNestedTypes(memberListItemHashtable, context.TypeDeclarationNode, context.TypeDeclarationNode, DomBindingFlags.Default | DomBindingFlags.HasConstructor, true); } else { switch (context.TargetItem.Type) { case DotNetContextItemType.Namespace: case DotNetContextItemType.NamespaceAlias: // Fill with child namespaces and creatable types context.ProjectResolver.AddMemberListItemsForChildNamespaces(memberListItemHashtable, context.TargetItem.ResolvedInfo.ToString()); context.ProjectResolver.AddMemberListItemsForTypes(memberListItemHashtable, context.TypeDeclarationNode, context.TargetItem.ResolvedInfo.ToString(), DomBindingFlags.Default | DomBindingFlags.HasConstructor, false); break; case DotNetContextItemType.Type: // Fill with the creatable nested types context.ProjectResolver.AddMemberListItemsForNestedTypes(memberListItemHashtable, context.TypeDeclarationNode, (IDomType)context.TargetItem.ResolvedInfo, DomBindingFlags.Default | DomBindingFlags.HasConstructor, false); // Fill with extension methods context.ProjectResolver.AddMemberListItemsForExtensionMethods(memberListItemHashtable, context, (IDomType)context.TargetItem.ResolvedInfo, DomBindingFlags.Instance | context.AdditionalBindingFlags | DomBindingFlags.AllAccessTypes); // Fill with instance type members context.ProjectResolver.AddMemberListItemsForMembers(memberListItemHashtable, context.TypeDeclarationNode, (IDomType)context.TargetItem.ResolvedInfo, (this.LanguageType == DotNetLanguage.CSharp ? DomBindingFlags.ExcludeIndexers : DomBindingFlags.None) | DomBindingFlags.Instance | context.AdditionalBindingFlags | DomBindingFlags.AllAccessTypes); break; } } } break; case DotNetContextType.ThisAccess: // If the context is in an instance member declaration... if ((context.ProjectResolver != null) && (context.MemberDeclarationNode != null) && (!((IDomMember)context.MemberDeclarationNode).IsStatic)) { if (context.TargetItem.Type == DotNetContextItemType.This) { // Fill with extension methods context.ProjectResolver.AddMemberListItemsForExtensionMethods(memberListItemHashtable, context, (IDomType)context.TargetItem.ResolvedInfo, DomBindingFlags.Instance | context.AdditionalBindingFlags | DomBindingFlags.AllAccessTypes); // Fill with instance type members context.ProjectResolver.AddMemberListItemsForMembers(memberListItemHashtable, context.TypeDeclarationNode, (IDomType)context.TargetItem.ResolvedInfo, (this.LanguageType == DotNetLanguage.CSharp ? DomBindingFlags.ExcludeIndexers : DomBindingFlags.None) | DomBindingFlags.Instance | context.AdditionalBindingFlags | DomBindingFlags.AllAccessTypes); } } break; case DotNetContextType.BaseMemberAccess: case DotNetContextType.ThisMemberAccess: // If the context is in an instance member declaration... if ((context.ProjectResolver != null) && (context.MemberDeclarationNode != null) && (!((IDomMember)context.MemberDeclarationNode).IsStatic)) { // Fill with instance type members of member return type IDomType type = null; if (context.TargetItem.ResolvedInfo is IDomType) { type = (IDomType)context.TargetItem.ResolvedInfo; } else { type = context.ProjectResolver.ConstructAndResolveContextItemMemberReturnType(context, context.Items.Length - 1); } if (type != null) { // Fill with extension methods context.ProjectResolver.AddMemberListItemsForExtensionMethods(memberListItemHashtable, context, type, DomBindingFlags.Instance | context.AdditionalBindingFlags | DomBindingFlags.AllAccessTypes); // Fill with instance type members context.ProjectResolver.AddMemberListItemsForMembers(memberListItemHashtable, context.TypeDeclarationNode, type, (this.LanguageType == DotNetLanguage.CSharp ? DomBindingFlags.ExcludeIndexers : DomBindingFlags.None) | DomBindingFlags.Instance | context.AdditionalBindingFlags | DomBindingFlags.AllAccessTypes); } } break; case DotNetContextType.StringLiteral: // If the context is in a member declaration... if (context.ProjectResolver != null) { if (context.TargetItem.Type == DotNetContextItemType.StringLiteral) { // Fill with extension methods context.ProjectResolver.AddMemberListItemsForExtensionMethods(memberListItemHashtable, context, (IDomType)context.TargetItem.ResolvedInfo, DomBindingFlags.Instance | context.AdditionalBindingFlags | DomBindingFlags.Public); // Fill with string instance type members context.ProjectResolver.AddMemberListItemsForMembers(memberListItemHashtable, context.TypeDeclarationNode, (IDomType)context.TargetItem.ResolvedInfo, (this.LanguageType == DotNetLanguage.CSharp ? DomBindingFlags.ExcludeIndexers : DomBindingFlags.None) | DomBindingFlags.Instance | context.AdditionalBindingFlags | DomBindingFlags.Public); } } break; case DotNetContextType.UsingDeclaration: // Fill with namespaces if (context.ProjectResolver != null) { context.ProjectResolver.AddMemberListItemsForChildNamespaces(memberListItemHashtable, (context.TargetItem != null ? context.TargetItem.ResolvedInfo.ToString() : String.Empty)); } break; } // Pre-filter the member list this.OnSyntaxEditorIntelliPromptMemberListPreFilter(syntaxEditor, new IntelliPromptMemberListPreFilterEventArgs(syntaxEditor, context, memberListItemHashtable)); // Add items if (memberListItemHashtable.Count > 0) { IntelliPromptMemberListItem[] items = new IntelliPromptMemberListItem[memberListItemHashtable.Count]; memberListItemHashtable.Values.CopyTo(items, 0); memberList.AddRange(items); } // Show the list if (memberList.Count > 0) { if (context.InitializationTextRange.IsDeleted) { memberList.Show(); } else if (completeWord) { memberList.CompleteWord(toEditor.Caret.Offset - context.InitializationTextRange.Length, context.InitializationTextRange.Length); //memberList.CompleteWord(context.InitializationTextRange.StartOffset, context.InitializationTextRange.Length); } else { memberList.Show(toEditor.Caret.Offset, context.InitializationTextRange.Length); //memberList.Show(context.InitializationTextRange.StartOffset, context.InitializationTextRange.Length); } return(true); } else if (memberList.Visible) { memberList.Abort(); } return(false); }