You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by gb...@apache.org on 2007/09/15 19:28:02 UTC
svn commit: r575944 - in /ibatis/trunk/cs/mapper:
IBatisNet.Common.Test/NUnit/CommonTests/Utilities/TypeResolverTest.cs
IBatisNet.Common/Utilities/TypesResolver/TypeResolver.cs
Author: gbayon
Date: Sat Sep 15 10:28:01 2007
New Revision: 575944
URL: http://svn.apache.org/viewvc?rev=575944&view=rev
Log:
Fix IBATISNET-234 typeAlias does not work for generics with 2 or more generic parameters
Modified:
ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/TypeResolverTest.cs
ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/TypesResolver/TypeResolver.cs
Modified: ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/TypeResolverTest.cs
URL: http://svn.apache.org/viewvc/ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/TypeResolverTest.cs?rev=575944&r1=575943&r2=575944&view=diff
==============================================================================
--- ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/TypeResolverTest.cs (original)
+++ ibatis/trunk/cs/mapper/IBatisNet.Common.Test/NUnit/CommonTests/Utilities/TypeResolverTest.cs Sat Sep 15 10:28:01 2007
@@ -7,6 +7,7 @@
using IBatisNet.Common.Utilities.TypesResolver;
using NUnit.Framework;
using IBatisNet.Common.Utilities;
+using NUnit.Framework.SyntaxHelpers;
namespace IBatisNet.Common.Test.NUnit.CommonTests.Utilities
{
@@ -82,5 +83,37 @@
Assert.IsNotNull(listType);
}
+
+ /// <summary>
+ /// Test generic dictionary resolver
+ /// </summary>
+ [Test]
+ public void TestGenericParameter()
+ {
+ IDictionary<List<int>, List<string>> dico = new Dictionary<List<int>, List<string>>();
+
+ Console.WriteLine(typeof(IDictionary<,>).FullName);
+ Console.WriteLine(dico.GetType().FullName);
+
+ string assemblyQualifiedName = dico.GetType().AssemblyQualifiedName;
+ Type type = TypeUtils.ResolveType(assemblyQualifiedName);
+
+ Assert.IsNotNull(type);
+
+ MyGeneric<Dictionary<List<int>, List<string>>, string, List<int>, decimal> gen = new MyGeneric<Dictionary<List<int>, List<string>>, string, List<int>, decimal>();
+
+ Console.WriteLine(gen.GetType().FullName);
+
+ assemblyQualifiedName = gen.GetType().AssemblyQualifiedName;
+ type = TypeUtils.ResolveType(assemblyQualifiedName);
+
+ Assert.IsNotNull(type);
+
+ Assert.That(gen, Is.InstanceOfType(type));
+ }
+
+ private class MyGeneric<X, Y, Z, W>
+ {}
+
}
}
Modified: ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/TypesResolver/TypeResolver.cs
URL: http://svn.apache.org/viewvc/ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/TypesResolver/TypeResolver.cs?rev=575944&r1=575943&r2=575944&view=diff
==============================================================================
--- ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/TypesResolver/TypeResolver.cs (original)
+++ ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/TypesResolver/TypeResolver.cs Sat Sep 15 10:28:01 2007
@@ -31,13 +31,12 @@
#region Using
using System;
-using System.Collections;
+
#if dotnet2
using System.Collections.Generic;
#endif
using System.Reflection;
-using IBatisNet.Common.Exceptions;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
@@ -60,13 +59,6 @@
{
private const string NULLABLE_TYPE = "System.Nullable";
- #region Constructor (s) / Destructor
- /// <summary>
- /// Creates a new instance of the TypeResolver class.
- /// </summary>
- public TypeResolver () {}
- #endregion
-
#region ITypeResolver Members
/// <summary>
/// Resolves the supplied <paramref name="typeName"/> to a
@@ -461,32 +453,34 @@
private IList<string> Parse(string args)
{
- StringBuilder argument = null;
+ StringBuilder argument = new StringBuilder();
IList<string> arguments = new List<string>();
TextReader input = new StringReader(args);
- bool hasReadRightDelimiter = false;
+ int nbrOfRightDelimiter = 0;
+ bool findRight = false;
do
{
char ch = (char)input.Read();
if (ch == '[')
{
- argument = new StringBuilder();
- hasReadRightDelimiter = false;
+ nbrOfRightDelimiter++;
+ findRight = true;
}
else if (ch == ']')
{
- arguments.Add(argument.ToString());
- hasReadRightDelimiter = true;
+ nbrOfRightDelimiter--;
}
- else if (ch == ',' && hasReadRightDelimiter)
+ argument.Append(ch);
+
+ //Find one argument
+ if (findRight && nbrOfRightDelimiter == 0)
{
- hasReadRightDelimiter = false;
- }
- else
- {
- argument.Append(ch);
- hasReadRightDelimiter = false;
+ string arg = argument.ToString();
+ arg = arg.Substring(1, arg.Length - 2);
+ arguments.Add(arg);
+ input.Read();
+ argument = new StringBuilder();
}
}
while (input.Peek() != -1);
@@ -590,9 +584,9 @@
private void SplitTypeAndAssemblyNames(string originalTypeName)
{
- if (originalTypeName.StartsWith(TypeAssemblyInfo.NULLABLE_TYPE))
+ if (originalTypeName.StartsWith(NULLABLE_TYPE))
{
- int typeAssemblyIndex = originalTypeName.IndexOf(TypeAssemblyInfo.NULLABLE_TYPE_ASSEMBLY_SEPARATOR);
+ int typeAssemblyIndex = originalTypeName.IndexOf(NULLABLE_TYPE_ASSEMBLY_SEPARATOR);
if (typeAssemblyIndex < 0)
{
_unresolvedTypeName = originalTypeName;