/// <summary> /// Initializes a new instance of the <see cref="GenericNode"/> class. /// </summary> /// <param name="hierarchyNode">The underlying hierarchy represented by this node.</param> /// <param name="parentNode">The parent node accessor.</param> /// <param name="nodeFactory">The factory for child nodes.</param> /// <param name="adapter">The adapter service that implements the smart cast <see cref="ISolutionExplorerNode.As{T}"/>.</param> public GenericNode(IVsHierarchyItem hierarchyNode, ISolutionExplorerNodeFactory nodeFactory, IAdapterService adapter, JoinableLazy <IVsUIHierarchyWindow> solutionExplorer) : base(SolutionNodeKind.Generic, hierarchyNode, nodeFactory, adapter, solutionExplorer) { }
/// <summary> /// Initializes a new instance of the <see cref="FolderNode"/> class. /// </summary> /// <param name="hierarchyNode">The underlying hierarchy represented by this node.</param> /// <param name="parentNode">The parent node accessor.</param> /// <param name="nodeFactory">The factory for child nodes.</param> /// <param name="adapter">The adapter service that implements the smart cast <see cref="ITreeNode.As{T}"/>.</param> public FolderNode(IVsHierarchyItem hierarchyNode, ISolutionExplorerNodeFactory nodeFactory, IAdapterService adapter, Lazy <IVsUIHierarchyWindow> solutionExplorer) : base(SolutionNodeKind.Folder, hierarchyNode, nodeFactory, adapter, solutionExplorer) { }
public SolutionExplorerNode(SolutionExplorerNodeKind kind, VsSolutionHierarchyNode hierarchyNode, Lazy<ISolutionExplorerNode> parentNode, ISolutionExplorerNodeFactory nodeFactory) { if (nodeFactory == null) throw new ArgumentNullException(nameof(nodeFactory), $"{nameof(nodeFactory)} is null."); if (hierarchyNode == null) throw new ArgumentNullException(nameof(hierarchyNode), $"{nameof(hierarchyNode)} is null."); Kind = kind; NodeFactory = nodeFactory; m_hierarchyNode = hierarchyNode; m_window = new Lazy<IVsUIHierarchyWindow>(() => GetWindow(hierarchyNode.ServiceProvider)); m_parent = parentNode ?? new Lazy<ISolutionExplorerNode>(() => null); Func<bool> getHiddenProperty = () => hierarchyNode.VsHierarchy.GetProperty<bool?>(__VSHPROPID.VSHPROPID_IsHiddenItem, m_hierarchyNode.ItemId).GetValueOrDefault(); m_isHidden = parentNode != null ? new Lazy<bool>(() => getHiddenProperty() || parentNode.Value.IsHidden) : new Lazy<bool>(() => getHiddenProperty()); m_solutionNode = new Lazy<ISolutionNode>(() => { var solutionHierarchy = new VsSolutionHierarchyNode( (IVsHierarchy)m_hierarchyNode.ServiceProvider.GetService<SVsSolution, IVsSolution>(), VSConstants.VSITEMID_ROOT); return new SolutionNode(solutionHierarchy, NodeFactory); }); }
/// <summary> /// Initializes a new instance of the <see cref="FolderNode"/> class. /// </summary> /// <param name="hierarchyNode">The underlying hierarchy represented by this node.</param> /// <param name="parentNode">The parent node accessor.</param> /// <param name="nodeFactory">The factory for child nodes.</param> /// <param name="adapter">The adapter service that implements the smart cast <see cref="ITreeNode.As{T}"/>.</param> public FolderNode(IVsHierarchyItem hierarchyNode, ISolutionExplorerNodeFactory nodeFactory, IAdapterService adapter, Lazy <IVsUIHierarchyWindow> solutionExplorer) : base(SolutionNodeKind.Folder, hierarchyNode, nodeFactory, adapter, solutionExplorer) { Folder = new Lazy <ProjectItem>(() => hierarchyNode.GetExtenderObject() as ProjectItem); }
public ProjectNode(VsSolutionHierarchyNode hierarchyNode, Lazy<ISolutionExplorerNode> parentNode, ISolutionExplorerNodeFactory nodeFactory) : base(SolutionExplorerNodeKind.Project, hierarchyNode, parentNode, nodeFactory) { if (parentNode == null) throw new ArgumentNullException(nameof(parentNode), $"{nameof(parentNode)} is null."); m_project = new Lazy<EnvDTE.Project>(() => (EnvDTE.Project)hierarchyNode.ExtenderObject); }
/// <summary> /// Initializes a new instance of the <see cref="ReferencesNode"/> class. /// </summary> /// <param name="hierarchyNode">The underlying hierarchy represented by this node.</param> /// <param name="nodeFactory">The factory for child nodes.</param> /// <param name="adapter">The adapter service that implements the smart cast <see cref="ITreeNode.As{T}"/>.</param> public ReferencesNode( IVsHierarchyItem hierarchyNode, ISolutionExplorerNodeFactory nodeFactory, IAdapterService adapter, JoinableLazy <IVsUIHierarchyWindow> solutionExplorer) : base(SolutionNodeKind.ReferencesFolder, hierarchyNode, nodeFactory, adapter, solutionExplorer) { }
public SolutionExplorer(IServiceProvider serviceProvider, ISolutionExplorerNodeFactory nodeFactory) { Guard.NotNull(() => serviceProvider, serviceProvider); Guard.NotNull(() => nodeFactory, nodeFactory); this.serviceProvider = serviceProvider; this.toolWindow = serviceProvider.ToolWindow(StandardToolWindows.ProjectExplorer); this.nodeFactory = nodeFactory; }
/// <summary> /// Initializes a new instance of the <see cref="ProjectNode"/> class. /// </summary> /// <param name="hierarchyNode">The underlying hierarchy represented by this node.</param> /// <param name="nodeFactory">The factory for child nodes.</param> /// <param name="adapter">The adapter service that implements the smart cast <see cref="ITreeNode.As{T}"/>.</param> public ProjectNode( IVsHierarchyItem hierarchyNode, ISolutionExplorerNodeFactory nodeFactory, IAdapterService adapter, Lazy <IVsUIHierarchyWindow> solutionExplorer) : base(SolutionNodeKind.Project, hierarchyNode, nodeFactory, adapter, solutionExplorer) { properties = new Lazy <GlobalProjectProperties>(() => new GlobalProjectProperties(this)); }
public ProjectItemNode(SolutionExplorerNodeKind kind, VsSolutionHierarchyNode hierarchyNode, Lazy<ISolutionExplorerNode> parent, ISolutionExplorerNodeFactory nodeFactory) : base(kind, hierarchyNode, parent, nodeFactory) { m_parentProject = new Lazy<IProjectNode>(() => { VsSolutionHierarchyNode parentProjectHierarchy = new VsSolutionHierarchyNode(hierarchyNode.VsHierarchy, VSConstants.VSITEMID_ROOT); return NodeFactory.Create(parentProjectHierarchy, GetParent(parentProjectHierarchy)) as IProjectNode; }); }
public SolutionExplorer(IServiceProvider serviceProvider, ISolutionExplorerNodeFactory nodeFactory) { Guard.NotNull(() => serviceProvider, serviceProvider); Guard.NotNull(() => nodeFactory, nodeFactory); this.serviceProvider = serviceProvider; this.toolWindow = serviceProvider.ToolWindow(StandardToolWindows.ProjectExplorer); this.nodeFactory = nodeFactory; }
/// <summary> /// Initializes a new instance of the <see cref="ItemNode"/> class. /// </summary> /// <param name="hierarchyNode">The underlying hierarchy represented by this node.</param> /// <param name="nodeFactory">The factory for child nodes.</param> /// <param name="adapter">The adapter service that implements the smart cast <see cref="ITreeNode.As{T}"/>.</param> public ItemNode( IVsHierarchyItem hierarchyNode, ISolutionExplorerNodeFactory nodeFactory, IAdapterService adapter, JoinableLazy <IVsUIHierarchyWindow> solutionExplorer) : base(SolutionNodeKind.Item, hierarchyNode, nodeFactory, adapter, solutionExplorer) { properties = new Lazy <ItemProperties>(() => new ItemProperties(this)); }
/// <summary> /// Initializes a new instance of the <see cref="SolutionFolderNode"/> class. /// </summary> /// <param name="hierarchyNode">The underlying hierarchy represented by this node.</param> /// <param name="nodeFactory">The factory for child nodes.</param> /// <param name="adapter">The adapter service that implements the smart cast <see cref="ITreeNode.As{T}"/>.</param> public SolutionFolderNode( IVsHierarchyItem hierarchyNode, ISolutionExplorerNodeFactory nodeFactory, IAdapterService adapter, JoinableLazy <IVsUIHierarchyWindow> solutionExplorer) : base(SolutionNodeKind.SolutionFolder, hierarchyNode, nodeFactory, adapter, solutionExplorer) { SolutionFolder = new Lazy <SolutionFolder>( () => (SolutionFolder)((Project)hierarchyNode.GetExtenderObject()).Object); }
public SolutionItemNode(VsSolutionHierarchyNode hierarchyNode, Lazy<ISolutionExplorerNode> parentNode, ISolutionExplorerNodeFactory nodeFactory) : base(SolutionExplorerNodeKind.SolutionItem, hierarchyNode, parentNode, nodeFactory) { m_dteItem = new Lazy<EnvDTE.ProjectItem>(() => (EnvDTE.ProjectItem)hierarchyNode.ExtenderObject); owningFolder = new Lazy<ISolutionFolderNode>(() => { var owningHierarchy = new VsSolutionHierarchyNode(hierarchyNode.VsHierarchy, VSConstants.VSITEMID_ROOT); return NodeFactory.Create(owningHierarchy, GetParent(owningHierarchy)) as ISolutionFolderNode; }); }
/// <summary> /// Initializes a new instance of the <see cref="ProjectItemNode"/> class. /// </summary> /// <param name="kind">The kind of project node.</param> /// <param name="hierarchyNode">The underlying hierarchy represented by this node.</param> /// <param name="nodeFactory">The factory for child nodes.</param> /// <param name="adapter">The adapter service that implements the smart cast <see cref="ISolutionExplorerNode.As{T}"/>.</param> public ProjectItemNode( SolutionNodeKind kind, IVsHierarchyItem hierarchyNode, ISolutionExplorerNodeFactory nodeFactory, IAdapterService adapter, Lazy<IVsUIHierarchyWindow> solutionExplorer) : base(kind, hierarchyNode, nodeFactory, adapter, solutionExplorer) { this.nodeFactory = nodeFactory; owningProject = new Lazy<IProjectNode>(() => this.nodeFactory.CreateNode(hierarchyNode.GetRoot ()) as IProjectNode); }
/// <summary> /// Initializes a new instance of the <see cref="ProjectNode"/> class. /// </summary> /// <param name="hierarchyNode">The underlying hierarchy represented by this node.</param> /// <param name="nodeFactory">The factory for child nodes.</param> /// <param name="adapter">The adapter service that implements the smart cast <see cref="ITreeNode.As{T}"/>.</param> public ProjectNode( IVsHierarchyItem hierarchyNode, ISolutionExplorerNodeFactory nodeFactory, IAdapterService adapter, Lazy <IVsUIHierarchyWindow> solutionExplorer, Lazy <IVsBooleanSymbolExpressionEvaluator> expressionEvaluator) : base(SolutionNodeKind.Project, hierarchyNode, nodeFactory, adapter, solutionExplorer) { properties = new Lazy <GlobalProjectProperties>(() => new GlobalProjectProperties(this)); ExpressionEvaluator = expressionEvaluator; Configuration = new ProjectConfiguration(new Lazy <EnvDTE.Project>(() => As <EnvDTE.Project>())); }
/// <summary> /// Initializes a new instance of the <see cref="ProjectItemNode"/> class. /// </summary> /// <param name="kind">The kind of project node.</param> /// <param name="hierarchyNode">The underlying hierarchy represented by this node.</param> /// <param name="nodeFactory">The factory for child nodes.</param> /// <param name="adapter">The adapter service that implements the smart cast <see cref="ISolutionExplorerNode.As{T}"/>.</param> public ProjectItemNode( SolutionNodeKind kind, IVsHierarchyItem hierarchyNode, ISolutionExplorerNodeFactory nodeFactory, IAdapterService adapter, Lazy <IVsUIHierarchyWindow> solutionExplorer) : base(kind, hierarchyNode, nodeFactory, adapter, solutionExplorer) { this.nodeFactory = nodeFactory; owningProject = new Lazy <IProjectNode>(() => this.nodeFactory.CreateNode(hierarchyNode.GetRoot()) as IProjectNode); }
/// <summary> /// Initializes a new instance of the <see cref="SolutionItemNode"/> class. /// </summary> /// <param name="hierarchyNode">The underlying hierarchy represented by this node.</param> /// <param name="nodeFactory">The factory for child nodes.</param> /// <param name="adapter">The adapter service that implements the smart cast <see cref="ITreeNode.As{T}"/>.</param> public SolutionItemNode( IVsHierarchyItem hierarchyNode, ISolutionExplorerNodeFactory nodeFactory, IAdapterService adapter, JoinableLazy <IVsUIHierarchyWindow> solutionExplorer) : base(SolutionNodeKind.SolutionItem, hierarchyNode, nodeFactory, adapter, solutionExplorer) { this.nodeFactory = nodeFactory; Item = new Lazy <ProjectItem>(() => (ProjectItem)hierarchyNode.GetExtenderObject()); owningFolder = new Lazy <ISolutionFolderNode>(() => this.nodeFactory.CreateNode(hierarchyNode.GetRoot()) as ISolutionFolderNode); }
/// <summary> /// Initializes a new instance of the <see cref="SolutionNode"/> class. /// </summary> /// <param name="hierarchyNode">The underlying hierarchy represented by this node.</param> /// <param name="nodeFactory">The factory for child nodes.</param> /// <param name="adapter">The adapter service that implements the smart cast <see cref="ISolutionExplorerNode.As{T}"/>.</param> /// <param name="selection">The solution selection service.</param> /// <param name="solutionExplorer">The solution explorer window.</param> public SolutionNode( IServiceProvider services, IVsHierarchyItem hierarchyNode, ISolutionExplorerNodeFactory nodeFactory, IAdapterService adapter, IVsSolutionSelection selection, Lazy <IVsUIHierarchyWindow> solutionExplorer) : base(SolutionNodeKind.Solution, hierarchyNode, nodeFactory, adapter, solutionExplorer) { this.nodeFactory = nodeFactory; dteSolution = new Lazy <Solution2> (() => (Solution2)services.GetService <DTE> ().Solution); this.selection = selection; solution = (IVsSolution2)hierarchyNode.HierarchyIdentity.Hierarchy; }
/// <summary> /// Initializes a new instance of the <see cref="SolutionNodeFactory"/> class. /// </summary> /// <param name="serviceLocator">The service locator.</param> /// <param name="childNodeFactory">The factory for nodes, used to construct child nodes automatically.</param> /// <param name="looseNodeFactory">The explorer node factory used to create "loose" nodes from solution explorer.</param> /// <param name="solutionEvents">The solution events.</param> /// <param name="adapter">The adapter service that implements the smart cast <see cref="ITreeNode.As{T}"/>.</param> /// <param name="uiThread">The UI thread.</param> public SolutionNodeFactory( IServiceLocator serviceLocator, [Named(DefaultHierarchyFactory.RegisterKey)] Lazy <ITreeNodeFactory <IVsSolutionHierarchyNode> > childNodeFactory, ISolutionExplorerNodeFactory looseNodeFactory, ISolutionEvents solutionEvents, IAdapterService adapter, IUIThread uiThread) { this.locator = serviceLocator; this.childNodeFactory = childNodeFactory; this.looseNodeFactory = looseNodeFactory; this.solutionEvents = solutionEvents; this.adapter = adapter; this.uiThread = uiThread; }
public SolutionExplorer( [Import(typeof(SVsServiceProvider))] IServiceProvider services, // Get the IVsHierarchyItemManager from our provider, so that it's a singleton // and provided always from a UI thread. The default exported one from VS doesn't // have the PartCreationPolicy.Shared attribute and is newed up in whatever context // you're requesting it from. [Import(ContractNames.Interop.IVsHierarchyItemManager)] IVsHierarchyItemManager hierarchy, ISolutionExplorerNodeFactory factory) { Guard.NotNull(nameof(services), services); Guard.NotNull(nameof(hierarchy), hierarchy); Guard.NotNull(nameof(factory), factory); this.services = services; this.hierarchy = hierarchy; this.factory = factory; toolWindow = new Lazy <VsToolWindow> (() => new VsToolWindow(services, StandardToolWindows.ProjectExplorer)); }
public SolutionExplorer ( [Import (typeof (SVsServiceProvider))] IServiceProvider services, // Get the IVsHierarchyItemManager from our provider, so that it's a singleton // and provided always from a UI thread. The default exported one from VS doesn't // have the PartCreationPolicy.Shared attribute and is newed up in whatever context // you're requesting it from. [Import (ContractNames.Interop.IVsHierarchyItemManager)] IVsHierarchyItemManager hierarchy, ISolutionExplorerNodeFactory factory) { Guard.NotNull (nameof (services), services); Guard.NotNull (nameof (hierarchy), hierarchy); Guard.NotNull (nameof (factory), factory); this.services = services; this.hierarchy = hierarchy; this.factory = factory; toolWindow = new Lazy<VsToolWindow> (() => new VsToolWindow (services, StandardToolWindows.ProjectExplorer)); }
/// <summary> /// Initializes a new instance of the <see cref="SolutionExplorerNode"/> class. /// </summary> /// <param name="nodeKind">Kind of the node.</param> /// <param name="hierarchyItem">The underlying hierarchy represented by this node.</param> /// <param name="nodeFactory">The factory for child nodes.</param> /// <param name="adapter">The adapter service that implements the smart cast <see cref="ISolutionExplorerNode.As{T}"/>.</param> protected SolutionExplorerNode( SolutionNodeKind nodeKind, IVsHierarchyItem hierarchyItem, ISolutionExplorerNodeFactory nodeFactory, IAdapterService adapter, JoinableLazy <IVsUIHierarchyWindow> solutionExplorer) { Guard.NotNull(nameof(hierarchyItem), hierarchyItem); Guard.NotNull(nameof(nodeFactory), nodeFactory); Guard.NotNull(nameof(adapter), adapter); Guard.NotNull(nameof(solutionExplorer), solutionExplorer); this.hierarchyItem = hierarchyItem; this.nodeFactory = nodeFactory; this.adapter = adapter; this.solutionExplorer = solutionExplorer; Kind = nodeKind; parent = hierarchyItem.Parent == null ? new Lazy <ISolutionExplorerNode>(() => null) : new Lazy <ISolutionExplorerNode>(() => nodeFactory.CreateNode(hierarchyItem.Parent)); name = new Lazy <string>(() => hierarchyItem.GetProperty(VsHierarchyPropID.Name, "")); Func <bool> getHiddenProperty = () => this.hierarchyItem.GetProperty(VsHierarchyPropID.IsHiddenItem, false); isHidden = hierarchyItem.Parent != null ? new Lazy <bool>(() => getHiddenProperty() || parent.Value.IsHidden) : new Lazy <bool>(() => getHiddenProperty()); solutionNode = new JoinableLazy <ISolutionNode>(async() => await ServiceLocator.Global.GetExport <ISolutionExplorer>().Solution); if (hierarchyItem.HierarchyIdentity.IsNestedItem) { hierarchy = hierarchyItem.HierarchyIdentity.NestedHierarchy; itemId = hierarchyItem.HierarchyIdentity.NestedItemID; } else { hierarchy = hierarchyItem.HierarchyIdentity.Hierarchy; itemId = hierarchyItem.HierarchyIdentity.ItemID; } }
/// <summary> /// Initializes a new instance of the <see cref="SolutionNode"/> class. /// </summary> /// <param name="hierarchyNode">The underlying hierarchy represented by this node.</param> /// <param name="childNodeFactory">The factory for child nodes.</param> /// <param name="looseNodeFactory">The explorer node factory used to create "loose" nodes from solution explorer.</param> /// <param name="locator">The service locator.</param> /// <param name="adapter">The adapter service that implements the smart cast <see cref="ITreeNode.As{T}"/>.</param> /// <param name="solutionEvents">The solution events.</param> /// <param name="uiThread">The UI thread.</param> public SolutionNode( IVsSolutionHierarchyNode hierarchyNode, // This is the regular node factory for trees, that receives a lazy // pointer to the parent tree node. ITreeNodeFactory <IVsSolutionHierarchyNode> childNodeFactory, // This factory is used to create "loose" nodes from solution explorer ISolutionExplorerNodeFactory looseNodeFactory, IServiceLocator locator, IAdapterService adapter, ISolutionEvents solutionEvents, // Retrieving current selection must be done on the UI thread. IUIThread uiThread) : base(SolutionNodeKind.Solution, hierarchyNode, null, childNodeFactory, adapter) { this.Solution = new Lazy <EnvDTE.Solution>(() => hierarchyNode.ServiceProvider.GetService <EnvDTE.DTE>().Solution); this.nodeFactory = childNodeFactory; this.explorerNodeFactory = looseNodeFactory; this.events = solutionEvents; this.selection = new Lazy <IVsMonitorSelection>(() => locator.GetService <SVsShellMonitorSelection, IVsMonitorSelection>()); this.uiThread = uiThread; }
public VsToSolutionAdapter(ISolutionExplorerNodeFactory nodeFactory) { this.nodeFactory = nodeFactory; }
public SolutionExplorer(IServiceProvider serviceProvider, ISolutionExplorerNodeFactory nodeFactory) { m_nodeFactory = nodeFactory; m_serviceProvider = serviceProvider; }
public MsBuildAdapter(IVsSolution vsSolution, ISolutionExplorerNodeFactory nodeFactory, ISolutionExplorer solutionExplorer) { this.vsSolution = vsSolution; this.nodeFactory = nodeFactory; this.solutionExplorer = solutionExplorer; }
public VsHierarchyItemToSolutionAdapter(ISolutionExplorerNodeFactory nodeFactory) { this.nodeFactory = nodeFactory; }
public DteToSolutionAdapter(IServiceProvider serviceProvider, ISolutionExplorerNodeFactory nodeFactory) { this.serviceProvider = serviceProvider; this.nodeFactory = nodeFactory; }
public ReferenceNode(VsSolutionHierarchyNode hierarchyNode, Lazy<ISolutionExplorerNode> parentNode, ISolutionExplorerNodeFactory nodeFactory) : base(SolutionExplorerNodeKind.Reference, hierarchyNode, parentNode, nodeFactory) { m_dteReference = new Lazy<VSLangProj.Reference>(() => (VSLangProj.Reference)hierarchyNode.ExtenderObject); }
public FolderNode(VsSolutionHierarchyNode hierarchyNode, Lazy<ISolutionExplorerNode> parentNode, ISolutionExplorerNodeFactory nodeFactory) : base(SolutionExplorerNodeKind.Folder, hierarchyNode, parentNode, nodeFactory) { m_dteItem = new Lazy<EnvDTE.ProjectItem>(() => (EnvDTE.ProjectItem)hierarchyNode.ExtenderObject); }
public ItemNode(VsSolutionHierarchyNode hierarchyNode, Lazy<ISolutionExplorerNode> parentNode, ISolutionExplorerNodeFactory nodeFactory) : base(SolutionExplorerNodeKind.Item, hierarchyNode, parentNode, nodeFactory) { m_dteProjectItem = new Lazy<EnvDTE.ProjectItem>(() => (EnvDTE.ProjectItem)hierarchyNode.ExtenderObject); Properties = new ItemProperties(this); }
public SolutionNode(VsSolutionHierarchyNode hierarchyNode, ISolutionExplorerNodeFactory nodeFactory) : base(SolutionExplorerNodeKind.Solution, hierarchyNode, null, nodeFactory) { }
public ReferencesFolderNode(VsSolutionHierarchyNode hierarchyNode, Lazy<ISolutionExplorerNode> parentNode, ISolutionExplorerNodeFactory nodeFactory) : base(SolutionExplorerNodeKind.ReferencesFolder, hierarchyNode, parentNode, nodeFactory) { m_dteReferences = new Lazy<VSLangProj.References>(() => ((VSLangProj.VSProject)((EnvDTE.Project)hierarchyNode.VsHierarchy.GetProperty<object>(Microsoft.VisualStudio.Shell.Interop.__VSHPROPID.VSHPROPID_ExtObject, VSConstants.VSITEMID_ROOT)).Object).References); }
public SolutionFolderNode(VsSolutionHierarchyNode hierarchyNode, Lazy<ISolutionExplorerNode> parent, ISolutionExplorerNodeFactory nodeFactory) : base(SolutionExplorerNodeKind.SolutionFolder, hierarchyNode, parent, nodeFactory) { m_dteSolutionFolder = new Lazy<EnvDTE80.SolutionFolder>(() => (EnvDTE80.SolutionFolder)((EnvDTE.Project)hierarchyNode.ExtenderObject).Object); }