private void AddInheritanceSourceMember(BaseTypeInfo baseType, string relationName) { // 定義元ソースコードがある場合、メンバーも表示する if (baseType.FoundDefinition) { var baseItem = AppEnv.UserDefinitions.FirstOrDefault(x => { var b1 = (x.SourceFile == baseType.DefinitionSourceFile); var b2 = (x.StartLength == baseType.DefinitionStartLength); var b3 = (x.EndLength == baseType.DefinitionEndLength); if (b1 && b2 && b3) { return(true); } else { return(false); } }); AddInheritanceSourceMember(baseItem, false, relationName); } else { // 定義元ソースコードは無いので、名前だけ表示する var model = new DefinitionItemModel { IsTargetDefinition = false, RelationName = relationName, DefinitionName = baseType.DisplayBaseType, }; InheritanceSourceTreeItems.Add(model); } }
private void AddInheritanceSourceMember(UserDefinition item, bool isTargetDefinition, string relationName) { // UserDefinition -> TreeViewItemModel -> DefinitionItemModel // メンバー集めは、既存処理を使用する。すでに TreeViewItemModel 用のメソッドがあるので // いったんメンバーをくっつけて、それをもらう // class, struct, interface var containerModel = ConvertTreeViewItemModel(item); AddFilteredMember(containerModel, item); // 定義元のソースファイルが違う場合、名前空間も付ける var definitionName = item.DisplaySignature; if (item.SourceFile != SourceFile) { definitionName = $"{definitionName}({Path.GetFileName(item.SourceFile)})"; } // ヘッダー名 var model = new DefinitionItemModel { IsTargetDefinition = isTargetDefinition, RelationName = relationName, DefinitionName = definitionName, }; InheritanceSourceTreeItems.Add(model); // メンバー名 if (containerModel.Children.Any()) { foreach (var child in containerModel.Children) { model.MemberTreeItems.Add(child.Copy()); } model.IsExpanded = true; } // 継承元クラス、インターフェース if (item.BaseTypeInfos.Any()) { foreach (var baseType in item.BaseTypeInfos) { // VBNet ソースファイルの場合で、定義元ソースコードが見つからなかった場合、 // 定義名が C# 形式で表示されるバグの対応 if (AppEnv.Languages == Languages.VBNet) { baseType.DisplayBaseType = item.ConvertCurrentLanguageType(baseType.DisplayBaseType); } AddInheritanceSourceMember(baseType, model.DefinitionName); } } }