diff --git a/src/main/java/run/halo/app/theme/finders/impl/CategoryFinderImpl.java b/src/main/java/run/halo/app/theme/finders/impl/CategoryFinderImpl.java index 54bb219cc..ea5f16f3c 100644 --- a/src/main/java/run/halo/app/theme/finders/impl/CategoryFinderImpl.java +++ b/src/main/java/run/halo/app/theme/finders/impl/CategoryFinderImpl.java @@ -82,9 +82,12 @@ public class CategoryFinderImpl implements CategoryFinder { nameIdentityMap.forEach((name, value) -> { List children = value.getSpec().getChildren(); - if (children != null) { - for (String child : children) { - CategoryTreeVo childNode = nameIdentityMap.get(child); + if (children == null) { + return; + } + for (String child : children) { + CategoryTreeVo childNode = nameIdentityMap.get(child); + if (childNode != null) { childNode.setParentName(name); } } diff --git a/src/main/java/run/halo/app/theme/finders/impl/MenuFinderImpl.java b/src/main/java/run/halo/app/theme/finders/impl/MenuFinderImpl.java index 95e819283..2bbd9cf25 100644 --- a/src/main/java/run/halo/app/theme/finders/impl/MenuFinderImpl.java +++ b/src/main/java/run/halo/app/theme/finders/impl/MenuFinderImpl.java @@ -127,9 +127,12 @@ public class MenuFinderImpl implements MenuFinder { nameIdentityMap.forEach((name, value) -> { LinkedHashSet children = value.getSpec().getChildren(); - if (children != null) { - for (String child : children) { - MenuItemVo childNode = nameIdentityMap.get(child); + if (children == null) { + return; + } + for (String child : children) { + MenuItemVo childNode = nameIdentityMap.get(child); + if (childNode != null) { childNode.setParentName(name); } } diff --git a/src/test/java/run/halo/app/theme/finders/impl/CategoryFinderImplTest.java b/src/test/java/run/halo/app/theme/finders/impl/CategoryFinderImplTest.java index 4f862f289..b84f4b8f8 100644 --- a/src/test/java/run/halo/app/theme/finders/impl/CategoryFinderImplTest.java +++ b/src/test/java/run/halo/app/theme/finders/impl/CategoryFinderImplTest.java @@ -226,6 +226,7 @@ class CategoryFinderImplTest { } private List moreCategories() { + // see also https://github.com/halo-dev/halo/issues/2643 String s = """ [ { @@ -318,7 +319,8 @@ class CategoryFinderImplTest { "bd95f914-22fc-4de5-afcc-a9ffba2f6401", "e1150fd9-4512-453c-9186-f8de9c156c3d", "acf09686-d5a7-4227-ba8c-3aeff063f12f", - "ed064d5e-2b6f-4123-8114-78d0c6f2c4e2" + "ed064d5e-2b6f-4123-8114-78d0c6f2c4e2", + "non-existent-children-name" ] }, "status":{ diff --git a/src/test/java/run/halo/app/theme/finders/impl/MenuFinderImplTest.java b/src/test/java/run/halo/app/theme/finders/impl/MenuFinderImplTest.java index e738dc3f4..d1963434b 100644 --- a/src/test/java/run/halo/app/theme/finders/impl/MenuFinderImplTest.java +++ b/src/test/java/run/halo/app/theme/finders/impl/MenuFinderImplTest.java @@ -90,7 +90,7 @@ class MenuFinderImplTest { Menu menuX = menu("X", of("G")); Menu menuY = menu("Y", of("F")); - MenuItem itemE = menuItem("E", of("A", "C")); + MenuItem itemE = menuItem("E", of("A", "C", "non-existent-children-name")); MenuItem itemG = menuItem("G", null); MenuItem itemF = menuItem("F", of("H")); MenuItem itemA = menuItem("A", of("B"));