Browse Source

Implement EnvDTE.CodeElement.Language.

pull/28/head
Matt Ward 14 years ago
parent
commit
5b528bc2eb
  1. 1
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  2. 29
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs
  3. 13
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModelLanguageConstants.cs
  4. 2
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespace.cs
  5. 1
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  6. 61
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs
  7. 24
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs
  8. 14
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectContentHelper.cs

1
src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj

@ -86,6 +86,7 @@
<Compile Include="Src\EnvDTE\CodeFunction.cs" /> <Compile Include="Src\EnvDTE\CodeFunction.cs" />
<Compile Include="Src\EnvDTE\CodeInterface.cs" /> <Compile Include="Src\EnvDTE\CodeInterface.cs" />
<Compile Include="Src\EnvDTE\CodeModel.cs" /> <Compile Include="Src\EnvDTE\CodeModel.cs" />
<Compile Include="Src\EnvDTE\CodeModelLanguageConstants.cs" />
<Compile Include="Src\EnvDTE\CodeNamespace.cs" /> <Compile Include="Src\EnvDTE\CodeNamespace.cs" />
<Compile Include="Src\EnvDTE\CodeProperty.cs" /> <Compile Include="Src\EnvDTE\CodeProperty.cs" />
<Compile Include="Src\EnvDTE\CodeProperty2.cs" /> <Compile Include="Src\EnvDTE\CodeProperty2.cs" />

29
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs

@ -3,18 +3,33 @@
using System; using System;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.PackageManagement.EnvDTE namespace ICSharpCode.PackageManagement.EnvDTE
{ {
public class CodeElement : MarshalByRefObject public class CodeElement : MarshalByRefObject
{ {
DTE dte;
public CodeElement()
{
}
public CodeElement(IEntity entity) public CodeElement(IEntity entity)
{ {
this.Entity = entity; this.Entity = entity;
this.Language = GetLanguage(entity.ProjectContent);
} }
public CodeElement() 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;
} }
protected IEntity Entity { get; private set; } protected IEntity Entity { get; private set; }
@ -29,7 +44,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
return Entity.FullyQualifiedName.Substring(index + 1); return Entity.FullyQualifiedName.Substring(index + 1);
} }
public virtual string Language { get; private set; } public virtual string Language { get; protected set; }
// default is vsCMPart.vsCMPartWholeWithAttributes // default is vsCMPart.vsCMPartWholeWithAttributes
public virtual TextPoint GetStartPoint() public virtual TextPoint GetStartPoint()
@ -43,6 +58,14 @@ namespace ICSharpCode.PackageManagement.EnvDTE
} }
public virtual vsCMInfoLocation InfoLocation { get; protected set; } public virtual vsCMInfoLocation InfoLocation { get; protected set; }
public virtual DTE DTE { get; private set; }
public virtual DTE DTE {
get {
if (dte == null) {
dte = new DTE();
}
return dte;
}
}
} }
} }

13
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeModelLanguageConstants.cs

@ -0,0 +1,13 @@
// 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}";
}
}

2
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeNamespace.cs

