|
|
|
@ -19,6 +19,8 @@ namespace ICSharpCode.SharpDevelop.Dom
@@ -19,6 +19,8 @@ namespace ICSharpCode.SharpDevelop.Dom
|
|
|
|
|
/// </summary>
|
|
|
|
|
sealed class TypeDefinitionModel : ITypeDefinitionModel |
|
|
|
|
{ |
|
|
|
|
public event EventHandler Updated; |
|
|
|
|
|
|
|
|
|
readonly IEntityModelContext context; |
|
|
|
|
readonly FullTypeName fullTypeName; |
|
|
|
|
List<IUnresolvedTypeDefinition> parts = new List<IUnresolvedTypeDefinition>(); |
|
|
|
@ -270,44 +272,6 @@ namespace ICSharpCode.SharpDevelop.Dom
@@ -270,44 +272,6 @@ namespace ICSharpCode.SharpDevelop.Dom
|
|
|
|
|
} |
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Base Types collection
|
|
|
|
|
NestedTypeDefinitionModelCollection baseTypes; |
|
|
|
|
|
|
|
|
|
IList<IUnresolvedTypeDefinition> GetBaseTypes(IUnresolvedTypeDefinition definition) |
|
|
|
|
{ |
|
|
|
|
var compilation = context.GetCompilation(); |
|
|
|
|
if (compilation != null) { |
|
|
|
|
var typeResolveContext = new SimpleTypeResolveContext(compilation.MainAssembly).WithCurrentTypeDefinition(Resolve()); |
|
|
|
|
var baseTypeList = new List<IUnresolvedTypeDefinition>(); |
|
|
|
|
foreach (var baseTypeRef in definition.BaseTypes) { |
|
|
|
|
var resolvedTypeDefinition = baseTypeRef.Resolve(typeResolveContext).GetDefinition(); |
|
|
|
|
if (resolvedTypeDefinition != null) { |
|
|
|
|
baseTypeList.Add(resolvedTypeDefinition.Parts[0]); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return baseTypeList; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public IModelCollection<ITypeDefinitionModel> BaseTypes { |
|
|
|
|
get { |
|
|
|
|
if (baseTypes == null) { |
|
|
|
|
baseTypes = new NestedTypeDefinitionModelCollection(context); |
|
|
|
|
foreach (var part in parts) { |
|
|
|
|
var baseTypeList = GetBaseTypes(part); |
|
|
|
|
if (baseTypeList != null) { |
|
|
|
|
baseTypes.Update(null, baseTypeList); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return baseTypes; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Update
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Updates this type definition model by replacing oldPart with newPart.
|
|
|
|
@ -349,8 +313,8 @@ namespace ICSharpCode.SharpDevelop.Dom
@@ -349,8 +313,8 @@ namespace ICSharpCode.SharpDevelop.Dom
|
|
|
|
|
if (nestedTypes != null) { |
|
|
|
|
nestedTypes.Update(oldPart != null ? oldPart.NestedTypes : null, newPart != null ? newPart.NestedTypes : null); |
|
|
|
|
} |
|
|
|
|
if (baseTypes != null) { |
|
|
|
|
baseTypes.Update(oldPart != null ? GetBaseTypes(oldPart) : null, newPart != null ? GetBaseTypes(newPart) : null); |
|
|
|
|
if (Updated != null) { |
|
|
|
|
Updated(this, new EventArgs()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
#endregion
|
|
|
|
|