]> source.dussan.org Git - sonarqube.git/commitdiff
fix SONAR-1978 : The Squid "Unused private method" doesn't report a violation at...
authorfmallet <freddy.mallet@gmail.com>
Mon, 15 Nov 2010 10:56:43 +0000 (10:56 +0000)
committerfmallet <freddy.mallet@gmail.com>
Mon, 15 Nov 2010 10:56:43 +0000 (10:56 +0000)
plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/signature/ParameterSignatureScanner.java
plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/bytecode/check/UnusedPrivateMethodCheckTest.java
plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/signature/MethodSignatureScannerTest.java
plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/signature/ParameterSignatureScannerTest.java
plugins/sonar-squid-java-plugin/test-resources/bytecode/unusedPrivateMethod/bin/UnusedGenericPrivateMethod.class [new file with mode: 0644]
plugins/sonar-squid-java-plugin/test-resources/bytecode/unusedPrivateMethod/src/UnusedGenericPrivateMethod.java [new file with mode: 0644]

index 1dabfc2f2462971f635c2d16675dfd114cedc66b..a807db9bec70b61a1d6ef1c00a8973de31e4c09c 100644 (file)
@@ -83,7 +83,8 @@ public class ParameterSignatureScanner {
 
     if (jvmJavaType == JvmJavaType.L || jvmJavaType == JvmJavaType.T) {
       int semicolonIndex = searchEndOfParameterSignature(signature, index);
-      if (signature.indexOf('<', index) != -1) {
+      int inferiorCharIndex = signature.indexOf('<', index);
+      if (inferiorCharIndex != -1 && inferiorCharIndex < semicolonIndex) {
         classCanonicalName = signature.substring(index, signature.indexOf('<', index));
       } else {
         classCanonicalName = signature.substring(index, semicolonIndex);
index 1f28790a0c1be00a9c7a9828946c0a4ac427dd4a..6b7aae7d1e1d8dcc29dd46da0844013652d79e11 100644 (file)
@@ -53,6 +53,15 @@ public class UnusedPrivateMethodCheckTest {
     assertThat(message.getLine(), is(33));
     assertThat(message.getDefaultMessage(), is("Private method 'unusedPrivateMethod(...)' is never used."));
   }
+  
+  @Test
+  public void testDetectUnusedGenericPrivateMethod() {
+    SourceFile file = (SourceFile) squid.search("UnusedGenericPrivateMethod.java");
+
+    assertThat(file.getCheckMessages().size(), is(1));
+    CheckMessage message = file.getCheckMessages().iterator().next();
+    assertThat(message.getLine(), is(7));
+  }
 
   @Test
   public void testDetectUnusedPrivateConstructor() {
index 65cbef7c6d365a7a675f106eba5250882fff5f48..87e214f17aa3b03d6c4d970a78091c7a353ba1c1 100644 (file)
@@ -52,4 +52,17 @@ public class MethodSignatureScannerTest {
     assertThat(method.getReturnType().isArray(), is(true));
     assertThat(method.getReturnType().getClassName(), is("Vector"));
   }
+  
+  @Test
+  public void scanGenericMethod(){
+    MethodSignature method = MethodSignatureScanner.scan("transactionValidation(Ljava/lang/String;Ljava/util/List<Ljava/lang/String;>;)V");
+
+    Parameter param1 = method.getArgumentTypes().get(0);
+    assertThat(param1.isOject(), is(true));
+    assertThat(param1.getClassName(), is("String"));
+
+    Parameter param2 = method.getArgumentTypes().get(1);
+    assertThat(param2.isOject(), is(true));
+    assertThat(param2.getClassName(), is("List"));
+  }
 }
index 1e4935ae2bd258788e210343c96ef56d40ee2feb..c335a155d6f71f98af232341c8c9e09b6c55113a 100644 (file)
@@ -100,6 +100,25 @@ public class ParameterSignatureScannerTest {
     assertThat(param1.isOject(), is(false));
     assertThat(param1.getJvmJavaType(), is(JvmJavaType.B));
   }
+  
+  
+  @Test
+  public void testScanSeveralArgumentsWithGeneric() {
+    List<Parameter> params = ParameterSignatureScanner.scanArguments("Ljava/lang/String;Ljava/util/List<Ljava/lang/String;>;[Ljava/util/Vector;Ljava/util/ArrayList<Ljava/lang/Integer;>;");
+    assertThat(params.get(0).isOject(), is(true));
+    assertThat(params.get(0).getClassName(), is("String"));
+    
+    assertThat(params.get(1).isOject(), is(true));
+    assertThat(params.get(1).getClassName(), is("List"));
+    
+    assertThat(params.get(2).isOject(), is(true));
+    assertThat(params.get(2).isArray(), is(true));
+    assertThat(params.get(2).getClassName(), is("Vector"));
+    
+    assertThat(params.get(3).isOject(), is(true));
+    assertThat(params.get(3).isArray(), is(false));
+    assertThat(params.get(3).getClassName(), is("ArrayList"));
+  }
 
   @Test
   public void testScanSeveralComplexArguments() {
diff --git a/plugins/sonar-squid-java-plugin/test-resources/bytecode/unusedPrivateMethod/bin/UnusedGenericPrivateMethod.class b/plugins/sonar-squid-java-plugin/test-resources/bytecode/unusedPrivateMethod/bin/UnusedGenericPrivateMethod.class
new file mode 100644 (file)
index 0000000..04c839d
Binary files /dev/null and b/plugins/sonar-squid-java-plugin/test-resources/bytecode/unusedPrivateMethod/bin/UnusedGenericPrivateMethod.class differ
diff --git a/plugins/sonar-squid-java-plugin/test-resources/bytecode/unusedPrivateMethod/src/UnusedGenericPrivateMethod.java b/plugins/sonar-squid-java-plugin/test-resources/bytecode/unusedPrivateMethod/src/UnusedGenericPrivateMethod.java
new file mode 100644 (file)
index 0000000..6af140a
--- /dev/null
@@ -0,0 +1,9 @@
+
+
+import java.util.List;
+
+public class UnusedGenericPrivateMethod {
+
+  private void transactionValidation(String transaction, List<String> containers) {
+  }
+}