From 08b85bb7ec9be0354dd50f1f3000dfcc0cbb78a1 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Wed, 17 Oct 2012 20:14:20 +0100 Subject: [PATCH] Implement EnvDTE.CodeModel.Language Used by EntityFramework to determine which migration config template to use. --- .../Project/PackageManagement.csproj | 2 +- .../Project/Src/EnvDTE/CodeElement.cs | 13 +--- .../Project/Src/EnvDTE/CodeModel.cs | 2 +- .../Src/EnvDTE/CodeModelLanguageConstants.cs | 13 ---- .../Project/Src/EnvDTE/CodeNamespace.cs | 2 +- .../Project/Src/IProjectContentExtensions.cs | 24 +++++++ .../SharpDevelop.EnvDTE.vbproj | 1 + .../Src/CodeLanguageModelConstants.vb | 9 +++ .../Test/Src/EnvDTE/CodeClass2Tests.cs | 4 +- .../Test/Src/EnvDTE/CodeModelTests.cs | 65 ++++++++++++++++++- .../Test/Src/EnvDTE/CodeNamespaceTests.cs | 4 +- 11 files changed, 104 insertions(+), 35 deletions(-) delete mode 100644 src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModelLanguageConstants.cs create mode 100644 src/AddIns/Misc/PackageManagement/Project/Src/IProjectContentExtensions.cs create mode 100644 src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/CodeLanguageModelConstants.vb diff --git a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj index 53f276d9bd..cee6ae3b57 100644 --- a/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj +++ b/src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj @@ -102,7 +102,6 @@ - @@ -148,6 +147,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs index f65e420952..8de4c1504b 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs @@ -18,18 +18,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE public CodeElement(IEntity entity) { this.Entity = entity; - this.Language = GetLanguage(entity.ProjectContent); - } - - protected string GetLanguage(IProjectContent projectContent) - { - if (projectContent.Project != null) { - var projectType = new ProjectType(projectContent.Project as MSBuildBasedProject); - if (projectType.Type == ProjectType.VBNet) { - return CodeModelLanguageConstants.vsCMLanguageVB; - } - } - return CodeModelLanguageConstants.vsCMLanguageCSharp; + this.Language = entity.ProjectContent.GetCodeModelLanguage(); } protected IEntity Entity { get; private set; } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModel.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModel.cs index b704917798..7e78152489 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModel.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModel.cs @@ -43,7 +43,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE } public string Language { - get { throw new NotImplementedException(); } + get { return projectContent.GetCodeModelLanguage(); } } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModelLanguageConstants.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModelLanguageConstants.cs deleted file mode 100644 index 1c82f38b29..0000000000 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModelLanguageConstants.cs +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) -// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) - -using System; - -namespace ICSharpCode.PackageManagement.EnvDTE -{ - public abstract class CodeModelLanguageConstants - { - public const string vsCMLanguageCSharp = "{B5E9BD34-6D3E-4B5D-925E-8A43B79820B4}"; - public const string vsCMLanguageVB = "{B5E9BD33-6D3E-4B5D-925E-8A43B79820B4}"; - } -} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespace.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespace.cs index f7de2ae4a8..7a539f033d 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespace.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespace.cs @@ -21,7 +21,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE this.projectContent = projectContent; this.namespaceName = namespaceName; this.InfoLocation = global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal; - this.Language = GetLanguage(projectContent); + this.Language = projectContent.GetCodeModelLanguage(); } public override global::EnvDTE.vsCMElement Kind { diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IProjectContentExtensions.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IProjectContentExtensions.cs new file mode 100644 index 0000000000..810f70b5e7 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/Project/Src/IProjectContentExtensions.cs @@ -0,0 +1,24 @@ +// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +using System; +using ICSharpCode.PackageManagement.EnvDTE; +using ICSharpCode.SharpDevelop.Dom; +using ICSharpCode.SharpDevelop.Project; + +namespace ICSharpCode.PackageManagement +{ + public static class IProjectContentExtensions + { + public static string GetCodeModelLanguage(this IProjectContent projectContent) + { + if (projectContent.Project != null) { + var projectType = new ProjectType(projectContent.Project as MSBuildBasedProject); + if (projectType.Type == ProjectType.VBNet) { + return global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageVB; + } + } + return global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageCSharp; + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/SharpDevelop.EnvDTE.vbproj b/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/SharpDevelop.EnvDTE.vbproj index e46d4128d9..0661024977 100644 --- a/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/SharpDevelop.EnvDTE.vbproj +++ b/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/SharpDevelop.EnvDTE.vbproj @@ -65,6 +65,7 @@ + diff --git a/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/CodeLanguageModelConstants.vb b/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/CodeLanguageModelConstants.vb new file mode 100644 index 0000000000..9d966f6910 --- /dev/null +++ b/src/AddIns/Misc/PackageManagement/SharpDevelop.EnvDTE/Src/CodeLanguageModelConstants.vb @@ -0,0 +1,9 @@ +' Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt) +' This code is distributed under the GNU LGPL (for details please see \doc\license.txt) + +Namespace EnvDTE + Public MustInherit Class CodeLanguageModelConstants + Public Const vsCMLanguageCSharp As String = "{B5E9BD34-6D3E-4B5D-925E-8A43B79820B4}" + Public Const vsCMLanguageVB As String = "B5E9BD33-6D3E-4B5D-925E-8A43B79820B4}" + End Class +End Namespace diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs index 9ca7413188..cc61a3c1ef 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs @@ -117,7 +117,7 @@ namespace PackageManagement.Tests.EnvDTE string language = codeClass.Language; - Assert.AreEqual(CodeModelLanguageConstants.vsCMLanguageCSharp, language); + Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageCSharp, language); } [Test] @@ -129,7 +129,7 @@ namespace PackageManagement.Tests.EnvDTE string language = codeClass.Language; - Assert.AreEqual(CodeModelLanguageConstants.vsCMLanguageVB, language); + Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageVB, language); } [Test] diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs index c80bd3b7cf..e899345442 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeModelTests.cs @@ -21,10 +21,39 @@ namespace PackageManagement.Tests.EnvDTE void CreateCodeModel() { - helper = new ProjectContentHelper(); + CreateProjectContentHelper(); + CreateProjectForProjectContent(); + CreateCodeModel(helper.ProjectContent); + } + + void CreateProjectForProjectContent() + { msbuildProject = ProjectHelper.CreateTestProject(); helper.SetProjectForProjectContent(msbuildProject); - codeModel = new CodeModel(helper.ProjectContent); + } + + void CreateProjectContentHelper() + { + helper = new ProjectContentHelper(); + } + + void CreateCodeModel(IProjectContent projectContent) + { + codeModel = new CodeModel(projectContent); + } + + void CreateCodeModelWithCSharpProject() + { + CreateProjectContentHelper(); + helper.ProjectContentIsForCSharpProject(); + CreateCodeModel(helper.ProjectContent); + } + + void CreateCodeModelWithVisualBasicProject() + { + CreateProjectContentHelper(); + helper.ProjectContentIsForVisualBasicProject(); + CreateCodeModel(helper.ProjectContent); } void AddClassToProjectContent(string className) @@ -52,6 +81,16 @@ namespace PackageManagement.Tests.EnvDTE helper.AddInterfaceToDifferentProjectContent(interfaceName); } + void ProjectIsCSharpProject() + { + helper.ProjectContentIsForCSharpProject(); + } + + void ProjectIsVisualBasicProject() + { + helper.ProjectContentIsForVisualBasicProject(); + } + [Test] public void CodeTypeFromFullName_NoSuchTypeInProject_ReturnsNull() { @@ -184,7 +223,7 @@ namespace PackageManagement.Tests.EnvDTE Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationProject, codeClass.InfoLocation); } - + [Test] public void CodeTypeFromFullName_ClassExistsInDifferentProject_InfoLocationIsExternal() { @@ -217,5 +256,25 @@ namespace PackageManagement.Tests.EnvDTE Assert.AreEqual(global::EnvDTE.vsCMInfoLocation.vsCMInfoLocationExternal, codeInterface.InfoLocation); } + + [Test] + public void Language_CSharpProject_ReturnsCSharpProjectGuid() + { + CreateCodeModelWithCSharpProject(); + + string language = codeModel.Language; + + Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageCSharp, language); + } + + [Test] + public void Language_VisualBasicProject_ReturnsVisualBasicProjectGuid() + { + CreateCodeModelWithVisualBasicProject(); + + string language = codeModel.Language; + + Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageVB, language); + } } } diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs index ed20292651..f65d807498 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs @@ -135,7 +135,7 @@ namespace PackageManagement.Tests.EnvDTE string language = codeNamespace.Language; - Assert.AreEqual(CodeModelLanguageConstants.vsCMLanguageCSharp, language); + Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageCSharp, language); } [Test] @@ -147,7 +147,7 @@ namespace PackageManagement.Tests.EnvDTE string language = codeNamespace.Language; - Assert.AreEqual(CodeModelLanguageConstants.vsCMLanguageVB, language); + Assert.AreEqual(global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageVB, language); } [Test]