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 extends Throwable> c
}
return false;
}
+
+ public static Collector> toUnmodifiableList()
+ {
+ return Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList);
+ }
}