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");
            });
        }
Esempio n. 2
0
			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"));
			}
Esempio n. 3
0
            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"));
            }
Esempio n. 4
0
			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);
			}
Esempio n. 5
0
            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);
            }