This is an automated email from the ASF dual-hosted git repository.

nizhikov pushed a commit to branch IGNITE-27565-2
in repository https://gitbox.apache.org/repos/asf/ignite.git

commit 9b020eb13602dcf998017111e714499ba2a9c669
Author: Nikolay Izhikov <[email protected]>
AuthorDate: Thu Jan 15 00:33:07 2026 +0300

    IGNITE-27558 Move BinaryObjectImpl to binary-impl
---
 .../internal/binary/BinaryClassDescriptor.java     | 387 +--------------------
 .../ignite/internal/binary/BinaryWriterExImpl.java | 357 ++++++++++++++++++-
 2 files changed, 365 insertions(+), 379 deletions(-)

diff --git 
a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
 
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
index 4ba39fc0174..15ae1d5a3dc 100644
--- 
a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
+++ 
b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryClassDescriptor.java
@@ -22,31 +22,21 @@ import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
-import java.lang.reflect.Proxy;
-import java.math.BigDecimal;
-import java.sql.Time;
-import java.sql.Timestamp;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Date;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
-import java.util.UUID;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.binary.BinaryObjectException;
 import org.apache.ignite.binary.BinaryReflectiveSerializer;
 import org.apache.ignite.binary.BinarySerializer;
 import org.apache.ignite.binary.Binarylizable;
-import org.apache.ignite.internal.UnregisteredBinaryTypeException;
-import org.apache.ignite.internal.UnregisteredClassException;
 import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
-import org.apache.ignite.internal.processors.cache.CacheObject;
 import org.apache.ignite.internal.util.CommonUtils;
 import org.apache.ignite.internal.util.tostring.GridToStringExclude;
-import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.marshaller.MarshallerExclusions;
 import org.jetbrains.annotations.Nullable;
