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

Commit 20c191a

Browse files
add ClassBrowserServiceImpl class to decouple the ClassBrowser service from the pad UI
1 parent 6c2e11a commit 20c191a

9 files changed

Lines changed: 90 additions & 108 deletions

File tree

src/Main/Base/Project/Dom/ClassBrowser/ClassBrowserTreeView.cs

Lines changed: 7 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -13,43 +13,17 @@
1313

1414
namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
1515
{
16-
public class ClassBrowserTreeView : SharpTreeView, IClassBrowserTreeView
16+
public class ClassBrowserTreeView : SharpTreeView
1717
{
18-
#region IClassBrowser implementation
19-
20-
WorkspaceModel workspace;
21-
22-
public ICollection<IAssemblyList> AssemblyLists {
23-
get { return workspace.AssemblyLists; }
24-
}
25-
26-
public IAssemblyList MainAssemblyList {
27-
get { return workspace.MainAssemblyList; }
28-
set { workspace.MainAssemblyList = value; }
29-
}
30-
31-
public IAssemblyList UnpinnedAssemblies {
32-
get { return workspace.UnpinnedAssemblies; }
33-
set { workspace.UnpinnedAssemblies = value; }
34-
}
35-
36-
public IAssemblyModel FindAssemblyModel(FileName fileName)
37-
{
38-
return workspace.FindAssemblyModel(fileName);
39-
}
40-
41-
#endregion
42-
4318
public ClassBrowserTreeView()
4419
{
4520
WorkspaceTreeNode root = new WorkspaceTreeNode();
46-
this.workspace = root.Workspace;
4721
ClassBrowserTreeView instance = this;
48-
root.Workspace.AssemblyLists.CollectionChanged += delegate {
49-
instance.ShowRoot = root.Workspace.AssemblyLists.Count > 0;
22+
SD.ClassBrowser.CurrentWorkspace.AssemblyLists.CollectionChanged += delegate {
23+
instance.ShowRoot = SD.ClassBrowser.CurrentWorkspace.AssemblyLists.Count > 0;
5024
};
5125
root.PropertyChanged += delegate {
52-
instance.ShowRoot = root.Workspace.AssemblyLists.Count > 0;
26+
instance.ShowRoot = SD.ClassBrowser.CurrentWorkspace.AssemblyLists.Count > 0;
5327
};
5428
this.Root = root;
5529
}
@@ -145,10 +119,11 @@ public bool GoToEntity(IEntity entity)
145119
if (namespaceChildren == null) {
146120
// Add assembly to workspace (unpinned), if not available in ClassBrowser
147121
IAssemblyParserService assemblyParser = SD.GetService<IAssemblyParserService>();
148-
if (assemblyParser != null) {
122+
IClassBrowser classBrowser = SD.GetService<IClassBrowser>();
123+
if (assemblyParser != null && classBrowser != null) {
149124
IAssemblyModel unpinnedAssemblyModel = assemblyParser.GetAssemblyModel(new FileName(entityAssembly.UnresolvedAssembly.Location));
150125
if (unpinnedAssemblyModel != null) {
151-
this.UnpinnedAssemblies.Assemblies.Add(unpinnedAssemblyModel);
126+
classBrowser.UnpinnedAssemblies.Assemblies.Add(unpinnedAssemblyModel);
152127
var assemblyTreeNode = FindAssemblyTreeNode(entityAssembly.FullAssemblyName);
153128
if (assemblyTreeNode != null) {
154129
assemblyTreeNode.EnsureLazyChildren();
@@ -243,9 +218,4 @@ public bool GoToEntity(IEntity entity)
243218
return false;
244219
}
245220
}
246-
247-
public interface IClassBrowserTreeView : IClassBrowser
248-
{
249-
250-
}
251221
}

src/Main/Base/Project/Dom/ClassBrowser/IClassBrowser.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
1010
{
1111
public interface IClassBrowser
1212
{
13+
WorkspaceModel CurrentWorkspace { get; }
1314
IAssemblyList MainAssemblyList { get; set; }
1415
IAssemblyList UnpinnedAssemblies { get; set; }
1516
ICollection<IAssemblyList> AssemblyLists { get; }

src/Main/Base/Project/Dom/ClassBrowser/WorkspaceTreeNode.cs

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,27 +34,21 @@ public int Compare(SharpTreeNode x, SharpTreeNode y)
3434
return stringComparer.Compare(x.Text.ToString(), y.Text.ToString());
3535
}
3636
}
37-
38-
WorkspaceModel workspace;
39-
public WorkspaceModel Workspace {
40-
get { return workspace; }
41-
}
4237

4338
protected static readonly IComparer<SharpTreeNode> ChildNodeComparer = new WorkspaceChildComparer();
4439

4540
public WorkspaceTreeNode()
4641
{
47-
this.workspace = new WorkspaceModel();
48-
this.workspace.AssemblyLists.CollectionChanged += AssemblyListsCollectionChanged;
42+
SD.ClassBrowser.CurrentWorkspace.AssemblyLists.CollectionChanged += AssemblyListsCollectionChanged;
4943
}
5044

5145
protected override object GetModel()
5246
{
53-
return workspace;
47+
return SD.ClassBrowser.CurrentWorkspace;
5448
}
5549

5650
protected override IModelCollection<object> ModelChildren {
57-
get { return workspace.MainAssemblyList.Assemblies.Concat(workspace.UnpinnedAssemblies.Assemblies); }
51+
get { return SD.ClassBrowser.MainAssemblyList.Assemblies.Concat(SD.ClassBrowser.UnpinnedAssemblies.Assemblies); }
5852
}
5953

6054
protected override IComparer<SharpTreeNode> NodeComparer {
@@ -63,7 +57,7 @@ protected override IComparer<SharpTreeNode> NodeComparer {
6357

6458
public override object Text {
6559
get {
66-
return String.Format(SD.ResourceService.GetString("MainWindow.Windows.ClassBrowser.Workspace"), Workspace.MainAssemblyList.Name);
60+
return String.Format(SD.ResourceService.GetString("MainWindow.Windows.ClassBrowser.Workspace"), SD.ClassBrowser.MainAssemblyList.Name);
6761
}
6862
}
6963

@@ -80,7 +74,7 @@ protected override bool IsSpecialNode()
8074

8175
protected override void InsertSpecialNodes()
8276
{
83-
foreach (var assemblyList in workspace.AssemblyLists) {
77+
foreach (var assemblyList in SD.ClassBrowser.AssemblyLists) {
8478
var treeNode = SD.TreeNodeFactory.CreateTreeNode(assemblyList);
8579
if (treeNode != null)
8680
Children.OrderedInsert(treeNode, ChildNodeComparer);

src/Main/Base/Project/Dom/IEntityModelContext.cs

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -107,27 +107,6 @@ public bool IsValid {
107107
}
108108
}
109109

110-
public class DomAssemblyNameReference : IAssemblyReference
111-
{
112-
DomAssemblyName name;
113-
IAssemblySearcher searcher;
114-
115-
public DomAssemblyNameReference(DomAssemblyName name, IAssemblySearcher searcher)
116-
{
117-
if (name == null)
118-
throw new ArgumentNullException("name");
119-
if (searcher == null)
120-
throw new ArgumentNullException("searcher");
121-
this.name = name;
122-
this.searcher = searcher;
123-
}
124-
125-
public IAssembly Resolve(ITypeResolveContext context)
126-
{
127-
return SD.AssemblyParserService.GetAssembly(searcher.FindAssembly(name), true).Resolve(context);
128-
}
129-
}
130-
131110
public class AssemblyEntityModelContext : IEntityModelContext
132111
{
133112
Lazy<ICompilation> compilation;

src/Main/Base/Project/ICSharpCode.SharpDevelop.addin

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,8 @@
9393
class="ICSharpCode.SharpDevelop.Editor.Bookmarks.BookmarkManager"/>
9494
<Service id="ICSharpCode.SharpDevelop.IUIService"
9595
class="ICSharpCode.SharpDevelop.UIService"/>
96-
96+
<Service id="ICSharpCode.SharpDevelop.Dom.ClassBrowser.IClassBrowser"
97+
class="ICSharpCode.SharpDevelop.Dom.ClassBrowser.ClassBrowserServiceImpl"/>
9798
<Service id="ICSharpCode.SharpDevelop.WinForms.IWinFormsService"
9899
class="ICSharpCode.SharpDevelop.WinForms.WinFormsService"/>
99100
<Service id="ICSharpCode.SharpDevelop.WinForms.IWinFormsMenuService"
@@ -136,7 +137,6 @@
136137
title = "${res:MainWindow.Windows.ClassScoutLabel}"
137138
icon = "PadIcons.ClassBrowser"
138139
class = "ICSharpCode.SharpDevelop.Dom.ClassBrowser.ClassBrowserPad"
139-
serviceInterface = "ICSharpCode.SharpDevelop.Dom.ClassBrowser.IClassBrowser"
140140
defaultPosition = "Right" />
141141

142142
<Pad id = "SideBar"

src/Main/Base/Project/Services/SD.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using ICSharpCode.Core;
1010
using ICSharpCode.Core.Implementation;
1111
using ICSharpCode.SharpDevelop.Dom;
12+
using ICSharpCode.SharpDevelop.Dom.ClassBrowser;
1213
using ICSharpCode.SharpDevelop.Editor;
1314
using ICSharpCode.SharpDevelop.Editor.Bookmarks;
1415
using ICSharpCode.SharpDevelop.Gui;
@@ -259,5 +260,10 @@ public static IFileSystem FileSystem {
259260
public static IOutputPad OutputPad {
260261
get { return GetRequiredService<IOutputPad>(); }
261262
}
263+
264+
/// <inheritdoc see="IClassBrowser"/>
265+
public static IClassBrowser ClassBrowser {
266+
get { return GetRequiredService<IClassBrowser>(); }
267+
}
262268
}
263269
}

src/Main/SharpDevelop/Dom/ClassBrowser/ClassBrowserPad.cs

Lines changed: 11 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -83,31 +83,8 @@ public bool IsValid {
8383
}
8484
}
8585

86-
class ClassBrowserPad : AbstractPadContent, IClassBrowser
86+
class ClassBrowserPad : AbstractPadContent
8787
{
88-
#region IClassBrowser implementation
89-
90-
public ICollection<IAssemblyList> AssemblyLists {
91-
get { return treeView.AssemblyLists; }
92-
}
93-
94-
public IAssemblyList MainAssemblyList {
95-
get { return treeView.MainAssemblyList; }
96-
set { treeView.MainAssemblyList = value; }
97-
}
98-
99-
public IAssemblyList UnpinnedAssemblies {
100-
get { return treeView.UnpinnedAssemblies; }
101-
set { treeView.UnpinnedAssemblies = value; }
102-
}
103-
104-
public IAssemblyModel FindAssemblyModel(FileName fileName)
105-
{
106-
return treeView.FindAssemblyModel(fileName);
107-
}
108-
109-
#endregion
110-
11188
const string PersistedWorkspaceSetting = "ClassBrowser.Workspaces";
11289
const string DefaultWorkspaceName = "<default>";
11390

@@ -154,10 +131,6 @@ public override object Control {
154131
get { return panel; }
155132
}
156133

157-
public IClassBrowserTreeView TreeView {
158-
get { return treeView; }
159-
}
160-
161134
public bool GoToEntity(IEntity entity)
162135
{
163136
// Activate the pad
@@ -176,10 +149,10 @@ public bool GotoAssemblyModel(IAssemblyModel assemblyModel)
176149

177150
void ProjectServiceCurrentSolutionChanged(object sender, EventArgs e)
178151
{
179-
foreach (var node in treeView.AssemblyLists.OfType<ISolutionAssemblyList>().ToArray())
180-
treeView.AssemblyLists.Remove(node);
152+
foreach (var node in SD.ClassBrowser.AssemblyLists.OfType<ISolutionAssemblyList>().ToArray())
153+
SD.ClassBrowser.AssemblyLists.Remove(node);
181154
if (projectService.CurrentSolution != null)
182-
treeView.AssemblyLists.Add(new SolutionAssemblyList(projectService.CurrentSolution));
155+
SD.ClassBrowser.AssemblyLists.Add(new SolutionAssemblyList(projectService.CurrentSolution));
183156
}
184157

185158
void AssemblyListCollectionChanged(IReadOnlyCollection<IAssemblyModel> removedItems, IReadOnlyCollection<IAssemblyModel> addedItems)
@@ -276,7 +249,7 @@ void AppendAssemblyFileToList(string assemblyFile)
276249
{
277250
IAssemblyModel assemblyModel = SafelyCreateAssemblyModelFromFile(assemblyFile);
278251
if (assemblyModel != null) {
279-
MainAssemblyList.Assemblies.Add(assemblyModel);
252+
SD.ClassBrowser.MainAssemblyList.Assemblies.Add(assemblyModel);
280253
}
281254
}
282255

@@ -298,9 +271,10 @@ void ActivateWorkspace(PersistedWorkspace workspace)
298271
/// </summary>
299272
void UpdateActiveWorkspace()
300273
{
301-
if ((MainAssemblyList != null) && (activeWorkspace != null)) {
274+
var mainAssemblyList = SD.ClassBrowser.MainAssemblyList;
275+
if ((mainAssemblyList != null) && (activeWorkspace != null)) {
302276
// Temporarily detach from event handler
303-
MainAssemblyList.Assemblies.CollectionChanged -= AssemblyListCollectionChanged;
277+
mainAssemblyList.Assemblies.CollectionChanged -= AssemblyListCollectionChanged;
304278
}
305279

306280
activeWorkspace = persistedWorkspaces.FirstOrDefault(w => w.IsActive);
@@ -311,16 +285,16 @@ void UpdateActiveWorkspace()
311285
defaultWorkspace.IsActive = true;
312286
}
313287

314-
MainAssemblyList.Assemblies.Clear();
288+
mainAssemblyList.Assemblies.Clear();
315289
if (activeWorkspace != null) {
316290
foreach (string assemblyFile in activeWorkspace.AssemblyFiles) {
317291
AppendAssemblyFileToList(assemblyFile);
318292
}
319293
}
320294

321295
// Attach to event handler, again.
322-
if (MainAssemblyList != null) {
323-
MainAssemblyList.Assemblies.CollectionChanged += AssemblyListCollectionChanged;
296+
if (mainAssemblyList != null) {
297+
mainAssemblyList.Assemblies.CollectionChanged += AssemblyListCollectionChanged;
324298
}
325299
}
326300
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
2+
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
3+
4+
using System;
5+
using System.Collections.Generic;
6+
using ICSharpCode.Core;
7+
8+
namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
9+
{
10+
/// <summary>
11+
/// Description of ClassBrowserServiceImpl.
12+
/// </summary>
13+
[SDService("SD.ClassBrowser")]
14+
class ClassBrowserServiceImpl : IClassBrowser
15+
{
16+
readonly WorkspaceModel workspace = new WorkspaceModel();
17+
18+
public WorkspaceModel CurrentWorkspace {
19+
get { return workspace; }
20+
}
21+
22+
public ICollection<IAssemblyList> AssemblyLists {
23+
get { return workspace.AssemblyLists; }
24+
}
25+
26+
public IAssemblyList MainAssemblyList {
27+
get { return workspace.MainAssemblyList; }
28+
set { workspace.MainAssemblyList = value; }
29+
}
30+
31+
public IAssemblyList UnpinnedAssemblies {
32+
get { return workspace.UnpinnedAssemblies; }
33+
set { workspace.UnpinnedAssemblies = value; }
34+
}
35+
36+
public IAssemblyModel FindAssemblyModel(FileName fileName)
37+
{
38+
return workspace.FindAssemblyModel(fileName);
39+
}
40+
41+
public bool GoToEntity(ICSharpCode.NRefactory.TypeSystem.IEntity entity)
42+
{
43+
var pad = SD.Workbench.GetPad(typeof(ClassBrowserPad));
44+
pad.BringPadToFront();
45+
var content = (ClassBrowserPad)pad.PadContent;
46+
return content.GoToEntity(entity);
47+
}
48+
49+
public bool GotoAssemblyModel(IAssemblyModel assemblyModel)
50+
{
51+
var pad = SD.Workbench.GetPad(typeof(ClassBrowserPad));
52+
pad.BringPadToFront();
53+
var content = (ClassBrowserPad)pad.PadContent;
54+
return content.GotoAssemblyModel(assemblyModel);
55+
}
56+
}
57+
}

src/Main/SharpDevelop/SharpDevelop.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@
108108
</Compile>
109109
<Compile Include="Dom\AssemblyReferenceModel.cs" />
110110
<Compile Include="Dom\ClassBrowser\ClassBrowserPad.cs" />
111+
<Compile Include="Dom\ClassBrowser\ClassBrowserServiceImpl.cs" />
111112
<Compile Include="Dom\ClassBrowser\ClassBrowserTreeNodesFactory.cs" />
112113
<Compile Include="Dom\ClassBrowser\Commands.cs" />
113114
<Compile Include="Dom\ClassBrowser\OpenFromGacDialog.xaml.cs">

0 commit comments

Comments
 (0)