本文整理汇总了C#中CompletionDataCollector类的典型用法代码示例。如果您正苦于以下问题:C# CompletionDataCollector类的具体用法?C# CompletionDataCollector怎么用?C# CompletionDataCollector使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
CompletionDataCollector类属于命名空间,在下文中一共展示了CompletionDataCollector类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: AddAsCompletionData
/// <summary>
/// Adds a type to completion list. If it's a simple type like System.String it adds the simple
/// C# type name "string" as well.
/// </summary>
static void AddAsCompletionData (CompletionDataCollector col, IType type)
{
if (type == null)
return;
string netName = CSharpAmbience.NetToCSharpTypeName (type.FullName);
if (!string.IsNullOrEmpty (netName) && netName != type.FullName)
col.Add (netName);
if (!String.IsNullOrEmpty (type.Namespace) && !col.IsNamespaceInScope (type.Namespace)) {
string[] ns = type.Namespace.Split ('.');
for (int i = 0; i < ns.Length; i++) {
col.Add (new Namespace (ns[i]));
if (!col.IsNamespaceInScope (ns[i]))
return;
}
}
col.Add (type);
}
示例2: HandleKeywordCompletion
public ICompletionDataList HandleKeywordCompletion (CodeCompletionContext completionContext, ExpressionResult result, int wordStart, string word)
{
if (stateTracker.Engine.IsInsideDocLineComment || stateTracker.Engine.IsInsideOrdinaryCommentOrString)
return null;
DomLocation location = new DomLocation (completionContext.TriggerLine, completionContext.TriggerLineOffset);
switch (word) {
case "using":
if (result.ExpressionContext != ExpressionContext.NamespaceNameExcepted)
return null;
return CreateCompletionData (location, new NamespaceResolveResult (""), result, null);
case "namespace":
result.ExpressionContext = ExpressionContext.NamespaceNameExcepted;
return CreateCompletionData (location, new NamespaceResolveResult (""), result, null);
case "case":
return CreateCaseCompletionData (location, result);
case ",":
case ":":
if (result.ExpressionContext == ExpressionContext.InheritableType) {
IType cls = NRefactoryResolver.GetTypeAtCursor (Document.CompilationUnit, Document.FileName, new DomLocation (completionContext.TriggerLine, completionContext.TriggerLineOffset));
CompletionDataList completionList = new ProjectDomCompletionDataList ();
List<string> namespaceList = GetUsedNamespaces ();
CSharpTextEditorCompletion.CompletionDataCollector col = new CSharpTextEditorCompletion.CompletionDataCollector (dom, completionList, Document.CompilationUnit, null, location);
bool isInterface = false;
HashSet<string> baseTypeNames = new HashSet<string> ();
if (cls != null) {
baseTypeNames.Add (cls.Name);
if (cls.ClassType == ClassType.Struct)
isInterface = true;
}
int tokenIndex = completionContext.TriggerOffset;
// Search base types " : [Type1, ... ,TypeN,] <Caret>"
string token = null;
do {
token = GetPreviousToken (ref tokenIndex, false);
if (string.IsNullOrEmpty (token))
break;
token = token.Trim ();
if (Char.IsLetterOrDigit (token[0]) || token[0] == '_') {
IType baseType = dom.SearchType (Document.CompilationUnit, Document.CompilationUnit, token);
if (baseType != null) {
if (baseType.ClassType != ClassType.Interface)
isInterface = true;
baseTypeNames.Add (baseType.Name);
}
}
} while (token != ":");
foreach (object o in dom.GetNamespaceContents (namespaceList, true, true)) {
IType type = o as IType;
if (type != null && (type.IsStatic || type.IsSealed || baseTypeNames.Contains (type.Name) || isInterface && type.ClassType != ClassType.Interface)) {
continue;
}
if (o is Namespace && !namespaceList.Any (ns => ns.StartsWith (((Namespace)o).FullName)))
continue;
col.Add (o);
}
// Add inner classes
Stack<IType> innerStack = new Stack<IType> ();
innerStack.Push (cls);
while (innerStack.Count > 0) {
IType curType = innerStack.Pop ();
if (curType == null)
continue;
foreach (IType innerType in curType.InnerTypes) {
if (innerType != cls)
// don't add the calling class as possible base type
col.Add (innerType);
}
if (curType.DeclaringType != null)
innerStack.Push (curType.DeclaringType);
}
return completionList;
}
break;
case "is":
case "as":
{
CompletionDataList completionList = new ProjectDomCompletionDataList ();
ExpressionResult expressionResult = FindExpression (dom, completionContext, wordStart - textEditorData.Caret.Offset);
NRefactoryResolver resolver = CreateResolver ();
ResolveResult resolveResult = resolver.Resolve (expressionResult, new DomLocation (completionContext.TriggerLine, completionContext.TriggerLineOffset));
if (resolveResult != null && resolveResult.ResolvedType != null) {
CompletionDataCollector col = new CompletionDataCollector (dom, completionList, Document.CompilationUnit, resolver.CallingType, location);
IType foundType = null;
if (word == "as") {
ExpressionContext exactContext = new NewCSharpExpressionFinder (dom).FindExactContextForAsCompletion (textEditorData, Document.CompilationUnit, Document.FileName, resolver.CallingType);
if (exactContext is ExpressionContext.TypeExpressionContext) {
foundType = resolver.SearchType (((ExpressionContext.TypeExpressionContext)exactContext).Type);
AddAsCompletionData (col, foundType);
}
}
if (foundType == null)
foundType = resolver.SearchType (resolveResult.ResolvedType);
if (foundType != null) {
if (foundType.ClassType == ClassType.Interface)
foundType = resolver.SearchType (DomReturnType.Object);
//.........这里部分代码省略.........
示例3: CreateCtrlSpaceCompletionData
CompletionDataList CreateCtrlSpaceCompletionData (CodeCompletionContext ctx, ExpressionResult expressionResult)
{
NRefactoryResolver resolver = CreateResolver ();
DomLocation cursorLocation = new DomLocation (ctx.TriggerLine, ctx.TriggerLineOffset);
resolver.SetupResolver (cursorLocation);
CompletionDataList result = new ProjectDomCompletionDataList ();
CompletionDataCollector col = new CompletionDataCollector (dom, result, Document.CompilationUnit, resolver.CallingType, cursorLocation);
if (expressionResult == null) {
AddPrimitiveTypes (col);
resolver.AddAccessibleCodeCompletionData (ExpressionContext.Global, col);
} else if (expressionResult.ExpressionContext == ExpressionContext.TypeDeclaration) {
AddPrimitiveTypes (col);
AddNRefactoryKeywords (col, ICSharpCode.NRefactory.Parser.CSharp.Tokens.TypeLevel);
resolver.AddAccessibleCodeCompletionData (expressionResult.ExpressionContext, col);
} else if (expressionResult.ExpressionContext == ExpressionContext.InterfaceDeclaration) {
AddPrimitiveTypes (col);
AddNRefactoryKeywords (col, ICSharpCode.NRefactory.Parser.CSharp.Tokens.InterfaceLevel);
resolver.AddAccessibleCodeCompletionData (expressionResult.ExpressionContext, col);
} else if (expressionResult.ExpressionContext == ExpressionContext.MethodBody) {
col.Add ("global", "md-keyword");
col.Add ("var", "md-keyword");
AddNRefactoryKeywords (col, ICSharpCode.NRefactory.Parser.CSharp.Tokens.StatementStart);
AddPrimitiveTypes (col);
resolver.AddAccessibleCodeCompletionData (expressionResult.ExpressionContext, col);
} else if (expressionResult.ExpressionContext == ExpressionContext.InterfacePropertyDeclaration) {
col.Add ("get", "md-keyword");
col.Add ("set", "md-keyword");
} else if (expressionResult.ExpressionContext == ExpressionContext.ConstraintsStart) {
col.Add ("where", "md-keyword");
} else if (expressionResult.ExpressionContext == ExpressionContext.Constraints) {
col.Add ("new", "md-keyword");
col.Add ("class", "md-keyword");
col.Add ("struct", "md-keyword");
AddPrimitiveTypes (col);
resolver.AddAccessibleCodeCompletionData (expressionResult.ExpressionContext, col);
} else if (expressionResult.ExpressionContext == ExpressionContext.Attribute) {
col.Add ("assembly", "md-keyword");
col.Add ("module", "md-keyword");
col.Add ("type", "md-keyword");
col.Add ("method", "md-keyword");
col.Add ("field", "md-keyword");
col.Add ("property", "md-keyword");
col.Add ("event", "md-keyword");
col.Add ("param", "md-keyword");
col.Add ("return", "md-keyword");
resolver.AddAccessibleCodeCompletionData (expressionResult.ExpressionContext, col);
} else if (expressionResult.ExpressionContext == ExpressionContext.BaseConstructorCall) {
col.Add ("this", "md-keyword");
col.Add ("base", "md-keyword");
} else if (expressionResult.ExpressionContext == ExpressionContext.ParameterType || expressionResult.ExpressionContext == ExpressionContext.FirstParameterType) {
col.Add ("ref", "md-keyword");
col.Add ("out", "md-keyword");
col.Add ("params", "md-keyword");
// C# 3.0 extension method
if (expressionResult.ExpressionContext == ExpressionContext.FirstParameterType)
col.Add ("this", "md-keyword");
AddPrimitiveTypes (col);
resolver.AddAccessibleCodeCompletionData (expressionResult.ExpressionContext, col);
} else if (expressionResult.ExpressionContext == ExpressionContext.PropertyDeclaration) {
AddNRefactoryKeywords (col, ICSharpCode.NRefactory.Parser.CSharp.Tokens.InPropertyDeclaration);
} else if (expressionResult.ExpressionContext == ExpressionContext.EventDeclaration) {
col.Add ("add", "md-keyword");
col.Add ("remove", "md-keyword");
} //else if (expressionResult.ExpressionContext == ExpressionContext.FullyQualifiedType) {}
else if (expressionResult.ExpressionContext == ExpressionContext.Default) {
col.Add ("global", "md-keyword");
col.Add ("var", "md-keyword");
AddPrimitiveTypes (col);
AddNRefactoryKeywords (col, ICSharpCode.NRefactory.Parser.CSharp.Tokens.ExpressionStart);
AddNRefactoryKeywords (col, ICSharpCode.NRefactory.Parser.CSharp.Tokens.ExpressionContent);
resolver.AddAccessibleCodeCompletionData (expressionResult.ExpressionContext, col);
} else if (expressionResult.ExpressionContext == ExpressionContext.Global) {
AddNRefactoryKeywords (col, ICSharpCode.NRefactory.Parser.CSharp.Tokens.GlobalLevel);
CodeTemplateService.AddCompletionDataForMime ("text/x-csharp", result);
} else if (expressionResult.ExpressionContext == ExpressionContext.ObjectInitializer) {
ExpressionContext exactContext = new NewCSharpExpressionFinder (dom).FindExactContextForObjectInitializer (textEditorData, resolver.Unit, Document.FileName, resolver.CallingType);
if (exactContext is ExpressionContext.TypeExpressionContext) {
IReturnType objectInitializer = ((ExpressionContext.TypeExpressionContext)exactContext).UnresolvedType;
if (objectInitializer.ArrayDimensions > 0 || objectInitializer.PointerNestingLevel > 0) {
col.Add ("global", "md-keyword");
col.Add ("new", "md-keyword");
AddPrimitiveTypes (col);
resolver.AddAccessibleCodeCompletionData (expressionResult.ExpressionContext, col);
return result;
}
IType foundType = resolver.SearchType (objectInitializer);
if (foundType == null)
foundType = dom.GetType (objectInitializer);
if (foundType != null) {
bool includeProtected = DomType.IncludeProtected (dom, foundType, resolver.CallingType);
foreach (IType type in dom.GetInheritanceTree (foundType)) {
foreach (IProperty property in type.Properties) {
if (property.IsAccessibleFrom (dom, resolver.CallingType, resolver.CallingMember, includeProtected)) {
col.Add (property);
}
}
foreach (var field in type.Fields) {
//.........这里部分代码省略.........
示例4: CreateCaseCompletionData
ICompletionDataList CreateCaseCompletionData (DomLocation location, ExpressionResult expressionResult)
{
NRefactoryResolver resolver = CreateResolver ();
resolver.SetupResolver (location);
SwitchFinder switchFinder = new SwitchFinder (location);
if (resolver.MemberCompilationUnit != null)
switchFinder.VisitCompilationUnit (resolver.MemberCompilationUnit, null);
CompletionDataList result = new ProjectDomCompletionDataList ();
if (switchFinder.SwitchStatement == null)
return result;
ResolveResult resolveResult = resolver.ResolveExpression (switchFinder.SwitchStatement.SwitchExpression, location);
IType type = dom.GetType (resolveResult.ResolvedType);
if (type != null && type.ClassType == ClassType.Enum) {
OutputFlags flags = OutputFlags.None;
var declaringType = resolver.CallingType;
if (declaringType != null && dom != null) {
foreach (IType t in new List<IType>(dom.GetInheritanceTree (declaringType))) {
if (t.SearchMember (type.Name, true).Any (m => m.MemberType != MonoDevelop.Projects.Dom.MemberType.Type)) {
flags |= OutputFlags.UseFullName;
break;
}
}
}
// if (!foundType && (NamePrefix.Length == 0 || !type.Namespace.StartsWith (NamePrefix)) && !type.Namespace.EndsWith ("." + NamePrefix) && type.DeclaringType == null && NamePrefix != null && !NamePrefix.Contains ("::"))
// flags |= OutputFlags.UseFullName;
CompletionDataCollector cdc = new CompletionDataCollector (dom, result, Document.CompilationUnit, resolver.CallingType, location);
cdc.Add (type, flags);
}
return result;
}
示例5: AddPrimitiveTypes
static void AddPrimitiveTypes (CompletionDataCollector col)
{
foreach (string primitiveType in primitiveTypes) {
col.Add (primitiveType, "md-keyword");
}
}
示例6: AddNRefactoryKeywords
static void AddNRefactoryKeywords (CompletionDataCollector col, System.Collections.BitArray keywords)
{
for (int i = 0; i < keywords.Length; i++) {
if (keywords[i]) {
string keyword = ICSharpCode.NRefactory.Parser.CSharp.Tokens.GetTokenString (i);
if (keyword.IndexOf ('<') >= 0)
continue;
col.Add (keyword, "md-keyword");
}
}
}
示例7: CreateTypeCompletionData
CompletionDataList CreateTypeCompletionData (DomLocation location, IType callingType, ExpressionContext context, IReturnType returnType, IReturnType returnTypeUnresolved)
{
CompletionDataList result = new ProjectDomCompletionDataList ();
// "var o = new " needs special treatment.
if (returnType == null && returnTypeUnresolved != null && returnTypeUnresolved.FullName == "var")
returnType = returnTypeUnresolved = DomReturnType.Object;
// ExpressionContext.TypeExpressionContext tce = context as ExpressionContext.TypeExpressionContext;
CompletionDataCollector col = new CompletionDataCollector (dom, result, Document.CompilationUnit, callingType, location);
IType type = null;
if (returnType != null)
type = dom.GetType (returnType);
if (type == null)
type = dom.SearchType (Document.CompilationUnit, (MonoDevelop.Projects.Dom.INode)Document.CompilationUnit ?? callingType, returnTypeUnresolved);
// special handling for nullable types: Bug 674516 - new completion for nullables should not include "Nullable"
if (type is InstantiatedType && ((InstantiatedType)type).UninstantiatedType.FullName == "System.Nullable" && ((InstantiatedType)type).GenericParameters.Count == 1) {
var genericParameter = ((InstantiatedType)type).GenericParameters[0];
returnType = returnTypeUnresolved = Document.CompilationUnit.ShortenTypeName (genericParameter, location);
type = dom.SearchType (Document.CompilationUnit, (MonoDevelop.Projects.Dom.INode)Document.CompilationUnit ?? callingType, genericParameter);
}
if (type == null || !(type.IsAbstract || type.ClassType == ClassType.Interface)) {
if (type == null || type.ConstructorCount == 0 || type.Methods.Any (c => c.IsConstructor && c.IsAccessibleFrom (dom, callingType, type, callingType != null && dom.GetInheritanceTree (callingType).Any (x => x.FullName == type.FullName)))) {
if (returnTypeUnresolved != null) {
col.FullyQualify = true;
CompletionData unresovedCompletionData = col.Add (returnTypeUnresolved);
col.FullyQualify = false;
// don't set default completion string for arrays, since it interferes with:
// string[] arr = new string[] vs new { "a"}
if (returnTypeUnresolved.ArrayDimensions == 0)
result.DefaultCompletionString = StripGenerics (unresovedCompletionData.CompletionText);
} else {
CompletionData unresovedCompletionData = col.Add (returnType);
if (returnType.ArrayDimensions == 0)
result.DefaultCompletionString = StripGenerics (unresovedCompletionData.CompletionText);
}
}
}
// if (tce != null && tce.Type != null) {
// result.DefaultCompletionString = StripGenerics (col.AddCompletionData (result, tce.Type).CompletionString);
// }
// else {
// }
if (type == null)
return result;
HashSet<string> usedNamespaces = new HashSet<string> (GetUsedNamespaces ());
if (type.FullName == DomReturnType.Object.FullName)
AddPrimitiveTypes (col);
foreach (IType curType in dom.GetSubclasses (type)) {
if (context != null && context.FilterEntry (curType))
continue;
if ((curType.TypeModifier & TypeModifier.HasOnlyHiddenConstructors) == TypeModifier.HasOnlyHiddenConstructors)
continue;
if (usedNamespaces.Contains (curType.Namespace)) {
if (curType.ConstructorCount > 0) {
if (!(curType.Methods.Any (c => c.IsConstructor && c.IsAccessibleFrom (dom, curType, callingType, callingType != null && dom.GetInheritanceTree (callingType).Any (x => x.FullName == curType.FullName)))))
continue;
}
col.Add (curType);
} else {
string nsName = curType.Namespace;
int idx = nsName.IndexOf ('.');
if (idx >= 0)
nsName = nsName.Substring (0, idx);
col.Add (new Namespace (nsName));
}
}
// add aliases
if (returnType != null) {
foreach (IUsing u in Document.CompilationUnit.Usings) {
foreach (KeyValuePair<string, IReturnType> alias in u.Aliases) {
if (alias.Value.ToInvariantString () == returnType.ToInvariantString ())
result.Add (alias.Key, "md-class");
}
}
}
return result;
}
示例8: HandleCodeCompletion
//.........这里部分代码省略.........
string tag = endIndex - startIndex - 1 > 0 ? lineText.Substring (startIndex + 1, endIndex - startIndex - 2) : null;
if (!String.IsNullOrEmpty (tag) && commentTags.IndexOf (tag) >= 0) {
textEditorData.Insert (cursor, "</" + tag + ">");
textEditorData.Caret.Offset = cursor;
return null;
}
}
}
return null;
/* Disabled because it gives problems when declaring arrays - for example string [] should not pop up code completion.
case '[':
if (stateTracker.Engine.IsInsideDocLineComment || stateTracker.Engine.IsInsideOrdinaryCommentOrString)
return null;
result = FindExpression (dom, completionContext);
if (result.ExpressionContext == ExpressionContext.Attribute)
return CreateCtrlSpaceCompletionData (completionContext, result);
return null;*/
case '<':
if (stateTracker.Engine.IsInsideDocLineComment)
return GetXmlDocumentationCompletionData ();
return null;
case '(':
if (stateTracker.Engine.IsInsideDocLineComment || stateTracker.Engine.IsInsideOrdinaryCommentOrString)
return null;
result = FindExpression (dom, completionContext, -1);
if (result == null || result.Expression == null)
return null;
resolver = CreateResolver ();
resolveResult = resolver.Resolve (result, new DomLocation (completionContext.TriggerLine, completionContext.TriggerLineOffset - 2));
if (resolveResult != null && resolver.ResolvedExpression is ICSharpCode.NRefactory.Ast.TypeOfExpression) {
CompletionDataList completionList = new ProjectDomCompletionDataList ();
CompletionDataCollector col = new CompletionDataCollector (dom, completionList, Document.CompilationUnit, resolver.CallingType, location);
AddPrimitiveTypes (col);
foreach (object o in dom.GetNamespaceContents (GetUsedNamespaces (), true, true)) {
col.Add (o);
}
if (resolver.CallingMember is IMethod) {
foreach (ITypeParameter tp in ((IMethod)resolver.CallingMember).TypeParameters) {
col.Add (tp.Name, "md-keyword");
}
}
if (resolver.CallingType != null) {
foreach (ITypeParameter tp in resolver.CallingType.TypeParameters) {
col.Add (tp.Name, "md-keyword");
}
}
return completionList;
}
return null;
case '/':
cursor = textEditorData.IsSomethingSelected ? textEditorData.SelectionRange.Offset : textEditorData.Caret.Offset;
if (cursor < 2)
break;
if (stateTracker.Engine.IsInsideDocLineComment) {
string lineText = textEditorData.GetLineText (completionContext.TriggerLine);
bool startsDocComment = true;
int slashes = 0;
for (int i = 0; i < completionContext.TriggerLineOffset && i < lineText.Length; i++) {
if (lineText[i] == '/') {
slashes++;
continue;
}
if (!Char.IsWhiteSpace (lineText[i])) {
示例9: CreateCompletionData
ICompletionDataList CreateCompletionData (DomLocation location, ResolveResult resolveResult,
ExpressionResult expressionResult, NRefactoryResolver resolver)
{
if (resolveResult == null || expressionResult == null || dom == null)
return null;
CompletionDataList result = new ProjectDomCompletionDataList ();
IEnumerable<object> objects = resolveResult.CreateResolveResult (dom, resolver != null ? resolver.CallingMember : null);
CompletionDataCollector col = new CompletionDataCollector (dom, result, Document.CompilationUnit, resolver != null ? resolver.CallingType : null, location);
col.HideExtensionParameter = !resolveResult.StaticResolve;
col.NamePrefix = expressionResult.Expression;
bool showOnlyTypes = expressionResult.Contexts.Any (ctx => ctx == ExpressionContext.InheritableType || ctx == ExpressionContext.Constraints);
if (objects != null) {
foreach (object obj in objects) {
if (expressionResult.ExpressionContext != null && expressionResult.ExpressionContext.FilterEntry (obj))
continue;
if (expressionResult.ExpressionContext == ExpressionContext.NamespaceNameExcepted && !(obj is Namespace))
continue;
if (showOnlyTypes && !(obj is IType))
continue;
CompletionData data = col.Add (obj);
if (data != null && expressionResult.ExpressionContext == ExpressionContext.Attribute && data.CompletionText != null && data.CompletionText.EndsWith ("Attribute")) {
string newText = data.CompletionText.Substring (0, data.CompletionText.Length - "Attribute".Length);
data.SetText (newText);
}
}
}
return result;
}
示例10: AddVirtuals
void AddVirtuals (CodeCompletionContext ctx, Dictionary<string, bool> alreadyInserted, CompletionDataList completionList, IType type, string modifiers, IReturnType curType)
{
if (curType == null)
return;
IType searchType = dom.SearchType (Document.CompilationUnit, (MonoDevelop.Projects.Dom.INode)type ?? Document.CompilationUnit, curType);
//System.Console.WriteLine("Add Virtuals for:" + searchType + " / " + curType);
if (searchType == null)
return;
bool isInterface = type.ClassType == ClassType.Interface;
bool includeOverriden = false;
int declarationBegin = ctx.TriggerOffset;
int j = declarationBegin;
for (int i = 0; i < 3; i++) {
switch (GetPreviousToken (ref j, true)) {
case "public":
case "protected":
case "private":
case "internal":
case "sealed":
case "override":
declarationBegin = j;
break;
case "static":
return; // don't add override completion for static members
}
}
CompletionDataCollector col = new CompletionDataCollector (dom, completionList, Document.CompilationUnit, searchType, DomLocation.Empty);
List<IType> inheritanceTree = new List<IType> (this.dom.GetInheritanceTree (searchType));
inheritanceTree.Sort ((l, r) => l.ClassType == r.ClassType ? 0 : (l.ClassType == ClassType.Interface ? 1 : (r.ClassType == ClassType.Interface ? -1 : 0)));
foreach (IType t in inheritanceTree) {
foreach (IMember m in t.Members) {
if (!m.IsAccessibleFrom (dom, type, type, true) || m.IsSpecialName)
continue;
//System.Console.WriteLine ("scan:" + m);
//if (m.IsSpecialName || (m.IsInternal && !m.IsProtectedOrInternal) || && searchType.SourceProject != Document.Project)
// continue;
if (t.ClassType == ClassType.Interface || (isInterface || m.IsVirtual || m.IsAbstract) && !m.IsSealed && (includeOverriden || !type.HasOverriden (m))) {
// filter out the "Finalize" methods, because finalizers should be done with destructors.
if (m is IMethod && m.Name == "Finalize")
continue;
//System.Console.WriteLine("add");
NewOverrideCompletionData data = new NewOverrideCompletionData (dom, textEditorData, declarationBegin, type, m);
string text = CompletionDataCollector.ambience.GetString (m, OutputFlags.ClassBrowserEntries);
// check if the member is already implemented
bool foundMember = false;
foreach (IMember member in type.Members) {
if (text == CompletionDataCollector.ambience.GetString (member, OutputFlags.ClassBrowserEntries)) {
foundMember = true;
break;
}
}
if (!foundMember && !alreadyInserted.ContainsKey (text)) {
alreadyInserted[text] = true;
data.CompletionCategory = col.GetCompletionCategory (t);
completionList.Add (data);
}
}
}
}
}
示例11: CreateParameterCompletion
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;
}
示例12: CreateCaseCompletionData
ICompletionDataList CreateCaseCompletionData (DomLocation location, ExpressionResult expressionResult)
{
NRefactoryResolver resolver = CreateResolver ();
resolver.SetupResolver (location);
SwitchFinder switchFinder = new SwitchFinder (location);
if (resolver.MemberCompilationUnit != null)
switchFinder.VisitCompilationUnit (resolver.MemberCompilationUnit, null);
CompletionDataList result = new ProjectDomCompletionDataList ();
if (switchFinder.SwitchStatement == null)
return result;
ResolveResult resolveResult = resolver.ResolveExpression (switchFinder.SwitchStatement.SwitchExpression, location);
IType type = dom.GetType (resolveResult.ResolvedType);
if (type != null && type.ClassType == ClassType.Enum) {
CompletionDataCollector cdc = new CompletionDataCollector (dom, result, Document.CompilationUnit, resolver.CallingType, location);
cdc.Add (type);
}
return result;
}
示例13: HandleCodeCompletion
public override ICompletionDataList HandleCodeCompletion(CodeCompletionContext completionContext, char completionChar, ref int triggerWordLength)
{
// IDisposable timer = null;
try {
if (dom == null /*|| Document.CompilationUnit == null*/)
return null;
if (completionChar != '#' && stateTracker.Engine.IsInsidePreprocessorDirective)
return null;
// timer = Counters.ResolveTime.BeginTiming ();
DomLocation location = new DomLocation (completionContext.TriggerLine, completionContext.TriggerLineOffset - 1);
stateTracker.UpdateEngine ();
ExpressionResult result;
int cursor, newCursorOffset = 0;
switch (completionChar) {
case ':':
case '.':
if (stateTracker.Engine.IsInsideDocLineComment || stateTracker.Engine.IsInsideOrdinaryCommentOrString)
return null;
result = FindExpression (dom, completionContext);
if (result == null || result.Expression == null)
return null;
int idx = result.Expression.LastIndexOf ('.');
if (idx > 0)
result.Expression = result.Expression.Substring (0, idx);
NRefactoryResolver resolver = new NRefactoryResolver (dom, Document.CompilationUnit, ICSharpCode.NRefactory.SupportedLanguage.CSharp, Editor, Document.FileName);
ResolveResult resolveResult = resolver.Resolve (result, location);
if (resolver.ResolvedExpression is ICSharpCode.NRefactory.Ast.PrimitiveExpression) {
ICSharpCode.NRefactory.Ast.PrimitiveExpression pex = (ICSharpCode.NRefactory.Ast.PrimitiveExpression)resolver.ResolvedExpression;
if (!tryToForceCompletion && !(pex.Value is string || pex.Value is char || pex.Value is bool))
return null;
}
return CreateCompletionData (location, resolveResult, result, resolver);
case '#':
if (stateTracker.Engine.IsInsidePreprocessorDirective)
return GetDirectiveCompletionData ();
return null;
case '>':
cursor = Editor.SelectionStartPosition;
if (stateTracker.Engine.IsInsideDocLineComment) {
string lineText = Editor.GetLineText (completionContext.TriggerLine);
int startIndex = Math.Min (completionContext.TriggerLineOffset - 1, lineText.Length - 1);
while (startIndex >= 0 && lineText[startIndex] != '<') {
--startIndex;
if (lineText[startIndex] == '/') { // already closed.
startIndex = -1;
break;
}
}
if (startIndex >= 0) {
int endIndex = startIndex;
while (endIndex <= completionContext.TriggerLineOffset && endIndex < lineText.Length && !Char.IsWhiteSpace (lineText[endIndex])) {
endIndex++;
}
string tag = endIndex - startIndex - 1 > 0 ? lineText.Substring (startIndex + 1, endIndex - startIndex - 2) : null;
if (!String.IsNullOrEmpty (tag) && commentTags.IndexOf (tag) >= 0) {
Editor.InsertText (cursor, "</" + tag + ">");
Editor.CursorPosition = cursor;
return null;
}
}
}
return null;
/* Disabled because it gives problems when declaring arrays - for example string [] should not pop up code completion.
case '[':
if (stateTracker.Engine.IsInsideDocLineComment || stateTracker.Engine.IsInsideOrdinaryCommentOrString)
return null;
result = FindExpression (dom, completionContext);
if (result.ExpressionContext == ExpressionContext.Attribute)
return CreateCtrlSpaceCompletionData (completionContext, result);
return null;*/
case '<':
if (stateTracker.Engine.IsInsideDocLineComment)
return GetXmlDocumentationCompletionData ();
return null;
case '(':
if (stateTracker.Engine.IsInsideDocLineComment || stateTracker.Engine.IsInsideOrdinaryCommentOrString)
return null;
result = FindExpression (dom, completionContext, -1);
if (result == null || result.Expression == null)
return null;
resolver = new NRefactoryResolver (dom, Document.CompilationUnit, ICSharpCode.NRefactory.SupportedLanguage.CSharp, Editor, Document.FileName);
resolveResult = resolver.Resolve (result, new DomLocation (completionContext.TriggerLine, completionContext.TriggerLineOffset - 2));
if (resolveResult != null && resolver.ResolvedExpression is ICSharpCode.NRefactory.Ast.TypeOfExpression) {
CompletionDataList completionList = new ProjectDomCompletionDataList ();
CompletionDataCollector col = new CompletionDataCollector (completionList, Document.CompilationUnit, location);
AddPrimitiveTypes (col);
foreach (object o in dom.GetNamespaceContents (GetUsedNamespaces (), true, true)) {
col.Add (o);
}
return completionList;
}
return null;
case '/':
cursor = Editor.SelectionStartPosition;
//.........这里部分代码省略.........
示例14: CreateTypeCompletionData
CompletionDataList CreateTypeCompletionData(DomLocation location, IType callingType, ExpressionContext context, IReturnType returnType, IReturnType returnTypeUnresolved)
{
CompletionDataList result = new ProjectDomCompletionDataList ();
// "var o = new " needs special treatment.
if (returnType == null && returnTypeUnresolved != null && returnTypeUnresolved.FullName == "var")
returnType = returnTypeUnresolved = DomReturnType.Object;
// ExpressionContext.TypeExpressionContext tce = context as ExpressionContext.TypeExpressionContext;
CompletionDataCollector col = new CompletionDataCollector (result, Document.CompilationUnit, location);
IType type = null;
if (returnType != null)
type = dom.GetType (returnType);
if (type == null)
type = dom.SearchType (new SearchTypeRequest (Document.CompilationUnit, returnTypeUnresolved, null));
if (type == null || !(type.IsAbstract || type.ClassType == ClassType.Interface)) {
if (type == null || type.ConstructorCount == 0 || type.Methods.Any (c => c.IsConstructor && c.IsAccessibleFrom (dom, callingType, type, callingType != null && dom.GetInheritanceTree (callingType).Any (x => x.FullName == type.FullName)))) {
if (returnTypeUnresolved != null) {
col.FullyQualify = true;
ICompletionData unresovedCompletionData = col.Add (returnTypeUnresolved);
col.FullyQualify = false;
result.DefaultCompletionString = StripGenerics (unresovedCompletionData.CompletionText);
} else {
ICompletionData unresovedCompletionData = col.Add (returnType);
result.DefaultCompletionString = StripGenerics (unresovedCompletionData.CompletionText);
}
}
}
// if (tce != null && tce.Type != null) {
// result.DefaultCompletionString = StripGenerics (col.AddCompletionData (result, tce.Type).CompletionString);
// }
// else {
// }
if (type == null)
return result;
HashSet<string> usedNamespaces = new HashSet<string> (GetUsedNamespaces ());
if (type.FullName == DomReturnType.Object.FullName)
AddPrimitiveTypes (col);
foreach (IType curType in dom.GetSubclasses (type)) {
if (context != null && context.FilterEntry (curType))
continue;
if ((curType.TypeModifier & TypeModifier.HasOnlyHiddenConstructors) == TypeModifier.HasOnlyHiddenConstructors)
continue;
if (usedNamespaces.Contains (curType.Namespace)) {
if (curType.ConstructorCount > 0) {
if (!(curType.Methods.Any (c => c.IsConstructor && c.IsAccessibleFrom (dom, curType, callingType, callingType != null && dom.GetInheritanceTree (callingType).Any (x => x.FullName == curType.FullName)))))
continue;
}
col.Add (curType);
} else {
string nsName = curType.Namespace;
int idx = nsName.IndexOf ('.');
if (idx >= 0)
nsName = nsName.Substring (0, idx);
col.Add (new Namespace (nsName));
}
}
// add aliases
if (returnType != null) {
foreach (IUsing u in Document.CompilationUnit.Usings) {
foreach (KeyValuePair<string, IReturnType> alias in u.Aliases) {
if (alias.Value.ToInvariantString () == returnType.ToInvariantString ())
result.Add (alias.Key, "md-class");
}
}
}
return result;
}
示例15: CreatePossibleEnumCompletion
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;
}