Browse Source

Merged with monodevelop engine.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
3a4eeb49fa
  1. 55
      ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs

55
ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs

@ -909,21 +909,23 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
} }
if (this.currentMember != null && !(node is AstType)) { if (this.currentMember != null && !(node is AstType)) {
var def = ctx.CurrentTypeDefinition ?? Compilation.MainAssembly.GetTypeDefinition (currentType); var def = ctx.CurrentTypeDefinition ?? Compilation.MainAssembly.GetTypeDefinition (currentType);
foreach (var member in def.GetMembers ()) { if (def != null) {
if (member is IMethod && ((IMethod)member).FullName == "System.Object.Finalize") foreach (var member in def.GetMembers ()) {
continue; if (member is IMethod && ((IMethod)member).FullName == "System.Object.Finalize")
if (member.EntityType == EntityType.Operator) continue;
continue; if (member.EntityType == EntityType.Operator)
if (memberPred == null || memberPred (member)) continue;
wrapper.AddMember (member);
}
var declaring = def.DeclaringTypeDefinition;
while (declaring != null) {
foreach (var member in declaring.GetMembers (m => m.IsStatic)) {
if (memberPred == null || memberPred (member)) if (memberPred == null || memberPred (member))
wrapper.AddMember (member); wrapper.AddMember (member);
} }
declaring = declaring.DeclaringTypeDefinition; var declaring = def.DeclaringTypeDefinition;
while (declaring != null) {
foreach (var member in declaring.GetMembers (m => m.IsStatic)) {
if (memberPred == null || memberPred (member))
wrapper.AddMember (member);
}
declaring = declaring.DeclaringTypeDefinition;
}
} }
} }
foreach (var p in currentType.TypeParameters) { foreach (var p in currentType.TypeParameters) {
@ -1383,12 +1385,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return null; // don't add override completion for static members return null; // don't add override completion for static members
} }
} }
foreach (var baseType in type.Resolve (ctx).GetAllBaseTypeDefinitions ()) { AddVirtuals (alreadyInserted, wrapper, modifiers, type.Resolve (ctx), declarationBegin);
AddVirtuals (alreadyInserted, wrapper, type.Resolve (ctx).GetDefinition (), modifiers, baseType, declarationBegin);
addedVirtuals = true;
}
if (!addedVirtuals)
AddVirtuals (alreadyInserted, wrapper, type.Resolve (ctx).GetDefinition (), modifiers, Compilation.FindType (typeof(object)).GetDefinition (), declarationBegin);
return wrapper.Result; return wrapper.Result;
} }
@ -1457,27 +1454,29 @@ namespace ICSharpCode.NRefactory.CSharp.Completion
return e.Name + "`" + e.TypeParameters.Count; return e.Name + "`" + e.TypeParameters.Count;
} }
void AddVirtuals (Dictionary<string, bool> alreadyInserted, CompletionDataWrapper col, ITypeDefinition type, string modifiers, ITypeDefinition curType, int declarationBegin) void AddVirtuals (Dictionary<string, bool> alreadyInserted, CompletionDataWrapper col, string modifiers, IType curType, int declarationBegin)
{ {
if (curType == null) if (curType == null)
return; return;
foreach (var m in curType.Methods.Where (m => !m.IsConstructor && !m.IsDestructor).Cast<IMember> ().Concat (curType.Properties.Cast<IMember> ())) {
if (m.IsSynthetic || curType.Kind != TypeKind.Interface && !(m.IsVirtual || m.IsOverride || m.IsAbstract)) foreach (var m in curType.GetMethods (m => !m.IsConstructor && !m.IsDestructor).Cast<IMember> ().Concat (curType.GetProperties ().Cast<IMember> ())) {
if (m.IsSynthetic || curType.Kind != TypeKind.Interface && !m.IsOverridable)
continue; continue;
// filter out the "Finalize" methods, because finalizers should be done with destructors. // filter out the "Finalize" methods, because finalizers should be done with destructors.
if (m is IMethod && m.Name == "Finalize") if (m is IMethod && m.Name == "Finalize")
continue; continue;
var data = factory.CreateNewOverrideCompletionData (declarationBegin, type.Parts.First (), m); var data = factory.CreateNewOverrideCompletionData (declarationBegin, currentType, m);
string text = GetNameWithParamCount (m); string text = GetNameWithParamCount (m);
// check if the member is already implemented // check if the member is already implemented
bool foundMember = type.Members.Any (cm => GetNameWithParamCount (cm) == text); bool foundMember = curType.GetMembers ().Any (cm => GetNameWithParamCount (cm) == text && cm.DeclaringTypeDefinition == curType.GetDefinition ());
if (!foundMember && !alreadyInserted.ContainsKey (text)) { if (foundMember)
alreadyInserted [text] = true; continue;
data.CompletionCategory = col.GetCompletionCategory (curType);
col.Add (data); alreadyInserted [text] = true;
} data.CompletionCategory = col.GetCompletionCategory (curType);
col.Add (data);
} }
} }

Loading…
Cancel
Save