Uploaded image for project: 'Commons Collections'
  1. Commons Collections
  2. COLLECTIONS-536

(Code style) map.size() call in MapUtils.putAll()

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Trivial
    • Resolution: Fixed
    • 3.2.1, 4.0
    • 4.1
    • Map
    • Any

    Description

      In class org.apache.commons.collections(4).MapUtils there's a method putAll(final Map<K, V> map, final Object[] array) which starts with

      map.size();  // force NPE
      

      Actually map.size() is not that harmless call for any map. For example, consider java.util.concurrent.ConcurrentHashMap size() implementation: depending on the circumstances it may take even more time than the rest of the putAll method (at least prior to JDK 8). Things are even worse for ConcurrentSkipListMap: its size() method iterates over all the map elements. Thus I'd suggest to replace this call with more conventional check like:

      if(map == null) {
          throw new NullPointerException();
      }
      

      If you still want to save bytes, you may use map.getClass(). It's final, so it will never be overridden to do something strange and it's even used by JavaC for the same purpose (to trigger NPE). For example, if you compile and disassemble this code:

      public class Outer {
          public class Inner {}
          public void test(Outer n) { n.new Inner(); }
      }
      

      You will see a getClass() call which is used to trigger NPE.

      Attachments

        Activity

          People

            Unassigned Unassigned
            lany Tagir Valeev
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: