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

Commit 2fae041

Browse files
Merge branch 'master' of github.com:icsharpcode/SharpDevelop
2 parents e6b7ed9 + 2baac1b commit 2fae041

17 files changed

Lines changed: 255 additions & 49 deletions

src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/EditorScript.cs

Lines changed: 29 additions & 20 deletions
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
using System.Threading.Tasks;
2324
using System.Windows.Threading;
@@ -132,21 +133,21 @@ public override Task<Script> InsertWithCursor(string operation, InsertPosition d
132133

133134
switch (defaultPosition) {
134135
case InsertPosition.Start:
135-
layer.CurrentInsertionPoint = 0;
136+
layer.CurrentInsertionPointIndex = 0;
136137
break;
137138
case InsertPosition.End:
138-
layer.CurrentInsertionPoint = insertionPoints.Count - 1;
139+
layer.CurrentInsertionPointIndex = insertionPoints.Count - 1;
139140
break;
140141
case InsertPosition.Before:
141142
for (int i = 0; i < insertionPoints.Count; i++) {
142143
if (insertionPoints[i].Location < loc)
143-
layer.CurrentInsertionPoint = i;
144+
layer.CurrentInsertionPointIndex = i;
144145
}
145146
break;
146147
case InsertPosition.After:
147148
for (int i = 0; i < insertionPoints.Count; i++) {
148149
if (insertionPoints[i].Location > loc) {
149-
layer.CurrentInsertionPoint = i;
150+
layer.CurrentInsertionPointIndex = i;
150151
break;
151152
}
152153
}
@@ -172,13 +173,34 @@ void InsertWithCursorOnLayer(EditorScript currentScript, InsertionCursorLayer la
172173
args.InsertionPoint.LineBefore == NewLineInsertion.None && nodes.Count > 1) {
173174
args.InsertionPoint.LineAfter = NewLineInsertion.BlankLine;
174175
}
176+
177+
var insertionPoint = args.InsertionPoint;
178+
if (nodes.All(n => n is EnumMemberDeclaration)) {
179+
insertionPoint.LineAfter = NewLineInsertion.Eol;
180+
insertionPoint.LineBefore = NewLineInsertion.None;
181+
}
175182

176-
int offset = currentScript.GetCurrentOffset(args.InsertionPoint.Location);
177-
int indentLevel = currentScript.GetIndentLevelAt(offset);
183+
int offset = currentScript.GetCurrentOffset(insertionPoint.Location);
184+
int indentLevel = currentScript.GetIndentLevelAt(Math.Max(0, offset - 1));
178185

179186
foreach (var node in nodes.Reverse()) {
180187
var output = currentScript.OutputNode(indentLevel, node);
181-
int delta = args.InsertionPoint.Insert(target, output.Text);
188+
var text = output.Text;
189+
if (node is EnumMemberDeclaration) {
190+
if (insertionPoint != layer.InsertionPoints.Last()) {
191+
text += ",";
192+
} else {
193+
var parentEnum = currentScript.context.RootNode.GetNodeAt(insertionPoint.Location, n => (n is TypeDeclaration) && ((TypeDeclaration)n).ClassType == ClassType.Enum) as TypeDeclaration;
194+
if (parentEnum != null) {
195+
var lastMember = parentEnum.Members.LastOrDefault();
196+
if (lastMember != null) {
197+
var segment = currentScript.GetSegment(lastMember);
198+
currentScript.InsertText(segment.EndOffset, ",");
199+
}
200+
}
201+
}
202+
}
203+
int delta = insertionPoint.Insert(target, text);
182204
output.RegisterTrackedSegments(currentScript, delta + offset);
183205
}
184206
currentScript.FormatText(nodes);
@@ -239,19 +261,6 @@ public override Task<Script> InsertWithCursor(string operation, ITypeDefinition
239261
var layer = new InsertionCursorLayer(area, operation, insertionPoints);
240262
area.Dispatcher.BeginInvoke(DispatcherPriority.Background, (Action)area.TextView.InvalidateVisual);
241263

242-
if (declaringType.Kind == TypeKind.Enum) {
243-
foreach (var node in nodes.Reverse()) {
244-
int indentLevel = GetIndentLevelAt(area.Document.GetOffset(declaringType.BodyRegion.Begin));
245-
var output = OutputNode(indentLevel, node);
246-
var point = insertionPoints[0];
247-
var offset = area.Document.GetOffset(point.Location);
248-
var text = output.Text + ",";
249-
var delta = point.Insert(area.Document, text);
250-
output.RegisterTrackedSegments(script, delta + offset);
251-
}
252-
tcs.SetResult(script);
253-
return tcs.Task;
254-
}
255264
InsertWithCursorOnLayer(script, layer, tcs, nodes, area.Document);
256265
return tcs.Task;
257266
}

src/AddIns/BackendBindings/CSharpBinding/Project/Src/Refactoring/InsertionCursorLayer.cs

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,15 @@
2424
using System.Windows.Documents;
2525
using System.Windows.Input;
2626
using System.Windows.Media;
27+
2728
using ICSharpCode.AvalonEdit;
2829
using ICSharpCode.AvalonEdit.Editing;
2930
using ICSharpCode.AvalonEdit.Rendering;
3031
using ICSharpCode.AvalonEdit.Utils;
3132
using ICSharpCode.NRefactory;
3233
using ICSharpCode.SharpDevelop;
3334
using ICSharpCode.SharpDevelop.Editor;
35+
3436
namespace CSharpBinding.Refactoring
3537
{
3638
class InsertionCursorLayer : Canvas, IDisposable
@@ -41,9 +43,10 @@ class InsertionCursorLayer : Canvas, IDisposable
4143

4244
readonly TextArea editor;
4345

44-
public int CurrentInsertionPoint {
45-
get;
46-
set;
46+
public int CurrentInsertionPointIndex { get; set; }
47+
48+
public InsertionPoint[] InsertionPoints {
49+
get { return insertionPoints; }
4750
}
4851

4952
int insertionPointNextToMouse = -1;
@@ -73,8 +76,8 @@ public InsertionCursorLayer(TextArea editor, string operation, IList<InsertionPo
7376

7477
protected override void OnRender(DrawingContext drawingContext)
7578
{
76-
DrawLineForInsertionPoint(CurrentInsertionPoint, markerPen, drawingContext);
77-
if (insertionPointNextToMouse > -1 && insertionPointNextToMouse != CurrentInsertionPoint)
79+
DrawLineForInsertionPoint(CurrentInsertionPointIndex, markerPen, drawingContext);
80+
if (insertionPointNextToMouse > -1 && insertionPointNextToMouse != CurrentInsertionPointIndex)
7881
DrawLineForInsertionPoint(insertionPointNextToMouse, tempMarkerPen, drawingContext);
7982
SetGroupBoxPosition();
8083
// HACK: why OnRender() override? we could just use Line objects instead
@@ -128,7 +131,7 @@ protected override void OnMouseDown(MouseButtonEventArgs e)
128131
else {
129132
insertionPointNextToMouse = FindNextInsertionPoint(e.GetPosition(this));
130133
if (insertionPointNextToMouse >= 0)
131-
CurrentInsertionPoint = insertionPointNextToMouse;
134+
CurrentInsertionPointIndex = insertionPointNextToMouse;
132135
InvalidateVisual();
133136
}
134137
e.Handled = true;
@@ -181,9 +184,9 @@ ExecutedRoutedEventHandler MoveMarker(bool up)
181184
{
182185
return (sender, e) => {
183186
if (up)
184-
layer.CurrentInsertionPoint = Math.Max(0, layer.CurrentInsertionPoint - 1);
187+
layer.CurrentInsertionPointIndex = Math.Max(0, layer.CurrentInsertionPointIndex - 1);
185188
else
186-
layer.CurrentInsertionPoint = Math.Min(layer.insertionPoints.Length - 1, layer.CurrentInsertionPoint + 1);
189+
layer.CurrentInsertionPointIndex = Math.Min(layer.insertionPoints.Length - 1, layer.CurrentInsertionPointIndex + 1);
187190
layer.InvalidateVisual();
188191
layer.ScrollToInsertionPoint();
189192
};
@@ -192,9 +195,9 @@ ExecutedRoutedEventHandler MoveMarker(bool up)
192195
ExecutedRoutedEventHandler MoveMarkerPage(bool up)
193196
{
194197
return (sender, e) => {
195-
TextLocation current = layer.insertionPoints[layer.CurrentInsertionPoint].Location;
198+
TextLocation current = layer.insertionPoints[layer.CurrentInsertionPointIndex].Location;
196199
double currentVPos = layer.editor.TextView.GetVisualTopByDocumentLine(current.Line);
197-
int newIndex = layer.CurrentInsertionPoint;
200+
int newIndex = layer.CurrentInsertionPointIndex;
198201
double newVPos;
199202
do {
200203
if (up) {
@@ -214,7 +217,7 @@ ExecutedRoutedEventHandler MoveMarkerPage(bool up)
214217
newVPos = layer.editor.TextView.GetVisualTopByDocumentLine(layer.insertionPoints[newIndex].Location.Line);
215218
}
216219
while (Math.Abs(currentVPos - newVPos) < layer.editor.ActualHeight);
217-
layer.CurrentInsertionPoint = newIndex;
220+
layer.CurrentInsertionPointIndex = newIndex;
218221
layer.InvalidateVisual();
219222
layer.ScrollToInsertionPoint();
220223
};
@@ -224,9 +227,9 @@ ExecutedRoutedEventHandler MoveMarkerFull(bool up)
224227
{
225228
return (sender, e) => {
226229
if (up)
227-
layer.CurrentInsertionPoint = 0;
230+
layer.CurrentInsertionPointIndex = 0;
228231
else
229-
layer.CurrentInsertionPoint = layer.insertionPoints.Length - 1;
232+
layer.CurrentInsertionPointIndex = layer.insertionPoints.Length - 1;
230233
layer.InvalidateVisual();
231234
layer.ScrollToInsertionPoint();
232235
};
@@ -247,14 +250,14 @@ void InsertCode(object sender, ExecutedRoutedEventArgs e)
247250

248251
internal void ScrollToInsertionPoint()
249252
{
250-
var location = insertionPoints[CurrentInsertionPoint].Location;
253+
var location = insertionPoints[CurrentInsertionPointIndex].Location;
251254
editor.GetService<TextEditor>().ScrollTo(location.Line, location.Column);
252255
SetGroupBoxPosition();
253256
}
254257

255258
void SetGroupBoxPosition()
256259
{
257-
var boxPosition = GetLinePosition(CurrentInsertionPoint) + new Vector(editor.TextView.ActualWidth * 0.6 - 5, -groupBox.ActualHeight / 2.0);
260+
var boxPosition = GetLinePosition(CurrentInsertionPointIndex) + new Vector(editor.TextView.ActualWidth * 0.6 - 5, -groupBox.ActualHeight / 2.0);
258261
Canvas.SetTop(groupBox, boxPosition.Y);
259262
Canvas.SetLeft(groupBox, boxPosition.X);
260263
}
@@ -267,7 +270,7 @@ void Cancel(object sender, ExecutedRoutedEventArgs e)
267270
void FireExited(bool success)
268271
{
269272
if (Exited != null) {
270-
Exited(this, new InsertionCursorEventArgs(insertionPoints[CurrentInsertionPoint], success));
273+
Exited(this, new InsertionCursorEventArgs(insertionPoints[CurrentInsertionPointIndex], success));
271274
}
272275
}
273276

src/AddIns/Misc/PackageManagement/Cmdlets/Project/Src/GetPackageCmdlet.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ UpdatedPackages CreateUpdatedPackages(IPackageRepository repository)
200200
if (project != null) {
201201
return new UpdatedPackages(project, repository);
202202
}
203-
return new UpdatedPackages(GetPackagesInstalledIntoAnyProject(), repository);
203+
return new UpdatedPackages(GetPackagesInstalledIntoAnyProject(), repository, NullConstraintProvider.Instance);
204204
}
205205

206206
IQueryable<IPackage> GetPackagesInstalledIntoAnyProject()

src/AddIns/Misc/PackageManagement/PackageManagement.sln

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
Microsoft Visual Studio Solution File, Format Version 11.00
33
# Visual Studio 2010
4-
# SharpDevelop 4.3
4+
# SharpDevelop 4.4
55
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManagement", "Project\PackageManagement.csproj", "{AE4AB0FA-6087-4480-AF37-0FA1452B3DA1}"
66
EndProject
77
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PackageManagement.Tests", "Test\PackageManagement.Tests.csproj", "{56E98A01-8398-4A08-9578-C7337711A52B}"
@@ -85,7 +85,7 @@ Global
8585
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
8686
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
8787
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
88-
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
88+
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Debug|Any CPU.ActiveCfg = Debug|WithNRefactory
8989
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|Any CPU.Build.0 = Release|Any CPU
9090
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
9191
{6C55B776-26D4-4DB3-A6AB-87E783B2F3D1}.Release|Any CPU.Build.0 = Release|Any CPU

src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementProject.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ public FakePackageManagementProject(string name)
3939
FakeUninstallPackageAction = new FakeUninstallPackageAction(this);
4040

4141
this.Name = name;
42+
43+
ConstraintProvider = NullConstraintProvider.Instance;
4244
}
4345

4446
private FakeInstallPackageAction FakeInstallPackageAction;
@@ -232,6 +234,11 @@ public void AddFakePackageToSourceRepository(string packageId)
232234
FakeSourceRepository.AddFakePackage(packageId);
233235
}
234236

237+
public FakePackage AddFakePackageToSourceRepository(string packageId, string version)
238+
{
239+
return FakeSourceRepository.AddFakePackageWithVersion(packageId, version);
240+
}
241+
235242
public void UpdatePackages(UpdatePackagesAction action)
236243
{
237244
}
@@ -274,5 +281,7 @@ public void UpdatePackageReference(IPackage package, IUpdatePackageSettings sett
274281
{
275282
throw new NotImplementedException();
276283
}
284+
285+
public IPackageConstraintProvider ConstraintProvider { get; set; }
277286
}
278287
}

src/AddIns/Misc/PackageManagement/Project/Src/IPackageManagementProject.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ public interface IPackageManagementProject
3838

3939
Project ConvertToDTEProject();
4040

41+
IPackageConstraintProvider ConstraintProvider { get; }
42+
4143
bool IsPackageInstalled(IPackage package);
4244
bool IsPackageInstalled(string packageId);
4345
bool HasOlderPackageInstalled(IPackage package);

src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementProject.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,5 +178,15 @@ public void UpdatePackageReference(IPackage package, IUpdatePackageSettings sett
178178
{
179179
packageManager.UpdatePackageReference(package, settings);
180180
}
181+
182+
public IPackageConstraintProvider ConstraintProvider {
183+
get {
184+
var constraintProvider = projectManager.LocalRepository as IPackageConstraintProvider;
185+
if (constraintProvider != null) {
186+
return constraintProvider;
187+
}
188+
return NullConstraintProvider.Instance;
189+
}
190+
}
181191
}
182192
}

src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSelectedProjects.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,5 +157,13 @@ public IPackageManagementProject GetSingleProjectSelected(IPackageRepository rep
157157
}
158158
return null;
159159
}
160+
161+
public IPackageConstraintProvider GetConstraintProvider(IPackageRepository repository)
162+
{
163+
if (HasSingleProjectSelected()) {
164+
return GetSingleProjectSelected(repository).ConstraintProvider;
165+
}
166+
return NullConstraintProvider.Instance;
167+
}
160168
}
161169
}

src/AddIns/Misc/PackageManagement/Project/Src/ProcessPackageAction.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,9 +134,12 @@ void GetPackageIfMissing()
134134

135135
void FindPackage()
136136
{
137-
Package = Project
138-
.SourceRepository
139-
.FindPackage(PackageId, PackageVersion, AllowPrereleaseVersions, allowUnlisted: false);
137+
Package = Project.SourceRepository.FindPackage(
138+
PackageId,
139+
PackageVersion,
140+
Project.ConstraintProvider,
141+
AllowPrereleaseVersions,
142+
allowUnlisted: false);
140143
}
141144

142145
void ThrowPackageNotFoundError(string packageId)

src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackages.cs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,22 +29,26 @@ public class UpdatedPackages
2929
{
3030
IPackageRepository sourceRepository;
3131
IQueryable<IPackage> installedPackages;
32+
IPackageConstraintProvider constraintProvider;
3233

3334
public UpdatedPackages(
3435
IPackageManagementProject project,
3536
IPackageRepository aggregateRepository)
3637
: this(
3738
project.GetPackages(),
38-
aggregateRepository)
39+
aggregateRepository,
40+
project.ConstraintProvider)
3941
{
4042
}
4143

4244
public UpdatedPackages(
4345
IQueryable<IPackage> installedPackages,
44-
IPackageRepository aggregrateRepository)
46+
IPackageRepository aggregrateRepository,
47+
IPackageConstraintProvider constraintProvider)
4548
{
4649
this.installedPackages = installedPackages;
4750
this.sourceRepository = aggregrateRepository;
51+
this.constraintProvider = constraintProvider;
4852
}
4953

5054
public string SearchTerms { get; set; }
@@ -54,7 +58,7 @@ public IEnumerable<IPackage> GetUpdatedPackages(bool includePrerelease = false)
5458
IQueryable<IPackage> localPackages = installedPackages;
5559
localPackages = FilterPackages(localPackages);
5660
IEnumerable<IPackage> distinctLocalPackages = DistinctPackages(localPackages);
57-
return GetUpdatedPackages(sourceRepository, distinctLocalPackages, includePrerelease);
61+
return GetUpdatedPackages(distinctLocalPackages, includePrerelease);
5862
}
5963

6064
IQueryable<IPackage> GetInstalledPackages()
@@ -81,11 +85,18 @@ IEnumerable<IPackage> DistinctPackages(IQueryable<IPackage> localPackages)
8185
}
8286

8387
IEnumerable<IPackage> GetUpdatedPackages(
84-
IPackageRepository sourceRepository,
8588
IEnumerable<IPackage> localPackages,
8689
bool includePrelease)
8790
{
88-
return sourceRepository.GetUpdates(localPackages, includePrelease, false);
91+
IEnumerable<IVersionSpec> constraints = localPackages
92+
.Select(package => constraintProvider.GetConstraint(package.Id));
93+
94+
return sourceRepository.GetUpdates(
95+
localPackages,
96+
includePrelease,
97+
false,
98+
null,
99+
constraints);
89100
}
90101
}
91102
}

0 commit comments

Comments
 (0)