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;