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 8de1cd15165d1156b4c2235c00de4b261123ebdb Author: Nikolay Izhikov <[email protected]> AuthorDate: Thu Jan 15 00:01:19 2026 +0300 IGNITE-27558 Move BinaryObjectImpl to binary-impl --- .../ignite/internal/binary/BinariesFactory.java | 5 ++ .../apache/ignite/internal/binary/BinaryUtils.java | 71 --------------------- .../internal/binary/BinariesFactoryImpl.java | 5 ++ .../ignite/internal/binary/BinaryEnumCache.java | 0 .../ignite/internal/binary/BinaryReaderExImpl.java | 73 ++++++++++++++++++++-- .../org/apache/ignite/internal/IgniteKernal.java | 2 +- .../testframework/junits/GridAbstractTest.java | 2 +- 7 files changed, 81 insertions(+), 77 deletions(-) diff --git a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinariesFactory.java b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinariesFactory.java index 3538c2b452f..f341de8029e 100644 --- a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinariesFactory.java +++ b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinariesFactory.java @@ -171,4 +171,9 @@ public interface BinariesFactory { /** */ public BinaryIdentityResolver arrayIdentityResolver(); + + /** + * Clears binary caches. + */ + public void clearCache(); } diff --git a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java index 92740e79662..dd1187dfdaf 100644 --- a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java +++ b/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryUtils.java @@ -1701,70 +1701,6 @@ public class BinaryUtils { return arr; } - /** - * Having target class in place we simply read ordinal and create final representation. - * - * @param cls Enum class. - * @param useCache True if class loader cache will be used, false otherwise. - * @return Value. - */ - static Enum<?> doReadEnum(BinaryInputStream in, Class<?> cls, boolean useCache) throws BinaryObjectException { - assert cls != null; - - if (!cls.isEnum()) - throw new BinaryObjectException("Class does not represent enum type: " + cls.getName()); - - int ord = in.readInt(); - - if (useCache) - return BinaryEnumCache.get(cls, ord); - else - return uncachedEnumValue(cls, ord); - } - - /** - * Get value for the given class without any caching. - * - * @param cls Class. - */ - private static <T> T uncachedEnumValue(Class<?> cls, int ord) throws BinaryObjectException { - assert cls != null; - - if (ord >= 0) { - Object[] vals = cls.getEnumConstants(); - - if (ord < vals.length) - return (T)vals[ord]; - else - throw new BinaryObjectException("Failed to get enum value for ordinal (do you have correct class " + - "version?) [cls=" + cls.getName() + ", ordinal=" + ord + ", totalValues=" + vals.length + ']'); - } - else - return null; - } - - /** - * @param cls Enum class. - * @return Value. - */ - static Object[] doReadEnumArray(BinaryInputStream in, BinaryContext ctx, ClassLoader ldr, Class<?> cls) - throws BinaryObjectException { - int len = in.readInt(); - - Object[] arr = (Object[])Array.newInstance(cls, len); - - for (int i = 0; i < len; i++) { - byte flag = in.readByte(); - - if (flag == GridBinaryMarshaller.NULL) - arr[i] = null; - else - arr[i] = doReadEnum(in, doReadClass(in, ctx, ldr), Marshallers.USE_CACHE.get()); - } - - return arr; - } - /** * Read object serialized using optimized marshaller. * @@ -2712,13 +2648,6 @@ public class BinaryUtils { : obj == null ? null : obj.getClass().getSimpleName(); } - /** - * Clears binary caches. - */ - public static void clearCache() { - BinaryEnumCache.clear(); - } - /** * Gets the schema. * diff --git a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinariesFactoryImpl.java b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinariesFactoryImpl.java index 0064ab7cb6e..44b111942b8 100644 --- a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinariesFactoryImpl.java +++ b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinariesFactoryImpl.java @@ -224,6 +224,11 @@ public class BinariesFactoryImpl implements BinariesFactory { return BinaryArrayIdentityResolver.instance(); } + /** {@inheritDoc} */ + @Override public void clearCache() { + BinaryEnumCache.clear(); + } + /** * @param cls Class to check. * @return {@code True} if {@code val} is assignable to binary Enum object. diff --git a/modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryEnumCache.java b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryEnumCache.java similarity index 100% rename from modules/binary/api/src/main/java/org/apache/ignite/internal/binary/BinaryEnumCache.java rename to modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryEnumCache.java diff --git a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java index fca203666fe..c6ac86385b6 100644 --- a/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java +++ b/modules/binary/impl/src/main/java/org/apache/ignite/internal/binary/BinaryReaderExImpl.java @@ -19,6 +19,7 @@ package org.apache.ignite.internal.binary; import java.io.EOFException; import java.io.IOException; +import java.lang.reflect.Array; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.math.BigDecimal; @@ -1404,7 +1405,7 @@ class BinaryReaderExImpl implements BinaryReaderEx { if (cls == null) cls = cls0; - return BinaryUtils.doReadEnum(in, cls, Marshallers.USE_CACHE.get()); + return doReadEnum(in, cls, Marshallers.USE_CACHE.get()); } else return null; @@ -1462,7 +1463,7 @@ class BinaryReaderExImpl implements BinaryReaderEx { if (cls == null) cls = cls0; - return BinaryUtils.doReadEnumArray(in, ctx, ldr, cls); + return doReadEnumArray(in, ctx, ldr, cls); case HANDLE: Object arr = readHandleField(); @@ -1927,13 +1928,13 @@ class BinaryReaderExImpl implements BinaryReaderEx { break; case ENUM: - obj = BinaryUtils.doReadEnum(in, BinaryUtils.doReadClass(in, ctx, ldr), + obj = doReadEnum(in, BinaryUtils.doReadClass(in, ctx, ldr), Marshallers.USE_CACHE.get()); break; case ENUM_ARR: - obj = BinaryUtils.doReadEnumArray(in, ctx, ldr, BinaryUtils.doReadClass(in, ctx, ldr)); + obj = doReadEnumArray(in, ctx, ldr, BinaryUtils.doReadClass(in, ctx, ldr)); break; @@ -2751,6 +2752,70 @@ class BinaryReaderExImpl implements BinaryReaderEx { return BinaryUtils.doReadBinaryEnum(in, ctx, BinaryUtils.doReadEnumType(in)); } + /** + * @param cls Enum class. + * @return Value. + */ + private static Object[] doReadEnumArray(BinaryInputStream in, BinaryContext ctx, ClassLoader ldr, Class<?> cls) + throws BinaryObjectException { + int len = in.readInt(); + + Object[] arr = (Object[])Array.newInstance(cls, len); + + for (int i = 0; i < len; i++) { + byte flag = in.readByte(); + + if (flag == GridBinaryMarshaller.NULL) + arr[i] = null; + else + arr[i] = doReadEnum(in, BinaryUtils.doReadClass(in, ctx, ldr), Marshallers.USE_CACHE.get()); + } + + return arr; + } + + /** + * Having target class in place we simply read ordinal and create final representation. + * + * @param cls Enum class. + * @param useCache True if class loader cache will be used, false otherwise. + * @return Value. + */ + private static Enum<?> doReadEnum(BinaryInputStream in, Class<?> cls, boolean useCache) throws BinaryObjectException { + assert cls != null; + + if (!cls.isEnum()) + throw new BinaryObjectException("Class does not represent enum type: " + cls.getName()); + + int ord = in.readInt(); + + if (useCache) + return BinaryEnumCache.get(cls, ord); + else + return uncachedEnumValue(cls, ord); + } + + /** + * Get value for the given class without any caching. + * + * @param cls Class. + */ + private static <T> T uncachedEnumValue(Class<?> cls, int ord) throws BinaryObjectException { + assert cls != null; + + if (ord >= 0) { + Object[] vals = cls.getEnumConstants(); + + if (ord < vals.length) + return (T)vals[ord]; + else + throw new BinaryObjectException("Failed to get enum value for ordinal (do you have correct class " + + "version?) [cls=" + cls.getName() + ", ordinal=" + ord + ", totalValues=" + vals.length + ']'); + } + else + return null; + } + /** * @param ctor Constructor. * @param cls Class. diff --git a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java index 56191e68d9e..dcb474954a3 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java @@ -1859,7 +1859,7 @@ public class IgniteKernal implements IgniteEx, Externalizable { // Clean internal class/classloader caches to avoid stopped contexts held in memory. U.clearClassCache(); MarshallerExclusions.clearCache(); - BinaryUtils.clearCache(); + BinaryUtils.binariesFactory.clearCache(); gw.writeLock(); diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java index 0a4bce9e44a..8bd35ee1471 100755 --- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java +++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java @@ -2234,7 +2234,7 @@ public abstract class GridAbstractTest extends JUnitAssertAware { GridClassLoaderCache.clear(); U.clearClassCache(); MarshallerExclusions.clearCache(); - BinaryUtils.clearCache(); + BinaryUtils.binariesFactory.clearCache(); serializedObj.clear(); if (err != null)
