diff options
author | Duarte Meneses <duarte.meneses@sonarsource.com> | 2022-12-12 11:04:07 -0600 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2022-12-13 20:03:18 +0000 |
commit | 3c737eed5d5759f79e55d2263336c25b49cca739 (patch) | |
tree | 9aab5908bbe62ff777be9575d046afd9183b2c16 /sonar-plugin-api-impl | |
parent | 74611681271b8be4f520461e9b230c8886dd29f5 (diff) | |
download | sonarqube-3c737eed5d5759f79e55d2263336c25b49cca739.tar.gz sonarqube-3c737eed5d5759f79e55d2263336c25b49cca739.zip |
SONAR-17766 Ignore 'Issue.addQuickFix' instead of throwing an exception
Diffstat (limited to 'sonar-plugin-api-impl')
4 files changed, 138 insertions, 9 deletions
diff --git a/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssue.java b/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssue.java index ed55c0d09af..b9a898e2882 100644 --- a/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssue.java +++ b/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssue.java @@ -82,12 +82,13 @@ public class DefaultIssue extends AbstractDefaultIssue<DefaultIssue> implements @Override public NewQuickFix newQuickFix() { - throw new UnsupportedOperationException(); + return new NoOpNewQuickFix(); } @Override public NewIssue addQuickFix(NewQuickFix newQuickFix) { - throw new UnsupportedOperationException(); + this.quickFixAvailable = true; + return this; } @Override diff --git a/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/NoOpNewQuickFix.java b/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/NoOpNewQuickFix.java new file mode 100644 index 00000000000..20a28ab1d0a --- /dev/null +++ b/sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/NoOpNewQuickFix.java @@ -0,0 +1,73 @@ +/* + * SonarQube + * Copyright (C) 2009-2022 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.api.batch.sensor.issue.internal; + +import org.sonar.api.batch.fs.InputFile; +import org.sonar.api.batch.fs.TextRange; +import org.sonar.api.batch.sensor.issue.fix.NewInputFileEdit; +import org.sonar.api.batch.sensor.issue.fix.NewQuickFix; +import org.sonar.api.batch.sensor.issue.fix.NewTextEdit; + +public class NoOpNewQuickFix implements NewQuickFix { + @Override + public NewQuickFix message(String message) { + return this; + } + + @Override + public NewInputFileEdit newInputFileEdit() { + return new NoOpNewInputFileEdit(); + } + + @Override + public NewQuickFix addInputFileEdit(NewInputFileEdit newInputFileEdit) { + return this; + } + + public static class NoOpNewInputFileEdit implements NewInputFileEdit { + + @Override + public NewInputFileEdit on(InputFile inputFile) { + return this; + } + + @Override + public NewTextEdit newTextEdit() { + return new NoOpNewTextEdit(); + } + + @Override + public NewInputFileEdit addTextEdit(NewTextEdit newTextEdit) { + return this; + } + } + + public static class NoOpNewTextEdit implements NewTextEdit { + @Override + public NewTextEdit at(TextRange range) { + return this; + } + + @Override + public NewTextEdit withNewText(String newText) { + return this; + } + } +} diff --git a/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueTest.java b/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueTest.java index 6e40c170065..e68dd1ad196 100644 --- a/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueTest.java +++ b/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueTest.java @@ -233,13 +233,14 @@ public class DefaultIssueTest { } @Test - public void quickfix_not_supported_for_now() { + public void quickfix_only_sets_flag_to_true() { DefaultIssue issue = new DefaultIssue(project); - assertThatThrownBy(() -> issue.addQuickFix(quickFix)) - .isInstanceOf(UnsupportedOperationException.class); - assertThatThrownBy(issue::newQuickFix) - .isInstanceOf(UnsupportedOperationException.class); - assertThatThrownBy(issue::quickFixes) - .isInstanceOf(UnsupportedOperationException.class); + + NewQuickFix newQuickFix = issue.newQuickFix(); + assertThat(newQuickFix).isInstanceOf(NoOpNewQuickFix.class); + + assertThat(issue.isQuickFixAvailable()).isFalse(); + issue.addQuickFix(newQuickFix); + assertThat(issue.isQuickFixAvailable()).isTrue(); } } diff --git a/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/sensor/issue/internal/NoOpNewQuickFixTest.java b/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/sensor/issue/internal/NoOpNewQuickFixTest.java new file mode 100644 index 00000000000..63f0730ead9 --- /dev/null +++ b/sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/sensor/issue/internal/NoOpNewQuickFixTest.java @@ -0,0 +1,54 @@ +/* + * SonarQube + * Copyright (C) 2009-2022 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.api.batch.sensor.issue.internal; + +import org.junit.Test; +import org.sonar.api.batch.fs.InputFile; +import org.sonar.api.batch.fs.TextRange; +import org.sonar.api.batch.sensor.issue.fix.NewInputFileEdit; +import org.sonar.api.batch.sensor.issue.fix.NewTextEdit; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +public class NoOpNewQuickFixTest { + @Test + public void newInputFileEdit_creates_no_ops() { + NoOpNewQuickFix newQuickFix = new NoOpNewQuickFix(); + NewInputFileEdit newInputFileEdit = newQuickFix.newInputFileEdit(); + assertThat(newInputFileEdit).isInstanceOf(NoOpNewQuickFix.NoOpNewInputFileEdit.class); + NewTextEdit newTextEdit = newInputFileEdit.newTextEdit(); + assertThat(newTextEdit).isInstanceOf(NoOpNewQuickFix.NoOpNewTextEdit.class); + } + + @Test + public void no_method_throws_exception() { + NoOpNewQuickFix newQuickFix = new NoOpNewQuickFix(); + assertThat(newQuickFix.message("msg")).isEqualTo(newQuickFix); + NewInputFileEdit newInputFileEdit = newQuickFix.newInputFileEdit(); + + assertThat(newQuickFix.addInputFileEdit(newInputFileEdit)).isEqualTo(newQuickFix); + assertThat(newInputFileEdit.on(mock(InputFile.class))).isEqualTo(newInputFileEdit); + NewTextEdit newTextEdit = newInputFileEdit.newTextEdit(); + assertThat(newInputFileEdit.addTextEdit(newTextEdit)).isEqualTo(newInputFileEdit); + assertThat(newTextEdit.at(mock(TextRange.class))).isEqualTo(newTextEdit); + assertThat(newTextEdit.withNewText("text")).isEqualTo(newTextEdit); + } +} |