@@ -62,7 +52,7 @@ class BinaryClassDescriptor {
     private final BinaryContext ctx;
 
     /** */
-    private final Class<?> cls;
+    final Class<?> cls;
 
     /** Configured serializer. */
     final BinarySerializer serializer;
@@ -77,7 +67,7 @@ class BinaryClassDescriptor {
     final BinaryWriteMode mode;
 
     /** */
-    private final boolean userType;
+    final boolean userType;
 
     /** */
     private final int typeId;
@@ -86,7 +76,7 @@ class BinaryClassDescriptor {
     final String typeName;
 
     /** Affinity key field name. */
-    private final String affKeyFieldName;
+    final String affKeyFieldName;
 
     /** */
     private final Constructor<?> ctor;
@@ -101,16 +91,16 @@ class BinaryClassDescriptor {
     final Method readResolveMtd;
 
     /** */
-    private final Map<String, BinaryFieldMetadata> stableFieldsMeta;
+    final Map<String, BinaryFieldMetadata> stableFieldsMeta;
 
     /** Object schemas. Initialized only for serializable classes and contains 
only 1 entry. */
-    private final BinarySchema stableSchema;
+    final BinarySchema stableSchema;
 
     /** Schema registry. */
-    private final BinarySchemaRegistry schemaReg;
+    final BinarySchemaRegistry schemaReg;
 
     /** */
-    private final boolean registered;
+    final boolean registered;
 
     /** */
     private final boolean useOptMarshaller;
@@ -119,10 +109,10 @@ class BinaryClassDescriptor {
     private final boolean excluded;
 
     /** */
-    private final Class<?>[] intfs;
+    final Class<?>[] intfs;
 
     /** Whether stable schema was published. */
-    private volatile boolean stableSchemaPublished;
+    volatile boolean stableSchemaPublished;
 
     /**
      * @param ctx Context.
@@ -595,327 +585,6 @@ class BinaryClassDescriptor {
         return readResolveMtd;
     }
 
-    /**
-     * @param obj Object.
-     * @param writer Writer.
-     * @throws BinaryObjectException In case of error.
-     */
-    void write(Object obj, BinaryWriterEx writer) throws BinaryObjectException 
{
-        try {
-            assert obj != null;
-            assert writer != null;
-            assert mode != BinaryWriteMode.OPTIMIZED : "OptimizedMarshaller 
should not be used here: " + cls.getName();
-
-            switch (mode) {
-                case P_BYTE:
-                case BYTE:
-                    writer.writeByteFieldPrimitive((byte)obj);
-
-                    break;
-
-                case P_SHORT:
-                case SHORT:
-                    writer.writeShortFieldPrimitive((short)obj);
-
-                    break;
-
-                case P_INT:
-                case INT:
-                    writer.writeIntFieldPrimitive((int)obj);
-
-                    break;
-
-                case P_LONG:
-                case LONG:
-                    writer.writeLongFieldPrimitive((long)obj);
-
-                    break;
-
-                case P_FLOAT:
-                case FLOAT:
-                    writer.writeFloatFieldPrimitive((float)obj);
-
-                    break;
-
-                case P_DOUBLE:
-                case DOUBLE:
-                    writer.writeDoubleFieldPrimitive((double)obj);
-
-                    break;
-
-                case P_CHAR:
-                case CHAR:
-                    writer.writeCharFieldPrimitive((char)obj);
-
-                    break;
-
-                case P_BOOLEAN:
-                case BOOLEAN:
-                    writer.writeBooleanFieldPrimitive((boolean)obj);
-
-                    break;
-
-                case DECIMAL:
-                    writer.writeDecimal((BigDecimal)obj);
-
-                    break;
-
-                case STRING:
-                    writer.writeString((String)obj);
-
-                    break;
-
-                case UUID:
-                    writer.writeUuid((UUID)obj);
-
-                    break;
-
-                case DATE:
-                    writer.writeDate((Date)obj);
-
-                    break;
-
-                case TIMESTAMP:
-                    writer.writeTimestamp((Timestamp)obj);
-
-                    break;
-
-                case TIME:
-                    writer.writeTime((Time)obj);
-
-                    break;
-
-                case BYTE_ARR:
-                    writer.writeByteArray((byte[])obj);
-
-                    break;
-
-                case SHORT_ARR:
-                    writer.writeShortArray((short[])obj);
-
-                    break;
-
-                case INT_ARR:
-                    writer.writeIntArray((int[])obj);
-
-                    break;
-
-                case LONG_ARR:
-                    writer.writeLongArray((long[])obj);
-
-                    break;
-
-                case FLOAT_ARR:
-                    writer.writeFloatArray((float[])obj);
-
-                    break;
-
-                case DOUBLE_ARR:
-                    writer.writeDoubleArray((double[])obj);
-
-                    break;
-
-                case CHAR_ARR:
-                    writer.writeCharArray((char[])obj);
-
-                    break;
-
-                case BOOLEAN_ARR:
-                    writer.writeBooleanArray((boolean[])obj);
-
-                    break;
-
-                case DECIMAL_ARR:
-                    writer.writeDecimalArray((BigDecimal[])obj);
-
-                    break;
-
-                case STRING_ARR:
-                    writer.writeStringArray((String[])obj);
-
-                    break;
-
-                case UUID_ARR:
-                    writer.writeUuidArray((UUID[])obj);
-
-                    break;
-
-                case DATE_ARR:
-                    writer.writeDateArray((Date[])obj);
-
-                    break;
-
-                case TIMESTAMP_ARR:
-                    writer.writeTimestampArray((Timestamp[])obj);
-
-                    break;
-
-                case TIME_ARR:
-                    writer.writeTimeArray((Time[])obj);
-
-                    break;
-
-                case OBJECT_ARR:
-                    if (BinaryUtils.isBinaryArray(obj))
-                        writer.writeBinaryArray(((BinaryArray)obj));
-                    else
-                        writer.writeObjectArray((Object[])obj);
-
-                    break;
-
-                case COL:
-                    writer.writeCollection((Collection<?>)obj);
-
-                    break;
-
-                case MAP:
-                    writer.writeMap((Map<?, ?>)obj);
-
-                    break;
-
-                case ENUM:
-                    writer.writeEnum((Enum<?>)obj);
-
-                    break;
-
-                case BINARY_ENUM:
-                    writer.writeBinaryEnum((BinaryObjectEx)obj);
-
-                    break;
-
-                case ENUM_ARR:
-                    if (BinaryUtils.isBinaryArray(obj))
-                        writer.writeBinaryArray(((BinaryArray)obj));
-                    else
-                        writer.doWriteEnumArray((Object[])obj);
-
-                    break;
-
-                case CLASS:
-                    writer.writeClass((Class)obj);
-
-                    break;
-
-                case PROXY:
-                    writer.writeProxy((Proxy)obj, intfs);
-
-                    break;
-
-                case BINARY_OBJ:
-                    writer.writeBinaryObject((BinaryObjectEx)obj);
-
-                    break;
-
-                case BINARY:
-                    if (preWrite(writer, obj)) {
-                        try {
-                            if (serializer != null)
-                                serializer.writeBinary(obj, writer);
-                            else
-                                ((Binarylizable)obj).writeBinary(writer);
-
-                            postWrite(writer);
-
-                            // Check whether we need to update metadata.
-                            // The reason for this check is described in 
https://issues.apache.org/jira/browse/IGNITE-7138.
-                            if (obj.getClass() != BinaryMetadata.class && 
obj.getClass() != BinaryTreeMap.class) {
-                                int schemaId = writer.schemaId();
-
-                                if (schemaReg.schema(schemaId) == null) {
-                                    // This is new schema, let's update 
metadata.
-                                    BinaryMetadataCollector collector =
-                                        new BinaryMetadataCollector(typeId, 
typeName, mapper);
-
-                                    if (serializer != null)
-                                        serializer.writeBinary(obj, collector);
-                                    else
-                                        
((Binarylizable)obj).writeBinary(collector);
-
-                                    BinarySchema newSchema = 
collector.schema();
-
-                                    schemaReg.addSchema(newSchema.schemaId(), 
newSchema);
-
-                                    if (userType) {
-                                        BinaryMetadata meta = new 
BinaryMetadata(typeId, typeName, collector.meta(),
-                                            affKeyFieldName, 
Collections.singleton(newSchema), false, null);
-
-                                        ctx.updateMetadata(typeId, meta, 
writer.failIfUnregistered());
-                                    }
-                                }
-                            }
-
-                            postWriteHashCode(writer, obj);
-                        }
-                        finally {
-                            writer.popSchema();
-                        }
-                    }
-
-                    break;
-
-                case OBJECT:
-                    if (userType && !stableSchemaPublished) {
-                        // Update meta before write object with new schema
-                        BinaryMetadata meta = new BinaryMetadata(typeId, 
typeName, stableFieldsMeta,
-                            affKeyFieldName, 
Collections.singleton(stableSchema), false, null);
-
-                        ctx.updateMetadata(typeId, meta, 
writer.failIfUnregistered());
-
-                        schemaReg.addSchema(stableSchema.schemaId(), 
stableSchema);
-
-                        stableSchemaPublished = true;
-                    }
-
-                    if (preWrite(writer, obj)) {
-                        try {
-                            for (BinaryFieldDescriptor info : fields) {
-                                try {
-                                    writer.writeField(obj, info);
-                                }
-                                catch (UnregisteredClassException | 
UnregisteredBinaryTypeException ex) {
-                                    throw ex;
-                                }
-                                catch (Exception ex) {
-                                    if (S.includeSensitive() && 
!F.isEmpty(info.name))
-                                        throw new 
BinaryObjectException("Failed to write field [name=" + info.name + ']', ex);
-                                    else
-                                        throw new 
BinaryObjectException("Failed to write field [id=" + info.id + ']', ex);
-                                }
-                            }
-
-                            writer.schemaId(stableSchema.schemaId());
-
-                            postWrite(writer);
-                            postWriteHashCode(writer, obj);
-                        }
-                        finally {
-                            writer.popSchema();
-                        }
-                    }
-
-                    break;
-
-                default:
-                    assert false : "Invalid mode: " + mode;
-            }
-        }
-        catch (UnregisteredBinaryTypeException | UnregisteredClassException e) 
{
-            throw e;
-        }
-        catch (Exception e) {
-            String msg;
-
-            if (S.includeSensitive() && !F.isEmpty(typeName))
-                msg = "Failed to serialize object [typeName=" + typeName + ']';
-            else
-                msg = "Failed to serialize object [typeId=" + typeId + ']';
-
-            CommonUtils.error(ctx.log(), msg, e);
-
-            throw new BinaryObjectException(msg, e);
-        }
-    }
-
     /**
      * @return A copy of this {@code BinaryClassDescriptor} marked as 
registered.
      */
@@ -966,44 +635,6 @@ class BinaryClassDescriptor {
         return enumMap;
     }
 
-    /**
-     * Pre-write phase.
-     *
-     * @param writer Writer.
-     * @param obj Object.
-     * @return Whether further write is needed.
-     */
-    private boolean preWrite(BinaryWriterEx writer, Object obj) {
-        if (writer.tryWriteAsHandle(obj))
-            return false;
-
-        writer.preWrite(registered ? null : cls.getName());
-
-        return true;
-    }
-
-    /**
-     * Post-write phase.
-     *
-     * @param writer Writer.
-     */
-    private void postWrite(BinaryWriterEx writer) {
-        writer.postWrite(userType, registered);
-    }
-
-    /**
-     * Post-write routine for hash code.
-     *
-     * @param writer Writer.
-     * @param obj Object.
-     */
-    private void postWriteHashCode(BinaryWriterEx writer, Object obj) {
-        boolean postWriteRequired = !(obj instanceof CacheObject) || 
((CacheObject)obj).postWriteRequired();
-        // No need to call "postWriteHashCode" here because we do not care 
about hash code.
-        if (postWriteRequired)
-            writer.postWriteHashCode(registered ? null : cls.getName());
-    }
-
     /** */
     Constructor<?> ctor() {
         return ctor;
diff --git 
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
index 033be969abc..91171cbbefc 100644
--- 
a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
+++ 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryWriterExImpl.java
@@ -26,17 +26,23 @@ import java.math.BigInteger;
 import java.sql.Time;
 import java.sql.Timestamp;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Date;
 import java.util.Map;
 import java.util.UUID;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.binary.BinaryObjectException;
 import org.apache.ignite.binary.BinaryRawWriter;
+import org.apache.ignite.binary.Binarylizable;
+import org.apache.ignite.internal.UnregisteredBinaryTypeException;
 import org.apache.ignite.internal.UnregisteredClassException;
 import org.apache.ignite.internal.binary.streams.BinaryOutputStream;
+import org.apache.ignite.internal.processors.cache.CacheObject;
 import org.apache.ignite.internal.util.CommonUtils;
 import org.apache.ignite.internal.util.GridUnsafe;
+import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.A;
+import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.marshaller.Marshallers;
 import org.jetbrains.annotations.Nullable;
 
@@ -205,7 +211,7 @@ class BinaryWriterExImpl implements BinaryWriterEx {
 
         this.typeId = desc.typeId();
 
-        desc.write(obj, this);
+        write(obj, desc);
     }
 
     /** {@inheritDoc} */
@@ -1861,4 +1867,353 @@ class BinaryWriterExImpl implements BinaryWriterEx {
             val == null ? BinaryWriteMode.OBJECT : 
BinaryUtils.mode(val.getClass()) :
             fld.mode;
     }
+
+    /**
+     * @param obj Object.
+     * @param desc Class descriptor.
+     * @throws BinaryObjectException In case of error.
+     */
+    private void write(Object obj, BinaryClassDescriptor desc) throws 
BinaryObjectException {
+        try {
+            assert obj != null;
+            assert desc.mode != BinaryWriteMode.OPTIMIZED : 
"OptimizedMarshaller should not be used here: " + desc.cls.getName();
+
+            switch (desc.mode) {
+                case P_BYTE:
+                case BYTE:
+                    writeByteFieldPrimitive((byte)obj);
+
+                    break;
+
+                case P_SHORT:
+                case SHORT:
+                    writeShortFieldPrimitive((short)obj);
+
+                    break;
+
+                case P_INT:
+                case INT:
+                    writeIntFieldPrimitive((int)obj);
+
+                    break;
+
+                case P_LONG:
+                case LONG:
+                    writeLongFieldPrimitive((long)obj);
+
+                    break;
+
+                case P_FLOAT:
+                case FLOAT:
+                    writeFloatFieldPrimitive((float)obj);
+
+                    break;
+
+                case P_DOUBLE:
+                case DOUBLE:
+                    writeDoubleFieldPrimitive((double)obj);
+
+                    break;
+
+                case P_CHAR:
+                case CHAR:
+                    writeCharFieldPrimitive((char)obj);
+
+                    break;
+
+                case P_BOOLEAN:
+                case BOOLEAN:
+                    writeBooleanFieldPrimitive((boolean)obj);
+
+                    break;
+
+                case DECIMAL:
+                    writeDecimal((BigDecimal)obj);
+
+                    break;
+
+                case STRING:
+                    writeString((String)obj);
+
+                    break;
+
+                case UUID:
+                    writeUuid((UUID)obj);
+
+                    break;
+
+                case DATE:
+                    writeDate((Date)obj);
+
+                    break;
+
+                case TIMESTAMP:
+                    writeTimestamp((Timestamp)obj);
+
+                    break;
+
+                case TIME:
+                    writeTime((Time)obj);
+
+                    break;
+
+                case BYTE_ARR:
+                    writeByteArray((byte[])obj);
+
+                    break;
+
+                case SHORT_ARR:
+                    writeShortArray((short[])obj);
+
+                    break;
+
+                case INT_ARR:
+                    writeIntArray((int[])obj);
+
+                    break;
+
+                case LONG_ARR:
+                    writeLongArray((long[])obj);
+
+                    break;
+
+                case FLOAT_ARR:
+                    writeFloatArray((float[])obj);
+
+                    break;
+
+                case DOUBLE_ARR:
+                    writeDoubleArray((double[])obj);
+
+                    break;
+
+                case CHAR_ARR:
+                    writeCharArray((char[])obj);
+
+                    break;
+
+                case BOOLEAN_ARR:
+                    writeBooleanArray((boolean[])obj);
+
+                    break;
+
+                case DECIMAL_ARR:
+                    writeDecimalArray((BigDecimal[])obj);
+
+                    break;
+
+                case STRING_ARR:
+                    writeStringArray((String[])obj);
+
+                    break;
+
+                case UUID_ARR:
+                    writeUuidArray((UUID[])obj);
+
+                    break;
+
+                case DATE_ARR:
+                    writeDateArray((Date[])obj);
+
+                    break;
+
+                case TIMESTAMP_ARR:
+                    writeTimestampArray((Timestamp[])obj);
+
+                    break;
+
+                case TIME_ARR:
+                    writeTimeArray((Time[])obj);
+
+                    break;
+
+                case OBJECT_ARR:
+                    if (BinaryUtils.isBinaryArray(obj))
+                        writeBinaryArray(((BinaryArray)obj));
+                    else
+                        writeObjectArray((Object[])obj);
+
+                    break;
+
+                case COL:
+                    writeCollection((Collection<?>)obj);
+
+                    break;
+
+                case MAP:
+                    writeMap((Map<?, ?>)obj);
+
+                    break;
+
+                case ENUM:
+                    writeEnum((Enum<?>)obj);
+
+                    break;
+
+                case BINARY_ENUM:
+                    writeBinaryEnum((BinaryObjectEx)obj);
+
+                    break;
+
+                case ENUM_ARR:
+                    if (BinaryUtils.isBinaryArray(obj))
+                        writeBinaryArray(((BinaryArray)obj));
+                    else
+                        doWriteEnumArray((Object[])obj);
+
+                    break;
+
+                case CLASS:
+                    writeClass((Class)obj);
+
+                    break;
+
+                case PROXY:
+                    writeProxy((Proxy)obj, desc.intfs);
+
+                    break;
+
+                case BINARY_OBJ:
+                    writeBinaryObject((BinaryObjectEx)obj);
+
+                    break;
+
+                case BINARY:
+                    if (preWrite(obj, desc)) {
+                        try {
+                            if (desc.serializer != null)
+                                desc.serializer.writeBinary(obj, this);
+                            else
+                                ((Binarylizable)obj).writeBinary(this);
+
+                            postWrite(desc.userType, desc.registered);
+
+                            // Check whether we need to update metadata.
+                            // The reason for this check is described in 
https://issues.apache.org/jira/browse/IGNITE-7138.
+                            if (obj.getClass() != BinaryMetadata.class && 
obj.getClass() != BinaryTreeMap.class) {
+                                int schemaId = schemaId();
+
+                                if (desc.schemaReg.schema(schemaId) == null) {
+                                    // This is new schema, let's update 
metadata.
+                                    BinaryMetadataCollector collector =
+                                        new BinaryMetadataCollector(typeId, 
desc.typeName, mapper);
+
+                                    if (desc.serializer != null)
+                                        desc.serializer.writeBinary(obj, 
collector);
+                                    else
+                                        
((Binarylizable)obj).writeBinary(collector);
+
+                                    BinarySchema newSchema = 
collector.schema();
+
+                                    
desc.schemaReg.addSchema(newSchema.schemaId(), newSchema);
+
+                                    if (desc.userType) {
+                                        BinaryMetadata meta = new 
BinaryMetadata(typeId, desc.typeName, collector.meta(),
+                                            desc.affKeyFieldName, 
Collections.singleton(newSchema), false, null);
+
+                                        ctx.updateMetadata(typeId, meta, 
failIfUnregistered());
+                                    }
+                                }
+                            }
+
+                            postWriteHashCode(obj, desc);
+                        }
+                        finally {
+                            popSchema();
+                        }
+                    }
+
+                    break;
+
+                case OBJECT:
+                    if (desc.userType && !desc.stableSchemaPublished) {
+                        // Update meta before write object with new schema
+                        BinaryMetadata meta = new BinaryMetadata(typeId, 
desc.typeName, desc.stableFieldsMeta,
+                            desc.affKeyFieldName, 
Collections.singleton(desc.stableSchema), false, null);
+
+                        ctx.updateMetadata(typeId, meta, failIfUnregistered());
+
+                        desc.schemaReg.addSchema(desc.stableSchema.schemaId(), 
desc.stableSchema);
+
+                        desc.stableSchemaPublished = true;
+                    }
+
+                    if (preWrite(obj, desc)) {
+                        try {
+                            for (BinaryFieldDescriptor info : desc.fields) {
+                                try {
+                                    writeField(obj, info);
+                                }
+                                catch (UnregisteredClassException | 
UnregisteredBinaryTypeException ex) {
+                                    throw ex;
+                                }
+                                catch (Exception ex) {
+                                    if (S.includeSensitive() && 
!F.isEmpty(info.name))
+                                        throw new 
BinaryObjectException("Failed to write field [name=" + info.name + ']', ex);
+                                    else
+                                        throw new 
BinaryObjectException("Failed to write field [id=" + info.id + ']', ex);
+                                }
+                            }
+
+                            schemaId(desc.stableSchema.schemaId());
+
+                            postWrite(desc.userType, desc.registered);
+                            postWriteHashCode(obj, desc);
+                        }
+                        finally {
+                            popSchema();
+                        }
+                    }
+
+                    break;
+
+                default:
+                    assert false : "Invalid mode: " + desc.mode;
+            }
+        }
+        catch (UnregisteredBinaryTypeException | UnregisteredClassException e) 
{
+            throw e;
+        }
+        catch (Exception e) {
+            String msg;
+
+            if (S.includeSensitive() && !F.isEmpty(desc.typeName))
+                msg = "Failed to serialize object [typeName=" + desc.typeName 
+ ']';
+            else
+                msg = "Failed to serialize object [typeId=" + typeId + ']';
+
+            CommonUtils.error(ctx.log(), msg, e);
+
+            throw new BinaryObjectException(msg, e);
+        }
+    }
+
+    /**
+     * Pre-write phase.
+     *
+     * @param obj Object.
+     * @param desc Class descriptor.
+     * @return Whether further write is needed.
+     */
+    private boolean preWrite(Object obj, BinaryClassDescriptor desc) {
+        if (tryWriteAsHandle(obj))
+            return false;
+
+        preWrite(desc.registered ? null : desc.cls.getName());
+
+        return true;
+    }
+
+    /**
+     * Post-write routine for hash code.
+     *
+     * @param obj Object.
+     * @param desc Binary class descriptor.
+     */
+    private void postWriteHashCode(Object obj, BinaryClassDescriptor desc) {
+        boolean postWriteRequired = !(obj instanceof CacheObject) || 
((CacheObject)obj).postWriteRequired();
+        // No need to call "postWriteHashCode" here because we do not care 
about hash code.
+        if (postWriteRequired)
+            postWriteHashCode(desc.registered ? null : desc.cls.getName());
+    }
 }

Reply via email to