Skip to content

Commit a448c15

Browse files
committed
fix: avoid recursive hashCode in write holder contexts
1 parent c44cc05 commit a448c15

4 files changed

Lines changed: 69 additions & 3 deletions

File tree

fesod-sheet/src/main/java/org/apache/fesod/sheet/write/metadata/holder/WriteSheetHolder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
*/
4848
@Getter
4949
@Setter
50-
@EqualsAndHashCode
50+
@EqualsAndHashCode(exclude = {"parentWriteWorkbookHolder", "hasBeenInitializedTable"})
5151
@NoArgsConstructor
5252
public class WriteSheetHolder extends AbstractWriteHolder {
5353
/**

fesod-sheet/src/main/java/org/apache/fesod/sheet/write/metadata/holder/WriteTableHolder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
*/
3939
@Getter
4040
@Setter
41-
@EqualsAndHashCode
41+
@EqualsAndHashCode(exclude = "parentWriteSheetHolder")
4242
public class WriteTableHolder extends AbstractWriteHolder {
4343
/***
4444
* poi sheet

fesod-sheet/src/main/java/org/apache/fesod/sheet/write/metadata/holder/WriteWorkbookHolder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070
*/
7171
@Getter
7272
@Setter
73-
@EqualsAndHashCode
73+
@EqualsAndHashCode(exclude = "workbookWriteHandlerContext")
7474
@Slf4j
7575
public class WriteWorkbookHolder extends AbstractWriteHolder {
7676
/***
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
20+
package org.apache.fesod.sheet.write.metadata.holder;
21+
22+
import org.apache.fesod.sheet.write.handler.context.WorkbookWriteHandlerContext;
23+
import org.apache.fesod.sheet.write.metadata.WriteSheet;
24+
import org.apache.fesod.sheet.write.metadata.WriteTable;
25+
import org.apache.fesod.sheet.write.metadata.WriteWorkbook;
26+
import org.junit.jupiter.api.Assertions;
27+
import org.junit.jupiter.api.Test;
28+
29+
public class WriteHolderHashCodeTest {
30+
31+
@Test
32+
void workbookHolderHashCodeShouldNotRecurseThroughWorkbookHandlerContext() {
33+
WriteWorkbookHolder workbookHolder = new WriteWorkbookHolder(new WriteWorkbook());
34+
workbookHolder.setWorkbookWriteHandlerContext(new WorkbookWriteHandlerContext(null, workbookHolder));
35+
36+
Assertions.assertDoesNotThrow(workbookHolder::hashCode);
37+
}
38+
39+
@Test
40+
void writeHolderHashCodeShouldNotRecurseThroughParentAndInitializedHolderReferences() {
41+
WriteWorkbookHolder workbookHolder = new WriteWorkbookHolder(new WriteWorkbook());
42+
WriteSheetHolder sheetHolder = new WriteSheetHolder(writeSheet(), workbookHolder);
43+
WriteTableHolder tableHolder = new WriteTableHolder(writeTable(), sheetHolder);
44+
45+
workbookHolder.getHasBeenInitializedSheetIndexMap().put(sheetHolder.getSheetNo(), sheetHolder);
46+
workbookHolder.getHasBeenInitializedSheetNameMap().put(sheetHolder.getSheetName(), sheetHolder);
47+
sheetHolder.getHasBeenInitializedTable().put(tableHolder.getTableNo(), tableHolder);
48+
49+
Assertions.assertDoesNotThrow(workbookHolder::hashCode);
50+
Assertions.assertDoesNotThrow(sheetHolder::hashCode);
51+
Assertions.assertDoesNotThrow(tableHolder::hashCode);
52+
}
53+
54+
private static WriteSheet writeSheet() {
55+
WriteSheet writeSheet = new WriteSheet();
56+
writeSheet.setSheetNo(0);
57+
writeSheet.setSheetName("Sheet1");
58+
return writeSheet;
59+
}
60+
61+
private static WriteTable writeTable() {
62+
WriteTable writeTable = new WriteTable();
63+
writeTable.setTableNo(0);
64+
return writeTable;
65+
}
66+
}

0 commit comments

Comments
 (0)