Browse Source

clean up ClassBrowserWorkspace logic and implement assembly model for loaded assemblies;

pull/48/head
Siegfried Pammer 12 years ago
parent
commit
9e5416c8ad
  1. 5
      src/Main/Base/Project/Dom/ClassBrowser/ClassBrowserTreeView.cs
  2. 37
      src/Main/Base/Project/Dom/ClassBrowser/ClassBrowserWorkspace.cs
  3. 10
      src/Main/Base/Project/Dom/ClassBrowser/WorkspaceTreeNode.cs
  4. 7
      src/Main/Base/Project/Dom/IAssemblyModel.cs
  5. 6
      src/Main/Base/Project/Dom/IEntityModel.cs
  6. 49
      src/Main/Base/Project/Dom/IEntityModelContext.cs
  7. 6
      src/Main/Base/Project/Dom/IMemberModel.cs
  8. 2
      src/Main/Base/Project/Dom/INamespaceModel.cs
  9. 6
      src/Main/Base/Project/Dom/ITypeDefinitionModel.cs
  10. 6
      src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
  11. 1
      src/Main/Base/Project/Src/Project/CompilableProject.cs
  12. 4
      src/Main/Base/Project/Util/SharpDevelopExtensions.cs
  13. 20
      src/Main/SharpDevelop/Dom/AssemblyModel.cs
  14. 8
      src/Main/SharpDevelop/Dom/ClassBrowser/ClassBrowserPad.cs
  15. 44
      src/Main/SharpDevelop/Dom/ClassBrowser/ClassBrowserTreeNodesFactory.cs
  16. 18
      src/Main/SharpDevelop/Dom/ClassBrowser/OpenAssemblyCommand.cs
  17. 9
      src/Main/SharpDevelop/Dom/MemberModel.cs
  18. 2
      src/Main/SharpDevelop/Dom/ModelFactory.cs
  19. 10
      src/Main/SharpDevelop/Dom/NamespaceModel.cs
  20. 9
      src/Main/SharpDevelop/Dom/TypeDefinitionModel.cs
  21. 5
      src/Main/SharpDevelop/SharpDevelop.csproj

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

