|
|
|
@ -59,8 +59,8 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
@@ -59,8 +59,8 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
|
|
|
|
|
if (currentTypeDef != null) { |
|
|
|
|
foreach (var baseType in currentTypeDef.DirectBaseTypes) { |
|
|
|
|
ITypeDefinition baseTypeDef = baseType.GetDefinition(); |
|
|
|
|
if ((baseTypeDef != null)) { |
|
|
|
|
ITypeDefinitionModel baseTypeModel = GetTypeDefinitionModel(currentTypeDef, baseTypeDef); |
|
|
|
|
if (baseTypeDef != null) { |
|
|
|
|
ITypeDefinitionModel baseTypeModel = baseTypeDef.GetModel(); |
|
|
|
|
if (baseTypeModel != null) |
|
|
|
|
baseTypes.Add(baseTypeModel); |
|
|
|
|
} |
|
|
|
@ -68,65 +68,6 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
@@ -68,65 +68,6 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ITypeDefinitionModel GetTypeDefinitionModel(ITypeDefinition mainTypeDefinition, ITypeDefinition baseTypeDefinition) |
|
|
|
|
{ |
|
|
|
|
ITypeDefinitionModel resolveTypeDefModel = null; |
|
|
|
|
var assemblyFileName = mainTypeDefinition.ParentAssembly.GetRuntimeAssemblyLocation(); |
|
|
|
|
IAssemblyModel assemblyModel = null; |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
// Try to get AssemblyModel from project list
|
|
|
|
|
IProjectService projectService = SD.GetRequiredService<IProjectService>(); |
|
|
|
|
if (projectService.CurrentSolution != null) { |
|
|
|
|
var projectOfAssembly = projectService.CurrentSolution.Projects.FirstOrDefault(p => p.AssemblyModel.Location == assemblyFileName); |
|
|
|
|
if (projectOfAssembly != null) { |
|
|
|
|
// We automatically have an AssemblyModel from project
|
|
|
|
|
assemblyModel = projectOfAssembly.AssemblyModel; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var assemblyParserService = SD.GetService<IAssemblyParserService>(); |
|
|
|
|
if (assemblyModel == null) { |
|
|
|
|
if (assemblyParserService != null) { |
|
|
|
|
if (assemblyFileName != null) { |
|
|
|
|
assemblyModel = assemblyParserService.GetAssemblyModel(assemblyFileName); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (assemblyModel != null) { |
|
|
|
|
// Nothing in projects, load from assembly file
|
|
|
|
|
resolveTypeDefModel = assemblyModel.TopLevelTypeDefinitions[baseTypeDefinition.FullTypeName]; |
|
|
|
|
if (resolveTypeDefModel != null) { |
|
|
|
|
return resolveTypeDefModel; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Look at referenced assemblies
|
|
|
|
|
if ((assemblyModel.References != null) && (assemblyParserService != null)) { |
|
|
|
|
foreach (var referencedAssemblyName in assemblyModel.References.AssemblyNames) { |
|
|
|
|
CombinedAssemblySearcher searcher = new CombinedAssemblySearcher(); |
|
|
|
|
if ((assemblyModel.Context != null) && (assemblyModel.Context.Project != null)) { |
|
|
|
|
searcher.AddSearcher(new ProjectAssemblyReferenceSearcher(assemblyModel.Context.Project)); |
|
|
|
|
} |
|
|
|
|
searcher.AddSearcher(new DefaultAssemblySearcher(assemblyModel.Location)); |
|
|
|
|
var resolvedFile = searcher.FindAssembly(referencedAssemblyName.AssemblyName); |
|
|
|
|
if (resolvedFile != null) { |
|
|
|
|
var referenceAssemblyModel = assemblyParserService.GetAssemblyModel(resolvedFile); |
|
|
|
|
resolveTypeDefModel = referenceAssemblyModel.TopLevelTypeDefinitions[baseTypeDefinition.FullTypeName]; |
|
|
|
|
if (resolveTypeDefModel != null) { |
|
|
|
|
return resolveTypeDefModel; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} catch (Exception) { |
|
|
|
|
// TODO Can't load the type, what to do?
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return resolveTypeDefModel; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
protected override System.Collections.Generic.IComparer<ICSharpCode.TreeView.SharpTreeNode> NodeComparer { |
|
|
|
|
get { |
|
|
|
|
return NodeTextComparer; |
|
|
|
|