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 @@ @@ -127,6 +127,7 @@
<Compile Include="Src\EnvDTE\FileCodeModelCodeNamespaceMembers.cs" />
<Compile Include="Src\EnvDTE\IClassExtensions.cs" />
<Compile Include="Src\EnvDTE\ImplementedInterfacesOnClass.cs" />
<Compile Include="Src\EnvDTE\IParameterExtensions.cs" />
<Compile Include="Src\EnvDTE\IReturnTypeExtensions.cs" />
<Compile Include="Src\EnvDTE\NamespaceName.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 @@ -9,24 +9,25 @@ namespace ICSharpCode.PackageManagement.EnvDTE
public class CodeParameter : CodeElement
{
IProjectContent projectContent;
IParameter parameter;
public CodeParameter(IProjectContent projectContent, IParameter parameter)
{
this.projectContent = projectContent;
this.parameter = parameter;
this.Parameter = parameter;
}
protected IParameter Parameter { get; private set; }
public override vsCMElement Kind {
get { return vsCMElement.vsCMElementParameter; }
}
public override string Name {
get { return parameter.Name; }
get { return Parameter.Name; }
}
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 @@ -14,7 +14,23 @@ namespace ICSharpCode.PackageManagement.EnvDTE
}
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 {

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

@ -0,0 +1,16 @@ @@ -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 @@ -7,6 +7,11 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{
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 @@ @@ -88,6 +88,7 @@
<Compile Include="Src\EnvDTE\CodeInterfaceTests.cs" />
<Compile Include="Src\EnvDTE\CodeModelTests.cs" />
<Compile Include="Src\EnvDTE\CodeNamespaceTests.cs" />
<Compile Include="Src\EnvDTE\CodeParameter2Tests.cs" />
<Compile Include="Src\EnvDTE\CodeParameterTests.cs" />
<Compile Include="Src\EnvDTE\CodeProperty2Tests.cs" />
<Compile Include="Src\EnvDTE\CodeStructTests.cs" />
@ -112,6 +113,7 @@ @@ -112,6 +113,7 @@
<Compile Include="Src\Helpers\FakeUpdatePackageActionsFactory.cs" />
<Compile Include="Src\Helpers\MethodHelper.cs" />
<Compile Include="Src\Helpers\MethodOrPropertyHelper.cs" />
<Compile Include="Src\Helpers\ParameterHelper.cs" />
<Compile Include="Src\Helpers\ProjectContentHelper.cs" />
<Compile Include="Src\Helpers\PropertiesHelper.cs" />
<Compile Include="Src\Helpers\PropertyHelper.cs" />

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

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

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

@ -0,0 +1,44 @@ @@ -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