|
|
|
@ -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?
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|