Browse Source

Support for "Base Types" node in ClassBrowser, but retrieving base types not working right now.

pull/59/merge
Andreas Weizel 12 years ago
parent
commit
ef91a5b13e
  1. 48
      src/Main/Base/Project/Dom/ClassBrowser/BaseTypesTreeNode.cs
  2. 6
      src/Main/Base/Project/Dom/ClassBrowser/TypeDefinitionTreeNode.cs
  3. 1
      src/Main/Base/Project/Dom/ITypeDefinitionModel.cs
  4. 1
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  5. 20
      src/Main/SharpDevelop/Dom/ClassBrowser/ClassBrowserPad.cs
  6. 41
      src/Main/SharpDevelop/Dom/TypeDefinitionModel.cs

48
src/Main/Base/Project/Dom/ClassBrowser/BaseTypesTreeNode.cs

@ -0,0 +1,48 @@ @@ -0,0 +1,48 @@
// 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;
namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
{
/// <summary>
/// Description of BaseTypesTreeNode.
/// </summary>
public class BaseTypesTreeNode : ModelCollectionTreeNode
{
ITypeDefinitionModel definition;
string text;
public BaseTypesTreeNode(ITypeDefinitionModel definition)
{
if (definition == null)
throw new ArgumentNullException("definition");
this.definition = definition;
this.text = SD.ResourceService.GetString("MainWindow.Windows.ClassBrowser.BaseTypes");
}
protected override IModelCollection<object> ModelChildren {
get {
return definition.BaseTypes;
}
}
protected override System.Collections.Generic.IComparer<ICSharpCode.TreeView.SharpTreeNode> NodeComparer {
get {
return NodeTextComparer;
}
}
public override object Text {
get {
return text;
}
}
public override object Icon {
get {
return SD.ResourceService.GetImageSource("Icons.16x16.OpenFolderBitmap");
}
}
}
}

6
src/Main/Base/Project/Dom/ClassBrowser/TypeDefinitionTreeNode.cs

@ -54,6 +54,12 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -54,6 +54,12 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
}
}
protected override void LoadChildren()
{
base.LoadChildren();
Children.Insert(0, new BaseTypesTreeNode(definition));
}
public override void ActivateItem(System.Windows.RoutedEventArgs e)
{
var target = definition.Resolve();

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

@ -17,6 +17,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -17,6 +17,7 @@ namespace ICSharpCode.SharpDevelop.Dom
string Namespace { get; }
TypeKind TypeKind { get; }
IModelCollection<ITypeDefinitionModel> NestedTypes { get; }
IModelCollection<ITypeDefinitionModel> BaseTypes { get; }
IModelCollection<IMemberModel> Members { get; }
IEnumerable<DomRegion> GetPartRegions();

1
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -86,6 +86,7 @@ @@ -86,6 +86,7 @@
<Compile Include="Designer\TypeResolutionService.cs" />
<Compile Include="Dom\ClassBrowser\AssemblyLoadErrorTreeNode.cs" />
<Compile Include="Dom\ClassBrowser\AssemblyTreeNode.cs" />
<Compile Include="Dom\ClassBrowser\BaseTypesTreeNode.cs" />
<Compile Include="Dom\ClassBrowser\ClassBrowserTreeView.cs" />
<Compile Include="Dom\ClassBrowser\IClassBrowser.cs" />
<Compile Include="Dom\ClassBrowser\MemberTreeNode.cs" />

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

@ -149,17 +149,21 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -149,17 +149,21 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
void AssemblyListCollectionChanged(IReadOnlyCollection<IAssemblyModel> removedItems, IReadOnlyCollection<IAssemblyModel> addedItems)
{
foreach (var assembly in addedItems) {
// Add this assembly to current workspace
if (activeWorkspace != null) {
activeWorkspace.AssemblyFiles.Add(assembly.Context.Location);
if (addedItems != null) {
foreach (var assembly in addedItems) {
// Add this assembly to current workspace
if (activeWorkspace != null) {
activeWorkspace.AssemblyFiles.Add(assembly.Context.Location);
}
}
}
foreach (var assembly in removedItems) {
// Add this assembly to current workspace
if (activeWorkspace != null) {
activeWorkspace.AssemblyFiles.Remove(assembly.Context.Location);
if (removedItems != null) {
foreach (var assembly in removedItems) {
// Add this assembly to current workspace
if (activeWorkspace != null) {
activeWorkspace.AssemblyFiles.Remove(assembly.Context.Location);
}
}
}

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

@ -270,6 +270,44 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -270,6 +270,44 @@ namespace ICSharpCode.SharpDevelop.Dom
}
#endregion
#region Base Types collection
NestedTypeDefinitionModelCollection baseTypes;
IList<IUnresolvedTypeDefinition> GetBaseTypes(IUnresolvedTypeDefinition definition)
{
var compilation = context.GetCompilation();
if (compilation != null) {
var typeResolveContext = new SimpleTypeResolveContext(compilation.MainAssembly).WithCurrentTypeDefinition(Resolve());
var baseTypeList = new List<IUnresolvedTypeDefinition>();
foreach (var baseTypeRef in definition.BaseTypes) {
var resolvedTypeDefinition = baseTypeRef.Resolve(typeResolveContext).GetDefinition();
if (resolvedTypeDefinition != null) {
baseTypeList.Add(resolvedTypeDefinition.Parts[0]);
}
}
return baseTypeList;
}
return null;
}
public IModelCollection<ITypeDefinitionModel> BaseTypes {
get {
if (baseTypes == null) {
baseTypes = new NestedTypeDefinitionModelCollection(context);
foreach (var part in parts) {
var baseTypeList = GetBaseTypes(part);
if (baseTypeList != null) {
baseTypes.Update(null, baseTypeList);
}
}
}
return baseTypes;
}
}
#endregion
#region Update
/// <summary>
/// Updates this type definition model by replacing oldPart with newPart.
@ -311,6 +349,9 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -311,6 +349,9 @@ namespace ICSharpCode.SharpDevelop.Dom
if (nestedTypes != null) {
nestedTypes.Update(oldPart != null ? oldPart.NestedTypes : null, newPart != null ? newPart.NestedTypes : null);
}
if (baseTypes != null) {
baseTypes.Update(oldPart != null ? GetBaseTypes(oldPart) : null, newPart != null ? GetBaseTypes(newPart) : null);
}
}
#endregion

Loading…
Cancel
Save