public class SolutionFolderProjectItemImplementation()

in EnvDTE.Client/Impl/ProjectModelImpl/SolutionFolderProjectItemImplementation.cs [8:53]


public class SolutionFolderProjectItemImplementation(
    [NotNull] DteImplementation dte,
    [NotNull] ProjectItemModel projectItemModel,
    [NotNull] ProjectImplementation containingProject)
    : ProjectItemImplementation(dte, projectItemModel, containingProject)
{
    [CanBeNull] private ProjectImplementation _subProjectImplementation;

    private ProjectImplementation SubProjectImplementation
    {
        get
        {
            if (_subProjectImplementation is null)
            {
                switch (DteImplementation.DteProtocolModel.ProjectItem_get_Kind.Sync(new ProjectItemRequest(ProjectItemModel)))
                {
                    case ProjectItemKindModel.PhysicalFile:
                        _subProjectImplementation = null;
                        break;
                    case ProjectItemKindModel.Project:
                        _subProjectImplementation = ImplementationUtil.GetProjectImplementation(
                            DteImplementation, new ProjectItemModel(ProjectItemModel.Id), this);
                        break;
                    case ProjectItemKindModel.PhysicalFolder:
                        _subProjectImplementation = new ProjectImplementation(DteImplementation, new ProjectItemModel(ProjectItemModel.Id), this);
                        break;
                    case ProjectItemKindModel.Unknown:
                    case ProjectItemKindModel.VirtualDirectory:
                    default:
                        return null;
                }
            }

            return _subProjectImplementation;
        }
    }

    public override string Kind => Constants.vsProjectItemKindSolutionItems;

    public override object Object => SubProjectImplementation;

    public override Project SubProject => SubProjectImplementation;

    // ReSharper disable once AssignNullToNotNullAttribute
    public override ProjectItems ProjectItems => null;
}