From 0f95da830818fa667bca843fc76eed1f3bfb6672 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Mon, 11 May 2026 10:34:53 +0800 Subject: [PATCH 1/2] fix: correct IndexSpecs code examples in extension docs Update the index declaration examples to use explicit generic type parameters and proper Set conversion for multi-value indexes: - Replace `import static` with explicit `IndexSpecs.` calls - Convert List tags to HashSet in multi-value index examples - Apply fixes to next, 2.22, 2.23, and 2.24 docs --- .../plugin/api-reference/server/extension.md | 16 ++++++++-------- .../plugin/api-reference/server/extension.md | 16 ++++++++-------- .../plugin/api-reference/server/extension.md | 16 ++++++++-------- .../plugin/api-reference/server/extension.md | 16 ++++++++-------- 4 files changed, 32 insertions(+), 32 deletions(-) diff --git a/docs/developer-guide/plugin/api-reference/server/extension.md b/docs/developer-guide/plugin/api-reference/server/extension.md index cc0bf853..71ad463b 100644 --- a/docs/developer-guide/plugin/api-reference/server/extension.md +++ b/docs/developer-guide/plugin/api-reference/server/extension.md @@ -169,30 +169,30 @@ Halo 提供了一套索引机制,开发者可以通过注册自定义模型时 ```java import java.time.Instant; +import java.util.HashSet; import java.util.Set; -import static run.halo.app.extension.index.IndexSpecs.multi; -import static run.halo.app.extension.index.IndexSpecs.single; +import run.halo.app.extension.index.IndexSpecs; @Override public void start() { schemeManager.register(Moment.class, indexSpecs -> { // multi 用于声明一个返回多个值的索引 - indexSpecs.add(multi("spec.tags", String.class) + indexSpecs.add(IndexSpecs.multi("spec.tags", String.class) .indexFunc(moment -> { var tags = moment.getSpec().getTags(); - return tags == null ? Set.of() : tags; + return tags == null ? new HashSet<>() : new HashSet<>(tags); })); // single 用于声明一个返回单个值的索引,可以返回 null - indexSpecs.add(single("spec.owner", String.class) + indexSpecs.add(IndexSpecs.single("spec.owner", String.class) .indexFunc(moment -> moment.getSpec().getOwner())); // 索引值不再局限于字符串,也可以使用 Boolean、Integer、Instant 等可比较类型 - indexSpecs.add(single("spec.pinned", Boolean.class) + indexSpecs.add(IndexSpecs.single("spec.pinned", Boolean.class) .indexFunc(moment -> moment.getSpec().getPinned())); - indexSpecs.add(single("spec.priority", Integer.class) + indexSpecs.add(IndexSpecs.single("spec.priority", Integer.class) .indexFunc(moment -> moment.getSpec().getPriority())); - indexSpecs.add(single("spec.publishTime", Instant.class) + indexSpecs.add(IndexSpecs.single("spec.publishTime", Instant.class) .indexFunc(moment -> moment.getSpec().getPublishTime())); }); } diff --git a/versioned_docs/version-2.22/developer-guide/plugin/api-reference/server/extension.md b/versioned_docs/version-2.22/developer-guide/plugin/api-reference/server/extension.md index cc0bf853..71ad463b 100644 --- a/versioned_docs/version-2.22/developer-guide/plugin/api-reference/server/extension.md +++ b/versioned_docs/version-2.22/developer-guide/plugin/api-reference/server/extension.md @@ -169,30 +169,30 @@ Halo 提供了一套索引机制,开发者可以通过注册自定义模型时 ```java import java.time.Instant; +import java.util.HashSet; import java.util.Set; -import static run.halo.app.extension.index.IndexSpecs.multi; -import static run.halo.app.extension.index.IndexSpecs.single; +import run.halo.app.extension.index.IndexSpecs; @Override public void start() { schemeManager.register(Moment.class, indexSpecs -> { // multi 用于声明一个返回多个值的索引 - indexSpecs.add(multi("spec.tags", String.class) + indexSpecs.add(IndexSpecs.multi("spec.tags", String.class) .indexFunc(moment -> { var tags = moment.getSpec().getTags(); - return tags == null ? Set.of() : tags; + return tags == null ? new HashSet<>() : new HashSet<>(tags); })); // single 用于声明一个返回单个值的索引,可以返回 null - indexSpecs.add(single("spec.owner", String.class) + indexSpecs.add(IndexSpecs.single("spec.owner", String.class) .indexFunc(moment -> moment.getSpec().getOwner())); // 索引值不再局限于字符串,也可以使用 Boolean、Integer、Instant 等可比较类型 - indexSpecs.add(single("spec.pinned", Boolean.class) + indexSpecs.add(IndexSpecs.single("spec.pinned", Boolean.class) .indexFunc(moment -> moment.getSpec().getPinned())); - indexSpecs.add(single("spec.priority", Integer.class) + indexSpecs.add(IndexSpecs.single("spec.priority", Integer.class) .indexFunc(moment -> moment.getSpec().getPriority())); - indexSpecs.add(single("spec.publishTime", Instant.class) + indexSpecs.add(IndexSpecs.single("spec.publishTime", Instant.class) .indexFunc(moment -> moment.getSpec().getPublishTime())); }); } diff --git a/versioned_docs/version-2.23/developer-guide/plugin/api-reference/server/extension.md b/versioned_docs/version-2.23/developer-guide/plugin/api-reference/server/extension.md index cc0bf853..71ad463b 100644 --- a/versioned_docs/version-2.23/developer-guide/plugin/api-reference/server/extension.md +++ b/versioned_docs/version-2.23/developer-guide/plugin/api-reference/server/extension.md @@ -169,30 +169,30 @@ Halo 提供了一套索引机制,开发者可以通过注册自定义模型时 ```java import java.time.Instant; +import java.util.HashSet; import java.util.Set; -import static run.halo.app.extension.index.IndexSpecs.multi; -import static run.halo.app.extension.index.IndexSpecs.single; +import run.halo.app.extension.index.IndexSpecs; @Override public void start() { schemeManager.register(Moment.class, indexSpecs -> { // multi 用于声明一个返回多个值的索引 - indexSpecs.add(multi("spec.tags", String.class) + indexSpecs.add(IndexSpecs.multi("spec.tags", String.class) .indexFunc(moment -> { var tags = moment.getSpec().getTags(); - return tags == null ? Set.of() : tags; + return tags == null ? new HashSet<>() : new HashSet<>(tags); })); // single 用于声明一个返回单个值的索引,可以返回 null - indexSpecs.add(single("spec.owner", String.class) + indexSpecs.add(IndexSpecs.single("spec.owner", String.class) .indexFunc(moment -> moment.getSpec().getOwner())); // 索引值不再局限于字符串,也可以使用 Boolean、Integer、Instant 等可比较类型 - indexSpecs.add(single("spec.pinned", Boolean.class) + indexSpecs.add(IndexSpecs.single("spec.pinned", Boolean.class) .indexFunc(moment -> moment.getSpec().getPinned())); - indexSpecs.add(single("spec.priority", Integer.class) + indexSpecs.add(IndexSpecs.single("spec.priority", Integer.class) .indexFunc(moment -> moment.getSpec().getPriority())); - indexSpecs.add(single("spec.publishTime", Instant.class) + indexSpecs.add(IndexSpecs.single("spec.publishTime", Instant.class) .indexFunc(moment -> moment.getSpec().getPublishTime())); }); } diff --git a/versioned_docs/version-2.24/developer-guide/plugin/api-reference/server/extension.md b/versioned_docs/version-2.24/developer-guide/plugin/api-reference/server/extension.md index cc0bf853..71ad463b 100644 --- a/versioned_docs/version-2.24/developer-guide/plugin/api-reference/server/extension.md +++ b/versioned_docs/version-2.24/developer-guide/plugin/api-reference/server/extension.md @@ -169,30 +169,30 @@ Halo 提供了一套索引机制,开发者可以通过注册自定义模型时 ```java import java.time.Instant; +import java.util.HashSet; import java.util.Set; -import static run.halo.app.extension.index.IndexSpecs.multi; -import static run.halo.app.extension.index.IndexSpecs.single; +import run.halo.app.extension.index.IndexSpecs; @Override public void start() { schemeManager.register(Moment.class, indexSpecs -> { // multi 用于声明一个返回多个值的索引 - indexSpecs.add(multi("spec.tags", String.class) + indexSpecs.add(IndexSpecs.multi("spec.tags", String.class) .indexFunc(moment -> { var tags = moment.getSpec().getTags(); - return tags == null ? Set.of() : tags; + return tags == null ? new HashSet<>() : new HashSet<>(tags); })); // single 用于声明一个返回单个值的索引,可以返回 null - indexSpecs.add(single("spec.owner", String.class) + indexSpecs.add(IndexSpecs.single("spec.owner", String.class) .indexFunc(moment -> moment.getSpec().getOwner())); // 索引值不再局限于字符串,也可以使用 Boolean、Integer、Instant 等可比较类型 - indexSpecs.add(single("spec.pinned", Boolean.class) + indexSpecs.add(IndexSpecs.single("spec.pinned", Boolean.class) .indexFunc(moment -> moment.getSpec().getPinned())); - indexSpecs.add(single("spec.priority", Integer.class) + indexSpecs.add(IndexSpecs.single("spec.priority", Integer.class) .indexFunc(moment -> moment.getSpec().getPriority())); - indexSpecs.add(single("spec.publishTime", Instant.class) + indexSpecs.add(IndexSpecs.single("spec.publishTime", Instant.class) .indexFunc(moment -> moment.getSpec().getPublishTime())); }); } From adbe75925f87d7066dc0c4feb0bdcccf45af5106 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Mon, 11 May 2026 12:11:19 +0800 Subject: [PATCH 2/2] Use Set.of() instead of new HashSet() Update the docs example to return Set.of() when tags is null and return the existing tags object instead of creating a new HashSet copy. Apply the change to the main docs and versioned docs (v2.22, v2.23, v2.24) to simplify the example and avoid unnecessary allocations. --- docs/developer-guide/plugin/api-reference/server/extension.md | 2 +- .../developer-guide/plugin/api-reference/server/extension.md | 2 +- .../developer-guide/plugin/api-reference/server/extension.md | 2 +- .../developer-guide/plugin/api-reference/server/extension.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/developer-guide/plugin/api-reference/server/extension.md b/docs/developer-guide/plugin/api-reference/server/extension.md index 71ad463b..5e14d759 100644 --- a/docs/developer-guide/plugin/api-reference/server/extension.md +++ b/docs/developer-guide/plugin/api-reference/server/extension.md @@ -180,7 +180,7 @@ public void start() { indexSpecs.add(IndexSpecs.multi("spec.tags", String.class) .indexFunc(moment -> { var tags = moment.getSpec().getTags(); - return tags == null ? new HashSet<>() : new HashSet<>(tags); + return tags == null ? Set.of() : tags; })); // single 用于声明一个返回单个值的索引,可以返回 null diff --git a/versioned_docs/version-2.22/developer-guide/plugin/api-reference/server/extension.md b/versioned_docs/version-2.22/developer-guide/plugin/api-reference/server/extension.md index 71ad463b..5e14d759 100644 --- a/versioned_docs/version-2.22/developer-guide/plugin/api-reference/server/extension.md +++ b/versioned_docs/version-2.22/developer-guide/plugin/api-reference/server/extension.md @@ -180,7 +180,7 @@ public void start() { indexSpecs.add(IndexSpecs.multi("spec.tags", String.class) .indexFunc(moment -> { var tags = moment.getSpec().getTags(); - return tags == null ? new HashSet<>() : new HashSet<>(tags); + return tags == null ? Set.of() : tags; })); // single 用于声明一个返回单个值的索引,可以返回 null diff --git a/versioned_docs/version-2.23/developer-guide/plugin/api-reference/server/extension.md b/versioned_docs/version-2.23/developer-guide/plugin/api-reference/server/extension.md index 71ad463b..5e14d759 100644 --- a/versioned_docs/version-2.23/developer-guide/plugin/api-reference/server/extension.md +++ b/versioned_docs/version-2.23/developer-guide/plugin/api-reference/server/extension.md @@ -180,7 +180,7 @@ public void start() { indexSpecs.add(IndexSpecs.multi("spec.tags", String.class) .indexFunc(moment -> { var tags = moment.getSpec().getTags(); - return tags == null ? new HashSet<>() : new HashSet<>(tags); + return tags == null ? Set.of() : tags; })); // single 用于声明一个返回单个值的索引,可以返回 null diff --git a/versioned_docs/version-2.24/developer-guide/plugin/api-reference/server/extension.md b/versioned_docs/version-2.24/developer-guide/plugin/api-reference/server/extension.md index 71ad463b..5e14d759 100644 --- a/versioned_docs/version-2.24/developer-guide/plugin/api-reference/server/extension.md +++ b/versioned_docs/version-2.24/developer-guide/plugin/api-reference/server/extension.md @@ -180,7 +180,7 @@ public void start() { indexSpecs.add(IndexSpecs.multi("spec.tags", String.class) .indexFunc(moment -> { var tags = moment.getSpec().getTags(); - return tags == null ? new HashSet<>() : new HashSet<>(tags); + return tags == null ? Set.of() : tags; })); // single 用于声明一个返回单个值的索引,可以返回 null