]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-23160 Improve exception message in DefaultSymbol.newReference (#10823)
authorMartin Strecker <103252490+martin-strecker-sonarsource@users.noreply.github.com>
Thu, 26 Sep 2024 07:52:57 +0000 (09:52 +0200)
committersonartech <sonartech@sonarsource.com>
Thu, 26 Sep 2024 20:03:14 +0000 (20:03 +0000)
sonar-plugin-api-impl/src/main/java/org/sonar/api/batch/sensor/symbol/internal/DefaultSymbolTable.java
sonar-plugin-api-impl/src/test/java/org/sonar/api/batch/sensor/symbol/internal/DefaultSymbolTableTest.java

index 91ef8fddb6ae6a0ffbf293214c35b9f369368d7b..d81ef8914be5843f4d42746580886aebcf07be54 100644 (file)
@@ -107,7 +107,11 @@ public class DefaultSymbolTable extends DefaultStorable implements NewSymbolTabl
     @Override
     public NewSymbol newReference(TextRange range) {
       requireNonNull(range, "Provided range is null");
-      checkArgument(!declaration.overlap(range), "Overlapping symbol declaration and reference for symbol at %s", declaration);
+      checkArgument(!declaration.overlap(range),
+        "Overlapping symbol declaration and reference for symbol declared at %s and referenced at %s in file %s",
+        declaration,
+        range,
+        inputFile);
       references.add(range);
       return this;
     }
index 5e9d8dbc65db7b02463a1c275848e005dc103481..1ead8dbef1cb141d5b8f578198034e088022e9cc 100644 (file)
@@ -27,8 +27,10 @@ import org.sonar.api.batch.fs.InputFile;
 import org.sonar.api.batch.fs.TextRange;
 import org.sonar.api.batch.fs.internal.TestInputFileBuilder;
 import org.sonar.api.batch.sensor.internal.SensorStorage;
+import org.sonar.api.batch.sensor.symbol.NewSymbol;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.mockito.Mockito.mock;
 
 public class DefaultSymbolTableTest {
@@ -51,7 +53,7 @@ public class DefaultSymbolTableTest {
     symbolTableBuilder
       .newSymbol(1, 0, 1, 10)
       .newReference(2, 10, 2, 15)
-    .newReference(1, 16, 1, 20);
+      .newReference(1, 16, 1, 20);
 
     symbolTableBuilder
       .newSymbol(1, 12, 1, 15)
@@ -62,6 +64,18 @@ public class DefaultSymbolTableTest {
     referencesPerSymbol = symbolTableBuilder.getReferencesBySymbol();
   }
 
+  @Test
+  public void fail_on_reference_overlaps_declaration() {
+    NewSymbol symbol = new DefaultSymbolTable(mock(SensorStorage.class))
+      .onFile(INPUT_FILE)
+      .newSymbol(1, 0, 1, 10);
+
+    assertThatThrownBy(() -> symbol.newReference(1, 3, 1, 12))
+      .isInstanceOf(IllegalArgumentException.class)
+      .hasMessage(
+        "Overlapping symbol declaration and reference for symbol declared at Range[from [line=1, lineOffset=0] to [line=1, lineOffset=10]] and referenced at Range[from [line=1, lineOffset=3] to [line=1, lineOffset=12]] in file src/Foo.java");
+  }
+
   @Test
   public void should_register_symbols() {
     assertThat(referencesPerSymbol).hasSize(2);