Browse Source

Implement EnvDTE.CodeTypeRef.TypeKind.

The T4MVC template ignores methods that return something other than a reference type.
pull/28/head
Matt Ward 13 years ago
parent
commit
085dd5f0f5
  1. 2
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeRef.cs
  2. 47
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/IReturnTypeExtensions.cs
  3. 18
      src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/vsCMTypeRef.cs
  4. 190
      src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeRef2Tests.cs
  5. 5
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ReturnTypeHelper.cs

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

@ -46,7 +46,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -46,7 +46,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE
}
public virtual vsCMTypeRef TypeKind {
get { throw new NotImplementedException(); }
get { return ReturnType.GetTypeKind(); }
}
}
}

47
src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/IReturnTypeExtensions.cs

@ -35,5 +35,52 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -35,5 +35,52 @@ namespace ICSharpCode.PackageManagement.EnvDTE
}
return returnType.GetFullName();
}
public static vsCMTypeRef GetTypeKind(this IReturnType returnType)
{
vsCMTypeRef typeRef = GetSystemTypeKind(returnType.FullyQualifiedName);
if (typeRef != vsCMTypeRef.vsCMTypeRefOther) {
return typeRef;
}
if (returnType.IsReferenceType.GetValueOrDefault()) {
return vsCMTypeRef.vsCMTypeRefCodeType;
}
return vsCMTypeRef.vsCMTypeRefOther;
}
static vsCMTypeRef GetSystemTypeKind(string fullyQualifiedTypeName)
{
switch (fullyQualifiedTypeName) {
case "System.String":
return vsCMTypeRef.vsCMTypeRefString;
case "System.Void":
return vsCMTypeRef.vsCMTypeRefVoid;
case "System.Boolean":
return vsCMTypeRef.vsCMTypeRefBool;
case "System.Int16":
case "System.UInt16":
return vsCMTypeRef.vsCMTypeRefShort;
case "System.Int32":
case "System.UInt32":
return vsCMTypeRef.vsCMTypeRefInt;
case "System.Int64":
case "System.UInt64":
return vsCMTypeRef.vsCMTypeRefLong;
case "System.Decimal":
return vsCMTypeRef.vsCMTypeRefDecimal;
case "System.Char":
return vsCMTypeRef.vsCMTypeRefChar;
case "System.Byte":
return vsCMTypeRef.vsCMTypeRefByte;
case "System.Object":
return vsCMTypeRef.vsCMTypeRefObject;
case "System.Double":
return vsCMTypeRef.vsCMTypeRefDouble;
case "System.Single":
return vsCMTypeRef.vsCMTypeRefFloat;
}
return vsCMTypeRef.vsCMTypeRefOther;
}
}
}

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

@ -7,6 +7,22 @@ namespace ICSharpCode.PackageManagement.EnvDTE @@ -7,6 +7,22 @@ namespace ICSharpCode.PackageManagement.EnvDTE
{
public enum vsCMTypeRef
{
vsCMTypeRefCodeType = 1
vsCMTypeRefOther = 0,
vsCMTypeRefCodeType = 1,
vsCMTypeRefArray = 2,
vsCMTypeRefVoid = 3,
vsCMTypeRefPointer = 4,
vsCMTypeRefString = 5,
vsCMTypeRefObject = 6,
vsCMTypeRefByte = 7,
vsCMTypeRefChar = 8,
vsCMTypeRefShort = 9,
vsCMTypeRefInt = 10,
vsCMTypeRefLong = 11,
vsCMTypeRefFloat = 12,
vsCMTypeRefDouble = 13,
vsCMTypeRefDecimal = 14,
vsCMTypeRefBool = 15,
vsCMTypeRefVariant = 16
}
}

190
src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/CodeTypeRef2Tests.cs

