diff --git a/fesod-sheet/src/main/java/org/apache/fesod/sheet/write/metadata/holder/WriteSheetHolder.java b/fesod-sheet/src/main/java/org/apache/fesod/sheet/write/metadata/holder/WriteSheetHolder.java index 98923e6cc..c86354400 100644 --- a/fesod-sheet/src/main/java/org/apache/fesod/sheet/write/metadata/holder/WriteSheetHolder.java +++ b/fesod-sheet/src/main/java/org/apache/fesod/sheet/write/metadata/holder/WriteSheetHolder.java @@ -47,7 +47,7 @@ */ @Getter @Setter -@EqualsAndHashCode +@EqualsAndHashCode(exclude = {"parentWriteWorkbookHolder", "hasBeenInitializedTable"}) @NoArgsConstructor public class WriteSheetHolder extends AbstractWriteHolder { /** diff --git a/fesod-sheet/src/main/java/org/apache/fesod/sheet/write/metadata/holder/WriteTableHolder.java b/fesod-sheet/src/main/java/org/apache/fesod/sheet/write/metadata/holder/WriteTableHolder.java index fc1b21a44..f4ab7c015 100644 --- a/fesod-sheet/src/main/java/org/apache/fesod/sheet/write/metadata/holder/WriteTableHolder.java +++ b/fesod-sheet/src/main/java/org/apache/fesod/sheet/write/metadata/holder/WriteTableHolder.java @@ -38,7 +38,7 @@ */ @Getter @Setter -@EqualsAndHashCode +@EqualsAndHashCode(exclude = "parentWriteSheetHolder") public class WriteTableHolder extends AbstractWriteHolder { /*** * poi sheet diff --git a/fesod-sheet/src/main/java/org/apache/fesod/sheet/write/metadata/holder/WriteWorkbookHolder.java b/fesod-sheet/src/main/java/org/apache/fesod/sheet/write/metadata/holder/WriteWorkbookHolder.java index 516d99b67..7750e80a5 100644 --- a/fesod-sheet/src/main/java/org/apache/fesod/sheet/write/metadata/holder/WriteWorkbookHolder.java +++ b/fesod-sheet/src/main/java/org/apache/fesod/sheet/write/metadata/holder/WriteWorkbookHolder.java @@ -70,7 +70,7 @@ */ @Getter @Setter -@EqualsAndHashCode +@EqualsAndHashCode(exclude = "workbookWriteHandlerContext") @Slf4j public class WriteWorkbookHolder extends AbstractWriteHolder { /*** diff --git a/fesod-sheet/src/test/java/org/apache/fesod/sheet/write/metadata/holder/WriteHolderHashCodeTest.java b/fesod-sheet/src/test/java/org/apache/fesod/sheet/write/metadata/holder/WriteHolderHashCodeTest.java new file mode 100644 index 000000000..f545b3d9f --- /dev/null +++ b/fesod-sheet/src/test/java/org/apache/fesod/sheet/write/metadata/holder/WriteHolderHashCodeTest.java @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.fesod.sheet.write.metadata.holder; + +import org.apache.fesod.sheet.write.handler.context.WorkbookWriteHandlerContext; +import org.apache.fesod.sheet.write.metadata.WriteSheet; +import org.apache.fesod.sheet.write.metadata.WriteTable; +import org.apache.fesod.sheet.write.metadata.WriteWorkbook; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class WriteHolderHashCodeTest { + + @Test + void workbookHolderHashCodeShouldNotRecurseThroughWorkbookHandlerContext() { + WriteWorkbookHolder workbookHolder = new WriteWorkbookHolder(new WriteWorkbook()); + workbookHolder.setWorkbookWriteHandlerContext(new WorkbookWriteHandlerContext(null, workbookHolder)); + + Assertions.assertDoesNotThrow(workbookHolder::hashCode); + } + + @Test + void writeHolderHashCodeShouldNotRecurseThroughParentAndInitializedHolderReferences() { + WriteWorkbookHolder workbookHolder = new WriteWorkbookHolder(new WriteWorkbook()); + WriteSheetHolder sheetHolder = new WriteSheetHolder(writeSheet(), workbookHolder); + WriteTableHolder tableHolder = new WriteTableHolder(writeTable(), sheetHolder); + + workbookHolder.getHasBeenInitializedSheetIndexMap().put(sheetHolder.getSheetNo(), sheetHolder); + workbookHolder.getHasBeenInitializedSheetNameMap().put(sheetHolder.getSheetName(), sheetHolder); + sheetHolder.getHasBeenInitializedTable().put(tableHolder.getTableNo(), tableHolder); + + Assertions.assertDoesNotThrow(workbookHolder::hashCode); + Assertions.assertDoesNotThrow(sheetHolder::hashCode); + Assertions.assertDoesNotThrow(tableHolder::hashCode); + } + + private static WriteSheet writeSheet() { + WriteSheet writeSheet = new WriteSheet(); + writeSheet.setSheetNo(0); + writeSheet.setSheetName("Sheet1"); + return writeSheet; + } + + private static WriteTable writeTable() { + WriteTable writeTable = new WriteTable(); + writeTable.setTableNo(0); + return writeTable; + } +}