Browse Source

Improved some code in BaseTypesTreeNode.

pull/80/head
Andreas Weizel 13 years ago
parent
commit
49fb3bc73b
  1. 16
      src/Main/Base/Project/Dom/ClassBrowser/BaseTypesTreeNode.cs

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

@ -49,7 +49,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
foreach (var baseType in currentTypeDef.DirectBaseTypes) { foreach (var baseType in currentTypeDef.DirectBaseTypes) {
ITypeDefinition baseTypeDef = baseType.GetDefinition(); ITypeDefinition baseTypeDef = baseType.GetDefinition();
if ((baseTypeDef != null) && (baseTypeDef.FullName != "System.Object")) { if ((baseTypeDef != null) && (baseTypeDef.FullName != "System.Object")) {
ITypeDefinitionModel baseTypeModel = GetTypeDefinitionModel(baseTypeDef); ITypeDefinitionModel baseTypeModel = GetTypeDefinitionModel(currentTypeDef, baseTypeDef);
if (baseTypeModel != null) if (baseTypeModel != null)
baseTypes.Add(baseTypeModel); baseTypes.Add(baseTypeModel);
} }
@ -57,18 +57,17 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
} }
} }
ITypeDefinitionModel GetTypeDefinitionModel(ITypeDefinition definition) ITypeDefinitionModel GetTypeDefinitionModel(ITypeDefinition mainTypeDefinition, ITypeDefinition baseTypeDefinition)
{ {
ITypeDefinitionModel resolveTypeDefModel = definition.GetModel(); ITypeDefinitionModel resolveTypeDefModel = null;
if (resolveTypeDefModel == null) {
var assemblyParserService = SD.GetService<IAssemblyParserService>(); var assemblyParserService = SD.GetService<IAssemblyParserService>();
if (assemblyParserService != null) { if (assemblyParserService != null) {
var assemblyFileName = this.definition.Resolve().ParentAssembly.GetRuntimeAssemblyLocation(); var assemblyFileName = mainTypeDefinition.ParentAssembly.GetRuntimeAssemblyLocation();
if (assemblyFileName != null) { if (assemblyFileName != null) {
try { try {
// Look in the type's AssemblyModel // Look in the type's AssemblyModel
var assemblyModel = assemblyParserService.GetAssemblyModel(assemblyFileName); var assemblyModel = assemblyParserService.GetAssemblyModel(assemblyFileName);
resolveTypeDefModel = assemblyModel.TopLevelTypeDefinitions[definition.FullTypeName]; resolveTypeDefModel = assemblyModel.TopLevelTypeDefinitions[baseTypeDefinition.FullTypeName];
if (resolveTypeDefModel != null) { if (resolveTypeDefModel != null) {
return resolveTypeDefModel; return resolveTypeDefModel;
} }
@ -78,15 +77,14 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
DefaultAssemblySearcher searcher = new DefaultAssemblySearcher(assemblyModel.Location); DefaultAssemblySearcher searcher = new DefaultAssemblySearcher(assemblyModel.Location);
var resolvedFile = searcher.FindAssembly(referencedAssemblyName); var resolvedFile = searcher.FindAssembly(referencedAssemblyName);
var referenceAssemblyModel = assemblyParserService.GetAssemblyModel(resolvedFile); var referenceAssemblyModel = assemblyParserService.GetAssemblyModel(resolvedFile);
resolveTypeDefModel = referenceAssemblyModel.TopLevelTypeDefinitions[definition.FullTypeName]; resolveTypeDefModel = referenceAssemblyModel.TopLevelTypeDefinitions[baseTypeDefinition.FullTypeName];
if (resolveTypeDefModel != null) { if (resolveTypeDefModel != null) {
return resolveTypeDefModel; return resolveTypeDefModel;
} }
} }
} }
} catch (Exception) { } catch (Exception) {
// TODO Can't load the type, what to do?
}
} }
} }
} }

Loading…
Cancel
Save