From 3769cf4438ea5780a090783b9f554fe3dd60c124 Mon Sep 17 00:00:00 2001 From: carm Date: Thu, 4 Jan 2024 22:08:12 +0800 Subject: [PATCH] chore: optimize some codes --- .../core/annotation/ConfigPath.java | 16 ++++---- .../core/annotation/HeaderComment.java | 17 ++++---- .../core/annotation/InlineComment.java | 13 +++--- .../core/builder/AbstractConfigBuilder.java | 4 +- .../core/builder/CommonConfigBuilder.java | 2 +- .../core/function/ConfigValueParser.java | 41 +++++++++++-------- .../configuration/core/value/ConfigValue.java | 18 ++++---- .../core/value/ValueManifest.java | 25 +++++------ 8 files changed, 72 insertions(+), 64 deletions(-) diff --git a/core/src/main/java/cc/carm/lib/configuration/core/annotation/ConfigPath.java b/core/src/main/java/cc/carm/lib/configuration/core/annotation/ConfigPath.java index fa48e9b..25fee49 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/annotation/ConfigPath.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/annotation/ConfigPath.java @@ -8,26 +8,26 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** - * 用于标记对应类或参数的配置路径 + * The configuration path used to mark the corresponding class or parameter. */ @Target({ElementType.TYPE, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface ConfigPath { /** - * 指定路径的值。 - * 若不指定,则会通过 {@link ConfigInitializer#getPathFromName(String)} 自动生成当前路径的值。 + * The path value of the current configuration. + * If not set,will generate the path by {@link ConfigInitializer#getPathFromName(String)}. * - * @return 路径的值 + * @return The path value of the current configuration */ String value() default ""; /** - * 是否从根节点开始。 - *
若为 false,则会自动添加上一个路径(如果有)到本节点的路径。 - *
若为 true,则会从根节点开始直接设置本路径。 + * Whether to start with the root node. + *
If false, the previous path (if any) to the node is automatically added. + *
If true, the path will be set directly from the root node. * - * @return 是否不继承上一路径,直接从根路径为开始 + * @return Whether to start directly from the root path without inheriting the previous path */ boolean root() default false; diff --git a/core/src/main/java/cc/carm/lib/configuration/core/annotation/HeaderComment.java b/core/src/main/java/cc/carm/lib/configuration/core/annotation/HeaderComment.java index 04702e2..2089a46 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/annotation/HeaderComment.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/annotation/HeaderComment.java @@ -8,11 +8,12 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** - * 顶部注释,用于给对应配置的顶部添加注释,便于使用者阅读查看。 - *

如: + * Header Comments. + * Add a comment to the top of the corresponding configuration for easy reading and viewing. + *

e.g. *

- * # 注释第一行
- * # 注释第二行
+ * # The first line of the comment
+ * # The second line of the comment
  * foo: "bar"
  * 
*/ @@ -21,9 +22,9 @@ import java.lang.annotation.Target; public @interface HeaderComment { /** - * 注释内容,若内容长度为0则会视为一个空行。 - *

{"foo","","bar"} - * 会被添加为 + * If the content of the note is 0, it will be treated as a blank line. + *

e.g. {"foo","","bar"} + * Will be set as *

      * # foo
      *
@@ -31,7 +32,7 @@ public @interface HeaderComment {
      * foo: "bar"
      * 
* - * @return 注释内容 + * @return The content of this comment */ @NotNull String[] value() default ""; diff --git a/core/src/main/java/cc/carm/lib/configuration/core/annotation/InlineComment.java b/core/src/main/java/cc/carm/lib/configuration/core/annotation/InlineComment.java index 94a4ae6..1d3a750 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/annotation/InlineComment.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/annotation/InlineComment.java @@ -8,10 +8,11 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** - * 行内注释,用于给对应配置的所在行添加注释,便于使用者阅读查看。 - * 如: + * Inline comments, + * add comments to the rows of the corresponding configurations for easy reading and viewing. + * e.g. *
- * foo: "bar" # 注释内容
+ * foo: "bar" # Comment Contents
  * 
*/ @Target({ElementType.FIELD}) @@ -19,13 +20,13 @@ import java.lang.annotation.Target; public @interface InlineComment { /** - * 注释内容,若内容长度为0则不会添加注释 - *

"foobar" 将被设定为 + * If the content length is 0, the comment will not be added. + *

e.g. "foobar" will be set *

      * foo: "bar" # foobar
      * 
* - * @return 注释内容 + * @return The content of this comment */ @NotNull String value() default ""; diff --git a/core/src/main/java/cc/carm/lib/configuration/core/builder/AbstractConfigBuilder.java b/core/src/main/java/cc/carm/lib/configuration/core/builder/AbstractConfigBuilder.java index 7cfea9f..eef1122 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/builder/AbstractConfigBuilder.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/builder/AbstractConfigBuilder.java @@ -1,8 +1,8 @@ package cc.carm.lib.configuration.core.builder; import cc.carm.lib.configuration.core.source.ConfigurationProvider; -import cc.carm.lib.configuration.core.value.ValueManifest; import cc.carm.lib.configuration.core.value.ConfigValue; +import cc.carm.lib.configuration.core.value.ValueManifest; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -22,7 +22,7 @@ public abstract class AbstractConfigBuilder providerClass) { + protected AbstractConfigBuilder(Class providerClass) { this.providerClass = providerClass; } diff --git a/core/src/main/java/cc/carm/lib/configuration/core/builder/CommonConfigBuilder.java b/core/src/main/java/cc/carm/lib/configuration/core/builder/CommonConfigBuilder.java index 427340d..941fdcd 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/builder/CommonConfigBuilder.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/builder/CommonConfigBuilder.java @@ -5,7 +5,7 @@ import cc.carm.lib.configuration.core.source.ConfigurationProvider; public abstract class CommonConfigBuilder> extends AbstractConfigBuilder> { - public CommonConfigBuilder() { + protected CommonConfigBuilder() { super(ConfigurationProvider.class); } diff --git a/core/src/main/java/cc/carm/lib/configuration/core/function/ConfigValueParser.java b/core/src/main/java/cc/carm/lib/configuration/core/function/ConfigValueParser.java index 8d3989d..7dc7762 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/function/ConfigValueParser.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/function/ConfigValueParser.java @@ -50,22 +50,9 @@ public interface ConfigValueParser { @Contract(pure = true) static @NotNull ConfigValueParser castObject(Class valueClass) { - return (input, defaultValue) -> { - if (Number.class.isAssignableFrom(valueClass)) { - if (Long.class.isAssignableFrom(valueClass) || long.class.isAssignableFrom(valueClass)) { - input = longValue().parse(input, (Long) defaultValue); - } else if (Integer.class.isAssignableFrom(valueClass) || int.class.isAssignableFrom(valueClass)) { - input = intValue().parse(input, (Integer) defaultValue); - } else if (Float.class.isAssignableFrom(valueClass) || float.class.isAssignableFrom(valueClass)) { - input = floatValue().parse(input, (Float) defaultValue); - } else if (Double.class.isAssignableFrom(valueClass) || double.class.isAssignableFrom(valueClass)) { - input = doubleValue().parse(input, (Double) defaultValue); - } else if (Byte.class.isAssignableFrom(valueClass) || byte.class.isAssignableFrom(valueClass)) { - input = byteValue().parse(input, (Byte) defaultValue); - } else if (Short.class.isAssignableFrom(valueClass) || short.class.isAssignableFrom(valueClass)) { - input = shortValue().parse(input, (Short) defaultValue); - } - } else if (Boolean.class.isAssignableFrom(valueClass) || boolean.class.isAssignableFrom(valueClass)) { + if (Number.class.isAssignableFrom(valueClass)) return castNumber(valueClass); + else return (input, defaultValue) -> { + if (Boolean.class.isAssignableFrom(valueClass) || boolean.class.isAssignableFrom(valueClass)) { input = booleanValue().parse(input, (Boolean) defaultValue); } else if (Enum.class.isAssignableFrom(valueClass) && input instanceof String) { String enumName = (String) input; @@ -79,6 +66,28 @@ public interface ConfigValueParser { }; } + + @Contract(pure = true) + static @NotNull ConfigValueParser castNumber(Class valueClass) { + return (input, defaultValue) -> { + if (Long.class.isAssignableFrom(valueClass) || long.class.isAssignableFrom(valueClass)) { + input = longValue().parse(input, (Long) defaultValue); + } else if (Integer.class.isAssignableFrom(valueClass) || int.class.isAssignableFrom(valueClass)) { + input = intValue().parse(input, (Integer) defaultValue); + } else if (Float.class.isAssignableFrom(valueClass) || float.class.isAssignableFrom(valueClass)) { + input = floatValue().parse(input, (Float) defaultValue); + } else if (Double.class.isAssignableFrom(valueClass) || double.class.isAssignableFrom(valueClass)) { + input = doubleValue().parse(input, (Double) defaultValue); + } else if (Byte.class.isAssignableFrom(valueClass) || byte.class.isAssignableFrom(valueClass)) { + input = byteValue().parse(input, (Byte) defaultValue); + } else if (Short.class.isAssignableFrom(valueClass) || short.class.isAssignableFrom(valueClass)) { + input = shortValue().parse(input, (Short) defaultValue); + } + if (valueClass.isInstance(input)) return valueClass.cast(input); + else throw new IllegalArgumentException("Cannot cast value to " + valueClass.getName()); + }; + } + @Contract(pure = true) static @NotNull ConfigValueParser parseString(Class valueClass) { return (input, defaultValue) -> { diff --git a/core/src/main/java/cc/carm/lib/configuration/core/value/ConfigValue.java b/core/src/main/java/cc/carm/lib/configuration/core/value/ConfigValue.java index 5d9a045..f8028ca 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/value/ConfigValue.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/value/ConfigValue.java @@ -20,12 +20,12 @@ public abstract class ConfigValue extends ValueManifest { } /** - * @param provider 配置文件提供者 - * @param configPath 配置路径 - * @param headerComments 头部注释内容 - * @param inlineComments 行内注释内容 - * @param defaultValue 默认参数值 - * @deprecated 请使用 {@link #ConfigValue(ValueManifest)} 构造器。 + * @param provider Provider of config files {@link ConfigurationProvider} + * @param configPath Config path of this value + * @param headerComments Header comment contents + * @param inlineComments Inline comment contents + * @param defaultValue The default value + * @deprecated Please use {@link #ConfigValue(ValueManifest)} instead. */ @Deprecated protected ConfigValue(@Nullable ConfigurationProvider provider, @Nullable String configPath, @@ -104,11 +104,7 @@ public abstract class ConfigValue extends ValueManifest { * @return 获取当前值是否为默认值。 */ public boolean isDefault() { - T defaultValue = getDefaultValue(); - T value = get(); - if (defaultValue == null && value == null) return true; - else if (defaultValue != null && value != null) return defaultValue.equals(value); - else return false; + return Objects.equals(getDefaultValue(), get()); } } diff --git a/core/src/main/java/cc/carm/lib/configuration/core/value/ValueManifest.java b/core/src/main/java/cc/carm/lib/configuration/core/value/ValueManifest.java index f0f210c..cde0cc2 100644 --- a/core/src/main/java/cc/carm/lib/configuration/core/value/ValueManifest.java +++ b/core/src/main/java/cc/carm/lib/configuration/core/value/ValueManifest.java @@ -11,9 +11,10 @@ import java.util.List; import java.util.Optional; /** - * 配置值描述清单。用于描述一个配置值的相关基础信息。 + * ConfigValue Manifests. + * The basic information that describes a configuration value. * - * @param 配置值类型 + * @param Value type * @author CarmJos */ public class ValueManifest { @@ -38,11 +39,11 @@ public class ValueManifest { protected @Nullable T defaultValue; /** - * @param provider 配置文件提供者 - * @param configPath 配置路径 - * @param headerComments 头部注释内容 - * @param inlineComment 行内注释内容 - * @param defaultValue 默认参数值 + * @param provider Provider of config files {@link ConfigurationProvider} + * @param configPath Config path of this value + * @param headerComments Header comment contents + * @param inlineComment Inline comment content + * @param defaultValue The default value */ public ValueManifest(@Nullable ConfigurationProvider provider, @Nullable String configPath, @Nullable List headerComments, @Nullable String inlineComment, @@ -55,12 +56,12 @@ public class ValueManifest { } /** - * 此方法提供给 {@link ConfigInitializer},以便对配置值的相关信息进行统一初始化操作。 + * The initialize method for {@link ConfigInitializer}, which is used to initialize the value. * - * @param provider 配置文件提供者 - * @param configPath 配置路径 - * @param headerComments 头部注释内容 - * @param inlineComment 行内注释内容 + * @param provider Provider of config files {@link ConfigurationProvider} + * @param configPath Config path of this value + * @param headerComments Header comment contents + * @param inlineComment Inline comment content */ protected void initialize(@NotNull ConfigurationProvider provider, @NotNull String configPath, @Nullable List headerComments, @Nullable String inlineComment) {