From b357e29247caf19b84b91ca11362fdebf8a87d7f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 May 2024 16:53:04 +0000 Subject: [PATCH 1/3] Bump name.remal.sonarlint from 3.4.0 to 4.2.2 Dependabot couldn't find the original pull request head commit, 532f5fe4f155c0f9712bea26f80f13a4c6bb3a39. --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 3414e2c8ba..b4d44a2db1 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ plugins { id 'java' id "com.diffplug.spotless" version "6.25.0" id "org.sonarqube" version "5.0.0.4638" - id "name.remal.sonarlint" version "3.4.0" + id "name.remal.sonarlint" version "4.2.2" } group 'org.togetherjava' From 8d35d7bc624f45180f18045369f23ee7f39f4ed8 Mon Sep 17 00:00:00 2001 From: Connor Schweighoefer Date: Thu, 23 May 2024 19:02:57 +0200 Subject: [PATCH 2/3] Fix sonarlint issues --- .../bookmarks/BookmarksListRemoveHandler.java | 2 +- .../jshell/renderer/RendererUtils.java | 8 +++---- .../moderation/audit/AuditCommand.java | 3 +-- .../features/reminder/ReminderCommand.java | 3 +-- .../tjbot/features/tags/TagManageCommand.java | 20 ++++++++-------- .../tjbot/features/utils/Pagination.java | 23 ------------------- .../features/mathcommands/TeXCommandTest.java | 6 ++--- .../MediaOnlyChannelListenerTest.java | 2 +- .../features/reminder/RemindRoutineTest.java | 1 - .../org/togetherjava/tjbot/jda/JdaTester.java | 2 -- .../SlashCommandInteractionEventBuilder.java | 4 ++-- .../tjbot/jda/payloads/PayloadUser.java | 15 +++--------- 12 files changed, 27 insertions(+), 62 deletions(-) delete mode 100644 application/src/main/java/org/togetherjava/tjbot/features/utils/Pagination.java diff --git a/application/src/main/java/org/togetherjava/tjbot/features/bookmarks/BookmarksListRemoveHandler.java b/application/src/main/java/org/togetherjava/tjbot/features/bookmarks/BookmarksListRemoveHandler.java index 693423202b..a6996bf687 100644 --- a/application/src/main/java/org/togetherjava/tjbot/features/bookmarks/BookmarksListRemoveHandler.java +++ b/application/src/main/java/org/togetherjava/tjbot/features/bookmarks/BookmarksListRemoveHandler.java @@ -291,7 +291,7 @@ private static int getPageOfBookmark(int bookmarkIndex) { private static int clampPageIndex(List bookmarks, int pageIndex) { int maxPageIndex = getLastPageIndex(bookmarks); - return Math.min(Math.max(0, pageIndex), maxPageIndex); + return Math.clamp(pageIndex, 0, maxPageIndex); } private enum RequestType { diff --git a/application/src/main/java/org/togetherjava/tjbot/features/jshell/renderer/RendererUtils.java b/application/src/main/java/org/togetherjava/tjbot/features/jshell/renderer/RendererUtils.java index cdb8cf135b..086f8d3b9d 100644 --- a/application/src/main/java/org/togetherjava/tjbot/features/jshell/renderer/RendererUtils.java +++ b/application/src/main/java/org/togetherjava/tjbot/features/jshell/renderer/RendererUtils.java @@ -24,10 +24,10 @@ private RendererUtils() {} static String abortionCauseToString(JShellEvalAbortionCause abortionCause) { return switch (abortionCause) { case JShellEvalAbortionCause.TimeoutAbortionCause ignored -> "Allowed time exceeded."; - case JShellEvalAbortionCause.UnhandledExceptionAbortionCause c -> - "Uncaught exception:\n" + c.exceptionClass() + ":" + c.exceptionMessage(); - case JShellEvalAbortionCause.CompileTimeErrorAbortionCause c -> - "The code doesn't compile:\n" + String.join("\n", c.errors()); + case JShellEvalAbortionCause.UnhandledExceptionAbortionCause(String exceptionClass, String exceptionMessage) -> + "Uncaught exception:\n" + exceptionClass + ":" + exceptionMessage; + case JShellEvalAbortionCause.CompileTimeErrorAbortionCause(List errors) -> + "The code doesn't compile:\n" + String.join("\n", errors); case JShellEvalAbortionCause.SyntaxErrorAbortionCause ignored -> "The code doesn't compile, there are syntax errors in this code."; }; diff --git a/application/src/main/java/org/togetherjava/tjbot/features/moderation/audit/AuditCommand.java b/application/src/main/java/org/togetherjava/tjbot/features/moderation/audit/AuditCommand.java index 92c5006b8d..1f7d017155 100644 --- a/application/src/main/java/org/togetherjava/tjbot/features/moderation/audit/AuditCommand.java +++ b/application/src/main/java/org/togetherjava/tjbot/features/moderation/audit/AuditCommand.java @@ -25,7 +25,6 @@ import org.togetherjava.tjbot.features.moderation.ModerationAction; import org.togetherjava.tjbot.features.moderation.ModerationActionsStore; import org.togetherjava.tjbot.features.moderation.ModerationUtils; -import org.togetherjava.tjbot.features.utils.Pagination; import javax.annotation.Nullable; @@ -116,7 +115,7 @@ private > RestAction auditUser( if (pageNumber == -1) { pageNumberInLimits = totalPages; } else { - pageNumberInLimits = Pagination.clamp(1, pageNumber, totalPages); + pageNumberInLimits = Math.clamp(pageNumber, 1, totalPages); } return jda.retrieveUserById(targetId) diff --git a/application/src/main/java/org/togetherjava/tjbot/features/reminder/ReminderCommand.java b/application/src/main/java/org/togetherjava/tjbot/features/reminder/ReminderCommand.java index e121b110d6..152e6cfe3a 100644 --- a/application/src/main/java/org/togetherjava/tjbot/features/reminder/ReminderCommand.java +++ b/application/src/main/java/org/togetherjava/tjbot/features/reminder/ReminderCommand.java @@ -28,7 +28,6 @@ import org.togetherjava.tjbot.features.CommandVisibility; import org.togetherjava.tjbot.features.SlashCommandAdapter; import org.togetherjava.tjbot.features.utils.MessageUtils; -import org.togetherjava.tjbot.features.utils.Pagination; import org.togetherjava.tjbot.features.utils.StringDistances; import java.time.Duration; @@ -221,7 +220,7 @@ private MessageCreateData createPendingRemindersPage( // 12 reminders, 10 per page, ceil(12 / 10) = 2 int totalPages = Math.ceilDiv(pendingReminders.size(), REMINDERS_PER_PAGE); - pageToShow = Pagination.clamp(1, pageToShow, totalPages); + pageToShow = Math.clamp(pageToShow, 1, totalPages); EmbedBuilder remindersEmbed = new EmbedBuilder().setTitle("Pending reminders") .setColor(RemindRoutine.AMBIENT_COLOR); diff --git a/application/src/main/java/org/togetherjava/tjbot/features/tags/TagManageCommand.java b/application/src/main/java/org/togetherjava/tjbot/features/tags/TagManageCommand.java index f5ab3c4e84..7de7dddf20 100644 --- a/application/src/main/java/org/togetherjava/tjbot/features/tags/TagManageCommand.java +++ b/application/src/main/java/org/togetherjava/tjbot/features/tags/TagManageCommand.java @@ -320,19 +320,21 @@ private Optional getTagContent(Subcommand subcommand, String id) { */ private boolean isWrongTagStatusAndHandle(TagStatus requiredTagStatus, String id, IReplyCallback event) { - if (requiredTagStatus == TagStatus.EXISTS) { - return tagSystem.handleIsUnknownTag(id, event); - } else if (requiredTagStatus == TagStatus.NOT_EXISTS) { - if (tagSystem.hasTag(id)) { + switch (requiredTagStatus) { + case TagStatus.EXISTS -> { + return tagSystem.handleIsUnknownTag(id, event); + } + case TagStatus status when status == TagStatus.NOT_EXISTS && tagSystem.hasTag(id) -> { event.reply("The tag with id '%s' already exists.".formatted(id)) - .setEphemeral(true) - .queue(); + .setEphemeral(true) + .queue(); return true; } - } else { - throw new AssertionError("Unknown tag status '%s'".formatted(requiredTagStatus)); + case NOT_EXISTS -> { + return false; + } + default -> throw new AssertionError("Unknown tag status '%s'".formatted(requiredTagStatus)); } - return false; } private void logAction(Subcommand subcommand, Guild guild, User author, diff --git a/application/src/main/java/org/togetherjava/tjbot/features/utils/Pagination.java b/application/src/main/java/org/togetherjava/tjbot/features/utils/Pagination.java deleted file mode 100644 index 3fdc2d41d3..0000000000 --- a/application/src/main/java/org/togetherjava/tjbot/features/utils/Pagination.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.togetherjava.tjbot.features.utils; - -/** - * Utility for pagination. - */ -public class Pagination { - private Pagination() { - throw new UnsupportedOperationException("Utility class, construction not supported"); - } - - /** - * If the number is less than min value it'll return the min value, if the number is greater - * than max value it'll return the max value else it'll return the value. - * - * @param min minimum value (inclusive) - * @param value the value to verify - * @param max maximum value (inclusive) - * @return a number between min and max inclusive - */ - public static int clamp(int min, int value, int max) { - return Math.min(Math.max(min, value), max); - } -} diff --git a/application/src/test/java/org/togetherjava/tjbot/features/mathcommands/TeXCommandTest.java b/application/src/test/java/org/togetherjava/tjbot/features/mathcommands/TeXCommandTest.java index 483d9d48e6..1f951affc8 100644 --- a/application/src/test/java/org/togetherjava/tjbot/features/mathcommands/TeXCommandTest.java +++ b/application/src/test/java/org/togetherjava/tjbot/features/mathcommands/TeXCommandTest.java @@ -39,7 +39,7 @@ private SlashCommandInteractionEvent triggerSlashCommand(String latex) { return event; } - private void verifySuccessfulResponse(SlashCommandInteractionEvent event, String query) { + private void verifySuccessfulResponse(String query) { ArgumentMatcher attachmentIsTexPng = attachment -> attachment != null && "tex.png".equals(attachment.getName()); @@ -71,10 +71,10 @@ void canRenderSupportedQuery(String supportedQuery) { // GIVEN a supported latex query // WHEN triggering the command - SlashCommandInteractionEvent event = triggerSlashCommand(supportedQuery); + triggerSlashCommand(supportedQuery); // THEN the command send a successful response - verifySuccessfulResponse(event, supportedQuery); + verifySuccessfulResponse(supportedQuery); } private static List provideBadInlineQueries() { diff --git a/application/src/test/java/org/togetherjava/tjbot/features/mediaonly/MediaOnlyChannelListenerTest.java b/application/src/test/java/org/togetherjava/tjbot/features/mediaonly/MediaOnlyChannelListenerTest.java index c31a49589e..c42bba88bf 100644 --- a/application/src/test/java/org/togetherjava/tjbot/features/mediaonly/MediaOnlyChannelListenerTest.java +++ b/application/src/test/java/org/togetherjava/tjbot/features/mediaonly/MediaOnlyChannelListenerTest.java @@ -95,7 +95,7 @@ void sendsAuthorDmUponDeletion() { MessageCreateData message = new MessageCreateBuilder().setContent("any").build(); // WHEN sending the message - MessageReceivedEvent event = sendMessage(message); + sendMessage(message); // THEN the author receives a DM verify(jdaTester.getPrivateChannelSpy()).sendMessage(any(MessageCreateData.class)); diff --git a/application/src/test/java/org/togetherjava/tjbot/features/reminder/RemindRoutineTest.java b/application/src/test/java/org/togetherjava/tjbot/features/reminder/RemindRoutineTest.java index b2dd7ff7f6..db4d1a7e8c 100644 --- a/application/src/test/java/org/togetherjava/tjbot/features/reminder/RemindRoutineTest.java +++ b/application/src/test/java/org/togetherjava/tjbot/features/reminder/RemindRoutineTest.java @@ -159,7 +159,6 @@ void sendsPendingReminderChannelNotFoundAuthorFound() { void reminderIsNotSendIfNotPending() { // GIVEN a reminder that is not pending yet Instant remindAt = Instant.now().plus(1, ChronoUnit.HOURS); - String reminderContent = "foo"; rawReminders.insertReminder("foo", remindAt); // WHEN running the routine diff --git a/application/src/test/java/org/togetherjava/tjbot/jda/JdaTester.java b/application/src/test/java/org/togetherjava/tjbot/jda/JdaTester.java index 55bbb24c71..ce6458fb0f 100644 --- a/application/src/test/java/org/togetherjava/tjbot/jda/JdaTester.java +++ b/application/src/test/java/org/togetherjava/tjbot/jda/JdaTester.java @@ -745,8 +745,6 @@ private void mockMessage(Message message, ChannelType channelType) { */ public Message clientMessageToReceivedMessageMock(MessageCreateData clientMessage) { Message receivedMessage = mock(Message.class); - var foo = clientMessage.getComponents(); - when(receivedMessage.getJDA()).thenReturn(jda); when(receivedMessage.getEmbeds()).thenReturn(clientMessage.getEmbeds()); when(receivedMessage.getContentRaw()).thenReturn(clientMessage.getContent()); diff --git a/application/src/test/java/org/togetherjava/tjbot/jda/SlashCommandInteractionEventBuilder.java b/application/src/test/java/org/togetherjava/tjbot/jda/SlashCommandInteractionEventBuilder.java index 5005a4b607..162a3c7ced 100644 --- a/application/src/test/java/org/togetherjava/tjbot/jda/SlashCommandInteractionEventBuilder.java +++ b/application/src/test/java/org/togetherjava/tjbot/jda/SlashCommandInteractionEventBuilder.java @@ -273,7 +273,7 @@ private PayloadSlashCommand createEvent() { // command has one // TODO Make as much of this configurable as needed PayloadUser user = new PayloadUser(false, 0, userId, "286b894dc74634202d251d591f63537d", - "Test-User", "3452"); + "Test-User"); PayloadMember member = new PayloadMember(null, null, "2021-09-07T18:25:16.615000+00:00", "1099511627775", List.of(), false, false, false, null, false, user); PayloadChannel channel = new PayloadChannel(channelId, 1); @@ -309,7 +309,7 @@ private static String serializeOptionValue(T value, OptionType type) { if (type == OptionType.STRING) { return (String) value; } else if (type == OptionType.INTEGER) { - if (value instanceof Long asLong) { + if (value instanceof Long) { return value.toString(); } diff --git a/application/src/test/java/org/togetherjava/tjbot/jda/payloads/PayloadUser.java b/application/src/test/java/org/togetherjava/tjbot/jda/payloads/PayloadUser.java index 2524cbd1cb..64462bddc0 100644 --- a/application/src/test/java/org/togetherjava/tjbot/jda/payloads/PayloadUser.java +++ b/application/src/test/java/org/togetherjava/tjbot/jda/payloads/PayloadUser.java @@ -12,20 +12,19 @@ public final class PayloadUser { private String id; private String avatar; private String username; - private String discriminator; public PayloadUser(boolean bot, long publicFlags, String id, @Nullable String avatar, - String username, String discriminator) { + String username) { + this.bot = bot; this.publicFlags = publicFlags; this.id = id; this.avatar = avatar; this.username = username; - this.discriminator = discriminator; } public static PayloadUser of(User user) { return new PayloadUser(user.isBot(), user.getFlagsRaw(), user.getId(), user.getAvatarId(), - user.getName(), user.getDiscriminator()); + user.getName()); } public boolean isBot() { @@ -68,12 +67,4 @@ public String getUsername() { public void setUsername(String username) { this.username = username; } - - public String getDiscriminator() { - return discriminator; - } - - public void setDiscriminator(String discriminator) { - this.discriminator = discriminator; - } } From e925e7d48e24d2de9460eecba764577e39d9c33d Mon Sep 17 00:00:00 2001 From: Connor Schweighoefer Date: Thu, 23 May 2024 19:48:58 +0200 Subject: [PATCH 3/3] Revert usage of when keyword --- .../tjbot/features/tags/TagManageCommand.java | 18 +++++++++++------- .../SlashCommandInteractionEventBuilder.java | 4 ++-- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/application/src/main/java/org/togetherjava/tjbot/features/tags/TagManageCommand.java b/application/src/main/java/org/togetherjava/tjbot/features/tags/TagManageCommand.java index 7de7dddf20..f24d517229 100644 --- a/application/src/main/java/org/togetherjava/tjbot/features/tags/TagManageCommand.java +++ b/application/src/main/java/org/togetherjava/tjbot/features/tags/TagManageCommand.java @@ -318,23 +318,27 @@ private Optional getTagContent(Subcommand subcommand, String id) { * @param event the event to send messages with * @return whether the status of the given tag is not equal to the required status */ + // ToDo: gradle task :application:spotlessJava throws internal exception if this method uses new + // when keyword + @SuppressWarnings("java:S6916") private boolean isWrongTagStatusAndHandle(TagStatus requiredTagStatus, String id, IReplyCallback event) { switch (requiredTagStatus) { case TagStatus.EXISTS -> { return tagSystem.handleIsUnknownTag(id, event); } - case TagStatus status when status == TagStatus.NOT_EXISTS && tagSystem.hasTag(id) -> { - event.reply("The tag with id '%s' already exists.".formatted(id)) + case TagStatus.NOT_EXISTS -> { + if (tagSystem.hasTag(id)) { + event.reply("The tag with id '%s' already exists.".formatted(id)) .setEphemeral(true) .queue(); - return true; - } - case NOT_EXISTS -> { - return false; + return true; + } } - default -> throw new AssertionError("Unknown tag status '%s'".formatted(requiredTagStatus)); + default -> + throw new AssertionError("Unknown tag status '%s'".formatted(requiredTagStatus)); } + return false; } private void logAction(Subcommand subcommand, Guild guild, User author, diff --git a/application/src/test/java/org/togetherjava/tjbot/jda/SlashCommandInteractionEventBuilder.java b/application/src/test/java/org/togetherjava/tjbot/jda/SlashCommandInteractionEventBuilder.java index 162a3c7ced..77533a44df 100644 --- a/application/src/test/java/org/togetherjava/tjbot/jda/SlashCommandInteractionEventBuilder.java +++ b/application/src/test/java/org/togetherjava/tjbot/jda/SlashCommandInteractionEventBuilder.java @@ -272,8 +272,8 @@ private PayloadSlashCommand createEvent() { // TODO Validate that required options are set, check that subcommand is given if the // command has one // TODO Make as much of this configurable as needed - PayloadUser user = new PayloadUser(false, 0, userId, "286b894dc74634202d251d591f63537d", - "Test-User"); + PayloadUser user = + new PayloadUser(false, 0, userId, "286b894dc74634202d251d591f63537d", "Test-User"); PayloadMember member = new PayloadMember(null, null, "2021-09-07T18:25:16.615000+00:00", "1099511627775", List.of(), false, false, false, null, false, user); PayloadChannel channel = new PayloadChannel(channelId, 1);