import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import java.awt.Point; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.Hashtable; import java.util.List; import java.util.Map; import java.util.Set; import java.util.EnumSet; public class A { public static String [] strings1 = {"first","second"}; // Noncompliant [[sc=27;ec=35]] {{Make this member "protected".}} public static String [] strings2 = {"first","second"}; // Noncompliant protected static final String [] strings3 = {"first","second"}; private static String [] strings4 = {"first","second"}; private String [] strings5 = {"first","second"}; public static Date beginning; // Noncompliant public static java.awt.Point point; // Noncompliant public static final Integer integer = 5; public static final Hashtable h = new Hashtable(); // Noncompliant public static final Map h2 = new Hashtable(); // Noncompliant public static final int[] data = new int[5]; // Noncompliant public static final int[] data_unknown_size = new int[getDim()]; // Noncompliant public static int getDim() { return 42; } public static final int[] EMPTY_DATA_1 = new int[0]; // Compliant public static final int[] EMPTY_DATA_2 = {}; // Compliant public static final int[] EMPTY_DATA_3 = new int[]{}; // Compliant public static final int[] NON_EMPTY_DATA_1 = new int[]{ 0 }; // Noncompliant - dim 1 array public static final int[][] NON_EMPTY_DATA_2 = {new int[0], {}}; // Noncompliant - you can still modify sub array public static int[] data2 = new int[5]; // Noncompliant public static Point p = new Point(); // Noncompliant public static final List EMPTY_LIST = Arrays.asList(); public static final List LIST = Arrays.asList("a"); // Noncompliant public static final List PROPER_LIST = Collections.unmodifiableList(Arrays.asList("a")); public static final List EMPTY_ARRAY_LIST = new ArrayList(Arrays.asList()); // Noncompliant public static final List ARRAY_LIST = new ArrayList(Arrays.asList("a")); // Noncompliant public static final Set SET = new HashSet(Arrays.asList("a")); // Noncompliant public static final Set PROPER_SET = Collections.unmodifiableSet(new HashSet(Arrays.asList("a"))); public static final Map MAP = new HashMap(); // Noncompliant static { MAP.put("a", "b"); MAP.put("c", "d"); } public static final Map MAP_ANONYMOUS = new HashMap() {{ // Noncompliant put("a", "b"); put("c", "d"); }}; public static final Map PROPER_MAP_ANONYMOUS = Collections.unmodifiableMap(new HashMap() {{ put("a", "b"); put("c", "d"); }}); // guava public static final List<String> immutableList = ImmutableList.of("a"); public static final Set<String> immutableSet = ImmutableSet.of("a"); public static final Map<String, String> immutableMap = ImmutableMap.of("a", "a"); // apache commons collections 4.x public static final List<String> immutableListApacheNew = new org.apache.commons.collections4.list.UnmodifiableList(new ArrayList<>()); public static final List<String> immutableListApache = org.apache.commons.collections4.list.UnmodifiableList.unmodifiableList(new ArrayList<String>()); public static final Set<String> immutableSetApache = org.apache.commons.collections4.set.UnmodifiableSet.unmodifiableSet(new HashSet<String>()); public static final Map<String, String> immutableMapApache = org.apache.commons.collections4.map.UnmodifiableMap.unmodifiableMap(new HashMap<String, String>()); public static final List noInitializer; // we don't know the type of foo public static final List unknown = foo(); public static List emptyList = Arrays.asList(); public static List otherEmptyList = Arrays.asList(); public void changeEmptyList() { emptyList = new ArrayList(); // Noncompliant {{Make member "emptyList" "protected".}} A.otherEmptyList = new ArrayList(); // Noncompliant {{Make member "otherEmptyList" "protected".}} } enum E { A, B, C } // FALSE negative: no issues raised when initializer type is unknown // in this case Collections.unmodifiableSet(EnumSet.of is unknown because of generics public static final Set<E> set = Collections.unmodifiableSet(EnumSet.of( E.A, E.C )); } interface I { public static String[] MY_ARRAY = null; // Noncompliant {{Move "MY_ARRAY" to a class and lower its visibility}} public static Collection<String> MY_COLLECTION = null; // Noncompliant {{Move "MY_COLLECTION" to a class and lower its visibility}} public static Collection MY_2ND_COLLECTION = null; // Noncompliant {{Move "MY_2ND_COLLECTION" to a class and lower its visibility}} public static List<String> MY_LIST = null; // Noncompliant {{Move "MY_LIST" to a class and lower its visibility}} public static List MY_2ND_LIST = null; // Noncompliant {{Move "MY_2ND_LIST" to a class and lower its visibility}} public static Date MY_DATE = null; // Noncompliant {{Move "MY_DATE" to a class and lower its visibility}} public static int MY_INT = 0; // Compliant public static B<String> MY_PARAMETRIC_TYPE = null; // Compliant public static C MY_FIELD = null; // Compliant public Collection<String> myCollection = null; // Noncompliant public Collection my2ndCollection = null; // Noncompliant public List<String> myList = null; // Noncompliant public List my2ndList = null; // Noncompliant public Date myDate = null; // Noncompliant public int myInt = 0; // Compliant public B<String> myParametricType = null; // Compliant public C myField = null; // Compliant public void doSomething(); // not a field public static MyImmutableCollection<String> immutableList2; //Compliant : immutable collection public static Point p = new Point(); // Noncompliant // guava public static final List<String> immutableList3 = ImmutableList.of("a"); public static final Set<String> immutableSet2 = ImmutableSet.of("a"); public static final Map<String, String> immutableMap2 = ImmutableMap.of("a", "a"); // apache commons collections 4.x public static final List<String> immutableListApacheNew = new org.apache.commons.collections4.list.UnmodifiableList(new ArrayList<>()); public static final List<String> immutableListApache = org.apache.commons.collections4.list.UnmodifiableList.unmodifiableList(new ArrayList<String>()); public static final Set<String> immutableSetApache = org.apache.commons.collections4.set.UnmodifiableSet.unmodifiableSet(new HashSet<String>()); public static final Map<String, String> immutableMapApache = org.apache.commons.collections4.map.UnmodifiableMap.unmodifiableMap(new HashMap<String, String>()); public static final Set PROPER_SET = Collections.unmodifiableSet(new HashSet(Arrays.asList("a"))); public static final List EMPTY_LIST = Arrays.asList(); } class B<T> { } class C { } class MyImmutableCollection extends com.google.common.collect.ImmutableCollection {}