private void AddInheritanceDestinationMember(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, }; InheritanceDestinationTreeItems.Add(model); // メンバー名 if (containerModel.Children.Any()) { foreach (var child in containerModel.Children) { model.MemberTreeItems.Add(child.Copy()); } model.IsExpanded = true; } // 継承先クラス、インターフェースを取得 var destItems = AppEnv.UserDefinitions.Where(x => { if (x.BaseTypeInfos.Any(y => { if (!y.FoundDefinition) { return(false); } var b1 = (y.DefinitionSourceFile == item.SourceFile); var b2 = (y.DefinitionStartLength == item.StartLength); var b3 = (y.DefinitionEndLength == item.EndLength); if (b1 && b2 && b3) { return(true); } else { return(false); } })) { return(true); } return(false); }); if (!(destItems is null) && destItems.Any()) { foreach (var destItem in destItems) { AddInheritanceDestinationMember(destItem, false, model.DefinitionName); } } }