示例#1
0
        // 継承先ツリー

        private void ShowInheritanceDestinationTree()
        {
            var item = FindUserDefinition();

            if (item is null)
            {
                InheritanceDestinationTreeItems.Clear();
                return;
            }

            // 継承できるもの以外は何もしないで抜ける
            switch (item.DefineKinds)
            {
            case DefineKinds.Class:
            case DefineKinds.Struct:
            case DefineKinds.Interface:
                break;

            default:

                InheritanceDestinationTreeItems.Clear();
                return;
            }

            InheritanceDestinationTreeItems.Clear();
            AddInheritanceDestinationMember(item, true, string.Empty);
        }
示例#2
0
        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);
                }
            }
        }