Browse Source

Improved performance of BaseTypesTreeNode, which was massively slowing down the ClassBrowser.

pull/80/head
Andreas Weizel 12 years ago
parent
commit
bca158814d
  1. 12
      src/Main/Base/Project/Dom/ClassBrowser/BaseTypesTreeNode.cs
  2. 20
      src/Main/Base/Project/Dom/ClassBrowser/DerivedTypesTreeNode.cs

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

@ -18,6 +18,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -18,6 +18,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
{
ITypeDefinitionModel definition;
string text;
bool childrenLoaded;
SimpleModelCollection<ITypeDefinitionModel> baseTypes;
public BaseTypesTreeNode(ITypeDefinitionModel definition)
@ -28,11 +29,15 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -28,11 +29,15 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
this.definition.Updated += (sender, e) => UpdateBaseTypes();
this.text = SD.ResourceService.GetString("MainWindow.Windows.ClassBrowser.BaseTypes");
baseTypes = new SimpleModelCollection<ITypeDefinitionModel>();
UpdateBaseTypes();
childrenLoaded = false;
}
protected override IModelCollection<object> ModelChildren {
get {
if (!childrenLoaded) {
UpdateBaseTypes();
childrenLoaded = true;
}
return baseTypes;
}
}
@ -45,7 +50,8 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -45,7 +50,8 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
public bool HasBaseTypes()
{
return baseTypes.Count > 0;
ITypeDefinition currentTypeDef = definition.Resolve();
return (currentTypeDef != null) && currentTypeDef.DirectBaseTypes.Any();
}
void UpdateBaseTypes()
@ -55,7 +61,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -55,7 +61,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
if (currentTypeDef != null) {
foreach (var baseType in currentTypeDef.DirectBaseTypes) {
ITypeDefinition baseTypeDef = baseType.GetDefinition();
if ((baseTypeDef != null) && (baseTypeDef.FullName != "System.Object")) {
if ((baseTypeDef != null)) {
ITypeDefinitionModel baseTypeModel = GetTypeDefinitionModel(currentTypeDef, baseTypeDef);
if (baseTypeModel != null)
baseTypes.Add(baseTypeModel);

20
src/Main/Base/Project/Dom/ClassBrowser/DerivedTypesTreeNode.cs

@ -20,6 +20,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -20,6 +20,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
{
ITypeDefinitionModel definition;
string text;
bool childrenLoaded;
SimpleModelCollection<ITypeDefinitionModel> derivedTypes;
public DerivedTypesTreeNode(ITypeDefinitionModel definition)
@ -30,11 +31,15 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -30,11 +31,15 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
this.definition.Updated += (sender, e) => UpdateDerivedTypes();
this.text = SD.ResourceService.GetString("MainWindow.Windows.ClassBrowser.DerivedTypes");
derivedTypes = new SimpleModelCollection<ITypeDefinitionModel>();
UpdateDerivedTypes();
childrenLoaded = false;
}
protected override IModelCollection<object> ModelChildren {
get {
if (!childrenLoaded) {
UpdateDerivedTypes();
childrenLoaded = true;
}
return derivedTypes;
}
}
@ -47,7 +52,9 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -47,7 +52,9 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
public bool HasDerivedTypes()
{
return derivedTypes.Count > 0;
ITypeDefinition currentTypeDef = definition.Resolve();
// TODO Searching for derived types every time just to get children count might be too expensive
return (currentTypeDef != null) && (FindReferenceService.FindDerivedTypes(currentTypeDef, true).Count > 0);
}
void UpdateDerivedTypes()
@ -60,15 +67,6 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -60,15 +67,6 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
if (derivedTypeModel != null)
derivedTypes.Add(derivedTypeModel);
}
// foreach (var baseType in currentTypeDef.DirectBaseTypes) {
// ITypeDefinition baseTypeDef = baseType.GetDefinition();
// if ((baseTypeDef != null) && (baseTypeDef.FullName != "System.Object")) {
// ITypeDefinitionModel baseTypeModel = GetTypeDefinitionModel(currentTypeDef, baseTypeDef);
// if (baseTypeModel != null)
// derivedTypes.Add(baseTypeModel);
// }
// }
}
}

Loading…
Cancel
Save