Browse Source

First part of type resolving of base types in ClassBrowser.

pull/80/head
Andreas Weizel 13 years ago
parent
commit
3669e6621d
  1. 43
      src/Main/Base/Project/Dom/ClassBrowser/BaseTypesTreeNode.cs

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

@ -3,7 +3,10 @@ @@ -3,7 +3,10 @@
using System;
using System.Linq;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.TypeSystem.Implementation;
using ICSharpCode.SharpDevelop.Parser;
namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
{
@ -45,7 +48,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -45,7 +48,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
if (currentTypeDef != null) {
foreach (var baseType in currentTypeDef.DirectBaseTypes) {
ITypeDefinition baseTypeDef = baseType.GetDefinition();
if (baseTypeDef != null) {
if ((baseTypeDef != null) && (baseTypeDef.FullName != "System.Object")) {
ITypeDefinitionModel baseTypeModel = GetTypeDefinitionModel(baseTypeDef);
if (baseTypeModel != null)
baseTypes.Add(baseTypeModel);
@ -56,21 +59,39 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser @@ -56,21 +59,39 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
ITypeDefinitionModel GetTypeDefinitionModel(ITypeDefinition definition)
{
ITypeDefinitionModel model = definition.GetModel();
if (model == null) {
// Try to get model from ClassBrowser's assembly list
var classBrowser = SD.GetService<IClassBrowser>();
if (classBrowser != null) {
foreach (var assemblyModel in classBrowser.MainAssemblyList.Assemblies) {
model = assemblyModel.TopLevelTypeDefinitions[definition.FullTypeName];
if (model != null) {
return model;
ITypeDefinitionModel resolveTypeDefModel = definition.GetModel();
if (resolveTypeDefModel == null) {
var assemblyParserService = SD.GetService<IAssemblyParserService>();
if (assemblyParserService != null) {
var assemblyFileName = this.definition.Resolve().ParentAssembly.GetRuntimeAssemblyLocation();
if (assemblyFileName != null) {
try {
// Look in the type's AssemblyModel
var assemblyModel = assemblyParserService.GetAssemblyModel(assemblyFileName);
resolveTypeDefModel = assemblyModel.TopLevelTypeDefinitions[definition.FullTypeName];
if (resolveTypeDefModel != null) {
return resolveTypeDefModel;
}
if (assemblyModel.References != null) {
foreach (var referencedAssemblyName in assemblyModel.References) {
DefaultAssemblySearcher searcher = new DefaultAssemblySearcher(assemblyModel.Location);
var resolvedFile = searcher.FindAssembly(referencedAssemblyName);
var referenceAssemblyModel = assemblyParserService.GetAssemblyModel(resolvedFile);
resolveTypeDefModel = referenceAssemblyModel.TopLevelTypeDefinitions[definition.FullTypeName];
if (resolveTypeDefModel != null) {
return resolveTypeDefModel;
}
}
}
} catch (Exception) {
}
}
}
}
return model;
return resolveTypeDefModel;
}
protected override System.Collections.Generic.IComparer<ICSharpCode.TreeView.SharpTreeNode> NodeComparer {

Loading…
Cancel
Save