Skip to content

Commit 87e0ff2

Browse files
committed
Precise issue location for unused method parameters
1 parent f0b6d55 commit 87e0ff2

6 files changed

Lines changed: 23 additions & 11 deletions

File tree

its/ruling/src/test/resources/commons-beanutils/squid-S1172.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
'commons-beanutils:commons-beanutils:src/main/java/org/apache/commons/beanutils/FluentPropertyBeanIntrospector.java':[
3-
175,
3+
176,
44
],
55
'commons-beanutils:commons-beanutils:src/main/java/org/apache/commons/beanutils/LazyDynaBean.java':[
66
785,

its/ruling/src/test/resources/guava/squid-S1172.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,6 @@
2424
2364,
2525
],
2626
'com.google.guava:guava:src/com/google/common/escape/ArrayBasedUnicodeEscaper.java':[
27-
104,
27+
105,
2828
],
2929
}

its/ruling/src/test/resources/java-squid/squid-S1172.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
46,
44
],
55
'org.sonarsource.java:java-squid:src/main/java/org/sonar/java/ast/parser/TreeFactory.java':[
6-
137,
6+
138,
77
746,
88
],
99
'org.sonarsource.java:java-squid:src/main/java/org/sonar/java/resolve/Resolve.java':[

its/ruling/src/test/resources/sonar-server/squid-S1172.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
'org.codehaus.sonar:sonar-server:src/main/java/org/sonar/server/batch/ProjectRepositoryLoader.java':[
33
313,
44
321,
5-
336,
5+
337,
66
],
77
'org.codehaus.sonar:sonar-server:src/main/java/org/sonar/server/db/BaseDao.java':[
88
346,
99
],
1010
'org.codehaus.sonar:sonar-server:src/main/java/org/sonar/server/db/migrations/DatabaseMigrator.java':[
11-
50,
11+
51,
1212
],
1313
'org.codehaus.sonar:sonar-server:src/main/java/org/sonar/server/issue/ws/SearchAction.java':[
1414
598,

java-checks/src/main/java/org/sonar/java/checks/UnusedMethodParameterCheck.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
*/
2020
package org.sonar.java.checks;
2121

22-
import com.google.common.base.Joiner;
2322
import com.google.common.collect.ImmutableList;
2423
import com.google.common.collect.Lists;
2524
import org.apache.commons.lang.BooleanUtils;
@@ -29,7 +28,9 @@
2928
import org.sonar.java.model.ModifiersUtils;
3029
import org.sonar.java.model.declaration.MethodTreeImpl;
3130
import org.sonar.java.tag.Tag;
31+
import org.sonar.plugins.java.api.JavaFileScannerContext;
3232
import org.sonar.plugins.java.api.tree.BlockTree;
33+
import org.sonar.plugins.java.api.tree.IdentifierTree;
3334
import org.sonar.plugins.java.api.tree.MethodTree;
3435
import org.sonar.plugins.java.api.tree.Modifier;
3536
import org.sonar.plugins.java.api.tree.Tree;
@@ -38,6 +39,7 @@
3839
import org.sonar.squidbridge.annotations.SqaleConstantRemediation;
3940
import org.sonar.squidbridge.annotations.SqaleSubCharacteristic;
4041

42+
import java.util.ArrayList;
4143
import java.util.List;
4244

4345
@Rule(
@@ -59,14 +61,19 @@ public List<Tree.Kind> nodesToVisit() {
5961
public void visitNode(Tree tree) {
6062
MethodTree methodTree = (MethodTree) tree;
6163
if (hasSemantic() && methodTree.block() != null && !isExcluded(methodTree)) {
62-
List<String> unused = Lists.newArrayList();
64+
List<IdentifierTree> unused = Lists.newArrayList();
6365
for (VariableTree var : methodTree.parameters()) {
6466
if (var.symbol().usages().isEmpty()) {
65-
unused.add(var.simpleName().name());
67+
unused.add(var.simpleName());
6668
}
6769
}
6870
if (!unused.isEmpty()) {
69-
addIssue(methodTree, "Remove the unused method parameter(s) \"" + Joiner.on(",").join(unused) + "\".");
71+
List<JavaFileScannerContext.Location> locations = new ArrayList<>();
72+
for (IdentifierTree identifier : unused.subList(1, unused.size())) {
73+
locations.add(new JavaFileScannerContext.Location("Remove this unused method parameter "+identifier.name()+"\".", identifier));
74+
}
75+
IdentifierTree firstUnused = unused.get(0);
76+
reportIssue(firstUnused, "Remove this unused method parameter \"" + firstUnused.name() + "\".", locations, null);
7077
}
7178
}
7279
}

java-checks/src/test/files/checks/UnusedMethodParameterCheck.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
class A extends B{
2-
void doSomething(int a, int b) { // Noncompliant {{Remove the unused method parameter(s) "b".}}
2+
void doSomething(int a, int b) { // Noncompliant {{Remove this unused method parameter "b".}} [[sc=31;ec=32]]
33
compute(a);
44
}
55

@@ -34,7 +34,7 @@ void foo(int a) {
3434
}
3535

3636
class D extends C {
37-
void foo(int b, int a) { // Noncompliant
37+
void foo(int b, int a) { // Noncompliant {{Remove this unused method parameter "b".}} [[sc=16;ec=17;secondary=37]]
3838
System.out.println("");
3939
}
4040
}
@@ -89,6 +89,11 @@ private baz(int arg) { // Noncompliant
8989
//no-op
9090
}
9191

92+
// Noncompliant@+1
93+
private qiz(int arg1, int arg2) {
94+
95+
}
96+
9297
public Supplier<String> parameterNotUsed(final Object o) {
9398
return o::toString;
9499
}

0 commit comments

Comments
 (0)