private bool HasChanged(NativeObjectInfo aoi1
			, NativeObjectInfo aoi2, int objectRecursionLevel
			)
		{
			if (aoi1.GetObject() == null && aoi2.GetObject() == null)
			{
				return false;
			}
			if (aoi1.GetObject() == null || aoi2.GetObject() == null)
			{
				return true;
			}
			return !aoi1.GetObject().Equals(aoi2.GetObject());
		}
		public virtual object BuildOneInstance(NativeObjectInfo objectInfo)
		{
			if (objectInfo.IsAtomicNativeObject())
			{
				return BuildOneInstance((AtomicNativeObjectInfo)objectInfo);
			}
			if (objectInfo.IsCollectionObject())
			{
				CollectionObjectInfo coi = (CollectionObjectInfo)objectInfo;
				object value = BuildCollectionInstance(coi);
				/* Manage a specific case of Set
				if (typeof(Java.Util.Set).IsAssignableFrom(value.GetType()) && typeof(System.Collections.ICollection).IsAssignableFrom(value.GetType()))
				{
					Java.Util.Set s = new Java.Util.HashSet();
					s.AddAll((System.Collections.ICollection)value);
					value = s;
				}
				*/
				return value;
			}
			if (objectInfo.IsArrayObject())
			{
				return BuildArrayInstance((ArrayObjectInfo)objectInfo);
			}
			if (objectInfo.IsMapObject())
			{
				return BuildMapInstance((MapObjectInfo)objectInfo);
			}
			if (objectInfo.IsNull())
			{
				return null;
			}
			throw new ODBRuntimeException(NeoDatisError.InstanceBuilderNativeType.AddParameter(ODBType.GetNameFromId(objectInfo.GetOdbTypeId())));
		}