Ejemplo n.º 1
0
        // 継承元ツリー

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

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

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

            default:

                InheritanceSourceTreeItems.Clear();
                return;
            }

            InheritanceSourceTreeItems.Clear();
            AddInheritanceSourceMember(item, true, string.Empty);
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
                }
            }
        }