Browse Source

Implement EnvDTE.CodeParameter2.ParameterKind

The T4MVC template checks whether a parameter is optional so it can determine which controller action methods can be called without any parameters.
pull/28/head
Matt Ward 14 years ago
parent
commit
b80bfb80b6
  1. 1
      src/AddIns/Misc/PackageManagement/Project/PackageManagement.csproj
  2. 9
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameter.cs
  3. 18
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameter2.cs
  4. 16
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/IParameterExtensions.cs
  5. 7
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/vsCMParameterKind.cs
  6. 2
      src/AddIns/Misc/PackageManagement/Test/PackageManagement.Tests.csproj
  7. 93
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeParameter2Tests.cs
  8. 10
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeParameterTests.cs
  9. 44
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ParameterHelper.cs

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

@ -127,6 +127,7 @@
<Compile Include="Src\EnvDTE\FileCodeModelCodeNamespaceMembers.cs" /> <Compile Include="Src\EnvDTE\FileCodeModelCodeNamespaceMembers.cs" />
<Compile Include="Src\EnvDTE\IClassExtensions.cs" /> <Compile Include="Src\EnvDTE\IClassExtensions.cs" />
<Compile Include="Src\EnvDTE\ImplementedInterfacesOnClass.cs" /> <Compile Include="Src\EnvDTE\ImplementedInterfacesOnClass.cs" />
<Compile Include="Src\EnvDTE\IParameterExtensions.cs" />
<Compile Include="Src\EnvDTE\IReturnTypeExtensions.cs" /> <Compile Include="Src\EnvDTE\IReturnTypeExtensions.cs" />
<Compile Include="Src\EnvDTE\NamespaceName.cs" /> <Compile Include="Src\EnvDTE\NamespaceName.cs" />
<Compile Include="Src\EnvDTE\PartialClasses.cs" /> <Compile Include="Src\EnvDTE\PartialClasses.cs" />

9
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameter.cs

@ -9,24 +9,25 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public class CodeParameter : CodeElement public class CodeParameter : CodeElement
{ {
IProjectContent projectContent; IProjectContent projectContent;
IParameter parameter;
public CodeParameter(IProjectContent projectContent, IParameter parameter) public CodeParameter(IProjectContent projectContent, IParameter parameter)
{ {
this.projectContent = projectContent; this.projectContent = projectContent;
this.parameter = parameter; this.Parameter = parameter;
} }
protected IParameter Parameter { get; private set; }
public override vsCMElement Kind { public override vsCMElement Kind {
get { return vsCMElement.vsCMElementParameter; } get { return vsCMElement.vsCMElementParameter; }
} }
public override string Name { public override string Name {
get { return parameter.Name; } get { return Parameter.Name; }
} }
public virtual CodeTypeRef2 Type { public virtual CodeTypeRef2 Type {
get { return new CodeTypeRef2(projectContent, this, parameter.ReturnType); } get { return new CodeTypeRef2(projectContent, this, Parameter.ReturnType); }
} }
} }
} }

18
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeParameter2.cs

