From 0bb6f6264a0812de853a662a972a3397da741ba3 Mon Sep 17 00:00:00 2001 From: 4drian3d Date: Sat, 18 Jun 2022 17:26:35 +0000 Subject: [PATCH] perf: Ignore resolvers if empty api: Implement Resolvers utility class --- .../api/MiniPlaceholders.java | 46 +++++++++++------- .../miniplaceholders/api/utils/Resolvers.java | 47 +++++++++++++++++++ build.gradle.kts | 2 +- 3 files changed, 77 insertions(+), 18 deletions(-) create mode 100644 api/src/main/java/me/dreamerzero/miniplaceholders/api/utils/Resolvers.java diff --git a/api/src/main/java/me/dreamerzero/miniplaceholders/api/MiniPlaceholders.java b/api/src/main/java/me/dreamerzero/miniplaceholders/api/MiniPlaceholders.java index e55a9c8..ee6a36e 100644 --- a/api/src/main/java/me/dreamerzero/miniplaceholders/api/MiniPlaceholders.java +++ b/api/src/main/java/me/dreamerzero/miniplaceholders/api/MiniPlaceholders.java @@ -9,6 +9,7 @@ import org.jetbrains.annotations.NotNull; import me.dreamerzero.miniplaceholders.api.enums.Platform; +import me.dreamerzero.miniplaceholders.api.utils.Resolvers; import me.dreamerzero.miniplaceholders.connect.InternalPlatform; import net.kyori.adventure.audience.Audience; import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; @@ -34,7 +35,7 @@ private MiniPlaceholders(){} * @return the platform * @since 1.0.0 */ - public static @NotNull Platform getPlatform(){ + public static @NotNull Platform getPlatform() { return InternalPlatform.platform() == InternalPlatform.PAPER ? Platform.PAPER : Platform.VELOCITY; @@ -51,10 +52,13 @@ private MiniPlaceholders(){} * @since 1.0.0 */ public static @NotNull TagResolver getGlobalPlaceholders() { - final TagResolver.Builder resolvers = TagResolver.builder(); - expansions.forEach(exp -> resolvers.resolver(exp.globalPlaceholders())); - - return resolvers.build(); + final TagResolver.Builder builder = TagResolver.builder(); + for (final Expansion expansion : expansions) { + final TagResolver resolver = expansion.globalPlaceholders(); + if (resolver != TagResolver.empty()) + builder.resolver(resolver); + } + return builder.build(); } /** @@ -72,8 +76,11 @@ private MiniPlaceholders(){} Objects.requireNonNull(audience, () -> "audience cannot be null"); final TagResolver.Builder resolvers = TagResolver.builder(); - expansions.forEach(exp -> resolvers.resolver(exp.audiencePlaceholders(audience))); - + for (Expansion expansion : expansions) { + final TagResolver resolver = expansion.audiencePlaceholders(audience); + if (resolver != TagResolver.empty()) + resolvers.resolver(resolver); + } return resolvers.build(); } @@ -93,10 +100,15 @@ private MiniPlaceholders(){} Objects.requireNonNull(audience, () -> "audience cannot be null"); Objects.requireNonNull(otherAudience, () -> "otherAudience cannot be null"); - final TagResolver.Builder resolvers = TagResolver.builder(); - expansions.forEach(exp -> resolvers.resolver(exp.relationalPlaceholders(audience, otherAudience))); + final TagResolver.Builder builder = TagResolver.builder(); + for (final Expansion expansion : expansions) { + Resolvers.applyIfNotEmpty( + expansion.relationalPlaceholders(audience, otherAudience), + builder + ); + } - return resolvers.build(); + return builder.build(); } /** @@ -122,9 +134,9 @@ private MiniPlaceholders(){} Objects.requireNonNull(audience, () -> "audience cannot be null"); final TagResolver.Builder builder = TagResolver.builder(); - for(final Expansion expansion : expansions) { - builder.resolver(expansion.audiencePlaceholders(audience)); - builder.resolver(expansion.globalPlaceholders()); + for (final Expansion expansion : expansions) { + Resolvers.applyIfNotEmpty(expansion.audiencePlaceholders(audience), builder); + Resolvers.applyIfNotEmpty(expansion.globalPlaceholders(), builder); } return builder.build(); @@ -157,10 +169,10 @@ private MiniPlaceholders(){} Objects.requireNonNull(otherAudience, () -> "otherAudience cannot be null"); final TagResolver.Builder builder = TagResolver.builder(); - for(final Expansion expansion : expansions) { - builder.resolver(expansion.audiencePlaceholders(audience)); - builder.resolver(expansion.relationalPlaceholders(audience, otherAudience)); - builder.resolver(expansion.globalPlaceholders()); + for (final Expansion expansion : expansions) { + Resolvers.applyIfNotEmpty(expansion.audiencePlaceholders(audience), builder); + Resolvers.applyIfNotEmpty(expansion.relationalPlaceholders(audience, otherAudience), builder); + Resolvers.applyIfNotEmpty(expansion.globalPlaceholders(), builder); } return builder.build(); diff --git a/api/src/main/java/me/dreamerzero/miniplaceholders/api/utils/Resolvers.java b/api/src/main/java/me/dreamerzero/miniplaceholders/api/utils/Resolvers.java new file mode 100644 index 0000000..172820f --- /dev/null +++ b/api/src/main/java/me/dreamerzero/miniplaceholders/api/utils/Resolvers.java @@ -0,0 +1,47 @@ +package me.dreamerzero.miniplaceholders.api.utils; + +import org.jetbrains.annotations.NotNull; + +import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver; + +/** + * Class of utilities to manage TagResolvers + * @since 1.2.0 + */ +public final class Resolvers { + private Resolvers() {} + + /** + * Check if the TagResolver is an instance of TagResolver.empty(), + * that is, it will always return null + * @param resolver the resolver to check + * @return true if the TagResolver is the same as TagResolver.empty(), else false + * @since 1.2.0 + */ + public static boolean isEmpty(final @NotNull TagResolver resolver) { + return resolver == TagResolver.empty(); + } + + /** + * Checks if the TagResolver provided is not a TagResolver.empty() + * @param resolver the resolver to check + * @return false if the TagResolver is the same as TagResolver.empty(), else true + * @since 1.2.0 + * + */ + public static boolean isNotEmpty(final @NotNull TagResolver resolver) { + return resolver != TagResolver.empty(); + } + + /** + * Applies a TagResolver to a TagResolver.Builder in case it is not a TagResolver.empty() + * @param resolver the resolver to check + * @param builder the resolver that can be added to the builder + * @since 1.2.0 + */ + public static void applyIfNotEmpty(final @NotNull TagResolver resolver, final @NotNull TagResolver.Builder builder) { + if (isNotEmpty(resolver)) { + builder.resolver(resolver); + } + } +} diff --git a/build.gradle.kts b/build.gradle.kts index 011bcfd..bea8eb1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ plugins { allprojects { apply(plugin = "java") group = "me.dreamerzero.miniplaceholders" - version = "1.1.1" + version = "1.2.0-SNAPSHOT" description = "MiniPlaceholders" }