Skip to content

Commit 65c0a5c

Browse files
committed
SONARJAVA-1209 Do not raise issues when inizializer type is unknown
1 parent f0821a4 commit 65c0a5c

3 files changed

Lines changed: 15 additions & 3 deletions

File tree

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,8 @@ static boolean isMutable(@Nullable ExpressionTree initializer, Type type) {
168168
}
169169

170170
private static boolean isAcceptedTypeOrUnmodifiableMethodCall(MethodInvocationTree mit) {
171-
return isAcceptedType(mit.symbolType(), ACCEPTED_TYPES) || UNMODIFIABLE_METHOD_CALLS.anyMatch(mit);
171+
Type type = mit.symbolType();
172+
return type.isUnknown() || isAcceptedType(type, ACCEPTED_TYPES) || UNMODIFIABLE_METHOD_CALLS.anyMatch(mit);
172173
}
173174

174175
private static boolean isAcceptedType(Type type, Set<String> accepted) {

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.util.List;
1414
import java.util.Map;
1515
import java.util.Set;
16+
import java.util.EnumSet;
1617

1718
public class A {
1819
public static String [] strings1 = {"first","second"}; // Noncompliant {{Make this member "protected".}}
@@ -80,10 +81,21 @@ public class A {
8081
public static final Map<String, String> immutableMapApache = org.apache.commons.collections4.map.UnmodifiableMap.unmodifiableMap(new HashMap<String, String>());
8182

8283
public static final List noInitializer;
83-
public static final List unknown = foo(); // Noncompliant
84+
// we don't know the type of foo
85+
public static final List unknown = foo();
8486

8587
public static List emptyList = Arrays.asList();
8688
public void changeEmptyList() {
8789
emptyList = new ArrayList(); // Noncompliant {{Make member "emptyList" "protected".}}
8890
}
91+
92+
enum E {
93+
A, B, C
94+
}
95+
// FALSE negative: no issues raised when initializer type is unknown
96+
// in this case Collections.unmodifiableSet(EnumSet.of is unknown because of generics
97+
public static final Set<E> set = Collections.unmodifiableSet(EnumSet.of(
98+
E.A,
99+
E.C
100+
));
89101
}

java-checks/src/test/java/org/sonar/java/checks/PublicStaticMutableMembersCheckTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,3 @@ public void test() {
3030
}
3131

3232
}
33-

0 commit comments

Comments
 (0)