@ -16,11 +16,6 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
{ {
ClassBrowserWorkspace currentWorkspace; ClassBrowserWorkspace currentWorkspace;
public ClassBrowserTreeView()
{
Workspace = ClassBrowserSettings.LoadDefaultWorkspace();
}
public ClassBrowserWorkspace Workspace { public ClassBrowserWorkspace Workspace {
get { return currentWorkspace; } get { return currentWorkspace; }
set { set {

37
src/Main/Base/Project/Dom/ClassBrowser/ClassBrowserWorkspace.cs

@ -18,19 +18,19 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
public class ClassBrowserWorkspace public class ClassBrowserWorkspace
{ {
ISolution assignedSolution; ISolution assignedSolution;
IModelCollection<IUnresolvedAssembly> loadedAssemblies; IModelCollection<IAssemblyModel> loadedAssemblies;
string workspaceName; string workspaceName;
public ClassBrowserWorkspace(ISolution assignedSolution, IEnumerable<IUnresolvedAssembly> assemblies = null) public ClassBrowserWorkspace(ISolution assignedSolution, IEnumerable<IAssemblyModel> assemblies = null)
: this(assignedSolution.FileName, assemblies) : this(assignedSolution.FileName, assemblies)
{ {
this.assignedSolution = assignedSolution; this.assignedSolution = assignedSolution;
} }
public ClassBrowserWorkspace(string workspaceName, IEnumerable<IUnresolvedAssembly> assemblies = null) public ClassBrowserWorkspace(string workspaceName, IEnumerable<IAssemblyModel> assemblies = null)
{ {
this.workspaceName = workspaceName; this.workspaceName = workspaceName;
this.loadedAssemblies = new SimpleModelCollection<IUnresolvedAssembly>(assemblies ?? EmptyList<IUnresolvedAssembly>.Instance); this.loadedAssemblies = new SimpleModelCollection<IAssemblyModel>(assemblies ?? EmptyList<IAssemblyModel>.Instance);
} }
public bool IsAssigned { public bool IsAssigned {
@ -45,38 +45,49 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
get { return workspaceName; } get { return workspaceName; }
} }
public IModelCollection<IUnresolvedAssembly> LoadedAssemblies { public IModelCollection<IAssemblyModel> LoadedAssemblies {
get { return loadedAssemblies; } get { return loadedAssemblies; }
} }
} }
public static class ClassBrowserSettings public class ClassBrowserSettings
{ {
static IUnresolvedAssembly[] LoadAssemblyList(string name) IAssemblyReference[] ResolveReferences(IUnresolvedAssembly asm)
{
return new IAssemblyReference[0];
}
IAssemblyModel[] LoadAssemblyList(string name)
{ {
var assemblyNames = Container.GetList<string>("AssemblyList." + name); var assemblyNames = Container.GetList<string>("AssemblyList." + name);
CecilLoader loader = new CecilLoader(); CecilLoader loader = new CecilLoader();
return assemblyNames.Select(loader.LoadAssemblyFile).ToArray(); var factory = SD.GetRequiredService<IModelFactory>();
return assemblyNames
.Select(loader.LoadAssemblyFile)
.Select(asm => new AssemblyEntityModelContext(asm, ResolveReferences(asm)))
.Select(factory.CreateAssemblyModel)
.ToArray();
} }
static readonly Properties Container = SD.PropertyService.NestedProperties(typeof(ClassBrowserSettings).FullName); readonly Properties Container = SD.PropertyService.NestedProperties(typeof(ClassBrowserSettings).FullName);
public static ClassBrowserWorkspace LoadDefaultWorkspace() public ClassBrowserWorkspace LoadDefaultWorkspace()
{ {
return LoadWorkspace("<default>"); return LoadWorkspace("<default>");
} }
public static ClassBrowserWorkspace LoadWorkspace(string name) public ClassBrowserWorkspace LoadWorkspace(string name)
{ {
return new ClassBrowserWorkspace(name, LoadAssemblyList(name)); return new ClassBrowserWorkspace(name, LoadAssemblyList(name));
} }
public static ClassBrowserWorkspace LoadForSolution(ISolution solution) public ClassBrowserWorkspace LoadForSolution(ISolution solution)
{ {
// maybe use solution.Preferences?
return new ClassBrowserWorkspace(solution, LoadAssemblyList(solution.FileName)); return new ClassBrowserWorkspace(solution, LoadAssemblyList(solution.FileName));
} }
public static void SaveWorkspace(ClassBrowserWorkspace workspace) public void SaveWorkspace(ClassBrowserWorkspace workspace)
{ {
} }

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

@ -3,11 +3,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Windows.Media;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.Utils;
using ICSharpCode.TreeView; using ICSharpCode.TreeView;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
{ {
@ -44,6 +40,12 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
} }
} }
public override object Icon {
get {
return SD.ResourceService.GetImageSource("PadIcons.ClassBrowser");
}
}
protected override bool IsSpecialNode() protected override bool IsSpecialNode()
{ {
return true; return true;

7
src/Main/Base/Project/Dom/IAssemblyModel.cs

@ -53,9 +53,14 @@ namespace ICSharpCode.SharpDevelop.Dom
/// </summary> /// </summary>
/// <remarks> /// <remarks>
/// <paramref name="oldFile"/> is null if the file is newly added to the assemly. /// <paramref name="oldFile"/> is null if the file is newly added to the assemly.
/// <paramref name="newFile"/> is null if the file is removed from the assembly. /// <paramref name="newFile"/> is null if the file is removed from the assembly.
/// </remarks> /// </remarks>
void Update(IUnresolvedFile oldFile, IUnresolvedFile newFile); void Update(IUnresolvedFile oldFile, IUnresolvedFile newFile);
/// <summary>
/// Gets the assembly name (short name).
/// </summary>
new string AssemblyName { get; set; }
} }
public sealed class EmptyAssemblyModel : IAssemblyModel public sealed class EmptyAssemblyModel : IAssemblyModel

6
src/Main/Base/Project/Dom/IEntityModel.cs

@ -44,15 +44,15 @@ namespace ICSharpCode.SharpDevelop.Dom
bool IsShadowing { get; } bool IsShadowing { get; }
/// <summary> /// <summary>
/// Resolves the entity in the current solution snapshot. /// Resolves the entity in the current compilation.
/// Returns null if the entity could not be resolved. /// Returns null if the entity could not be resolved.
/// </summary> /// </summary>
IEntity Resolve(); IEntity Resolve();
/// <summary> /// <summary>
/// Resolves the entity in the specified solution snapshot. /// Resolves the entity in the specified compilation.
/// Returns null if the entity could not be resolved. /// Returns null if the entity could not be resolved.
/// </summary> /// </summary>
IEntity Resolve(ISolutionSnapshotWithProjectMapping solutionSnapshot); IEntity Resolve(ICompilation compilation);
} }
} }

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

@ -3,6 +3,7 @@
using System; using System;
using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.TypeSystem.Implementation;
using ICSharpCode.SharpDevelop.Parser; using ICSharpCode.SharpDevelop.Parser;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Refactoring; using ICSharpCode.SharpDevelop.Refactoring;
@ -27,7 +28,7 @@ namespace ICSharpCode.SharpDevelop.Dom
/// The solution snapshot provided to <see cref="IEntityModel.Resolve(ISolutionSnapshotWithProjectMapping)"/>, /// The solution snapshot provided to <see cref="IEntityModel.Resolve(ISolutionSnapshotWithProjectMapping)"/>,
/// or null if the <see cref="IEntityModel.Resolve()"/> overload was used. /// or null if the <see cref="IEntityModel.Resolve()"/> overload was used.
/// </param> /// </param>
ICompilation GetCompilation(ISolutionSnapshotWithProjectMapping solutionSnapshot); ICompilation GetCompilation();
/// <summary> /// <summary>
/// Returns true if part1 is considered a better candidate for the primary part than part2. /// Returns true if part1 is considered a better candidate for the primary part than part2.
@ -48,16 +49,17 @@ namespace ICSharpCode.SharpDevelop.Dom
this.primaryCodeFileExtension = primaryCodeFileExtension; this.primaryCodeFileExtension = primaryCodeFileExtension;
} }
public string AssemblyName {
get { return project.AssemblyName; }
}
public IProject Project { public IProject Project {
get { return project; } get { return project; }
} }
public ICompilation GetCompilation(ISolutionSnapshotWithProjectMapping solutionSnapshot) public ICompilation GetCompilation()
{ {
if (solutionSnapshot != null) return SD.ParserService.GetCompilation(project);
return solutionSnapshot.GetCompilation(project);
else
return SD.ParserService.GetCompilation(project);
} }
public bool IsBetterPart(IUnresolvedTypeDefinition part1, IUnresolvedTypeDefinition part2) public bool IsBetterPart(IUnresolvedTypeDefinition part1, IUnresolvedTypeDefinition part2)
@ -66,6 +68,41 @@ namespace ICSharpCode.SharpDevelop.Dom
} }
} }
public class AssemblyEntityModelContext : IEntityModelContext
{
ICompilation compilation;
IUnresolvedAssembly mainAssembly;
IAssemblyReference[] references;
public AssemblyEntityModelContext(IUnresolvedAssembly mainAssembly, params IAssemblyReference[] references)
{
if (mainAssembly == null)
throw new ArgumentNullException("mainAssembly");
this.mainAssembly = mainAssembly;
this.references = references;
// implement lazy init + weak caching
this.compilation = new SimpleCompilation(mainAssembly, references);
}
public string AssemblyName {
get { return mainAssembly.AssemblyName; }
}
public ICompilation GetCompilation()
{
return compilation;
}
public bool IsBetterPart(IUnresolvedTypeDefinition part1, IUnresolvedTypeDefinition part2)
{
return false;
}
public IProject Project {
get { return null; }
}
}
public static class EntityModelContextUtils public static class EntityModelContextUtils
{ {
public static bool IsBetterPart(IUnresolvedTypeDefinition part1, IUnresolvedTypeDefinition part2, string codeFileExtension) public static bool IsBetterPart(IUnresolvedTypeDefinition part1, IUnresolvedTypeDefinition part2, string codeFileExtension)

6
src/Main/Base/Project/Dom/IMemberModel.cs

@ -13,16 +13,16 @@ namespace ICSharpCode.SharpDevelop.Dom
public interface IMemberModel : IEntityModel public interface IMemberModel : IEntityModel
{ {
/// <summary> /// <summary>
/// Resolves the member in the current solution snapshot. /// Resolves the member in the current compilation.
/// Returns null if the member could not be resolved. /// Returns null if the member could not be resolved.
/// </summary> /// </summary>
new IMember Resolve(); new IMember Resolve();
/// <summary> /// <summary>
/// Resolves the member in the specified solution snapshot. /// Resolves the member in the specified compilation.
/// Returns null if the member could not be resolved. /// Returns null if the member could not be resolved.
/// </summary> /// </summary>
new IMember Resolve(ISolutionSnapshotWithProjectMapping solutionSnapshot); new IMember Resolve(ICompilation compilation);
/// <summary> /// <summary>
/// Gets if the member is virtual. Is true only if the "virtual" modifier was used, but non-virtual /// Gets if the member is virtual. Is true only if the "virtual" modifier was used, but non-virtual

2
src/Main/Base/Project/Dom/INamespaceModel.cs

@ -49,7 +49,7 @@ namespace ICSharpCode.SharpDevelop.Dom
{ {
} }
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged { add {} remove {} }
public string FullName { public string FullName {
get { return string.Empty; } get { return string.Empty; }

6
src/Main/Base/Project/Dom/ITypeDefinitionModel.cs

@ -22,16 +22,16 @@ namespace ICSharpCode.SharpDevelop.Dom
IEnumerable<DomRegion> GetPartRegions(); IEnumerable<DomRegion> GetPartRegions();
/// <summary> /// <summary>
/// Resolves the type definition in the current solution snapshot. /// Resolves the type definition in the current compilation.
/// Returns null if the type definition could not be resolved. /// Returns null if the type definition could not be resolved.
/// </summary> /// </summary>
new ITypeDefinition Resolve(); new ITypeDefinition Resolve();
/// <summary> /// <summary>
/// Resolves the type definition in the specified solution snapshot. /// Resolves the type definition in the specified compilation.
/// Returns null if the type definition could not be resolved. /// Returns null if the type definition could not be resolved.
/// </summary> /// </summary>
new ITypeDefinition Resolve(ISolutionSnapshotWithProjectMapping solutionSnapshot); new ITypeDefinition Resolve(ICompilation compilation);
/// <summary> /// <summary>
/// Retrieves the nested type with the specified name and additional type parameter count /// Retrieves the nested type with the specified name and additional type parameter count

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

@ -919,6 +919,10 @@
class = "ICSharpCode.SharpDevelop.Gui.ClassBrowser.ClassBrowserNavigateForward"/> class = "ICSharpCode.SharpDevelop.Gui.ClassBrowser.ClassBrowserNavigateForward"/>
<ToolbarItem id = "NavigationSeparator" type = "Separator"/> <ToolbarItem id = "NavigationSeparator" type = "Separator"/>
<ToolbarItem id = "OpenAssembly"
icon = "Icons.16x16.OpenProjectIcon"
tooltip = "${res:MainWindow.Windows.ClassBrowser.OpenAssembly.ToolTip}"
class = "ICSharpCode.SharpDevelop.Dom.ClassBrowser.OpenAssemblyCommand"/>
<ToolbarItem id = "SelectFilter" <ToolbarItem id = "SelectFilter"
type = "DropDownButton" type = "DropDownButton"
icon = "Icons.16x16.FindInFiles" icon = "Icons.16x16.FindInFiles"
@ -2275,7 +2279,7 @@
</Path> </Path>
<Path name="/SharpDevelop/TreeNodeFactories"> <Path name="/SharpDevelop/TreeNodeFactories">
<Class id="WorkspaceTreeNodesFactory" class="ICSharpCode.SharpDevelop.Dom.ClassBrowser.WorkspaceTreeNodesFactory" /> <Class id="ClassBrowserTreeNodesFactory" class="ICSharpCode.SharpDevelop.Dom.ClassBrowser.ClassBrowserTreeNodesFactory" />
</Path> </Path>
<Path name = "/SharpDevelop/Views/ClassBrowser/ClassNodeBuilders"> <Path name = "/SharpDevelop/Views/ClassBrowser/ClassNodeBuilders">

1
src/Main/Base/Project/Src/Project/CompilableProject.cs

@ -358,6 +358,7 @@ namespace ICSharpCode.SharpDevelop.Project
assemblyModel = SD.GetRequiredService<IModelFactory>().CreateAssemblyModel(new ProjectEntityModelContext(this, ".cs")); assemblyModel = SD.GetRequiredService<IModelFactory>().CreateAssemblyModel(new ProjectEntityModelContext(this, ".cs"));
var pc = ProjectContent; var pc = ProjectContent;
if (pc != null && assemblyModel is IUpdateableAssemblyModel) { if (pc != null && assemblyModel is IUpdateableAssemblyModel) {
((IUpdateableAssemblyModel)assemblyModel).AssemblyName = AssemblyName;
// Add the already loaded files into the model // Add the already loaded files into the model
foreach (var file in pc.Files) { foreach (var file in pc.Files) {
((IUpdateableAssemblyModel)assemblyModel).Update(null, file); ((IUpdateableAssemblyModel)assemblyModel).Update(null, file);

4
src/Main/Base/Project/Util/SharpDevelopExtensions.cs

@ -537,7 +537,7 @@ namespace ICSharpCode.SharpDevelop
foreach (var memberModel in typeModel.Members) { foreach (var memberModel in typeModel.Members) {
if (memberModel.Name == member.Name) { if (memberModel.Name == member.Name) {
if (memberModel.Resolve(snapshot) == member.MemberDefinition) { if (memberModel.Resolve() == member.MemberDefinition) {
return memberModel; return memberModel;
} }
} }
@ -580,7 +580,7 @@ namespace ICSharpCode.SharpDevelop
foreach (var memberModel in typeModel.Members) { foreach (var memberModel in typeModel.Members) {
if (memberModel.Name == unresolvedMember.Name) { if (memberModel.Name == unresolvedMember.Name) {
if (memberModel.Resolve(snapshot) == member.MemberDefinition) { if (memberModel.Resolve() == member.MemberDefinition) {
return memberModel; return memberModel;
} }
} }

20
src/Main/SharpDevelop/Dom/ProjectAssemblyModel.cs → src/Main/SharpDevelop/Dom/AssemblyModel.cs

@ -11,29 +11,25 @@ using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Dom namespace ICSharpCode.SharpDevelop.Dom
{ {
sealed class ProjectAssemblyModel : IUpdateableAssemblyModel sealed class AssemblyModel : IUpdateableAssemblyModel
{ {
IEntityModelContext context; IEntityModelContext context;
TopLevelTypeDefinitionModelCollection typeDeclarations; TopLevelTypeDefinitionModelCollection typeDeclarations;
KeyedModelCollection<string, NamespaceModel> namespaces; KeyedModelCollection<string, NamespaceModel> namespaces;
NamespaceModel rootNamespace; NamespaceModel rootNamespace;
public ProjectAssemblyModel(IEntityModelContext context) public AssemblyModel(IEntityModelContext context)
{ {
if (context == null) if (context == null)
throw new ArgumentNullException("context"); throw new ArgumentNullException("context");
this.context = context; this.context = context;
this.rootNamespace = new NamespaceModel(context, null, ""); this.rootNamespace = new NamespaceModel(context.Project, null, "");
this.typeDeclarations = new TopLevelTypeDefinitionModelCollection(context); this.typeDeclarations = new TopLevelTypeDefinitionModelCollection(context);
this.typeDeclarations.CollectionChanged += TypeDeclarationsCollectionChanged; this.typeDeclarations.CollectionChanged += TypeDeclarationsCollectionChanged;
this.namespaces = new KeyedModelCollection<string, NamespaceModel>(value => value.FullName); this.namespaces = new KeyedModelCollection<string, NamespaceModel>(value => value.FullName);
} }
public string AssemblyName { public string AssemblyName { get; set; }
get {
return context.Project.AssemblyName;
}
}
public ITypeDefinitionModelCollection TopLevelTypeDefinitions { public ITypeDefinitionModelCollection TopLevelTypeDefinitions {
get { get {
@ -76,7 +72,7 @@ namespace ICSharpCode.SharpDevelop.Dom
level++; level++;
} }
while (level < parts.Length) { while (level < parts.Length) {
var child = new NamespaceModel(context, ns, parts[level]); var child = new NamespaceModel(context.Project, ns, parts[level]);
batchList.AddIfNotNull(ns.ChildNamespaces.BatchUpdate()); batchList.AddIfNotNull(ns.ChildNamespaces.BatchUpdate());
ns.ChildNamespaces.Add(child); ns.ChildNamespaces.Add(child);
ns = child; ns = child;
@ -114,7 +110,5 @@ namespace ICSharpCode.SharpDevelop.Dom
d.Dispose(); d.Dispose();
} }
} }
} }
} }

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

@ -11,10 +11,11 @@ using ICSharpCode.SharpDevelop.Workbench;
namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
{ {
public class ClassBrowserPad : AbstractPadContent class ClassBrowserPad : AbstractPadContent
{ {
IProjectService projectService; IProjectService projectService;
ClassBrowserTreeView treeView; ClassBrowserTreeView treeView;
ClassBrowserSettings settings;
DockPanel panel; DockPanel panel;
ToolBar toolBar; ToolBar toolBar;
@ -26,6 +27,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
public ClassBrowserPad(IProjectService projectService) public ClassBrowserPad(IProjectService projectService)
{ {
this.projectService = projectService; this.projectService = projectService;
this.settings = new ClassBrowserSettings();
panel = new DockPanel(); panel = new DockPanel();
treeView = new ClassBrowserTreeView(); // treeView must be created first because it's used by CreateToolBar treeView = new ClassBrowserTreeView(); // treeView must be created first because it's used by CreateToolBar
@ -59,9 +61,9 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
void ProjectServiceCurrentSolutionChanged(object sender, EventArgs e) void ProjectServiceCurrentSolutionChanged(object sender, EventArgs e)
{ {
if (projectService.CurrentSolution == null) { if (projectService.CurrentSolution == null) {
treeView.Workspace = ClassBrowserSettings.LoadDefaultWorkspace(); treeView.Workspace = settings.LoadDefaultWorkspace();
} else { } else {
treeView.Workspace = ClassBrowserSettings.LoadForSolution(projectService.CurrentSolution); treeView.Workspace = settings.LoadForSolution(projectService.CurrentSolution);
} }
} }

44
src/Main/SharpDevelop/Dom/ClassBrowser/ClassBrowserTreeNodesFactory.cs

@ -0,0 +1,44 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.TreeView;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
{
class ClassBrowserTreeNodesFactory : ITreeNodeFactory
{
public Type GetSupportedType(object model)
{
if (model is ISolution)
return typeof(ISolution);
if (model is IProject)
return typeof(IProject);
if (model is INamespaceModel)
return typeof(INamespaceModel);
if (model is ITypeDefinitionModel)
return typeof(ITypeDefinitionModel);
if (model is IMemberModel)
return typeof(IMemberModel);
return null;
}
public SharpTreeNode CreateTreeNode(object model)
{
if (model is ISolution)
return new SolutionTreeNode((ISolution)model);
if (model is IProject)
return new ProjectTreeNode((IProject)model);
if (model is INamespaceModel)
return new NamespaceTreeNode((INamespaceModel)model);
if (model is ITypeDefinitionModel)
return new TypeDefinitionTreeNode((ITypeDefinitionModel)model);
if (model is IMemberModel)
return new MemberTreeNode((IMemberModel)model);
return null;
}
}
}

18
src/Main/SharpDevelop/Dom/ClassBrowser/OpenAssemblyCommand.cs

@ -0,0 +1,18 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using Microsoft.Win32;
namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
{
/// <summary>
/// Description of OpenAssemblyCommand.
/// </summary>
class OpenAssemblyCommand : SimpleCommand
{
public override void Execute(object parameter)
{
}
}
}

9
src/Main/SharpDevelop/Dom/MemberModel.cs

@ -77,13 +77,12 @@ namespace ICSharpCode.SharpDevelop.Dom
#region Resolve #region Resolve
public IMember Resolve() public IMember Resolve()
{ {
var compilation = context.GetCompilation(null); var compilation = context.GetCompilation();
return member.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly)); return member.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly));
} }
public IMember Resolve(ISolutionSnapshotWithProjectMapping solutionSnapshot) public IMember Resolve(ICompilation compilation)
{ {
var compilation = context.GetCompilation(solutionSnapshot);
return member.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly)); return member.Resolve(new SimpleTypeResolveContext(compilation.MainAssembly));
} }
@ -92,9 +91,9 @@ namespace ICSharpCode.SharpDevelop.Dom
return Resolve(); return Resolve();
} }
IEntity IEntityModel.Resolve(ISolutionSnapshotWithProjectMapping solutionSnapshot) IEntity IEntityModel.Resolve(ICompilation compilation)
{ {
return Resolve(solutionSnapshot); return Resolve(compilation);
} }
#endregion #endregion

2
src/Main/SharpDevelop/Dom/ModelFactory.cs

@ -10,7 +10,7 @@ namespace ICSharpCode.SharpDevelop.Dom
{ {
public IAssemblyModel CreateAssemblyModel(IEntityModelContext context) public IAssemblyModel CreateAssemblyModel(IEntityModelContext context)
{ {
return new ProjectAssemblyModel(context); return new AssemblyModel(context);
} }
public ITypeDefinitionModel CreateTypeDefinitionModel(IEntityModelContext context, params IUnresolvedTypeDefinition[] parts) public ITypeDefinitionModel CreateTypeDefinitionModel(IEntityModelContext context, params IUnresolvedTypeDefinition[] parts)

10
src/Main/SharpDevelop/Dom/NamespaceModel.cs

@ -11,17 +11,15 @@ namespace ICSharpCode.SharpDevelop.Dom
{ {
sealed class NamespaceModel : INamespaceModel sealed class NamespaceModel : INamespaceModel
{ {
IEntityModelContext context; IProject parentProject;
string name; string name;
NamespaceModel parent; NamespaceModel parent;
NullSafeSimpleModelCollection<NamespaceModel> childNamespaces; NullSafeSimpleModelCollection<NamespaceModel> childNamespaces;
NullSafeSimpleModelCollection<ITypeDefinitionModel> typeDefinitions; NullSafeSimpleModelCollection<ITypeDefinitionModel> typeDefinitions;
public NamespaceModel(IEntityModelContext context, NamespaceModel parent, string name) public NamespaceModel(IProject parentProject, NamespaceModel parent, string name)
{ {
if (context == null) this.parentProject = parentProject;
throw new ArgumentNullException("context");
this.context = context;
this.parent = parent; this.parent = parent;
this.name = name; this.name = name;
this.typeDefinitions = new NullSafeSimpleModelCollection<ITypeDefinitionModel>(); this.typeDefinitions = new NullSafeSimpleModelCollection<ITypeDefinitionModel>();
@ -67,7 +65,7 @@ namespace ICSharpCode.SharpDevelop.Dom
} }
public IProject ParentProject { public IProject ParentProject {
get { return context.Project; } get { return parentProject; }
} }
public DomRegion Region { public DomRegion Region {

9
src/Main/SharpDevelop/Dom/TypeDefinitionModel.cs

@ -79,13 +79,12 @@ namespace ICSharpCode.SharpDevelop.Dom
#region Resolve #region Resolve
public ITypeDefinition Resolve() public ITypeDefinition Resolve()
{ {
var compilation = context.GetCompilation(null); var compilation = context.GetCompilation();
return compilation.MainAssembly.GetTypeDefinition(fullTypeName); return compilation.MainAssembly.GetTypeDefinition(fullTypeName);
} }
public ITypeDefinition Resolve(ISolutionSnapshotWithProjectMapping solutionSnapshot) public ITypeDefinition Resolve(ICompilation compilation)
{ {
var compilation = context.GetCompilation(solutionSnapshot);
return compilation.MainAssembly.GetTypeDefinition(fullTypeName); return compilation.MainAssembly.GetTypeDefinition(fullTypeName);
} }
@ -94,9 +93,9 @@ namespace ICSharpCode.SharpDevelop.Dom
return Resolve(); return Resolve();
} }
IEntity IEntityModel.Resolve(ISolutionSnapshotWithProjectMapping solutionSnapshot) IEntity IEntityModel.Resolve(ICompilation compilation)
{ {
return Resolve(solutionSnapshot); return Resolve(compilation);
} }
#endregion #endregion

5
src/Main/SharpDevelop/SharpDevelop.csproj

@ -107,12 +107,13 @@
<Link>Project\Build\MSBuildEngine\ExtendedBinaryReader.cs</Link> <Link>Project\Build\MSBuildEngine\ExtendedBinaryReader.cs</Link>
</Compile> </Compile>
<Compile Include="Dom\ClassBrowser\ClassBrowserPad.cs" /> <Compile Include="Dom\ClassBrowser\ClassBrowserPad.cs" />
<Compile Include="Dom\ClassBrowser\WorkspaceTreeNodesFactory.cs" /> <Compile Include="Dom\ClassBrowser\ClassBrowserTreeNodesFactory.cs" />
<Compile Include="Dom\ClassBrowser\OpenAssemblyCommand.cs" />
<Compile Include="Dom\ModelFactory.cs" /> <Compile Include="Dom\ModelFactory.cs" />
<Compile Include="Dom\MemberModel.cs" /> <Compile Include="Dom\MemberModel.cs" />
<Compile Include="Dom\NamespaceModel.cs" /> <Compile Include="Dom\NamespaceModel.cs" />
<Compile Include="Dom\NestedTypeDefinitionModelCollection.cs" /> <Compile Include="Dom\NestedTypeDefinitionModelCollection.cs" />
<Compile Include="Dom\ProjectAssemblyModel.cs" /> <Compile Include="Dom\AssemblyModel.cs" />
<Compile Include="Dom\TopLevelTypeDefinitionModelCollection.cs" /> <Compile Include="Dom\TopLevelTypeDefinitionModelCollection.cs" />
<Compile Include="Dom\TreeNodeFactoryService.cs" /> <Compile Include="Dom\TreeNodeFactoryService.cs" />
<Compile Include="Dom\TypeDefinitionModel.cs" /> <Compile Include="Dom\TypeDefinitionModel.cs" />

Loading…
Cancel
Save