Skip to content

Commit

Permalink
Return immutable reconstructed interaction object lists (#2220)
Browse files Browse the repository at this point in the history
  • Loading branch information
freya022 committed Aug 27, 2022
1 parent baebe0a commit 052687e
Show file tree
Hide file tree
Showing 5 changed files with 19 additions and 10 deletions.
Expand Up @@ -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;
Expand Down Expand Up @@ -155,6 +155,8 @@ public interface SlashCommandData extends CommandData

/**
* The options for this command.
* <br>These option instances are <b>reconstructed</b>,
* which means that any modifications will not be reflected in the backing state.
*
* @return Immutable list of {@link OptionData}
*/
Expand Down
Expand Up @@ -25,14 +25,14 @@
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;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
Expand Down Expand Up @@ -392,7 +392,7 @@ public List<OptionData> 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());
}

/**
Expand Down
Expand Up @@ -24,14 +24,14 @@
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;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
Expand Down Expand Up @@ -279,7 +279,7 @@ public List<SubcommandData> getSubcommands()
{
return options.stream(DataArray::getObject)
.map(SubcommandData::fromData)
.collect(Collectors.toList());
.collect(Helpers.toUnmodifiableList());
}

/**
Expand Down
Expand Up @@ -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;
Expand All @@ -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
Expand Down Expand Up @@ -146,7 +146,7 @@ public List<SubcommandData> getSubcommands()
return type == OptionType.SUB_COMMAND;
})
.map(SubcommandData::fromData)
.collect(Collectors.toList());
.collect(Helpers.toUnmodifiableList());
}

@Nonnull
Expand All @@ -160,7 +160,7 @@ public List<SubcommandGroupData> getSubcommandGroups()
return type == OptionType.SUB_COMMAND_GROUP;
})
.map(SubcommandGroupData::fromData)
.collect(Collectors.toList());
.collect(Helpers.toUnmodifiableList());
}

@Nonnull
Expand Down Expand Up @@ -354,6 +354,6 @@ public List<OptionData> 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());
}
}
7 changes: 7 additions & 0 deletions src/main/java/net/dv8tion/jda/internal/utils/Helpers.java
Expand Up @@ -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 <a href="https://commons.apache.org/proper/commons-lang/" target="_blank">Lang 3</a>
Expand Down Expand Up @@ -283,4 +285,9 @@ public static boolean hasCause(Throwable throwable, Class<? extends Throwable> c
}
return false;
}

public static <T> Collector<T, ?, List<T>> toUnmodifiableList()
{
return Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList);
}
}

0 comments on commit 052687e

Please sign in to comment.