aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-plugin-api-impl
diff options
context:
space:
mode:
authorDuarte Meneses <duarte.meneses@sonarsource.com>2022-12-12 11:04:07 -0600
committersonartech <sonartech@sonarsource.com>2022-12-13 20:03:18 +0000
commit3c737eed5d5759f79e55d2263336c25b49cca739 (patch)
tree9aab5908bbe62ff777be9575d046afd9183b2c16 /sonar-plugin-api-impl
parent74611681271b8be4f520461e9b230c8886dd29f5 (diff)
downloadsonarqube-3c737eed5d5759f79e55d2263336c25b49cca739.tar.gz
sonarqube-3c737eed5d5759f79e55d2263336c25b49cca739.zip
SONAR-17766 Ignore 'Issue.addQuickFix' instead of throwing an exception
Diffstat (limited to 'sonar-plugin-api-impl')
-rw-r--r--sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssue.java5
-rw-r--r--sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/NoOpNewQuickFix.java73
-rw-r--r--sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueTest.java15
-rw-r--r--sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/sensor/issue/internal/NoOpNewQuickFixTest.java54
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);
+ }
+}