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

Loading…
Cancel
Save