Browse Source

Showing type parameters in ClassBrowser (currently only C# syntax as "Type<T>")

pull/80/head
Andreas Weizel 13 years ago
parent
commit
5e60392ca8
  1. 30
      src/Main/Base/Project/Dom/ClassBrowser/NamespaceTreeNode.cs
  2. 29
      src/Main/Base/Project/Dom/ClassBrowser/TypeDefinitionTreeNode.cs

30
src/Main/Base/Project/Dom/ClassBrowser/NamespaceTreeNode.cs

@ -13,6 +13,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
{ {
public class NamespaceTreeNode : ModelCollectionTreeNode public class NamespaceTreeNode : ModelCollectionTreeNode
{ {
static readonly IComparer<SharpTreeNode> TypeNodeComparer = new TypeDefinitionNodeComparer();
INamespaceModel model; INamespaceModel model;
public NamespaceTreeNode(INamespaceModel model) public NamespaceTreeNode(INamespaceModel model)
@ -29,7 +30,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
protected override IComparer<SharpTreeNode> NodeComparer { protected override IComparer<SharpTreeNode> NodeComparer {
get { get {
return NodeTextComparer; return TypeNodeComparer;
} }
} }
@ -50,6 +51,33 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
return model.FullName; return model.FullName;
} }
} }
class TypeDefinitionNodeComparer : IComparer<SharpTreeNode>
{
public int Compare(SharpTreeNode x, SharpTreeNode y)
{
var a = x.Model as ITypeDefinitionModel;
var b = y.Model as ITypeDefinitionModel;
if (a == null && b == null)
return NodeTextComparer.Compare(x, y);
if (a == null)
return -1;
if (b == null)
return 1;
int typeNameComparison = StringComparer.OrdinalIgnoreCase.Compare(a.Name, b.Name);
if (typeNameComparison == 0) {
// Compare length of complete string (type parameters...)
if (x.Text.ToString().Length < y.Text.ToString().Length)
return -1;
if (x.Text.ToString().Length < y.Text.ToString().Length)
return 1;
}
return typeNameComparison;
}
}
} }
} }

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

@ -4,6 +4,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Security.Policy; using System.Security.Policy;
using System.Text;
using ICSharpCode.Core.Presentation; using ICSharpCode.Core.Presentation;
using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.Utils; using ICSharpCode.NRefactory.Utils;
@ -39,7 +40,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
public override object Text { public override object Text {
get { get {
return definition.Name; return GenerateNodeText();
} }
} }
@ -84,6 +85,32 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
} }
} }
string GenerateNodeText()
{
var target = definition.Resolve();
if (target != null) {
return GetTypeName(target);
}
return definition.Name;
}
string GetTypeName(IType type)
{
StringBuilder typeName = new StringBuilder(type.Name);
if (type.TypeParameterCount > 0) {
typeName.Append("<");
bool isFirst = true;
foreach (var typeParameter in type.TypeArguments) {
if (!isFirst)
typeName.Append(",");
typeName.Append(GetTypeName(typeParameter));
isFirst = false;
}
typeName.Append(">");
}
return typeName.ToString();
}
class TypeDefinitionMemberNodeComparer : IComparer<SharpTreeNode> class TypeDefinitionMemberNodeComparer : IComparer<SharpTreeNode>
{ {
public int Compare(SharpTreeNode x, SharpTreeNode y) public int Compare(SharpTreeNode x, SharpTreeNode y)

Loading…
Cancel
Save