Browse Source

Improved some code in BaseTypesTreeNode.

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

52
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,36 +57,34 @@ 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 = mainTypeDefinition.ParentAssembly.GetRuntimeAssemblyLocation();
var assemblyFileName = this.definition.Resolve().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[baseTypeDefinition.FullTypeName];
resolveTypeDefModel = assemblyModel.TopLevelTypeDefinitions[definition.FullTypeName]; if (resolveTypeDefModel != null) {
if (resolveTypeDefModel != null) { return resolveTypeDefModel;
return resolveTypeDefModel; }
}
if (assemblyModel.References != null) {
if (assemblyModel.References != null) { foreach (var referencedAssemblyName in assemblyModel.References) {
foreach (var referencedAssemblyName in assemblyModel.References) { 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[baseTypeDefinition.FullTypeName];
resolveTypeDefModel = referenceAssemblyModel.TopLevelTypeDefinitions[definition.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