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 @@ -13,6 +13,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
{
public class NamespaceTreeNode : ModelCollectionTreeNode
{
static readonly IComparer<SharpTreeNode> TypeNodeComparer = new TypeDefinitionNodeComparer();
INamespaceModel model;
public NamespaceTreeNode(INamespaceModel model)
@ -29,7 +30,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -29,7 +30,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
protected override IComparer<SharpTreeNode> NodeComparer {
get {
return NodeTextComparer;
return TypeNodeComparer;
}
}
@ -50,6 +51,33 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -50,6 +51,33 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
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 @@ @@ -4,6 +4,7 @@
using System;
using System.Collections.Generic;
using System.Security.Policy;
using System.Text;
using ICSharpCode.Core.Presentation;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.Utils;
@ -39,7 +40,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -39,7 +40,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
public override object Text {
get {
return definition.Name;
return GenerateNodeText();
}
}
@ -84,6 +85,32 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -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>
{
public int Compare(SharpTreeNode x, SharpTreeNode y)

Loading…
Cancel
Save