@ -18,11 +18,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE
} }
public CodeNamespace(IProjectContent projectContent, NamespaceName namespaceName) public CodeNamespace(IProjectContent projectContent, NamespaceName namespaceName)
: base(null)
{ {
this.projectContent = projectContent; this.projectContent = projectContent;
this.namespaceName = namespaceName; this.namespaceName = namespaceName;
this.InfoLocation = vsCMInfoLocation.vsCMInfoLocationExternal; this.InfoLocation = vsCMInfoLocation.vsCMInfoLocationExternal;
this.Language = GetLanguage(projectContent);
} }
internal string QualifiedName { internal string QualifiedName {

1
src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj

@ -72,6 +72,7 @@
<Compile Include="..\..\..\..\Main\GlobalAssemblyInfo.cs"> <Compile Include="..\..\..\..\Main\GlobalAssemblyInfo.cs">
<Link>Properties\GlobalAssemblyInfo.cs</Link> <Link>Properties\GlobalAssemblyInfo.cs</Link>
</Compile> </Compile>
<Compile Include="Src\EnvDTE\CodeClass2Tests.cs" />
<Compile Include="Src\EnvDTE\CodeElementsInNamespaceTests.cs" /> <Compile Include="Src\EnvDTE\CodeElementsInNamespaceTests.cs" />
<Compile Include="Src\EnvDTE\CodeModelTests.cs" /> <Compile Include="Src\EnvDTE\CodeModelTests.cs" />
<Compile Include="Src\EnvDTE\CodeNamespaceTests.cs" /> <Compile Include="Src\EnvDTE\CodeNamespaceTests.cs" />

61
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeClass2Tests.cs

@ -0,0 +1,61 @@
// 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 NUnit.Framework;
using PackageManagement.Tests.Helpers;
using Rhino.Mocks;
namespace PackageManagement.Tests.EnvDTE
{
[TestFixture]
public class CodeClass2Tests
{
CodeClass2 codeClass;
ProjectContentHelper helper;
IClass fakeClass;
void CreateProjectContent()
{
helper = new ProjectContentHelper();
}
void CreateClass(string name)
{
fakeClass = helper.AddClassToProjectContent(name);
codeClass = new CodeClass2(helper.FakeProjectContent, fakeClass);
}
void CreateMSBuildClass(string name)
{
fakeClass = MockRepository.GenerateStub<IClass>();
fakeClass.Stub(c => c.FullyQualifiedName).Return(name);
}
[Test]
public void Language_CSharpProject_ReturnsCSharpModelLanguage()
{
CreateProjectContent();
helper.ProjectContentIsForCSharpProject();
CreateClass("MyClass");
string language = codeClass.Language;
Assert.AreEqual(CodeModelLanguageConstants.vsCMLanguageCSharp, language);
}
[Test]
public void Language_VisualBasicProject_ReturnsVisualBasicModelLanguage()
{
CreateProjectContent();
helper.ProjectContentIsForVisualBasicProject();
CreateClass("MyClass");
string language = codeClass.Language;
Assert.AreEqual(CodeModelLanguageConstants.vsCMLanguageVB, language);
}
}
}

24
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeNamespaceTests.cs

@ -125,5 +125,29 @@ namespace PackageManagement.Tests.EnvDTE
Assert.AreEqual(0, members.Count); Assert.AreEqual(0, members.Count);
} }
[Test]
public void Language_CSharpProject_ReturnsCSharpModelLanguage()
{
CreateProjectContent();
helper.ProjectContentIsForCSharpProject();
CreateCodeNamespace(String.Empty);
string language = codeNamespace.Language;
Assert.AreEqual(CodeModelLanguageConstants.vsCMLanguageCSharp, language);
}
[Test]
public void Language_VisualBasicProject_ReturnsVisualBasicModelLanguage()
{
CreateProjectContent();
helper.ProjectContentIsForVisualBasicProject();
CreateCodeNamespace(String.Empty);
string language = codeNamespace.Language;
Assert.AreEqual(CodeModelLanguageConstants.vsCMLanguageVB, language);
}
} }
} }

14
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectContentHelper.cs

@ -138,5 +138,19 @@ namespace PackageManagement.Tests.Helpers
entries.Add(fakeClass); entries.Add(fakeClass);
AddCompletionEntriesToNamespace(namespaceName, entries); AddCompletionEntriesToNamespace(namespaceName, entries);
} }
public void ProjectContentIsForCSharpProject()
{
TestableProject project = ProjectHelper.CreateTestProject();
project.FileName = @"c:\projects\myproject.csproj";
SetProjectForProjectContent(project);
}
public void ProjectContentIsForVisualBasicProject()
{
TestableProject project = ProjectHelper.CreateTestProject();
project.FileName = @"c:\projects\myproject.vbproj";
SetProjectForProjectContent(project);
}
} }
} }

Loading…
Cancel
Save