From: <fab...@us...> - 2008-10-11 13:00:10
|
Revision: 3842 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=3842&view=rev Author: fabiomaulo Date: 2008-10-11 12:59:51 +0000 (Sat, 11 Oct 2008) Log Message: ----------- - Fix NH-1515 (BREAKING CHANGE) - Minor refactoring of proxy validation stuff Modified Paths: -------------- trunk/nhibernate/releasenotes.txt trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs trunk/nhibernate/src/NHibernate/InvalidProxyTypeException.cs trunk/nhibernate/src/NHibernate/Proxy/ProxyTypeValidator.cs trunk/nhibernate/src/NHibernate/Tuple/Entity/PocoEntityTuplizer.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1408/DbResourceKey.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1464/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/ProxyValidator/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1515/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1515/Fixture.cs Modified: trunk/nhibernate/releasenotes.txt =================================================================== --- trunk/nhibernate/releasenotes.txt 2008-10-11 05:54:37 UTC (rev 3841) +++ trunk/nhibernate/releasenotes.txt 2008-10-11 12:59:51 UTC (rev 3842) @@ -4,6 +4,10 @@ ##### Possible Breaking Changes for external frameworks ##### * ISession interface have additional methods + ##### Initialization time ##### + * The ProxyTypeValidator check for "internal virtual" (to be proxied need "protected internal virtual") + + Build 2.0.1.GA ======================== ** Bug Modified: trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs 2008-10-11 05:54:37 UTC (rev 3841) +++ trunk/nhibernate/src/NHibernate/Cfg/Configuration.cs 2008-10-11 12:59:51 UTC (rev 3842) @@ -25,6 +25,7 @@ using NHibernate.Tool.hbm2ddl; using NHibernate.Type; using NHibernate.Util; +using Array=System.Array; namespace NHibernate.Cfg { @@ -77,7 +78,7 @@ protected IDictionary<string, Mappings.TableDescription> tableNameBinding; protected IDictionary<Table, Mappings.ColumnNames> columnNameBindingPerTable; - private static readonly ILog log = LogManager.GetLogger(typeof(Configuration)); + private static readonly ILog log = LogManager.GetLogger(typeof (Configuration)); protected internal SettingsFactory settingsFactory; @@ -160,8 +161,7 @@ } } - [NonSerialized] - private IMapping mapping; + [NonSerialized] private IMapping mapping; protected Configuration(SettingsFactory settingsFactory) { @@ -183,10 +183,7 @@ /// <summary> /// Create a new Configuration object. /// </summary> - public Configuration() - : this(new SettingsFactory()) - { - } + public Configuration() : this(new SettingsFactory()) {} /// <summary> /// The class mappings @@ -260,7 +257,9 @@ private static void LogAndThrow(Exception exception) { if (log.IsErrorEnabled) + { log.Error(exception.Message, exception); + } throw exception; } @@ -393,7 +392,7 @@ try { - using (MemoryStream ms = new MemoryStream()) + using (var ms = new MemoryStream()) { doc.Save(ms); ms.Position = 0; @@ -425,7 +424,7 @@ // selects as their prefix in the document. It is the prefix we use to // build the XPath and the nsmgr takes care of translating our prefix into // the user defined prefix... - XmlNamespaceManager namespaceManager = new XmlNamespaceManager(doc.Document.NameTable); + var namespaceManager = new XmlNamespaceManager(doc.Document.NameTable); namespaceManager.AddNamespace(HbmConstants.nsPrefix, MappingSchemaXMLNS); Dialect.Dialect dialect = Dialect.Dialect.GetDialect(properties); @@ -446,26 +445,10 @@ /// </summary> public Mappings CreateMappings(Dialect.Dialect dialect) { - return new Mappings(classes, - collections, - tables, - namedQueries, - namedSqlQueries, - sqlResultSetMappings, - imports, - secondPasses, - propertyReferences, - namingStrategy, - typeDefs, - filterDefinitions, - extendsQueue, - auxiliaryDatabaseObjects, - tableNameBinding, - columnNameBindingPerTable, - defaultAssembly, - defaultNamespace, - dialect - ); + return new Mappings(classes, collections, tables, namedQueries, namedSqlQueries, sqlResultSetMappings, imports, + secondPasses, propertyReferences, namingStrategy, typeDefs, filterDefinitions, extendsQueue, + auxiliaryDatabaseObjects, tableNameBinding, columnNameBindingPerTable, defaultAssembly, + defaultNamespace, dialect); } /// <summary> @@ -555,7 +538,9 @@ finally { if (rsrc != null) + { rsrc.Close(); + } } } @@ -616,8 +601,8 @@ if (resourceNames.Count == 0) { log.Warn("No mapped documents found in assembly: " + assembly.FullName); - } - foreach (string name in resourceNames) + } + foreach (var name in resourceNames) { AddResource(name, assembly); } @@ -626,9 +611,9 @@ private static IList<string> GetAllHbmXmlResourceNames(Assembly assembly) { - List<string> result = new List<string>(); + var result = new List<string>(); - foreach (string resource in assembly.GetManifestResourceNames()) + foreach (var resource in assembly.GetManifestResourceNames()) { if (resource.EndsWith(".hbm.xml")) { @@ -646,12 +631,12 @@ /// <param name="dir">a directory</param> public Configuration AddDirectory(DirectoryInfo dir) { - foreach (DirectoryInfo subDirectory in dir.GetDirectories()) + foreach (var subDirectory in dir.GetDirectories()) { AddDirectory(subDirectory); } - foreach (FileInfo hbmXml in dir.GetFiles("*.hbm.xml")) + foreach (var hbmXml in dir.GetFiles("*.hbm.xml")) { AddFile(hbmXml); } @@ -670,7 +655,7 @@ string defaultCatalog = PropertiesHelper.GetString(Environment.DefaultCatalog, properties, null); string defaultSchema = PropertiesHelper.GetString(Environment.DefaultSchema, properties, null); - List<string> script = new List<string>(); + var script = new List<string>(); // drop them in reverse order in case db needs it done that way... for (int i = auxiliaryDatabaseObjects.Count - 1; i >= 0; i--) @@ -684,32 +669,36 @@ if (dialect.DropConstraints) { - foreach (Table table in TableMappings) + foreach (var table in TableMappings) { if (table.IsPhysicalTable) { - foreach (ForeignKey fk in table.ForeignKeyIterator) + foreach (var fk in table.ForeignKeyIterator) { if (fk.HasPhysicalConstraint) + { script.Add(fk.SqlDropString(dialect, defaultCatalog, defaultSchema)); + } } } } } - foreach (Table table in TableMappings) + foreach (var table in TableMappings) { if (table.IsPhysicalTable) + { script.Add(table.SqlDropString(dialect, defaultCatalog, defaultSchema)); + } } IEnumerable<IPersistentIdentifierGenerator> pIDg = IterateGenerators(dialect); - foreach (IPersistentIdentifierGenerator idGen in pIDg) + foreach (var idGen in pIDg) { string[] lines = idGen.SqlDropString(dialect); if (lines != null) { - foreach (string line in lines) + foreach (var line in lines) { script.Add(line); } @@ -730,9 +719,9 @@ string defaultCatalog = PropertiesHelper.GetString(Environment.DefaultCatalog, properties, null); string defaultSchema = PropertiesHelper.GetString(Environment.DefaultSchema, properties, null); - List<string> script = new List<string>(); + var script = new List<string>(); - foreach (Table table in TableMappings) + foreach (var table in TableMappings) { if (table.IsPhysicalTable) { @@ -741,39 +730,47 @@ } } - foreach (Table table in TableMappings) + foreach (var table in TableMappings) { if (table.IsPhysicalTable) { if (!dialect.SupportsUniqueConstraintInCreateAlterTable) { - foreach (UniqueKey uk in table.UniqueKeyIterator) + foreach (var uk in table.UniqueKeyIterator) { string constraintString = uk.SqlCreateString(dialect, mapping, defaultCatalog, defaultSchema); if (constraintString != null) + { script.Add(constraintString); + } } } - foreach (Index index in table.IndexIterator) + foreach (var index in table.IndexIterator) + { script.Add(index.SqlCreateString(dialect, mapping, defaultCatalog, defaultSchema)); + } if (dialect.HasAlterTable) { - foreach (ForeignKey fk in table.ForeignKeyIterator) + foreach (var fk in table.ForeignKeyIterator) { if (fk.HasPhysicalConstraint) + { script.Add(fk.SqlCreateString(dialect, mapping, defaultCatalog, defaultSchema)); + } } } } } IEnumerable<IPersistentIdentifierGenerator> pIDg = IterateGenerators(dialect); - foreach (IPersistentIdentifierGenerator idGen in pIDg) + foreach (var idGen in pIDg) + { script.AddRange(idGen.SqlCreateStrings(dialect)); + } - foreach (IAuxiliaryDatabaseObject auxDbObj in auxiliaryDatabaseObjects) + foreach (var auxDbObj in auxiliaryDatabaseObjects) { if (auxDbObj.AppliesToDialect(dialect)) { @@ -787,19 +784,19 @@ private void Validate() { bool validateProxy = PropertiesHelper.GetBoolean(Environment.UseProxyValidator, properties, true); - HashedSet allProxyErrors = null; + HashedSet<string> allProxyErrors = null; - foreach (PersistentClass clazz in classes.Values) + foreach (var clazz in classes.Values) { clazz.Validate(mapping); if (validateProxy) { - ICollection errors = ValidateProxyInterface(clazz); + ICollection<string> errors = ValidateProxyInterface(clazz); if (errors != null) { if (allProxyErrors == null) { - allProxyErrors = new HashedSet(errors); + allProxyErrors = new HashedSet<string>(errors); } else { @@ -814,13 +811,13 @@ throw new InvalidProxyTypeException(allProxyErrors); } - foreach (NHibernate.Mapping.Collection col in collections.Values) + foreach (var col in collections.Values) { col.Validate(mapping); } } - private static ICollection ValidateProxyInterface(PersistentClass persistentClass) + private static ICollection<string> ValidateProxyInterface(PersistentClass persistentClass) { if (!persistentClass.IsLazy) { @@ -857,7 +854,7 @@ log.Info("processing one-to-many association mappings"); - foreach (SecondPassCommand command in secondPasses) + foreach (var command in secondPasses) { command(classes); } @@ -866,7 +863,7 @@ log.Info("processing one-to-one association property references"); - foreach (Mappings.PropertyReference upr in propertyReferences) + foreach (var upr in propertyReferences) { PersistentClass clazz = GetClassMapping(upr.referencedClass); if (clazz == null) @@ -875,7 +872,7 @@ } Property prop = clazz.GetReferencedProperty(upr.propertyName); - ((SimpleValue)prop.Value).IsAlternateUniqueKey = true; + ((SimpleValue) prop.Value).IsAlternateUniqueKey = true; } //TODO: Somehow add the newly created foreign keys to the internal collection @@ -883,7 +880,7 @@ log.Info("processing foreign key constraints"); ISet done = new HashedSet(); - foreach (Table table in TableMappings) + foreach (var table in TableMappings) { SecondPassCompileForeignKeys(table, done); } @@ -893,7 +890,7 @@ { table.CreateForeignKeys(); - foreach (ForeignKey fk in table.ForeignKeyIterator) + foreach (var fk in table.ForeignKeyIterator) { if (!done.Contains(fk)) { @@ -902,7 +899,8 @@ string referencedEntityName = fk.ReferencedEntityName; if (string.IsNullOrEmpty(referencedEntityName)) { - throw new MappingException(string.Format("An association from the table {0} does not specify the referenced entity", fk.Table.Name)); + throw new MappingException( + string.Format("An association from the table {0} does not specify the referenced entity", fk.Table.Name)); } if (log.IsDebugEnabled) @@ -913,8 +911,8 @@ PersistentClass referencedClass; if (!classes.TryGetValue(referencedEntityName, out referencedClass)) { - string message = string.Format("An association from the table {0} refers to an unmapped class: {1}", - fk.Table.Name, referencedEntityName); + string message = string.Format("An association from the table {0} refers to an unmapped class: {1}", fk.Table.Name, + referencedEntityName); LogAndThrow(new MappingException(message)); } @@ -962,11 +960,7 @@ /// located by specified id. This is mainly intended for EJB3 implementations to be able to /// control how proxy initialization errors should be handled... /// </remarks> - public IEntityNotFoundDelegate EntityNotFoundDelegate - { - get { return entityNotFoundDelegate; } - set { entityNotFoundDelegate = value; } - } + public IEntityNotFoundDelegate EntityNotFoundDelegate { get; set; } public EventListeners EventListeners { @@ -986,9 +980,10 @@ public ISessionFactory BuildSessionFactory() { #region Way for the user to specify their own ProxyFactory + //http://jira.nhibernate.org/browse/NH-975 - IInjectableProxyFactoryFactory ipff = Environment.BytecodeProvider as IInjectableProxyFactoryFactory; + var ipff = Environment.BytecodeProvider as IInjectableProxyFactoryFactory; string pffClassName; properties.TryGetValue(Environment.ProxyFactoryFactoryClass, out pffClassName); if (ipff != null && !string.IsNullOrEmpty(pffClassName)) @@ -1096,7 +1091,7 @@ /// </returns> public Configuration AddProperties(IDictionary<string, string> additionalProperties) { - foreach (KeyValuePair<string, string> de in additionalProperties) + foreach (var de in additionalProperties) { properties.Add(de.Key, de.Value); } @@ -1129,7 +1124,7 @@ private void AddProperties(IHibernateConfiguration hc) { - foreach (KeyValuePair<string, string> kvp in hc.SessionFactory.Properties) + foreach (var kvp in hc.SessionFactory.Properties) { if (log.IsDebugEnabled) { @@ -1157,7 +1152,7 @@ /// </remarks> public Configuration Configure() { - IHibernateConfiguration hc = ConfigurationManager.GetSection(CfgXmlHelper.CfgSectionName) as IHibernateConfiguration; + var hc = ConfigurationManager.GetSection(CfgXmlHelper.CfgSectionName) as IHibernateConfiguration; if (hc != null && hc.SessionFactory != null) { return DoConfigure(hc); @@ -1216,12 +1211,14 @@ public Configuration Configure(Assembly assembly, string resourceName) { if (assembly == null) - throw new HibernateException("Could not configure NHibernate.", - new ArgumentNullException("assembly")); + { + throw new HibernateException("Could not configure NHibernate.", new ArgumentNullException("assembly")); + } if (resourceName == null) - throw new HibernateException("Could not configure NHibernate.", - new ArgumentNullException("resourceName")); + { + throw new HibernateException("Could not configure NHibernate.", new ArgumentNullException("resourceName")); + } Stream stream = null; try @@ -1230,9 +1227,8 @@ if (stream == null) { // resource does not exist - throw appropriate exception - throw new HibernateException("A ManifestResourceStream could not be created for the resource " + - resourceName + - " in Assembly " + assembly.FullName); + throw new HibernateException("A ManifestResourceStream could not be created for the resource " + resourceName + + " in Assembly " + assembly.FullName); } return Configure(new XmlTextReader(stream)); @@ -1259,7 +1255,7 @@ if (textReader == null) { throw new HibernateConfigException("Could not configure NHibernate.", - new ArgumentException("A null value was passed in.", "textReader")); + new ArgumentException("A null value was passed in.", "textReader")); } try @@ -1286,10 +1282,12 @@ AddProperties(hc); // Load mappings - foreach (MappingConfiguration mc in hc.SessionFactory.Mappings) + foreach (var mc in hc.SessionFactory.Mappings) { if (mc.IsEmpty()) + { throw new HibernateConfigException("<mapping> element in configuration specifies no attributes"); + } if (!string.IsNullOrEmpty(mc.Resource)) { log.Debug(hc.SessionFactory.Name + "<-" + mc.Resource + " in " + mc.Assembly); @@ -1308,7 +1306,7 @@ } // Load class-cache - foreach (ClassCacheConfiguration ccc in hc.SessionFactory.ClassesCache) + foreach (var ccc in hc.SessionFactory.ClassesCache) { string region = string.IsNullOrEmpty(ccc.Region) ? ccc.Class : ccc.Region; bool includeLazy = (ccc.Include != ClassCacheInclude.NonLazy); @@ -1316,13 +1314,14 @@ } // Load collection-cache - foreach (CollectionCacheConfiguration ccc in hc.SessionFactory.CollectionsCache) + foreach (var ccc in hc.SessionFactory.CollectionsCache) { string role = ccc.Collection; NHibernate.Mapping.Collection collection = GetCollectionMapping(role); if (collection == null) { - throw new HibernateConfigException("collection-cache Configuration: Cannot configure cache for unknown collection role " + role); + throw new HibernateConfigException( + "collection-cache Configuration: Cannot configure cache for unknown collection role " + role); } string region = string.IsNullOrEmpty(ccc.Region) ? role : ccc.Region; @@ -1330,9 +1329,9 @@ } // Events - foreach (EventConfiguration ec in hc.SessionFactory.Events) + foreach (var ec in hc.SessionFactory.Events) { - string[] listenerClasses = new string[ec.Listeners.Count]; + var listenerClasses = new string[ec.Listeners.Count]; for (int i = 0; i < ec.Listeners.Count; i++) { listenerClasses[i] = ec.Listeners[i].Class; @@ -1341,10 +1340,10 @@ SetListeners(ec.Type, listenerClasses); } // Listeners - foreach (ListenerConfiguration lc in hc.SessionFactory.Listeners) + foreach (var lc in hc.SessionFactory.Listeners) { log.Debug("Event listener: " + lc.Type + "=" + lc.Class); - SetListeners(lc.Type, new string[] { lc.Class }); + SetListeners(lc.Type, new[] {lc.Class}); } if (!string.IsNullOrEmpty(hc.SessionFactory.Name)) @@ -1360,13 +1359,13 @@ { try { - return (RootClass)GetClassMapping(clazz); + return (RootClass) GetClassMapping(clazz); } catch (InvalidCastException) { throw new HibernateConfigException( - "class-cache Configuration: You may only specify a cache for root <class> mappings " - + "(cache was specified for " + clazz + ")"); + "class-cache Configuration: You may only specify a cache for root <class> mappings " + "(cache was specified for " + + clazz + ")"); } } @@ -1379,13 +1378,13 @@ throw new HibernateConfigException("class-cache Configuration: Cache specified for unmapped class " + clazz); } - RootClass rootClass = persistentClass as RootClass; + var rootClass = persistentClass as RootClass; if (rootClass == null) { throw new HibernateConfigException( - "class-cache Configuration: You may only specify a cache for root <class> mappings " - + "(cache was specified for " + clazz + ")"); + "class-cache Configuration: You may only specify a cache for root <class> mappings " + "(cache was specified for " + + clazz + ")"); } return rootClass; @@ -1417,7 +1416,6 @@ rootClass.SetLazyPropertiesCacheable(includeLazy); } - /// <summary> /// Set up a cache for a collection role /// </summary> @@ -1535,7 +1533,7 @@ try { - XmlDocument hbmDocument = new XmlDocument(); + var hbmDocument = new XmlDocument(); hbmDocument.Load(reader); return new NamedXmlDocument(name, hbmDocument); } @@ -1589,13 +1587,8 @@ private void ValidationHandler(object o, ValidationEventArgs args) { - string message = - string.Format( - "{0}({1},{2}): XML validation error: {3}", - currentDocumentName, - args.Exception.LineNumber, - args.Exception.LinePosition, - args.Exception.Message); + string message = string.Format("{0}({1},{2}): XML validation error: {3}", currentDocumentName, + args.Exception.LineNumber, args.Exception.LinePosition, args.Exception.Message); LogAndThrow(new MappingException(message, args.Exception)); } @@ -1610,7 +1603,6 @@ #endregion private XmlSchemas schemas; - private IEntityNotFoundDelegate entityNotFoundDelegate; private XmlSchemas Schemas { @@ -1639,8 +1631,7 @@ } else { - object[] listeners = - (object[])System.Array.CreateInstance(eventListeners.GetListenerClassFor(type), listenerClasses.Length); + var listeners = (object[]) Array.CreateInstance(eventListeners.GetListenerClassFor(type), listenerClasses.Length); for (int i = 0; i < listeners.Length; i++) { try @@ -1672,7 +1663,7 @@ } else { - object[] listeners = (object[])System.Array.CreateInstance(eventListeners.GetListenerClassFor(type), 1); + var listeners = (object[]) Array.CreateInstance(eventListeners.GetListenerClassFor(type), 1); listeners[0] = listener; SetListeners(type, listeners); } @@ -1683,106 +1674,106 @@ switch (type) { case ListenerType.Autoflush: - eventListeners.AutoFlushEventListeners = new IAutoFlushEventListener[] { }; + eventListeners.AutoFlushEventListeners = new IAutoFlushEventListener[] {}; break; case ListenerType.Merge: - eventListeners.MergeEventListeners = new IMergeEventListener[] { }; + eventListeners.MergeEventListeners = new IMergeEventListener[] {}; break; case ListenerType.Create: - eventListeners.PersistEventListeners = new IPersistEventListener[] { }; + eventListeners.PersistEventListeners = new IPersistEventListener[] {}; break; case ListenerType.CreateOnFlush: - eventListeners.PersistOnFlushEventListeners = new IPersistEventListener[] { }; + eventListeners.PersistOnFlushEventListeners = new IPersistEventListener[] {}; break; case ListenerType.Delete: - eventListeners.DeleteEventListeners = new IDeleteEventListener[] { }; + eventListeners.DeleteEventListeners = new IDeleteEventListener[] {}; break; case ListenerType.DirtyCheck: - eventListeners.DirtyCheckEventListeners = new IDirtyCheckEventListener[] { }; + eventListeners.DirtyCheckEventListeners = new IDirtyCheckEventListener[] {}; break; case ListenerType.Evict: - eventListeners.EvictEventListeners = new IEvictEventListener[] { }; + eventListeners.EvictEventListeners = new IEvictEventListener[] {}; break; case ListenerType.Flush: - eventListeners.FlushEventListeners = new IFlushEventListener[] { }; + eventListeners.FlushEventListeners = new IFlushEventListener[] {}; break; case ListenerType.FlushEntity: - eventListeners.FlushEntityEventListeners = new IFlushEntityEventListener[] { }; + eventListeners.FlushEntityEventListeners = new IFlushEntityEventListener[] {}; break; case ListenerType.Load: - eventListeners.LoadEventListeners = new ILoadEventListener[] { }; + eventListeners.LoadEventListeners = new ILoadEventListener[] {}; break; case ListenerType.LoadCollection: - eventListeners.InitializeCollectionEventListeners = new IInitializeCollectionEventListener[] { }; + eventListeners.InitializeCollectionEventListeners = new IInitializeCollectionEventListener[] {}; break; case ListenerType.Lock: - eventListeners.LockEventListeners = new ILockEventListener[] { }; + eventListeners.LockEventListeners = new ILockEventListener[] {}; break; case ListenerType.Refresh: - eventListeners.RefreshEventListeners = new IRefreshEventListener[] { }; + eventListeners.RefreshEventListeners = new IRefreshEventListener[] {}; break; case ListenerType.Replicate: - eventListeners.ReplicateEventListeners = new IReplicateEventListener[] { }; + eventListeners.ReplicateEventListeners = new IReplicateEventListener[] {}; break; case ListenerType.SaveUpdate: - eventListeners.SaveOrUpdateEventListeners = new ISaveOrUpdateEventListener[] { }; + eventListeners.SaveOrUpdateEventListeners = new ISaveOrUpdateEventListener[] {}; break; case ListenerType.Save: - eventListeners.SaveEventListeners = new ISaveOrUpdateEventListener[] { }; + eventListeners.SaveEventListeners = new ISaveOrUpdateEventListener[] {}; break; case ListenerType.PreUpdate: - eventListeners.PreUpdateEventListeners = new IPreUpdateEventListener[] { }; + eventListeners.PreUpdateEventListeners = new IPreUpdateEventListener[] {}; break; case ListenerType.Update: - eventListeners.UpdateEventListeners = new ISaveOrUpdateEventListener[] { }; + eventListeners.UpdateEventListeners = new ISaveOrUpdateEventListener[] {}; break; case ListenerType.PreLoad: - eventListeners.PreLoadEventListeners = new IPreLoadEventListener[] { }; + eventListeners.PreLoadEventListeners = new IPreLoadEventListener[] {}; break; case ListenerType.PreDelete: - eventListeners.PreDeleteEventListeners = new IPreDeleteEventListener[] { }; + eventListeners.PreDeleteEventListeners = new IPreDeleteEventListener[] {}; break; case ListenerType.PreInsert: - eventListeners.PreInsertEventListeners = new IPreInsertEventListener[] { }; + eventListeners.PreInsertEventListeners = new IPreInsertEventListener[] {}; break; case ListenerType.PostLoad: - eventListeners.PostLoadEventListeners = new IPostLoadEventListener[] { }; + eventListeners.PostLoadEventListeners = new IPostLoadEventListener[] {}; break; case ListenerType.PostInsert: - eventListeners.PostInsertEventListeners = new IPostInsertEventListener[] { }; + eventListeners.PostInsertEventListeners = new IPostInsertEventListener[] {}; break; case ListenerType.PostUpdate: - eventListeners.PostUpdateEventListeners = new IPostUpdateEventListener[] { }; + eventListeners.PostUpdateEventListeners = new IPostUpdateEventListener[] {}; break; case ListenerType.PostDelete: - eventListeners.PostDeleteEventListeners = new IPostDeleteEventListener[] { }; + eventListeners.PostDeleteEventListeners = new IPostDeleteEventListener[] {}; break; case ListenerType.PostCommitUpdate: - eventListeners.PostCommitUpdateEventListeners = new IPostUpdateEventListener[] { }; + eventListeners.PostCommitUpdateEventListeners = new IPostUpdateEventListener[] {}; break; case ListenerType.PostCommitInsert: - eventListeners.PostCommitInsertEventListeners = new IPostInsertEventListener[] { }; + eventListeners.PostCommitInsertEventListeners = new IPostInsertEventListener[] {}; break; case ListenerType.PostCommitDelete: - eventListeners.PostCommitDeleteEventListeners = new IPostDeleteEventListener[] { }; + eventListeners.PostCommitDeleteEventListeners = new IPostDeleteEventListener[] {}; break; case ListenerType.PreCollectionRecreate: - eventListeners.PreCollectionRecreateEventListeners = new IPreCollectionRecreateEventListener[] { }; + eventListeners.PreCollectionRecreateEventListeners = new IPreCollectionRecreateEventListener[] {}; break; case ListenerType.PreCollectionRemove: - eventListeners.PreCollectionRemoveEventListeners = new IPreCollectionRemoveEventListener[] { }; + eventListeners.PreCollectionRemoveEventListeners = new IPreCollectionRemoveEventListener[] {}; break; case ListenerType.PreCollectionUpdate: - eventListeners.PreCollectionUpdateEventListeners = new IPreCollectionUpdateEventListener[] { }; + eventListeners.PreCollectionUpdateEventListeners = new IPreCollectionUpdateEventListener[] {}; break; case ListenerType.PostCollectionRecreate: - eventListeners.PostCollectionRecreateEventListeners = new IPostCollectionRecreateEventListener[] { }; + eventListeners.PostCollectionRecreateEventListeners = new IPostCollectionRecreateEventListener[] {}; break; case ListenerType.PostCollectionRemove: - eventListeners.PostCollectionRemoveEventListeners = new IPostCollectionRemoveEventListener[] { }; + eventListeners.PostCollectionRemoveEventListeners = new IPostCollectionRemoveEventListener[] {}; break; case ListenerType.PostCollectionUpdate: - eventListeners.PostCollectionUpdateEventListeners = new IPostCollectionUpdateEventListener[] { }; + eventListeners.PostCollectionUpdateEventListeners = new IPostCollectionUpdateEventListener[] {}; break; default: log.Warn("Unrecognized listener type [" + type + "]"); @@ -1800,110 +1791,112 @@ public void SetListeners(ListenerType type, object[] listeners) { if (listeners == null) + { ClearListeners(type); + } switch (type) { case ListenerType.Autoflush: - eventListeners.AutoFlushEventListeners = (IAutoFlushEventListener[])listeners; + eventListeners.AutoFlushEventListeners = (IAutoFlushEventListener[]) listeners; break; case ListenerType.Merge: - eventListeners.MergeEventListeners = (IMergeEventListener[])listeners; + eventListeners.MergeEventListeners = (IMergeEventListener[]) listeners; break; case ListenerType.Create: - eventListeners.PersistEventListeners = (IPersistEventListener[])listeners; + eventListeners.PersistEventListeners = (IPersistEventListener[]) listeners; break; case ListenerType.CreateOnFlush: - eventListeners.PersistOnFlushEventListeners = (IPersistEventListener[])listeners; + eventListeners.PersistOnFlushEventListeners = (IPersistEventListener[]) listeners; break; case ListenerType.Delete: - eventListeners.DeleteEventListeners = (IDeleteEventListener[])listeners; + eventListeners.DeleteEventListeners = (IDeleteEventListener[]) listeners; break; case ListenerType.DirtyCheck: - eventListeners.DirtyCheckEventListeners = (IDirtyCheckEventListener[])listeners; + eventListeners.DirtyCheckEventListeners = (IDirtyCheckEventListener[]) listeners; break; case ListenerType.Evict: - eventListeners.EvictEventListeners = (IEvictEventListener[])listeners; + eventListeners.EvictEventListeners = (IEvictEventListener[]) listeners; break; case ListenerType.Flush: - eventListeners.FlushEventListeners = (IFlushEventListener[])listeners; + eventListeners.FlushEventListeners = (IFlushEventListener[]) listeners; break; case ListenerType.FlushEntity: - eventListeners.FlushEntityEventListeners = (IFlushEntityEventListener[])listeners; + eventListeners.FlushEntityEventListeners = (IFlushEntityEventListener[]) listeners; break; case ListenerType.Load: - eventListeners.LoadEventListeners = (ILoadEventListener[])listeners; + eventListeners.LoadEventListeners = (ILoadEventListener[]) listeners; break; case ListenerType.LoadCollection: - eventListeners.InitializeCollectionEventListeners = (IInitializeCollectionEventListener[])listeners; + eventListeners.InitializeCollectionEventListeners = (IInitializeCollectionEventListener[]) listeners; break; case ListenerType.Lock: - eventListeners.LockEventListeners = (ILockEventListener[])listeners; + eventListeners.LockEventListeners = (ILockEventListener[]) listeners; break; case ListenerType.Refresh: - eventListeners.RefreshEventListeners = (IRefreshEventListener[])listeners; + eventListeners.RefreshEventListeners = (IRefreshEventListener[]) listeners; break; case ListenerType.Replicate: - eventListeners.ReplicateEventListeners = (IReplicateEventListener[])listeners; + eventListeners.ReplicateEventListeners = (IReplicateEventListener[]) listeners; break; case ListenerType.SaveUpdate: - eventListeners.SaveOrUpdateEventListeners = (ISaveOrUpdateEventListener[])listeners; + eventListeners.SaveOrUpdateEventListeners = (ISaveOrUpdateEventListener[]) listeners; break; case ListenerType.Save: - eventListeners.SaveEventListeners = (ISaveOrUpdateEventListener[])listeners; + eventListeners.SaveEventListeners = (ISaveOrUpdateEventListener[]) listeners; break; case ListenerType.PreUpdate: - eventListeners.PreUpdateEventListeners = (IPreUpdateEventListener[])listeners; + eventListeners.PreUpdateEventListeners = (IPreUpdateEventListener[]) listeners; break; case ListenerType.Update: - eventListeners.UpdateEventListeners = (ISaveOrUpdateEventListener[])listeners; + eventListeners.UpdateEventListeners = (ISaveOrUpdateEventListener[]) listeners; break; case ListenerType.PreLoad: - eventListeners.PreLoadEventListeners = (IPreLoadEventListener[])listeners; + eventListeners.PreLoadEventListeners = (IPreLoadEventListener[]) listeners; break; case ListenerType.PreDelete: - eventListeners.PreDeleteEventListeners = (IPreDeleteEventListener[])listeners; + eventListeners.PreDeleteEventListeners = (IPreDeleteEventListener[]) listeners; break; case ListenerType.PreInsert: - eventListeners.PreInsertEventListeners = (IPreInsertEventListener[])listeners; + eventListeners.PreInsertEventListeners = (IPreInsertEventListener[]) listeners; break; case ListenerType.PostLoad: - eventListeners.PostLoadEventListeners = (IPostLoadEventListener[])listeners; + eventListeners.PostLoadEventListeners = (IPostLoadEventListener[]) listeners; break; case ListenerType.PostInsert: - eventListeners.PostInsertEventListeners = (IPostInsertEventListener[])listeners; + eventListeners.PostInsertEventListeners = (IPostInsertEventListener[]) listeners; break; case ListenerType.PostUpdate: - eventListeners.PostUpdateEventListeners = (IPostUpdateEventListener[])listeners; + eventListeners.PostUpdateEventListeners = (IPostUpdateEventListener[]) listeners; break; case ListenerType.PostDelete: - eventListeners.PostDeleteEventListeners = (IPostDeleteEventListener[])listeners; + eventListeners.PostDeleteEventListeners = (IPostDeleteEventListener[]) listeners; break; case ListenerType.PostCommitUpdate: - eventListeners.PostCommitUpdateEventListeners = (IPostUpdateEventListener[])listeners; + eventListeners.PostCommitUpdateEventListeners = (IPostUpdateEventListener[]) listeners; break; case ListenerType.PostCommitInsert: - eventListeners.PostCommitInsertEventListeners = (IPostInsertEventListener[])listeners; + eventListeners.PostCommitInsertEventListeners = (IPostInsertEventListener[]) listeners; break; case ListenerType.PostCommitDelete: - eventListeners.PostCommitDeleteEventListeners = (IPostDeleteEventListener[])listeners; + eventListeners.PostCommitDeleteEventListeners = (IPostDeleteEventListener[]) listeners; break; case ListenerType.PreCollectionRecreate: - eventListeners.PreCollectionRecreateEventListeners = (IPreCollectionRecreateEventListener[])listeners; + eventListeners.PreCollectionRecreateEventListeners = (IPreCollectionRecreateEventListener[]) listeners; break; case ListenerType.PreCollectionRemove: - eventListeners.PreCollectionRemoveEventListeners = (IPreCollectionRemoveEventListener[])listeners; + eventListeners.PreCollectionRemoveEventListeners = (IPreCollectionRemoveEventListener[]) listeners; break; case ListenerType.PreCollectionUpdate: - eventListeners.PreCollectionUpdateEventListeners = (IPreCollectionUpdateEventListener[])listeners; + eventListeners.PreCollectionUpdateEventListeners = (IPreCollectionUpdateEventListener[]) listeners; break; case ListenerType.PostCollectionRecreate: - eventListeners.PostCollectionRecreateEventListeners = (IPostCollectionRecreateEventListener[])listeners; + eventListeners.PostCollectionRecreateEventListeners = (IPostCollectionRecreateEventListener[]) listeners; break; case ListenerType.PostCollectionRemove: - eventListeners.PostCollectionRemoveEventListeners = (IPostCollectionRemoveEventListener[])listeners; + eventListeners.PostCollectionRemoveEventListeners = (IPostCollectionRemoveEventListener[]) listeners; break; case ListenerType.PostCollectionUpdate: - eventListeners.PostCollectionUpdateEventListeners = (IPostCollectionUpdateEventListener[])listeners; + eventListeners.PostCollectionUpdateEventListeners = (IPostCollectionUpdateEventListener[]) listeners; break; default: log.Warn("Unrecognized listener type [" + type + "]"); @@ -1922,13 +1915,13 @@ string defaultCatalog = PropertiesHelper.GetString(Environment.DefaultCatalog, properties, null); string defaultSchema = PropertiesHelper.GetString(Environment.DefaultSchema, properties, null); - List<string> script = new List<string>(50); - foreach (Table table in TableMappings) + var script = new List<string>(50); + foreach (var table in TableMappings) { if (table.IsPhysicalTable) { ITableMetadata tableInfo = databaseMetadata.GetTableMetadata(table.Name, table.Schema ?? defaultSchema, - table.Catalog ?? defaultCatalog, table.IsQuoted); + table.Catalog ?? defaultCatalog, table.IsQuoted); if (tableInfo == null) { script.Add(table.SqlCreateString(dialect, mapping, defaultCatalog, defaultSchema)); @@ -1941,27 +1934,26 @@ string[] comments = table.SqlCommentStrings(dialect, defaultCatalog, defaultSchema); script.AddRange(comments); - } } - foreach (Table table in TableMappings) + foreach (var table in TableMappings) { if (table.IsPhysicalTable) { - ITableMetadata tableInfo = - databaseMetadata.GetTableMetadata(table.Name, table.Schema, table.Catalog, table.IsQuoted); + ITableMetadata tableInfo = databaseMetadata.GetTableMetadata(table.Name, table.Schema, table.Catalog, + table.IsQuoted); if (dialect.HasAlterTable) { - foreach (ForeignKey fk in table.ForeignKeyIterator) + foreach (var fk in table.ForeignKeyIterator) { if (fk.HasPhysicalConstraint) { - bool create = tableInfo == null || ( - tableInfo.GetForeignKeyMetadata(fk.Name) == null && - (!(dialect is MySQLDialect) || tableInfo.GetIndexMetadata(fk.Name) == null) - ); + bool create = tableInfo == null + || + (tableInfo.GetForeignKeyMetadata(fk.Name) == null + && (!(dialect is MySQLDialect) || tableInfo.GetIndexMetadata(fk.Name) == null)); if (create) { script.Add(fk.SqlCreateString(dialect, mapping, defaultCatalog, defaultSchema)); @@ -1969,11 +1961,10 @@ } } } - } } - foreach (IPersistentIdentifierGenerator generator in IterateGenerators(dialect)) + foreach (var generator in IterateGenerators(dialect)) { string key = generator.GeneratorKey(); if (!databaseMetadata.IsSequence(key) && !databaseMetadata.IsTable(key)) @@ -1991,38 +1982,41 @@ private IEnumerable<IPersistentIdentifierGenerator> IterateGenerators(Dialect.Dialect dialect) { - Dictionary<string, IPersistentIdentifierGenerator> generators = - new Dictionary<string, IPersistentIdentifierGenerator>(); + var generators = new Dictionary<string, IPersistentIdentifierGenerator>(); string defaultCatalog = PropertiesHelper.GetString(Environment.DefaultCatalog, properties, null); string defaultSchema = PropertiesHelper.GetString(Environment.DefaultSchema, properties, null); - foreach (PersistentClass pc in classes.Values) + foreach (var pc in classes.Values) { if (!pc.IsInherited) { - IPersistentIdentifierGenerator ig = - pc.Identifier.CreateIdentifierGenerator(dialect, defaultCatalog, defaultSchema, (RootClass)pc) as + var ig = + pc.Identifier.CreateIdentifierGenerator(dialect, defaultCatalog, defaultSchema, (RootClass) pc) as IPersistentIdentifierGenerator; if (ig != null) + { generators[ig.GeneratorKey()] = ig; + } } } - foreach (NHibernate.Mapping.Collection collection in collections.Values) + foreach (var collection in collections.Values) { if (collection.IsIdentified) { - IPersistentIdentifierGenerator ig = - ((IdentifierCollection)collection).Identifier.CreateIdentifierGenerator(dialect, defaultCatalog, defaultSchema, - null) as IPersistentIdentifierGenerator; + var ig = + ((IdentifierCollection) collection).Identifier.CreateIdentifierGenerator(dialect, defaultCatalog, defaultSchema, + null) as IPersistentIdentifierGenerator; if (ig != null) + { generators[ig.GeneratorKey()] = ig; + } } } return generators.Values; } } -} +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/InvalidProxyTypeException.cs =================================================================== --- trunk/nhibernate/src/NHibernate/InvalidProxyTypeException.cs 2008-10-11 05:54:37 UTC (rev 3841) +++ trunk/nhibernate/src/NHibernate/InvalidProxyTypeException.cs 2008-10-11 12:59:51 UTC (rev 3842) @@ -3,6 +3,7 @@ using System.Runtime.Serialization; using System.Security.Permissions; using System.Text; +using System.Collections.Generic; namespace NHibernate { @@ -14,22 +15,17 @@ [Serializable] public class InvalidProxyTypeException : MappingException { - private ICollection errors; - - public InvalidProxyTypeException(ICollection errors) + public InvalidProxyTypeException(ICollection<string> errors) : base(FormatMessage(errors)) { - this.errors = errors; + Errors = errors; } - public ICollection Errors - { - get { return errors; } - } + public ICollection<string> Errors { get; private set; } - private static string FormatMessage(ICollection errors) + private static string FormatMessage(IEnumerable<string> errors) { - StringBuilder result = new StringBuilder("The following types may not be used as proxies:"); + var result = new StringBuilder("The following types may not be used as proxies:"); foreach (string error in errors) { result.Append('\n').Append(error); @@ -42,7 +38,7 @@ public InvalidProxyTypeException(SerializationInfo info, StreamingContext context) : base(info, context) { - this.errors = (ICollection) info.GetValue("errors", typeof(ICollection)); + Errors = (ICollection<string>)info.GetValue("errors", typeof(ICollection)); } [SecurityPermission(SecurityAction.LinkDemand, @@ -50,7 +46,7 @@ public override void GetObjectData(SerializationInfo info, StreamingContext context) { base.GetObjectData(info, context); - info.AddValue("errors", errors, typeof(ICollection)); + info.AddValue("errors", Errors, typeof(ICollection)); } #endregion Modified: trunk/nhibernate/src/NHibernate/Proxy/ProxyTypeValidator.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Proxy/ProxyTypeValidator.cs 2008-10-11 05:54:37 UTC (rev 3841) +++ trunk/nhibernate/src/NHibernate/Proxy/ProxyTypeValidator.cs 2008-10-11 12:59:51 UTC (rev 3842) @@ -1,6 +1,5 @@ -using System; using System.Collections; -using System.Collections.Specialized; +using System.Collections.Generic; using System.Reflection; using NHibernate.Util; @@ -8,9 +7,7 @@ { public class ProxyTypeValidator { - private ProxyTypeValidator() - { - } + private ProxyTypeValidator() {} /// <summary> /// Validates whether <paramref name="type"/> can be specified as the base class @@ -20,9 +17,9 @@ /// A collection of errors, if any, or <see langword="null" /> if none were found. /// </returns> /// <param name="type">The type to validate.</param> - public static ICollection ValidateType(System.Type type) + public static ICollection<string> ValidateType(System.Type type) { - StringCollection errors = new StringCollection(); + var errors = new List<string>(); if (type.IsInterface) { @@ -60,7 +57,7 @@ { if (member is PropertyInfo) { - PropertyInfo property = (PropertyInfo) member; + var property = (PropertyInfo) member; MethodInfo[] accessors = property.GetAccessors(false); foreach (MethodInfo accessor in accessors) @@ -70,8 +67,7 @@ } else if (member is MethodInfo) { - if (member.DeclaringType == typeof(object) - && member.Name == "GetType") + if (member.DeclaringType == typeof (object) && member.Name == "GetType") { // object.GetType is ignored continue; @@ -80,7 +76,7 @@ } else if (member is FieldInfo) { - FieldInfo memberField = (FieldInfo) member; + var memberField = (FieldInfo) member; if (memberField.IsPublic || memberField.IsAssembly || memberField.IsFamilyOrAssembly) { Error(errors, type, "field " + member.Name + " should not be public nor internal"); @@ -91,12 +87,12 @@ private static void CheckMethodIsVirtual(System.Type type, MethodInfo method, IList errors) { - if (method.DeclaringType != typeof(object) && !IsDisposeMethod(method) && - method.IsPublic || method.IsAssembly || method.IsFamilyOrAssembly) + if (method.DeclaringType != typeof (object) && !IsDisposeMethod(method) && method.IsPublic || method.IsAssembly + || method.IsFamilyOrAssembly) { - if (!method.IsVirtual || method.IsFinal) + if (!method.IsVirtual || method.IsFinal || (method.IsVirtual && method.IsAssembly)) { - Error(errors, type, "method " + method.Name + " should be virtual"); + Error(errors, type, "method " + method.Name + " should be 'public/protected virtual' or 'protected internal virtual'"); } } } @@ -108,12 +104,11 @@ private static bool HasVisibleDefaultConstructor(System.Type type) { - ConstructorInfo constructor = type.GetConstructor( - BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, - null, System.Type.EmptyTypes, null); + ConstructorInfo constructor = + type.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, + System.Type.EmptyTypes, null); - return constructor != null - && !constructor.IsPrivate; + return constructor != null && !constructor.IsPrivate; } private static void CheckNotSealed(System.Type type, IList errors) @@ -124,4 +119,4 @@ } } } -} +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Tuple/Entity/PocoEntityTuplizer.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Tuple/Entity/PocoEntityTuplizer.cs 2008-10-11 05:54:37 UTC (rev 3841) +++ trunk/nhibernate/src/NHibernate/Tuple/Entity/PocoEntityTuplizer.cs 2008-10-11 12:59:51 UTC (rev 3842) @@ -92,8 +92,7 @@ // determine the id getter and setter methods from the proxy interface (if any) // determine all interfaces needed by the resulting proxy - HashedSet<System.Type> proxyInterfaces = new HashedSet<System.Type>(); - proxyInterfaces.Add(typeof(INHibernateProxy)); + var proxyInterfaces = new HashedSet<System.Type> {typeof (INHibernateProxy)}; System.Type _mappedClass = persistentClass.MappedClass; System.Type _proxyInterface = persistentClass.ProxyInterface; @@ -167,20 +166,18 @@ private static void LogPropertyAccessorsErrors(PersistentClass persistentClass) { // This method work when Environment.UseProxyValidator is off - System.Type clazz = persistentClass.MappedClass; foreach (Mapping.Property property in persistentClass.PropertyIterator) { MethodInfo method = property.GetGetter(clazz).Method; - // In NET if IsVirtual is false or IsFinal is true, then the method cannot be overridden. - if (method != null && (!method.IsVirtual || method.IsFinal)) + if (ShouldLogError(method)) { log.Error( string.Format("Getters of lazy classes cannot be final: {0}.{1}", persistentClass.MappedClass.FullName, property.Name)); } method = property.GetSetter(clazz).Method; - if (method != null && (!method.IsVirtual || method.IsFinal)) + if (ShouldLogError(method)) { log.Error( string.Format("Setters of lazy classes cannot be final: {0}.{1}", persistentClass.MappedClass.FullName, @@ -189,6 +186,12 @@ } } + private static bool ShouldLogError(MethodBase method) + { + // In NET if IsVirtual is false or IsFinal is true, then the method cannot be overridden. + return method != null && (!method.IsVirtual || method.IsFinal || (method.IsVirtual && method.IsAssembly)); + } + protected virtual IProxyFactory BuildProxyFactoryInternal(PersistentClass @class, IGetter getter, ISetter setter) { return Cfg.Environment.BytecodeProvider.ProxyFactoryFactory.BuildProxyFactory(); @@ -284,7 +287,7 @@ public override EntityMode EntityMode { - get { return NHibernate.EntityMode.Poco; } + get { return EntityMode.Poco; } } } } Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1408/DbResourceKey.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1408/DbResourceKey.cs 2008-10-11 05:54:37 UTC (rev 3841) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1408/DbResourceKey.cs 2008-10-11 12:59:51 UTC (rev 3842) @@ -31,7 +31,7 @@ public virtual DbResource Resource { get { return resource; } - internal set { resource = value; } + protected internal set { resource = value; } } } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1464/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1464/Fixture.cs 2008-10-11 05:54:37 UTC (rev 3841) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1464/Fixture.cs 2008-10-11 12:59:51 UTC (rev 3842) @@ -1,8 +1,8 @@ using System; -using System.Collections; using NHibernate.Proxy; using NUnit.Framework; using NUnit.Framework.SyntaxHelpers; +using System.Collections.Generic; namespace NHibernate.Test.NHSpecificTest.NH1464 { @@ -61,7 +61,7 @@ [Test] public void NoExceptionForDispose() { - ICollection errs = ProxyTypeValidator.ValidateType(typeof (CPPMimic)); + ICollection<string> errs = ProxyTypeValidator.ValidateType(typeof (CPPMimic)); Assert.That(errs, Is.Null); errs = ProxyTypeValidator.ValidateType(typeof(Another)); Assert.That(errs, Is.Null); Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1515/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1515/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1515/Fixture.cs 2008-10-11 12:59:51 UTC (rev 3842) @@ -0,0 +1,37 @@ +using System.Collections.Generic; +using NHibernate.Proxy; +using NUnit.Framework; +using NUnit.Framework.SyntaxHelpers; + +namespace NHibernate.Test.NHSpecificTest.NH1515 +{ + [TestFixture] + public class Fixture + { + public class ClassWithInternal + { + internal virtual void DoSomething() {} + } + + public class ClassWithInternalProperty + { + internal virtual string DoSomething { get; set; } + } + + [Test] + public void NoExceptionForMethod() + { + ICollection<string> errs = ProxyTypeValidator.ValidateType(typeof(ClassWithInternal)); + Assert.That(errs, Is.Not.Null); + Assert.That(errs.Count, Is.EqualTo(1)); + } + + [Test] + public void NoExceptionForProperty() + { + ICollection<string> errs = ProxyTypeValidator.ValidateType(typeof(ClassWithInternalProperty)); + Assert.That(errs, Is.Not.Null); + Assert.That(errs.Count, Is.EqualTo(2)); + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/ProxyValidator/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/ProxyValidator/Fixture.cs 2008-10-11 05:54:37 UTC (rev 3841) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/ProxyValidator/Fixture.cs 2008-10-11 12:59:51 UTC (rev 3842) @@ -2,6 +2,7 @@ using System.Collections; using NHibernate.Proxy; using NUnit.Framework; +using System.Collections.Generic; namespace NHibernate.Test.NHSpecificTest.ProxyValidator { @@ -10,7 +11,7 @@ { private void Validate(System.Type type) { - ICollection errors = ProxyTypeValidator.ValidateType(type); + ICollection<string> errors = ProxyTypeValidator.ValidateType(type); if (errors != null) { throw new InvalidProxyTypeException(errors); Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2008-10-11 05:54:37 UTC (rev 3841) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2008-10-11 12:59:51 UTC (rev 3842) @@ -507,6 +507,7 @@ <Compile Include="NHSpecificTest\NH1508\Document.cs" /> <Compile Include="NHSpecificTest\NH1508\Fixture.cs" /> <Compile Include="NHSpecificTest\NH1508\Person.cs" /> + <Compile Include="NHSpecificTest\NH1515\Fixture.cs" /> <Compile Include="NHSpecificTest\NH280\Fixture.cs" /> <Compile Include="NHSpecificTest\NH280\Foo.cs" /> <Compile Include="NHSpecificTest\NH1018\Employee.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |