From 8dabd77b02cd3137b253c17fb61d6090280a2aec Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Fri, 13 Jun 2008 14:00:31 +0000 Subject: [PATCH] added method insight for constructor chaining git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@3104 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../MethodInsightDataProvider.cs | 41 ++++++++++++++----- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/InsightWindow/MethodInsightDataProvider.cs b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/InsightWindow/MethodInsightDataProvider.cs index b47c5a41de..9c076bac7c 100644 --- a/src/Main/Base/Project/Src/TextEditor/Gui/Editor/InsightWindow/MethodInsightDataProvider.cs +++ b/src/Main/Base/Project/Src/TextEditor/Gui/Editor/InsightWindow/MethodInsightDataProvider.cs @@ -122,7 +122,10 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor } else if (expressionResult.Context.IsObjectCreation) { constructorInsight = true; expressionResult.Context = ExpressionContext.Type; + } else if (expressionResult.Context == ExpressionContext.BaseConstructorCall) { + constructorInsight = true; } + ResolveResult results = ParserService.Resolve(expressionResult, caretLineNumber, caretColumn, fileName, document.TextContent); LanguageProperties language = ParserService.CurrentProjectContent.Language; TypeResolveResult trr = results as TypeResolveResult; @@ -135,17 +138,23 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor constructorInsight = true; } if (constructorInsight) { - if (trr == null) - return; - foreach (IMethod method in trr.ResolvedType.GetMethods()) { - if (method.IsConstructor && !method.IsStatic) { - methods.Add(method); + if (trr == null) { + if ((expressionResult.Expression == "this") && (expressionResult.Context == ExpressionContext.BaseConstructorCall)) { + methods.AddRange(GetConstructorMethods(results.ResolvedType.GetMethods())); + } + + if ((expressionResult.Expression == "base") && (expressionResult.Context == ExpressionContext.BaseConstructorCall)) { + if (results.CallingClass.BaseType.DotNetName == "System.Object") + return; + methods.AddRange(GetConstructorMethods(results.CallingClass.BaseType.GetMethods())); + } + } else { + methods.AddRange(GetConstructorMethods(trr.ResolvedType.GetMethods())); + + if (methods.Count == 0 && trr.ResolvedClass != null && !trr.ResolvedClass.IsAbstract && !trr.ResolvedClass.IsStatic) { + // add default constructor + methods.Add(Constructor.CreateDefault(trr.ResolvedClass)); } - } - - if (methods.Count == 0 && trr.ResolvedClass != null && !trr.ResolvedClass.IsAbstract && !trr.ResolvedClass.IsStatic) { - // add default constructor - methods.Add(Constructor.CreateDefault(trr.ResolvedClass)); } } else { MethodGroupResolveResult result = results as MethodGroupResolveResult; @@ -154,6 +163,7 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor bool classIsInInheritanceTree = false; if (result.CallingClass != null) classIsInInheritanceTree = result.CallingClass.IsTypeInInheritanceTree(result.ContainingType.GetUnderlyingClass()); + foreach (IMethod method in result.ContainingType.GetMethods()) { if (language.NameComparer.Equals(method.Name, result.Name)) { if (method.IsAccessible(result.CallingClass, classIsInInheritanceTree)) { @@ -179,6 +189,17 @@ namespace ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor } } + List GetConstructorMethods(List methods) + { + List constructorMethods = new List(); + foreach (IMethod method in methods) { + if (method.IsConstructor && !method.IsStatic) { + constructorMethods.Add(method); + } + } + return constructorMethods; + } + public bool CaretOffsetChanged() { bool closeDataProvider = textArea.Caret.Offset <= initialOffset;