diff --git a/its/ruling/src/test/resources/guava/java-S1452.json b/its/ruling/src/test/resources/guava/java-S1452.json index e521db15313..3f1c52144e5 100644 --- a/its/ruling/src/test/resources/guava/java-S1452.json +++ b/its/ruling/src/test/resources/guava/java-S1452.json @@ -1,8 +1,4 @@ { -"com.google.guava:guava:src/com/google/common/base/Enums.java": [ -100, -100 -], "com.google.guava:guava:src/com/google/common/cache/CacheBuilder.java": [ 767 ], @@ -16,18 +12,11 @@ 513 ], "com.google.guava:guava:src/com/google/common/collect/Maps.java": [ -106, -111, -649, -2131, -2135 +649 ], "com.google.guava:guava:src/com/google/common/collect/MinMaxPriorityQueue.java": [ 903 ], -"com.google.guava:guava:src/com/google/common/collect/Ordering.java": [ -413 -], "com.google.guava:guava:src/com/google/common/collect/RegularImmutableAsList.java": [ 49 ], @@ -47,16 +36,12 @@ "com.google.guava:guava:src/com/google/common/collect/TreeMultimap.java": [ 156 ], -"com.google.guava:guava:src/com/google/common/hash/Funnels.java": [ -169 -], "com.google.guava:guava:src/com/google/common/reflect/Element.java": [ 48 ], "com.google.guava:guava:src/com/google/common/reflect/Invokable.java": [ 67, -108, -129 +108 ], "com.google.guava:guava:src/com/google/common/reflect/Parameter.java": [ 56, @@ -67,7 +52,6 @@ 157, 238, 275, -315, 364, 387, 562, diff --git a/its/ruling/src/test/resources/sonar-server/java-S1452.json b/its/ruling/src/test/resources/sonar-server/java-S1452.json index b7b9b0ed50a..bff730ba8a2 100644 --- a/its/ruling/src/test/resources/sonar-server/java-S1452.json +++ b/its/ruling/src/test/resources/sonar-server/java-S1452.json @@ -1,8 +1,5 @@ { "org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/qualitygate/EvaluationResult.java": [ 46 -], -"org.sonarsource.sonarqube:sonar-server:src/main/java/org/sonar/server/computation/task/projectanalysis/step/NewCoverageMeasuresStep.java": [ -131 ] } diff --git a/java-checks-test-sources/default/src/main/java/checks/WildCardReturnParameterNestedTypeSample.java b/java-checks-test-sources/default/src/main/java/checks/WildCardReturnParameterNestedTypeSample.java new file mode 100644 index 00000000000..20f3a2b552b --- /dev/null +++ b/java-checks-test-sources/default/src/main/java/checks/WildCardReturnParameterNestedTypeSample.java @@ -0,0 +1,34 @@ +package checks; + +import java.util.List; +import java.util.ArrayList; + +public class WildCardReturnParameterNestedTypeSample { + void bar() { + foo(listOfLists()); + } + + void foo(List> listList) { + + } + + List> listOfLists() { + return new ArrayList<>(); + } + + private static class A { + } + + private static class B extends A { + } + + static class Entry { + } + + @SuppressWarnings("unchecked") + static Function, K> keyFunction() { + throw new UnsupportedOperationException(); + } +} + + diff --git a/java-checks-test-sources/default/src/main/java/checks/WildcardReturnParameterTypeCheck.java b/java-checks-test-sources/default/src/main/java/checks/WildcardReturnParameterTypeCheck.java index 1971302488b..ae8404c9fef 100644 --- a/java-checks-test-sources/default/src/main/java/checks/WildcardReturnParameterTypeCheck.java +++ b/java-checks-test-sources/default/src/main/java/checks/WildcardReturnParameterTypeCheck.java @@ -34,7 +34,7 @@ public List> getListOfClass() { // Compliant Class is ignored return null; } - public Class> getClassofList() { // Noncompliant + public Class> getClassofList() { // Compliant, nested type is ignored return null; } @@ -43,7 +43,7 @@ public List> bar() { // Noncompliant {{Remove usage of g } public List> getSomething() { // Noncompliant + extends List> getSomething() { // Compliant, skip nested wildcard return types return null; } diff --git a/java-checks/src/main/java/org/sonar/java/checks/WildcardReturnParameterTypeCheck.java b/java-checks/src/main/java/org/sonar/java/checks/WildcardReturnParameterTypeCheck.java index 386d219876b..82e0cc8b891 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/WildcardReturnParameterTypeCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/WildcardReturnParameterTypeCheck.java @@ -68,7 +68,6 @@ public void visitParameterizedType(ParameterizedTypeTree tree) { } else if (!symbolType.is("java.lang.Class") && !symbolType.isUnknown()) { typeArguments.forEach(this::reportIfWildcard); } - super.visitParameterizedType(tree); } private void reportIfWildcard(Tree tree) { diff --git a/java-checks/src/test/java/org/sonar/java/checks/WildcardReturnParameterTypeCheckTest.java b/java-checks/src/test/java/org/sonar/java/checks/WildcardReturnParameterTypeCheckTest.java index ed8352b471b..69063bc75b0 100644 --- a/java-checks/src/test/java/org/sonar/java/checks/WildcardReturnParameterTypeCheckTest.java +++ b/java-checks/src/test/java/org/sonar/java/checks/WildcardReturnParameterTypeCheckTest.java @@ -39,4 +39,12 @@ void test_non_compiling() { .withCheck(new WildcardReturnParameterTypeCheck()) .verifyNoIssues(); } + + @Test + void test_nested_types() { + CheckVerifier.newVerifier() + .onFile(mainCodeSourcesPath("checks/WildCardReturnParameterNestedTypeSample.java")) + .withCheck(new WildcardReturnParameterTypeCheck()) + .verifyNoIssues(); + } }