]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-17766 Ignore 'Issue.addQuickFix' instead of throwing an exception
authorDuarte Meneses <duarte.meneses@sonarsource.com>
Mon, 12 Dec 2022 17:04:07 +0000 (11:04 -0600)
committersonartech <sonartech@sonarsource.com>
Tue, 13 Dec 2022 20:03:18 +0000 (20:03 +0000)
sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssue.java
sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/issue/internal/NoOpNewQuickFix.java [new file with mode: 0644]
sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/sensor/issue/internal/DefaultIssueTest.java
sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/sensor/issue/internal/NoOpNewQuickFixTest.java [new file with mode: 0644]

index ed55c0d09af80f9c206257c5c2431f9e1965555b..b9a898e2882c5de9490b566e97807383b9d64e57 100644 (file)
@@ -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 (file)
index 0000000..20a28ab
--- /dev/null
@@ -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;
+    }
+  }
+}
index 6e40c1700659b33923646efb5ba0e6856107b233..e68dd1ad1967e9b394aaa86e6d0f00340384fa3a 100644 (file)
@@ -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 (file)
index 0000000..63f0730
--- /dev/null
@@ -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);
+  }
+}