Skip to content
This repository was archived by the owner on Oct 16, 2020. It is now read-only.

Commit 1fbd200

Browse files
Merge branch 'master' of github.com:icsharpcode/SharpDevelop
2 parents d1a1858 + d303714 commit 1fbd200

42 files changed

Lines changed: 436 additions & 408 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

data/resources/StringResources.resx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3789,6 +3789,10 @@ Please configure the NAnt executable's location in the SharpDevelop Options.</va
37893789
<value>Could not find type definition at the cursor position.</value>
37903790
<comment>Error message when using Search&gt;Find Base Classes when the cursor is not on a type reference.</comment>
37913791
</data>
3792+
<data name="ICSharpCode.Refactoring.NoClassOrMemberUnderCursorError" xml:space="preserve">
3793+
<value>Could not find type definition or type member at the cursor position.</value>
3794+
<comment>Error message when using Search&gt;Find Base Classes when the cursor is not on a type reference or type member.</comment>
3795+
</data>
37923796
<data name="ICSharpCode.RubyBinding.SendLineToRubyConsole" xml:space="preserve">
37933797
<value>Send Line to Ruby Console</value>
37943798
</data>
@@ -6473,6 +6477,9 @@ Removed the end part of the original message ", reason '${Message}'" since this
64736477
<data name="SharpDevelop.Refactoring.BaseClassesOf" xml:space="preserve">
64746478
<value>Base classes of ${Name}</value>
64756479
</data>
6480+
<data name="SharpDevelop.Refactoring.BaseMembersOf" xml:space="preserve">
6481+
<value>Base members of ${Name}</value>
6482+
</data>
64766483
<data name="SharpDevelop.Refactoring.CannotPerformOperationBecauseOfSyntaxErrors" xml:space="preserve">
64776484
<value>The operation cannot be performed because your source code contains errors:</value>
64786485
</data>
@@ -6525,6 +6532,9 @@ Removed the end part of the original message ", reason '${Message}'" since this
65256532
<data name="SharpDevelop.Refactoring.FindBaseClassesCommand" xml:space="preserve">
65266533
<value>Find base classes</value>
65276534
</data>
6535+
<data name="SharpDevelop.Refactoring.FindBaseClassesOrMembersCommand" xml:space="preserve">
6536+
<value>Find base symbols</value>
6537+
</data>
65286538
<data name="SharpDevelop.Refactoring.FindDerivedClassesCommand" xml:space="preserve">
65296539
<value>Find &amp;derived classes</value>
65306540
</data>
@@ -8182,4 +8192,13 @@ Error while starting:
81828192
<value>This resource is not being used. Its purpose is to test the translation database and has
81838193
a line break</value>
81848194
</data>
8195+
<data name="Dialog.Options.IDEOptions.CodeCompletion.TooltipLabel" xml:space="preserve">
8196+
<value>Tooltip settings</value>
8197+
</data>
8198+
<data name="Dialog.Options.IDEOptions.CodeCompletion.CommitOnCharacters" xml:space="preserve">
8199+
<value>Insert selected code completion entry by typing the following characters:</value>
8200+
</data>
8201+
<data name="Dialog.Options.IDEOptions.CodeCompletion.CommitOnTabEnterOnly" xml:space="preserve">
8202+
<value>Only insert selected code completion entry by typing &lt;Tab&gt; or &lt;Enter&gt;.</value>
8203+
</data>
81858204
</root>