@ -187,5 +187,195 @@ namespace PackageManagement.Tests.EnvDTE @@ -187,5 +187,195 @@ namespace PackageManagement.Tests.EnvDTE
Assert.AreEqual("Test.MyClass", name);
}
[Test]
public void TypeKind_ReturnTypeIsReferenceType_ReturnsClassType()
{
helper.CreateReturnType("Test.MyClass");
AddUnderlyingClassToReturnType("Test.MyClass");
helper.MakeReferenceType();
CreateCodeTypeRef2();
vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(vsCMTypeRef.vsCMTypeRefCodeType, kind);
}
[Test]
public void TypeKind_ReturnTypeIsNotReferenceType_ReturnsNonClassType()
{
helper.CreateReturnType("Test.MyClass");
CreateCodeTypeRef2();
vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(vsCMTypeRef.vsCMTypeRefOther, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemVoid_ReturnsVoidType()
{
helper.CreateReturnType("System.Void");
CreateCodeTypeRef2();
vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(vsCMTypeRef.vsCMTypeRefVoid, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemString_ReturnsStringType()
{
helper.CreateReturnType("System.String");
helper.MakeReferenceType();
CreateCodeTypeRef2();
vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(vsCMTypeRef.vsCMTypeRefString, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemBoolean_ReturnsBooleanType()
{
helper.CreateReturnType("System.Boolean");
CreateCodeTypeRef2();
vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(vsCMTypeRef.vsCMTypeRefBool, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemByte_ReturnsByteType()
{
helper.CreateReturnType("System.Byte");
CreateCodeTypeRef2();
vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(vsCMTypeRef.vsCMTypeRefByte, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemChar_ReturnsCharType()
{
helper.CreateReturnType("System.Char");
CreateCodeTypeRef2();
vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(vsCMTypeRef.vsCMTypeRefChar, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemDecimal_ReturnsDecimalType()
{
helper.CreateReturnType("System.Decimal");
CreateCodeTypeRef2();
vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(vsCMTypeRef.vsCMTypeRefDecimal, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemDouble_ReturnsDoubleType()
{
helper.CreateReturnType("System.Double");
CreateCodeTypeRef2();
vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(vsCMTypeRef.vsCMTypeRefDouble, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemSingle_ReturnsFloatType()
{
helper.CreateReturnType("System.Single");
CreateCodeTypeRef2();
vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(vsCMTypeRef.vsCMTypeRefFloat, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemInt32_ReturnsIntType()
{
helper.CreateReturnType("System.Int32");
CreateCodeTypeRef2();
vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(vsCMTypeRef.vsCMTypeRefInt, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemInt16_ReturnsShortType()
{
helper.CreateReturnType("System.Int16");
CreateCodeTypeRef2();
vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(vsCMTypeRef.vsCMTypeRefShort, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemInt64_ReturnsLongType()
{
helper.CreateReturnType("System.Int64");
CreateCodeTypeRef2();
vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(vsCMTypeRef.vsCMTypeRefLong, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemUInt32_ReturnsIntType()
{
helper.CreateReturnType("System.UInt32");
CreateCodeTypeRef2();
vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(vsCMTypeRef.vsCMTypeRefInt, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemUInt16_ReturnsShortType()
{
helper.CreateReturnType("System.UInt16");
CreateCodeTypeRef2();
vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(vsCMTypeRef.vsCMTypeRefShort, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemUInt64_ReturnsLongType()
{
helper.CreateReturnType("System.UInt64");
CreateCodeTypeRef2();
vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(vsCMTypeRef.vsCMTypeRefLong, kind);
}
[Test]
public void TypeKind_ReturnTypeIsSystemObject_ReturnsObjectType()
{
helper.CreateReturnType("System.Object");
CreateCodeTypeRef2();
vsCMTypeRef kind = typeRef.TypeKind;
Assert.AreEqual(vsCMTypeRef.vsCMTypeRefObject, kind);
}
}
}

5
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ReturnTypeHelper.cs

@ -32,5 +32,10 @@ namespace PackageManagement.Tests.Helpers @@ -32,5 +32,10 @@ namespace PackageManagement.Tests.Helpers
{
ReturnType.Stub(t => t.GetUnderlyingClass()).Return(c);
}
public void MakeReferenceType()
{
ReturnType.Stub(t => t.IsReferenceType).Return(true);
}
}
}

Loading…
Cancel
Save