private void Execute(object sender, EventArgs e) { ThreadHelper.JoinableTaskFactory.Run(async delegate { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); // TODO 遅延で取らないとnullになる if ((this.DteObject = (await package.GetServiceAsync(typeof(DTE))) as DTE2) == null) { return; } // ソリューションの情報を引っ張る SolutionNode node = SolutionNode.Create(this.DteObject); var project = node.FindProjectByName(TargetProjectName); if (project == null) { Instance.OutputPane.OutputString($"ProjectName'{ TargetProjectName }' not found\n"); return; } var baseComponentName = "Egliss::Reflection::Reflectable"; var vcClasses = project.RootNode .FindAllOf <ClassNode>(); var baseComponent = vcClasses.Where(m => m.FullName == "global::" + baseComponentName).FirstOrDefault(); if (baseComponent == null) { Instance.OutputPane.OutputString($"the class({baseComponentName}) not found\n"); return; } var components = vcClasses .Where(m => m.VCClass.IsDerivedFrom[baseComponentName]) .ToList(); if (components.Count == 0) { Instance.OutputPane.OutputString($"{baseComponentName}'s child class not found\n"); return; } var tree = TypeDeriverTree.MakeTree(components, baseComponent); var description = TypeDescription .CreateDescription(tree) .Select(m => m.Value) .OrderBy(m => m.Id) .ToList(); var directory = Path.GetDirectoryName(project.Project.FileName); ClassExporter.OutputCppFile(description, $"{directory}\\Sources\\Reflection\\DynamicType.cpp"); ClassExporter.OutputInlineFile(description, $"{directory}\\Sources\\Reflection\\StaticType.inl"); Instance.OutputPane.OutputString($"class export succeed.\n"); }); }
public void WhenCreatingSolutionWithInvalidName_ThenThrows() { var solution = ServiceProvider.GetService<IVsSolution>(); var hierarchy = solution as IVsHierarchy; var solutionNode = new SolutionNode( new VsSolutionHierarchyNode(hierarchy, VSConstants.VSITEMID_ROOT), Mock.Of<ITreeNodeFactory<IVsSolutionHierarchyNode>>(), Mock.Of<ISolutionExplorerNodeFactory>(), Mock.Of<IServiceLocator>(), Mock.Of<IAdapterService>(), Mock.Of<ISolutionEvents>(), Mock.Of<IUIThread>()); Assert.Throws<ArgumentException>(() => solutionNode.Create("foo")); }
public void WhenCreatingSolutionWithInvalidName_ThenThrows() { var solution = ServiceProvider.GetService <IVsSolution>(); var hierarchy = solution as IVsHierarchy; var solutionNode = new SolutionNode( new VsSolutionHierarchyNode(hierarchy, VSConstants.VSITEMID_ROOT), Mock.Of <ITreeNodeFactory <IVsSolutionHierarchyNode> >(), Mock.Of <ISolutionExplorerNodeFactory>(), Mock.Of <IServiceLocator>(), Mock.Of <IAdapterService>(), Mock.Of <ISolutionEvents>(), Mock.Of <IUIThread>()); Assert.Throws <ArgumentException>(() => solutionNode.Create("foo")); }
public void WhenCreatingSolution_ThenIsOpenReturnsTrue() { var solution = ServiceProvider.GetService<IVsSolution>(); var hierarchy = solution as IVsHierarchy; var solutionNode = new SolutionNode( new VsSolutionHierarchyNode(hierarchy, VSConstants.VSITEMID_ROOT), Mock.Of<ITreeNodeFactory<IVsSolutionHierarchyNode>>(), Mock.Of<ISolutionExplorerNodeFactory>(), Mock.Of<IServiceLocator>(), Mock.Of<IAdapterService>(), Mock.Of<ISolutionEvents>(), Mock.Of<IUIThread>()); solutionNode.Create(GetFullPath(TestContext.TestDeploymentDir, "foo.sln")); Assert.True(solutionNode.IsOpen); }
public void WhenCreatingSolution_ThenIsOpenReturnsTrue() { var solution = ServiceProvider.GetService <IVsSolution>(); var hierarchy = solution as IVsHierarchy; var solutionNode = new SolutionNode( new VsSolutionHierarchyNode(hierarchy, VSConstants.VSITEMID_ROOT), Mock.Of <ITreeNodeFactory <IVsSolutionHierarchyNode> >(), Mock.Of <ISolutionExplorerNodeFactory>(), Mock.Of <IServiceLocator>(), Mock.Of <IAdapterService>(), Mock.Of <ISolutionEvents>(), Mock.Of <IUIThread>()); solutionNode.Create(GetFullPath(TestContext.TestDeploymentDir, "foo.sln")); Assert.True(solutionNode.IsOpen); }