From 5f0f17291c75df35c38e7ca5862e5ad9dde9c88a Mon Sep 17 00:00:00 2001 From: fmallet Date: Mon, 15 Nov 2010 10:56:43 +0000 Subject: [PATCH] fix SONAR-1978 : The Squid "Unused private method" doesn't report a violation at correct line with generic methods --- .../signature/ParameterSignatureScanner.java | 3 ++- .../check/UnusedPrivateMethodCheckTest.java | 9 +++++++++ .../signature/MethodSignatureScannerTest.java | 13 ++++++++++++ .../ParameterSignatureScannerTest.java | 19 ++++++++++++++++++ .../bin/UnusedGenericPrivateMethod.class | Bin 0 -> 673 bytes .../src/UnusedGenericPrivateMethod.java | 9 +++++++++ 6 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 plugins/sonar-squid-java-plugin/test-resources/bytecode/unusedPrivateMethod/bin/UnusedGenericPrivateMethod.class create mode 100644 plugins/sonar-squid-java-plugin/test-resources/bytecode/unusedPrivateMethod/src/UnusedGenericPrivateMethod.java diff --git a/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/signature/ParameterSignatureScanner.java b/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/signature/ParameterSignatureScanner.java index 1dabfc2f246..a807db9bec7 100644 --- a/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/signature/ParameterSignatureScanner.java +++ b/plugins/sonar-squid-java-plugin/src/main/java/org/sonar/java/signature/ParameterSignatureScanner.java @@ -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); diff --git a/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/bytecode/check/UnusedPrivateMethodCheckTest.java b/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/bytecode/check/UnusedPrivateMethodCheckTest.java index 1f28790a0c1..6b7aae7d1e1 100644 --- a/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/bytecode/check/UnusedPrivateMethodCheckTest.java +++ b/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/bytecode/check/UnusedPrivateMethodCheckTest.java @@ -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() { diff --git a/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/signature/MethodSignatureScannerTest.java b/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/signature/MethodSignatureScannerTest.java index 65cbef7c6d3..87e214f17aa 100644 --- a/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/signature/MethodSignatureScannerTest.java +++ b/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/signature/MethodSignatureScannerTest.java @@ -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;)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")); + } } diff --git a/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/signature/ParameterSignatureScannerTest.java b/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/signature/ParameterSignatureScannerTest.java index 1e4935ae2bd..c335a155d6f 100644 --- a/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/signature/ParameterSignatureScannerTest.java +++ b/plugins/sonar-squid-java-plugin/src/test/java/org/sonar/java/signature/ParameterSignatureScannerTest.java @@ -100,6 +100,25 @@ public class ParameterSignatureScannerTest { assertThat(param1.isOject(), is(false)); assertThat(param1.getJvmJavaType(), is(JvmJavaType.B)); } + + + @Test + public void testScanSeveralArgumentsWithGeneric() { + List params = ParameterSignatureScanner.scanArguments("Ljava/lang/String;Ljava/util/List;[Ljava/util/Vector;Ljava/util/ArrayList;"); + 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 index 0000000000000000000000000000000000000000..04c839d251408eea1c87e77841cdd54b5e4e96bf GIT binary patch literal 673 zcmah{%T59@6g}nrQV|7}n5c;+=tAPsK-ie*W_$%@Uxo%s#*Qf+5l#k22oQ zpeRV3MSJh*J!j6n?fb{;8-Np3bBJRjjmTpl?xQ!SNYR-_4dEMixUvC>NRlgA-fstO_kt5Tvp7KBV*2o-*A?NzaaPq9lPH|R* zq4L}P)8khM`!lu8dG!{xkZsGp;wI2EiPQgW|EXeI$+i7JyW(8hk?t&>+Oh4ifCQ2Z z)x~Ah>vR~`-Jx&|_7J1{wO containers) { + } +} -- 2.39.5