From: T. T. <te...@gm...> - 2008-12-28 22:23:28
|
Commit log? Tuna Toksöz http://tunatoksoz.com Typos included to enhance the readers attention! On Mon, Dec 29, 2008 at 12:20 AM, <dav...@us...> wrote: > Revision: 3967 > > http://nhibernate.svn.sourceforge.net/nhibernate/?rev=3967&view=rev > Author: davybrion > Date: 2008-12-28 22:20:58 +0000 (Sun, 28 Dec 2008) > > Log Message: > ----------- > > > Modified Paths: > -------------- > trunk/nhibernate/src/NHibernate/Proxy/Poco/BasicLazyInitializer.cs > trunk/nhibernate/src/NHibernate/Util/ReflectHelper.cs > trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj > trunk/nhibernate/src/NHibernate.Test/UtilityTest/ReflectHelperFixture.cs > > Added Paths: > ----------- > trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/ > > trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/CategoryWithInheritedId.cs > > trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/EntityInt32.cs > trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/Fixture.cs > > trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/Mappings.hbm.xml > > trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/ProductWithInheritedId.cs > > Modified: > trunk/nhibernate/src/NHibernate/Proxy/Poco/BasicLazyInitializer.cs > =================================================================== > --- trunk/nhibernate/src/NHibernate/Proxy/Poco/BasicLazyInitializer.cs > 2008-12-27 19:53:57 UTC (rev 3966) > +++ trunk/nhibernate/src/NHibernate/Proxy/Poco/BasicLazyInitializer.cs > 2008-12-28 22:20:58 UTC (rev 3967) > @@ -62,7 +62,7 @@ > /// underlying proxied object is needed then it returns the > result <see cref="AbstractLazyInitializer.InvokeImplementation"/> > /// which indicates that the Proxy will need to forward to > the real implementation. > /// </returns> > - public virtual object Invoke(MethodBase method, object[] > args, object proxy) > + public virtual object Invoke(MethodInfo method, object[] > args, object proxy) > { > string methodName = method.Name; > int paramCount = method.GetParameters().Length; > @@ -73,7 +73,7 @@ > { > return > IdentityEqualityComparer.GetHashCode(proxy); > } > - else if (IsUninitialized && > method.Equals(getIdentifierMethod)) > + else if (IsUninitialized && > IsEqualToIdentifierMethod(method)) > { > return Identifier; > } > @@ -135,5 +135,18 @@ > return InvokeImplementation; > } > > + private bool IsEqualToIdentifierMethod(MethodInfo method) > + { > + if (getIdentifierMethod != null) > + { > + // in the case of inherited identifier > methods (from a base class or an iterface) the > + // passed in MethodBase object is not equal > to the getIdentifierMethod instance that we > + // have... but if their names and return > types are identical, then it is the correct > + // identifier method > + return > method.Name.Equals(getIdentifierMethod.Name) && > method.ReturnType.Equals(getIdentifierMethod.ReturnType); > + } > + > + return false; > + } > } > } > > Modified: trunk/nhibernate/src/NHibernate/Util/ReflectHelper.cs > =================================================================== > --- trunk/nhibernate/src/NHibernate/Util/ReflectHelper.cs 2008-12-27 > 19:53:57 UTC (rev 3966) > +++ trunk/nhibernate/src/NHibernate/Util/ReflectHelper.cs 2008-12-28 > 22:20:58 UTC (rev 3967) > @@ -19,7 +19,7 @@ > private static readonly ILog log = > LogManager.GetLogger(typeof(ReflectHelper)); > > public static BindingFlags AnyVisibilityInstance = > BindingFlags.Instance | BindingFlags.Public | > - > BindingFlags.NonPublic; > + > BindingFlags.NonPublic; > > private ReflectHelper() > { > @@ -29,7 +29,7 @@ > private static System.Type[] NoClasses = > System.Type.EmptyTypes; > > private static readonly MethodInfo > Exception_InternalPreserveStackTrace = > - typeof > (Exception).GetMethod("InternalPreserveStackTrace", BindingFlags.Instance | > BindingFlags.NonPublic); > + > typeof(Exception).GetMethod("InternalPreserveStackTrace", > BindingFlags.Instance | BindingFlags.NonPublic); > > /// <summary> > /// Determine if the specified <see cref="System.Type"/> > overrides the > @@ -41,7 +41,7 @@ > { > try > { > - MethodInfo equals = > clazz.GetMethod("Equals", new System.Type[] {typeof(object)}); > + MethodInfo equals = > clazz.GetMethod("Equals", new System.Type[] { typeof(object) }); > if (equals == null) > { > return false; > @@ -127,7 +127,7 @@ > System.Type heuristicClass = propertyClass; > > if (propertyClass.IsGenericType > - && > propertyClass.GetGenericTypeDefinition().Equals(typeof(Nullable<>))) > + && > propertyClass.GetGenericTypeDefinition().Equals(typeof(Nullable<>))) > { > heuristicClass = > propertyClass.GetGenericArguments()[0]; > } > @@ -292,15 +292,15 @@ > > public static bool TryLoadAssembly(string assemblyName) > { > - if(string.IsNullOrEmpty(assemblyName)) > + if (string.IsNullOrEmpty(assemblyName)) > return false; > > - bool result= true; > + bool result = true; > try > { > Assembly.Load(assemblyName); > } > - catch(Exception) > + catch (Exception) > { > result = false; > } > @@ -446,7 +446,7 @@ > /// <returns>The unwrapped exception.</returns> > public static Exception > UnwrapTargetInvocationException(TargetInvocationException ex) > { > - > Exception_InternalPreserveStackTrace.Invoke(ex.InnerException, new Object[] > {}); > + > Exception_InternalPreserveStackTrace.Invoke(ex.InnerException, new Object[] > { }); > return ex.InnerException; > } > > @@ -472,14 +472,7 @@ > } > > System.Type[] tps = GetMethodSignature(method); > - try > - { > - return type.GetMethod(method.Name, > defaultBindingFlags, null, tps, null); > - } > - catch (Exception) > - { > - return null; > - } > + return SafeGetMethod(type, method, tps); > } > > /// <summary> > @@ -493,6 +486,8 @@ > /// </remarks> > public static MethodInfo > TryGetMethod(IEnumerable<System.Type> types, MethodInfo method) > { > + var bindingFlags = BindingFlags.Instance | > BindingFlags.Public | BindingFlags.NonPublic; > + > // This method will be used when we support multiple > proxy interfaces. > if (types == null) > { > @@ -505,21 +500,16 @@ > > System.Type[] tps = GetMethodSignature(method); > MethodInfo result = null; > + > foreach (var type in types) > { > - try > + result = SafeGetMethod(type, method, tps); > + if (result != null) > { > - result = > type.GetMethod(method.Name, defaultBindingFlags, null, tps, null); > - if (result != null) > - { > - return result; > - } > + return result; > } > - catch (Exception) > - { > - return null; > - } > } > + > return result; > } > > @@ -533,5 +523,19 @@ > } > return tps; > } > + > + private static MethodInfo SafeGetMethod(System.Type type, > MethodInfo method, System.Type[] tps) > + { > + var bindingFlags = BindingFlags.Instance | > BindingFlags.Public | BindingFlags.NonPublic; > + > + try > + { > + return type.GetMethod(method.Name, > bindingFlags, null, tps, null); > + } > + catch (Exception) > + { > + return null; > + } > + } > } > } > > Added: > trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/CategoryWithInheritedId.cs > =================================================================== > --- > trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/CategoryWithInheritedId.cs > (rev 0) > +++ > trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/CategoryWithInheritedId.cs > 2008-12-28 22:20:58 UTC (rev 3967) > @@ -0,0 +1,15 @@ > +using System; > + > +namespace NHibernate.Test.NHSpecificTest.NH1549 > +{ > + public class CategoryWithInheritedId : EntityInt32 > + { > + public virtual string Name { get; set; } > + } > + > + public class CategoryWithId > + { > + public virtual int Id { get; set; } > + public virtual string Name { get; set; } > + } > +} > \ No newline at end of file > > > Property changes on: > trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/CategoryWithInheritedId.cs > ___________________________________________________________________ > Added: svn:mergeinfo > + > > Added: > trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/EntityInt32.cs > =================================================================== > --- > trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/EntityInt32.cs > (rev 0) > +++ > trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/EntityInt32.cs > 2008-12-28 22:20:58 UTC (rev 3967) > @@ -0,0 +1,7 @@ > +namespace NHibernate.Test.NHSpecificTest.NH1549 > +{ > + public abstract class EntityInt32 > + { > + public virtual int Id { get; set; } > + } > +} > \ No newline at end of file > > Added: > trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/Fixture.cs > =================================================================== > --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/Fixture.cs > (rev 0) > +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/Fixture.cs > 2008-12-28 22:20:58 UTC (rev 3967) > @@ -0,0 +1,93 @@ > +using NUnit.Framework; > + > +namespace NHibernate.Test.NHSpecificTest.NH1549 > +{ > + [TestFixture] > + public class Fixture : BugTestCase > + { > + /// <summary> > + /// Verifies that an entity with a base class containing > the id property > + /// can have the id accessed without loading the entity > + /// </summary> > + [Test] > + public void CanLoadForEntitiesWithInheritedIds() > + { > + //create some related products > + var category = new CategoryWithInheritedId {Name = > "Fruit"}; > + var product = new ProductWithInheritedId > {CategoryWithInheritedId = category}; > + > + using (ISession session = OpenSession()) > + { > + using (ITransaction trans = > session.BeginTransaction()) > + { > + session.Save(category); > + session.Save(product); > + trans.Commit(); > + } > + } > + > + ProductWithInheritedId > restoredProductWithInheritedId; > + > + //restore the product from the db in another > session so that > + //the association is a proxy > + using (ISession session = OpenSession()) > + { > + restoredProductWithInheritedId = > session.Get<ProductWithInheritedId>(product.Id); > + } > + > + //verify that the category is a proxy > + > Assert.IsFalse(NHibernateUtil.IsInitialized(restoredProductWithInheritedId.CategoryWithInheritedId)); > + > + //we should be able to access the id of the > category outside of the session > + Assert.AreEqual(category.Id, > restoredProductWithInheritedId.CategoryWithInheritedId.Id); > + } > + > + [Test] > + public void CanLoadForEntitiesWithTheirOwnIds() > + { > + //create some related products > + var category = new CategoryWithId { Name = "Fruit" > }; > + var product = new ProductWithId { CategoryWithId = > category }; > + > + using (ISession session = OpenSession()) > + { > + using (ITransaction trans = > session.BeginTransaction()) > + { > + session.Save(category); > + session.Save(product); > + trans.Commit(); > + } > + } > + > + ProductWithId restoredProductWithInheritedId; > + > + //restore the product from the db in another > session so that > + //the association is a proxy > + using (ISession session = OpenSession()) > + { > + restoredProductWithInheritedId = > session.Get<ProductWithId>(product.Id); > + } > + > + //verify that the category is a proxy > + > Assert.IsFalse(NHibernateUtil.IsInitialized(restoredProductWithInheritedId.CategoryWithId)); > + > + //we should be able to access the id of the > category outside of the session > + Assert.AreEqual(category.Id, > restoredProductWithInheritedId.CategoryWithId.Id); > + } > + > + protected override void OnTearDown() > + { > + using (ISession session = OpenSession()) { > + > + using (ITransaction trans = > session.BeginTransaction()) > + { > + session.Delete("from > ProductWithId"); > + session.Delete("from > CategoryWithId"); > + session.Delete("from > ProductWithInheritedId"); > + session.Delete("from > CategoryWithInheritedId"); > + trans.Commit(); > + } > + } > + } > + } > +} > \ No newline at end of file > > Added: > trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/Mappings.hbm.xml > =================================================================== > --- > trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/Mappings.hbm.xml > (rev 0) > +++ > trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/Mappings.hbm.xml > 2008-12-28 22:20:58 UTC (rev 3967) > @@ -0,0 +1,35 @@ > +<?xml version="1.0" encoding="utf-8" ?> > +<hibernate-mapping > + xmlns="urn:nhibernate-mapping-2.2" > + namespace="NHibernate.Test.NHSpecificTest.NH1549" > + assembly="NHibernate.Test"> > + > + <class name="CategoryWithInheritedId"> > + <id name="Id" type="System.Int32"> > + <generator class="native" /> > + </id> > + <property name="Name" /> > + </class> > + > + <class name="ProductWithInheritedId" lazy="false"> > + <id name="Id" type="System.Int32"> > + <generator class="native" /> > + </id> > + <many-to-one name="CategoryWithInheritedId"/> > + </class> > + > + <class name="CategoryWithId"> > + <id name="Id" type="System.Int32"> > + <generator class="native" /> > + </id> > + <property name="Name" /> > + </class> > + > + <class name="ProductWithId" lazy="false"> > + <id name="Id" type="System.Int32"> > + <generator class="native" /> > + </id> > + <many-to-one name="CategoryWithId"/> > + </class> > + > +</hibernate-mapping> > > Added: > trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/ProductWithInheritedId.cs > =================================================================== > --- > trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/ProductWithInheritedId.cs > (rev 0) > +++ > trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/ProductWithInheritedId.cs > 2008-12-28 22:20:58 UTC (rev 3967) > @@ -0,0 +1,15 @@ > +using System; > + > +namespace NHibernate.Test.NHSpecificTest.NH1549 > +{ > + public class ProductWithInheritedId : EntityInt32 > + { > + public CategoryWithInheritedId CategoryWithInheritedId { > get; set; } > + } > + > + public class ProductWithId > + { > + public virtual int Id { get; set; } > + public CategoryWithId CategoryWithId { get; set; } > + } > +} > \ No newline at end of file > > > Property changes on: > trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1549/ProductWithInheritedId.cs > ___________________________________________________________________ > Added: svn:mergeinfo > + > > Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj > =================================================================== > --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2008-12-27 > 19:53:57 UTC (rev 3966) > +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2008-12-28 > 22:20:58 UTC (rev 3967) > @@ -378,6 +378,10 @@ > <Compile Include="NHSpecificTest\NH1274ExportExclude\Person.cs" /> > <Compile Include="NHSpecificTest\NH1443\Fixture.cs" /> > <Compile Include="NHSpecificTest\NH1521\Fixture.cs" /> > + <Compile Include="NHSpecificTest\NH1549\CategoryWithInheritedId.cs" /> > + <Compile Include="NHSpecificTest\NH1549\EntityInt32.cs" /> > + <Compile Include="NHSpecificTest\NH1549\Fixture.cs" /> > + <Compile Include="NHSpecificTest\NH1549\ProductWithInheritedId.cs" /> > <Compile Include="NHSpecificTest\NH1605\Fixture.cs" /> > <Compile Include="NHSpecificTest\NH1609\Entities.cs" /> > <Compile Include="NHSpecificTest\NH1609\Fixture.cs" /> > @@ -1577,6 +1581,7 @@ > <EmbeddedResource Include="Cascade\JobBatch.hbm.xml" /> > <EmbeddedResource Include="Deletetransient\Person.hbm.xml" /> > <Content Include="DynamicEntity\package.html" /> > + <EmbeddedResource Include="NHSpecificTest\NH1549\Mappings.hbm.xml" /> > <EmbeddedResource > Include="NHSpecificTest\NH1521\AclassWithSpecific.hbm.xml" /> > <EmbeddedResource > Include="NHSpecificTest\NH1521\AclassWithNothing.hbm.xml" /> > <EmbeddedResource > Include="NHSpecificTest\NH1521\AclassWithDefault.hbm.xml" /> > > Modified: > trunk/nhibernate/src/NHibernate.Test/UtilityTest/ReflectHelperFixture.cs > =================================================================== > --- > trunk/nhibernate/src/NHibernate.Test/UtilityTest/ReflectHelperFixture.cs > 2008-12-27 19:53:57 UTC (rev 3966) > +++ > trunk/nhibernate/src/NHibernate.Test/UtilityTest/ReflectHelperFixture.cs > 2008-12-28 22:20:58 UTC (rev 3967) > @@ -56,11 +56,13 @@ > [Test] > public void TryGetMethod() > { > - const BindingFlags bf = BindingFlags.Instance | > BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly; > - MethodInfo mig = typeof > (MyBaseImplementation).GetMethod("get_Id", bf); > + //const BindingFlags bf = BindingFlags.Instance | > BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly; > + const BindingFlags bf = BindingFlags.Instance | > BindingFlags.Public | BindingFlags.NonPublic; > + MethodInfo mig = > typeof(MyBaseImplementation).GetMethod("get_Id", bf); > MethodInfo mis = > typeof(MyBaseImplementation).GetMethod("set_Id", bf); > MethodInfo mng = > typeof(MyBaseImplementation).GetMethod("get_Name", bf); > MethodInfo mns = > typeof(MyBaseImplementation).GetMethod("set_Name", bf); > + > > Assert.That(ReflectHelper.TryGetMethod(typeof(IMyBaseInterface), mig), > Is.Not.Null); > > Assert.That(ReflectHelper.TryGetMethod(typeof(IMyBaseInterface), mis), > Is.Null); > > Assert.That(ReflectHelper.TryGetMethod(typeof(IMyBaseInterface), mng), > Is.Not.Null); > @@ -78,6 +80,20 @@ > Assert.That(ReflectHelper.TryGetMethod(new[] { > typeof(IMyBaseInterface), typeof(IMyInterface) }, mns), Is.Not.Null); > Assert.That(ReflectHelper.TryGetMethod(new[] { > typeof(IMyBaseInterface), typeof(IMyInterface) }, mdg), Is.Not.Null); > Assert.That(ReflectHelper.TryGetMethod(new[] { > typeof(IMyBaseInterface), typeof(IMyInterface) }, mds), Is.Null); > + > + MethodInfo mdig = > typeof(MyDerivedImplementation).GetMethod("get_Id", bf); > + MethodInfo mdis = > typeof(MyDerivedImplementation).GetMethod("set_Id", bf); > + MethodInfo mdng = > typeof(MyDerivedImplementation).GetMethod("get_Name", bf); > + MethodInfo mdns = > typeof(MyDerivedImplementation).GetMethod("set_Name", bf); > + MethodInfo mddg = > typeof(MyDerivedImplementation).GetMethod("get_Description", bf); > + MethodInfo mdds = > typeof(MyDerivedImplementation).GetMethod("set_Description", bf); > + > + Assert.That(ReflectHelper.TryGetMethod(new[] { > typeof(IMyBaseInterface), typeof(IMyInterface) }, mdig), Is.Not.Null); > + Assert.That(ReflectHelper.TryGetMethod(new[] { > typeof(IMyBaseInterface), typeof(IMyInterface) }, mdis), Is.Null); > + Assert.That(ReflectHelper.TryGetMethod(new[] { > typeof(IMyBaseInterface), typeof(IMyInterface) }, mdng), Is.Not.Null); > + Assert.That(ReflectHelper.TryGetMethod(new[] { > typeof(IMyBaseInterface), typeof(IMyInterface) }, mdns), Is.Not.Null); > + Assert.That(ReflectHelper.TryGetMethod(new[] { > typeof(IMyBaseInterface), typeof(IMyInterface) }, mddg), Is.Not.Null); > + Assert.That(ReflectHelper.TryGetMethod(new[] { > typeof(IMyBaseInterface), typeof(IMyInterface) }, mdds), Is.Null); > } > } > > @@ -115,11 +131,15 @@ > public string Name { get; set; } > } > > + public class MyDerivedImplementation : MyBaseImplementation, > IMyInterface > + { > + public string Description { get; set; } > + } > + > public class MyImplementation: IMyInterface > { > public int Id{ get; set; } > public string Name { get; set; } > public string Description { get; set; } > } > - > } > \ No newline at end of file > > > This was sent by the SourceForge.net collaborative development platform, > the world's largest Open Source development site. > > > ------------------------------------------------------------------------------ > _______________________________________________ > Nhibernate-commit mailing list > Nhi...@li... > https://lists.sourceforge.net/lists/listinfo/nhibernate-commit > |