// // 2002-2005 AlphaSierraPapa // GNU General Public License // // $Revision$ // using System; using System.Diagnostics; using System.Reflection; using System.Collections; using System.Collections.Generic; using ICSharpCode.Core; using ICSharpCode.SharpDevelop; namespace ICSharpCode.SharpDevelop.Dom { /// /// A class made up of multiple partial classes. /// public class CompoundClass : DefaultClass { List parts = new List(); /// /// Gets the parts this class is based on. /// public List Parts { get { return parts; } } /// /// Creates a new CompoundClass with the specified class as first part. /// public CompoundClass(IClass firstPart) : base(firstPart.CompilationUnit, firstPart.FullyQualifiedName) { parts.Add(firstPart); UpdateInformationFromParts(); } /// /// Re-calculate information from class parts (Modifier, Base classes, Type parameters etc.) /// public void UpdateInformationFromParts() { // Common for all parts: this.ClassType = parts[0].ClassType; ModifierEnum modifier = ModifierEnum.None; this.BaseTypes.Clear(); this.TypeParameters.Clear(); this.Attributes.Clear(); foreach (IClass part in parts) { modifier |= part.Modifiers; this.BaseTypes.AddRange(part.BaseTypes); this.TypeParameters.AddRange(part.TypeParameters); this.Attributes.AddRange(part.Attributes); } this.Modifiers = modifier; } /// /// CompoundClass has a normal return type even though IsPartial is set. /// protected override IReturnType CreateDefaultReturnType() { return new DefaultReturnType(this); } public override List InnerClasses { get { List l = new List(); foreach (IClass part in parts) { l.AddRange(part.InnerClasses); } return l; } } public override List Fields { get { List l = new List(); foreach (IClass part in parts) { l.AddRange(part.Fields); } return l; } } public override List Properties { get { List l = new List(); foreach (IClass part in parts) { l.AddRange(part.Properties); } return l; } } public override List Indexer { get { List l = new List(); foreach (IClass part in parts) { l.AddRange(part.Indexer); } return l; } } public override List Methods { get { List l = new List(); foreach (IClass part in parts) { l.AddRange(part.Methods); } return l; } } public override List Events { get { List l = new List(); foreach (IClass part in parts) { l.AddRange(part.Events); } return l; } } } }