From 052687e4b1f2c26ffa6407130ab2ecb333a626b0 Mon Sep 17 00:00:00 2001 From: freya02 <41875020+freya022@users.noreply.github.com> Date: Sat, 27 Aug 2022 21:38:16 +0200 Subject: [PATCH] Return immutable reconstructed interaction object lists (#2220) --- .../interactions/commands/build/SlashCommandData.java | 4 +++- .../interactions/commands/build/SubcommandData.java | 4 ++-- .../commands/build/SubcommandGroupData.java | 4 ++-- .../jda/internal/interactions/CommandDataImpl.java | 10 +++++----- .../java/net/dv8tion/jda/internal/utils/Helpers.java | 7 +++++++ 5 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/dv8tion/jda/api/interactions/commands/build/SlashCommandData.java b/src/main/java/net/dv8tion/jda/api/interactions/commands/build/SlashCommandData.java index 6be8d25517..7c1d0bbee4 100644 --- a/src/main/java/net/dv8tion/jda/api/interactions/commands/build/SlashCommandData.java +++ b/src/main/java/net/dv8tion/jda/api/interactions/commands/build/SlashCommandData.java @@ -18,8 +18,8 @@ import net.dv8tion.jda.api.events.interaction.command.CommandAutoCompleteInteractionEvent; import net.dv8tion.jda.api.interactions.DiscordLocale; -import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions; import net.dv8tion.jda.api.interactions.commands.Command; +import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions; import net.dv8tion.jda.api.interactions.commands.OptionType; import net.dv8tion.jda.api.interactions.commands.localization.LocalizationFunction; import net.dv8tion.jda.api.interactions.commands.localization.LocalizationMap; @@ -155,6 +155,8 @@ public interface SlashCommandData extends CommandData /** * The options for this command. + *
These option instances are reconstructed, + * which means that any modifications will not be reflected in the backing state. * * @return Immutable list of {@link OptionData} */ diff --git a/src/main/java/net/dv8tion/jda/api/interactions/commands/build/SubcommandData.java b/src/main/java/net/dv8tion/jda/api/interactions/commands/build/SubcommandData.java index d637a756a9..92b2d6691e 100644 --- a/src/main/java/net/dv8tion/jda/api/interactions/commands/build/SubcommandData.java +++ b/src/main/java/net/dv8tion/jda/api/interactions/commands/build/SubcommandData.java @@ -25,6 +25,7 @@ import net.dv8tion.jda.api.utils.data.DataObject; import net.dv8tion.jda.api.utils.data.SerializableData; import net.dv8tion.jda.internal.utils.Checks; +import net.dv8tion.jda.internal.utils.Helpers; import net.dv8tion.jda.internal.utils.localization.LocalizationUtils; import javax.annotation.Nonnull; @@ -32,7 +33,6 @@ import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; import java.util.stream.Stream; /** @@ -392,7 +392,7 @@ public List getOptions() return options.stream(DataArray::getObject) .map(OptionData::fromData) .filter(it -> it.getType().getKey() > OptionType.SUB_COMMAND_GROUP.getKey()) - .collect(Collectors.toList()); + .collect(Helpers.toUnmodifiableList()); } /** diff --git a/src/main/java/net/dv8tion/jda/api/interactions/commands/build/SubcommandGroupData.java b/src/main/java/net/dv8tion/jda/api/interactions/commands/build/SubcommandGroupData.java index 1235a7625e..d2396c0645 100644 --- a/src/main/java/net/dv8tion/jda/api/interactions/commands/build/SubcommandGroupData.java +++ b/src/main/java/net/dv8tion/jda/api/interactions/commands/build/SubcommandGroupData.java @@ -24,6 +24,7 @@ import net.dv8tion.jda.api.utils.data.DataObject; import net.dv8tion.jda.api.utils.data.SerializableData; import net.dv8tion.jda.internal.utils.Checks; +import net.dv8tion.jda.internal.utils.Helpers; import net.dv8tion.jda.internal.utils.localization.LocalizationUtils; import javax.annotation.Nonnull; @@ -31,7 +32,6 @@ import java.util.Collection; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; import java.util.stream.Stream; /** @@ -279,7 +279,7 @@ public List getSubcommands() { return options.stream(DataArray::getObject) .map(SubcommandData::fromData) - .collect(Collectors.toList()); + .collect(Helpers.toUnmodifiableList()); } /** diff --git a/src/main/java/net/dv8tion/jda/internal/interactions/CommandDataImpl.java b/src/main/java/net/dv8tion/jda/internal/interactions/CommandDataImpl.java index 13e85d7726..1b03d07fb0 100644 --- a/src/main/java/net/dv8tion/jda/internal/interactions/CommandDataImpl.java +++ b/src/main/java/net/dv8tion/jda/internal/interactions/CommandDataImpl.java @@ -17,8 +17,8 @@ package net.dv8tion.jda.internal.interactions; import net.dv8tion.jda.api.interactions.DiscordLocale; -import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions; import net.dv8tion.jda.api.interactions.commands.Command; +import net.dv8tion.jda.api.interactions.commands.DefaultMemberPermissions; import net.dv8tion.jda.api.interactions.commands.OptionType; import net.dv8tion.jda.api.interactions.commands.build.OptionData; import net.dv8tion.jda.api.interactions.commands.build.SlashCommandData; @@ -30,12 +30,12 @@ import net.dv8tion.jda.api.utils.data.DataObject; import net.dv8tion.jda.internal.interactions.command.localization.LocalizationMapper; import net.dv8tion.jda.internal.utils.Checks; +import net.dv8tion.jda.internal.utils.Helpers; import javax.annotation.Nonnull; import java.util.Arrays; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; import java.util.stream.Stream; public class CommandDataImpl implements SlashCommandData @@ -146,7 +146,7 @@ public List getSubcommands() return type == OptionType.SUB_COMMAND; }) .map(SubcommandData::fromData) - .collect(Collectors.toList()); + .collect(Helpers.toUnmodifiableList()); } @Nonnull @@ -160,7 +160,7 @@ public List getSubcommandGroups() return type == OptionType.SUB_COMMAND_GROUP; }) .map(SubcommandGroupData::fromData) - .collect(Collectors.toList()); + .collect(Helpers.toUnmodifiableList()); } @Nonnull @@ -354,6 +354,6 @@ public List getOptions() return options.stream(DataArray::getObject) .map(OptionData::fromData) .filter(it -> it.getType().getKey() > OptionType.SUB_COMMAND_GROUP.getKey()) - .collect(Collectors.toList()); + .collect(Helpers.toUnmodifiableList()); } } diff --git a/src/main/java/net/dv8tion/jda/internal/utils/Helpers.java b/src/main/java/net/dv8tion/jda/internal/utils/Helpers.java index 6f22d53b65..78df977259 100644 --- a/src/main/java/net/dv8tion/jda/internal/utils/Helpers.java +++ b/src/main/java/net/dv8tion/jda/internal/utils/Helpers.java @@ -29,6 +29,8 @@ import java.util.*; import java.util.function.Consumer; import java.util.function.ToLongFunction; +import java.util.stream.Collector; +import java.util.stream.Collectors; /** * This class has major inspiration from Lang 3 @@ -283,4 +285,9 @@ public static boolean hasCause(Throwable throwable, Class c } return false; } + + public static Collector> toUnmodifiableList() + { + return Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList); + } }