Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,14 @@
import org.eclipse.serializer.persistence.types.PersistenceLoadHandler;
import org.eclipse.serializer.persistence.types.PersistenceStoreHandler;

/**
* Binary Handler for java.time.LocalDate
* Required for java ≥ 26 because of transient fields and
* changed binary format of YearMonth implementation.
*
* Binary Format must be compatibe with java < 26 versions!
*
*/
public class BinaryHandlerLocalDate extends AbstractBinaryHandlerCustomNonReferentialFixedLength<LocalDate>
{
static final long BINARY_OFFSET_YEAR = 0L;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package org.eclipse.serializer.persistence.binary.java.time;

/*-
* #%L
* Eclipse Serializer Persistence Binary
* %%
* Copyright (C) 2023 - 2026 MicroStream Software
* %%
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
* #L%
*/

import java.time.MonthDay;

import org.eclipse.serializer.persistence.binary.types.AbstractBinaryHandlerCustomNonReferentialFixedLength;
import org.eclipse.serializer.persistence.binary.types.Binary;
import org.eclipse.serializer.persistence.types.PersistenceLoadHandler;
import org.eclipse.serializer.persistence.types.PersistenceStoreHandler;

/**
* Binary Handler for java.time.MonthDay
* Required for java &ge; 26 because of transient fields and
* changed binary format of MonthDay implementation.
*
* Binary Format must be compatibe with java &lt; 26 versions!
*
*/
public class BinaryHandlerMonthDay extends AbstractBinaryHandlerCustomNonReferentialFixedLength<MonthDay>
{
static final long BINARY_OFFSET_MONTH = 0L;
static final long BINARY_OFFSET_DAY = BINARY_OFFSET_MONTH + Integer.BYTES;
static final long BINARY_LENGTH = BINARY_OFFSET_DAY + Integer.BYTES;

///////////////////////////////////////////////////////////////////////////
// static methods //
///////////////////

public static BinaryHandlerMonthDay New()
{
return new BinaryHandlerMonthDay();
}


///////////////////////////////////////////////////////////////////////////
// constructors //
/////////////////

protected BinaryHandlerMonthDay()
{
super(
MonthDay.class,
CustomFields(
CustomField(int.class, "month" ),
CustomField(int.class, "day" )
)
);
}

///////////////////////////////////////////////////////////////////////////
// methods //
////////////
///
@Override
public void updateState(final Binary data, final MonthDay instance, final PersistenceLoadHandler handler)
{
// no-op
}

@Override
public void store(final Binary data, final MonthDay instance, final long objectId, final PersistenceStoreHandler<Binary> handler)
{
data.storeEntityHeader(BINARY_LENGTH, this.typeId(), objectId);

data.store_int (BINARY_OFFSET_MONTH , instance.getMonthValue());
data.store_int (BINARY_OFFSET_DAY , instance.getDayOfMonth());
}

@Override
public MonthDay create(final Binary data, final PersistenceLoadHandler handler)
{
return MonthDay.of(
data.read_int (BINARY_OFFSET_MONTH),
data.read_int (BINARY_OFFSET_DAY));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
package org.eclipse.serializer.persistence.binary.java.time;

/*-
* #%L
* Eclipse Serializer Persistence Binary
* %%
* Copyright (C) 2023 - 2026 MicroStream Software
* %%
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
* #L%
*/

import java.time.YearMonth;

import org.eclipse.serializer.persistence.binary.types.AbstractBinaryHandlerCustomNonReferentialFixedLength;
import org.eclipse.serializer.persistence.binary.types.Binary;
import org.eclipse.serializer.persistence.types.PersistenceLoadHandler;
import org.eclipse.serializer.persistence.types.PersistenceStoreHandler;

/**
* Binary Handler for java.time.YearMonth
* Required for java &ge; 26 because of transient fields and
* changed binary format of YearMonth implementation.
*
* Binary Format must be compatibe with java &lt; 26 versions!
*
*/
public class BinaryHandlerYearMonth extends AbstractBinaryHandlerCustomNonReferentialFixedLength<YearMonth>
{
static final long BINARY_OFFSET_YEAR = 0L;
static final long BINARY_OFFSET_MONTH = BINARY_OFFSET_YEAR + Integer.BYTES;
static final long BINARY_LENGTH = BINARY_OFFSET_MONTH + Integer.BYTES;

///////////////////////////////////////////////////////////////////////////
// static methods //
///////////////////

public static BinaryHandlerYearMonth New()
{
return new BinaryHandlerYearMonth();
}


///////////////////////////////////////////////////////////////////////////
// constructors //
/////////////////

protected BinaryHandlerYearMonth()
{
super(
YearMonth.class,
CustomFields(
CustomField(int.class, "year" ),
CustomField(int.class, "month" )
)
);
}

///////////////////////////////////////////////////////////////////////////
// methods //
////////////
///
@Override
public void updateState(final Binary data, final YearMonth instance, final PersistenceLoadHandler handler)
{
// no-op
}

@Override
public void store(final Binary data, final YearMonth instance, final long objectId, final PersistenceStoreHandler<Binary> handler)
{
data.storeEntityHeader(BINARY_LENGTH, this.typeId(), objectId);

data.store_int (BINARY_OFFSET_YEAR , instance.getYear());
data.store_int (BINARY_OFFSET_MONTH , instance.getMonthValue());
}

@Override
public YearMonth create(final Binary data, final PersistenceLoadHandler handler)
{
return YearMonth.of(
data.read_int (BINARY_OFFSET_YEAR),
data.read_int (BINARY_OFFSET_MONTH));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,9 @@
import org.eclipse.serializer.persistence.binary.java.sql.BinaryHandlerSqlTime;
import org.eclipse.serializer.persistence.binary.java.sql.BinaryHandlerSqlTimestamp;
import org.eclipse.serializer.persistence.binary.java.time.BinaryHandlerLocalDate;
import org.eclipse.serializer.persistence.binary.java.time.BinaryHandlerMonthDay;
import org.eclipse.serializer.persistence.binary.java.time.BinaryHandlerPeriod;
import org.eclipse.serializer.persistence.binary.java.time.BinaryHandlerYearMonth;
import org.eclipse.serializer.persistence.binary.java.time.BinaryHandlerZoneOffset;
import org.eclipse.serializer.persistence.binary.java.util.BinaryHandlerArrayDeque;
import org.eclipse.serializer.persistence.binary.java.util.BinaryHandlerArrayList;
Expand Down Expand Up @@ -273,6 +275,8 @@ static final void initializeNativeTypeId(
BinaryHandlerBitSet.New(),

BinaryHandlerLocalDate.New(),
BinaryHandlerYearMonth.New(),
BinaryHandlerMonthDay.New(),

/* (12.11.2019 TM)NOTE:
* One might think that "empty" implementations of a collection interface would have no fields, anyway.
Expand Down