src/AddIns/BackendBindings/CSharpBinding/Project/Src/CSharpLanguageBinding.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ static string GeneratePartialClassContextStub(ICodeContext context)
7474
return "";
7575
var builder = new TypeSystemAstBuilder();
7676
MethodDeclaration decl;
77-
if (member is IMethod) {
77+
if (member.SymbolKind == SymbolKind.Method) {
7878
// If it's a method, convert it directly (including parameters + type parameters)
7979
decl = (MethodDeclaration)builder.ConvertEntity(member);
8080
} else {

src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CSharpCompletionBinding.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
using System;
2020
using System.Collections.Generic;
21+
using System.Diagnostics;
2122
using System.Linq;
2223

2324
using ICSharpCode.Core;
@@ -115,6 +116,7 @@ bool ShowCompletion(ITextEditor editor, char completionChar, bool ctrlSpace)
115116
} else {
116117
startPos = caretOffset;
117118
if (char.IsLetterOrDigit (completionChar) || completionChar == '_') {
119+
if (!CodeCompletionOptions.CompleteWhenTyping) return false;
118120
if (startPos > 1 && char.IsLetterOrDigit (completionContext.Document.GetCharAt (startPos - 2)))
119121
return false;
120122
completionData = cce.GetCompletionData(startPos, false);
@@ -137,7 +139,7 @@ bool ShowCompletion(ITextEditor editor, char completionChar, bool ctrlSpace)
137139
return true;
138140
}
139141

140-
if (!ctrlSpace) {
142+
if (CodeCompletionOptions.InsightEnabled && !ctrlSpace) {
141143
// Method Insight
142144
var pce = new CSharpParameterCompletionEngine(
143145
completionContext.Document,

src/AddIns/BackendBindings/CSharpBinding/Project/Src/Completion/CompletionData.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,13 +78,14 @@ string ICompletionItem.Text {
7878
public IImage Image { get; set; }
7979

8080
public virtual double Priority {
81-
get { return 0; }
81+
get { return CodeCompletionDataUsageCache.GetPriority(DisplayText, true); }
8282
}
8383

8484
public virtual void Complete(CompletionContext context)
8585
{
8686
context.Editor.Document.Replace(context.StartOffset, context.Length, this.CompletionText);
8787
context.EndOffset = context.StartOffset + this.CompletionText.Length;
88+
CodeCompletionDataUsageCache.IncrementUsage(DisplayText);
8889
}
8990

9091
object fancyContent;

src/AddIns/BackendBindings/WixBinding/Test/DirectoryImport/AddDirectoryTestFixture.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,11 @@
1616
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
1717
// DEALINGS IN THE SOFTWARE.
1818

19-
using ICSharpCode.SharpDevelop.Project;
19+
using System;
20+
using ICSharpCode.SharpDevelop;
2021
using ICSharpCode.WixBinding;
2122
using NUnit.Framework;
22-
using System;
23-
using System.Collections;
24-
using System.Collections.Specialized;
25-
using System.IO;
26-
using System.Xml;
2723
using WixBinding.Tests.PackageFiles;
28-
using WixBinding.Tests.Utils;
2924

3025
namespace WixBinding.Tests.DirectoryImport
3126
{

src/AddIns/BackendBindings/XamlBinding/XamlBinding.Tests/CodeInsertionTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
using System.Diagnostics;
2222
using System.Linq;
2323

24+
using ICSharpCode.SharpDevelop;
2425
using ICSharpCode.SharpDevelop.Editor.CodeCompletion;
2526
using NUnit.Framework;
2627

src/AddIns/Debugger/Debugger.AddIn/Breakpoints/BreakpointBookmark.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,10 @@ public override string ToString()
152152
return string.Format("{0} @{1}", this.FileName, this.LineNumber);
153153
}
154154

155+
public override bool DisplaysTooltip {
156+
get { return true; }
157+
}
158+
155159
public override object CreateTooltipContent()
156160
{
157161
return new BreakpointEditorPopup(this) {

src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -149,20 +149,20 @@
149149
icon="Icons.16x16.Class"
150150
class = "ICSharpCode.AvalonEdit.AddIn.ContextActions.FindDerivedClassesOrOverrides"/>
151151

152-
<MenuItem id = "FindBaseClasses"
153-
label = "${res:SharpDevelop.Refactoring.FindBaseClassesCommand}"
152+
<MenuItem id = "FindBaseClassesOrMembers"
153+
label = "${res:SharpDevelop.Refactoring.FindBaseClassesOrMembersCommand}"
154154
icon="Icons.16x16.Interface"
155-
class = "ICSharpCode.AvalonEdit.AddIn.ContextActions.FindBaseClasses"/>
155+
class = "ICSharpCode.AvalonEdit.AddIn.ContextActions.FindBaseClassesOrMembers"/>
156156
</Path>
157157

158158
<Path name = "/SharpDevelop/EntityContextMenu">
159-
<Condition name="SymbolTypeAtCaret" type="type" action="Exclude">
159+
<Condition name="SymbolTypeAtCaret" type="type,member" action="Exclude">
160160
<Include id="FindDerivedOrOverridesClasses"
161161
insertafter="FindReferences"
162162
item="/SharpDevelop/Workbench/MainMenu/Search/FindDerivedOrOverridesClasses" />
163-
<Include id="FindBaseClasses"
163+
<Include id="FindBaseClassesOrMembers"
164164
insertafter="FindDerivedOrOverridesClasses"
165-
item="/SharpDevelop/Workbench/MainMenu/Search/FindBaseClasses" />
165+
item="/SharpDevelop/Workbench/MainMenu/Search/FindBaseClassesOrMembers" />
166166
</Condition>
167167
</Path>
168168

src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/CodeEditor.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -569,6 +569,10 @@ void TextAreaTextEntered(object sender, TextCompositionEventArgs e)
569569
SD.ParserService.ParseAsync(this.FileName, this.Document.CreateSnapshot()).FireAndForget();
570570
} else {
571571
if (e.Text.Length == 1) {
572+
// disable all code completion bindings when CC is disabled
573+
if (!CodeCompletionOptions.EnableCodeCompletion)
574+
return;
575+
572576
foreach (ICodeCompletionBinding cc in CodeCompletionBindings) {
573577
if (cc.HandleKeyPressed(adapter, c))
574578
break;

src/AddIns/DisplayBindings/AvalonEdit.AddIn/Src/ContextActions/FindBaseClasses.cs

Lines changed: 49 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,16 +31,20 @@
3131

3232
namespace ICSharpCode.AvalonEdit.AddIn.ContextActions
3333
{
34-
public class FindBaseClasses : ResolveResultMenuCommand
34+
public class FindBaseClassesOrMembers : ResolveResultMenuCommand
3535
{
3636
public override void Run(ResolveResult symbol)
3737
{
3838
IEntity entityUnderCaret = GetSymbol(symbol) as IEntity;
3939
if (entityUnderCaret is ITypeDefinition) {
4040
MakePopupWithBaseClasses((ITypeDefinition)entityUnderCaret).OpenAtCaretAndFocus();
41-
} else {
42-
MessageService.ShowError("${res:ICSharpCode.Refactoring.NoClassUnderCursorError}");
41+
return;
4342
}
43+
if (entityUnderCaret is IMember) {
44+
MakePopupWithBaseMembers((IMember)entityUnderCaret).OpenAtCaretAndFocus();
45+
return;
46+
}
47+
MessageService.ShowError("${res:ICSharpCode.Refactoring.NoClassOrMemberUnderCursorError}");
4448
}
4549

4650
static ContextActionsPopup MakePopupWithBaseClasses(ITypeDefinition @class)
@@ -49,14 +53,54 @@ static ContextActionsPopup MakePopupWithBaseClasses(ITypeDefinition @class)
4953
var popupViewModel = new ContextActionsPopupViewModel();
5054
popupViewModel.Title = MenuService.ConvertLabel(StringParser.Parse(
5155
"${res:SharpDevelop.Refactoring.BaseClassesOf}", new StringTagPair("Name", @class.Name)));
52-
popupViewModel.Actions = BuildListViewModel(baseClassList);
56+
popupViewModel.Actions = BuildBaseClassListViewModel(baseClassList);
5357
return new ContextActionsPopup { Actions = popupViewModel };
5458
}
5559

56-
static ObservableCollection<ContextActionViewModel> BuildListViewModel(IEnumerable<ITypeDefinition> classList)
60+
static ObservableCollection<ContextActionViewModel> BuildBaseClassListViewModel(IEnumerable<ITypeDefinition> classList)
5761
{
5862
return new ObservableCollection<ContextActionViewModel>(
5963
classList.Select(@class => GoToEntityAction.MakeViewModel(@class, null)));
6064
}
65+
66+
#region Base (overridden) members
67+
static ContextActionsPopup MakePopupWithBaseMembers(IMember member)
68+
{
69+
var baseClassList = member.DeclaringTypeDefinition.GetAllBaseTypeDefinitions().Where(
70+
baseClass => baseClass != member.DeclaringTypeDefinition).ToList();
71+
var popupViewModel = new ContextActionsPopupViewModel {
72+
Title = MenuService.ConvertLabel(StringParser.Parse(
73+
"${res:SharpDevelop.Refactoring.BaseMembersOf}",
74+
new StringTagPair("Name", member.FullName))
75+
)};
76+
popupViewModel.Actions = BuildBaseMemberListViewModel(member);
77+
return new ContextActionsPopup { Actions = popupViewModel };
78+
}
79+
80+
static ObservableCollection<ContextActionViewModel> BuildBaseMemberListViewModel(IMember member)
81+
{
82+
var c = new ObservableCollection<ContextActionViewModel>();
83+
ObservableCollection<ContextActionViewModel> lastBase = c;
84+
85+
IMember thisMember = member;
86+
while (thisMember != null) {
87+
IMember baseMember = InheritanceHelper.GetBaseMembers(thisMember, true).FirstOrDefault();
88+
if (baseMember != null) {
89+
// Only allow this base member, if overriding a virtual/abstract member of a class
90+
// or implementing a member of an interface.
91+
if ((baseMember.DeclaringTypeDefinition.Kind == TypeKind.Interface) || (baseMember.IsOverridable && thisMember.IsOverride)) {
92+
var newChild = new ObservableCollection<ContextActionViewModel>();
93+
lastBase.Add(GoToEntityAction.MakeViewModel(baseMember, newChild));
94+
lastBase = newChild;
95+
} else {
96+
thisMember = null;
97+
}
98+
}
99+
thisMember = baseMember;
100+
}
101+
102+
return c;
103+
}
104+
#endregion
61105
}
62106
}

0 commit comments

Comments
 (0)