@ -14,7 +14,23 @@ namespace ICSharpCode.PackageManagement.EnvDTE
} }
public virtual vsCMParameterKind ParameterKind { public virtual vsCMParameterKind ParameterKind {
get { throw new NotImplementedException(); } get { return GetParameterKind(); }
}
vsCMParameterKind GetParameterKind()
{
if (Parameter.IsOptional) {
return vsCMParameterKind.vsCMParameterKindOptional;
} else if (Parameter.IsOut) {
return vsCMParameterKind.vsCMParameterKindOut;
} else if (Parameter.IsRef) {
return vsCMParameterKind.vsCMParameterKindRef;
} else if (Parameter.IsParams) {
return vsCMParameterKind.vsCMParameterKindParamArray;
} else if (Parameter.IsIn()) {
return vsCMParameterKind.vsCMParameterKindIn;
}
return vsCMParameterKind.vsCMParameterKindNone;
} }
public virtual CodeElements Attributes { public virtual CodeElements Attributes {

16
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/IParameterExtensions.cs

@ -0,0 +1,16 @@
// 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.SharpDevelop.Dom;
namespace ICSharpCode.PackageManagement.EnvDTE
{
public static class IParameterExtensions
{
public static bool IsIn(this IParameter parameter)
{
return (parameter.Modifiers & ParameterModifiers.In) == ParameterModifiers.In;
}
}
}

7
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/vsCMParameterKind.cs

@ -7,6 +7,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{ {
public enum vsCMParameterKind public enum vsCMParameterKind
{ {
vsCMParameterKindOptional = 8 vsCMParameterKindNone = 0,
vsCMParameterKindIn = 1,
vsCMParameterKindRef = 2,
vsCMParameterKindOut = 4,
vsCMParameterKindOptional = 8,
vsCMParameterKindParamArray = 16
} }
} }

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

@ -88,6 +88,7 @@
<Compile Include="Src\EnvDTE\CodeInterfaceTests.cs" /> <Compile Include="Src\EnvDTE\CodeInterfaceTests.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" />
<Compile Include="Src\EnvDTE\CodeParameter2Tests.cs" />
<Compile Include="Src\EnvDTE\CodeParameterTests.cs" /> <Compile Include="Src\EnvDTE\CodeParameterTests.cs" />
<Compile Include="Src\EnvDTE\CodeProperty2Tests.cs" /> <Compile Include="Src\EnvDTE\CodeProperty2Tests.cs" />
<Compile Include="Src\EnvDTE\CodeStructTests.cs" /> <Compile Include="Src\EnvDTE\CodeStructTests.cs" />
@ -112,6 +113,7 @@
<Compile Include="Src\Helpers\FakeUpdatePackageActionsFactory.cs" /> <Compile Include="Src\Helpers\FakeUpdatePackageActionsFactory.cs" />
<Compile Include="Src\Helpers\MethodHelper.cs" /> <Compile Include="Src\Helpers\MethodHelper.cs" />
<Compile Include="Src\Helpers\MethodOrPropertyHelper.cs" /> <Compile Include="Src\Helpers\MethodOrPropertyHelper.cs" />
<Compile Include="Src\Helpers\ParameterHelper.cs" />
<Compile Include="Src\Helpers\ProjectContentHelper.cs" /> <Compile Include="Src\Helpers\ProjectContentHelper.cs" />
<Compile Include="Src\Helpers\PropertiesHelper.cs" /> <Compile Include="Src\Helpers\PropertiesHelper.cs" />
<Compile Include="Src\Helpers\PropertyHelper.cs" /> <Compile Include="Src\Helpers\PropertyHelper.cs" />

93
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeParameter2Tests.cs

@ -0,0 +1,93 @@
// 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 NUnit.Framework;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests.EnvDTE
{
[TestFixture]
public class CodeParameter2Tests
{
ParameterHelper helper;
CodeParameter2 parameter;
[SetUp]
public void Init()
{
helper = new ParameterHelper();
}
void CreateParameter()
{
parameter = new CodeParameter2(null, helper.Parameter);
}
[Test]
public void ParameterKind_NormalParameter_ReturnsNone()
{
CreateParameter();
vsCMParameterKind kind = parameter.ParameterKind;
Assert.AreEqual(vsCMParameterKind.vsCMParameterKindNone, kind);
}
[Test]
public void ParameterKind_OptionalParameter_ReturnsOptional()
{
CreateParameter();
helper.MakeOptionalParameter();
vsCMParameterKind kind = parameter.ParameterKind;
Assert.AreEqual(vsCMParameterKind.vsCMParameterKindOptional, kind);
}
[Test]
public void ParameterKind_OutParameter_ReturnsOut()
{
CreateParameter();
helper.MakeOutParameter();
vsCMParameterKind kind = parameter.ParameterKind;
Assert.AreEqual(vsCMParameterKind.vsCMParameterKindOut, kind);
}
[Test]
public void ParameterKind_RefParameter_ReturnsRef()
{
CreateParameter();
helper.MakeRefParameter();
vsCMParameterKind kind = parameter.ParameterKind;
Assert.AreEqual(vsCMParameterKind.vsCMParameterKindRef, kind);
}
[Test]
public void ParameterKind_ParamArrayParameter_ReturnsParamArray()
{
CreateParameter();
helper.MakeParamArrayParameter();
vsCMParameterKind kind = parameter.ParameterKind;
Assert.AreEqual(vsCMParameterKind.vsCMParameterKindParamArray, kind);
}
[Test]
public void ParameterKind_InParameter_ReturnsIn()
{
CreateParameter();
helper.MakeInParameter();
vsCMParameterKind kind = parameter.ParameterKind;
Assert.AreEqual(vsCMParameterKind.vsCMParameterKindIn, kind);
}
}
}

10
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeParameterTests.cs

@ -4,17 +4,25 @@
using System; using System;
using ICSharpCode.PackageManagement.EnvDTE; using ICSharpCode.PackageManagement.EnvDTE;
using NUnit.Framework; using NUnit.Framework;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests.EnvDTE namespace PackageManagement.Tests.EnvDTE
{ {
[TestFixture] [TestFixture]
public class CodeParameterTests public class CodeParameterTests
{ {
ParameterHelper helper;
CodeParameter parameter; CodeParameter parameter;
[SetUp]
public void Init()
{
helper = new ParameterHelper();
}
void CreateParameter() void CreateParameter()
{ {
parameter = new CodeParameter(null, null); parameter = new CodeParameter(null, helper.Parameter);
} }
[Test] [Test]

44
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ParameterHelper.cs

@ -0,0 +1,44 @@
// 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.SharpDevelop.Dom;
using Rhino.Mocks;
namespace PackageManagement.Tests.Helpers
{
public class ParameterHelper
{
public IParameter Parameter;
public ParameterHelper()
{
Parameter = MockRepository.GenerateStub<IParameter>();
}
public void MakeOptionalParameter()
{
Parameter.Stub(p => p.IsOptional).Return(true);
}
public void MakeOutParameter()
{
Parameter.Stub(p => p.IsOut).Return(true);
}
public void MakeRefParameter()
{
Parameter.Stub(p => p.IsRef).Return(true);
}
public void MakeParamArrayParameter()
{
Parameter.Stub(p => p.IsParams).Return(true);
}
public void MakeInParameter()
{
Parameter.Stub(p => p.Modifiers).Return(ParameterModifiers.In);
}
}
}
Loading…
Cancel
Save