(doc) Throw more descriptive NPEx (#95)

diff --git a/src/main/java/org/apache/maven/shared/utils/io/DirectoryScanner.java b/src/main/java/org/apache/maven/shared/utils/io/DirectoryScanner.java
index bd8bd7d..8f92fd2 100644
--- a/src/main/java/org/apache/maven/shared/utils/io/DirectoryScanner.java
+++ b/src/main/java/org/apache/maven/shared/utils/io/DirectoryScanner.java
@@ -321,6 +321,10 @@
             this.includes = new String[includes.length];
             for ( int i = 0; i < includes.length; i++ )
             {
+                if ( includes[i] == null )
+                {
+                    throw new NullPointerException( messageForNullListElement( "includes" ) );
+                }
                 String pattern;
                 pattern = includes[i].trim().replace( '/', File.separatorChar ).replace( '\\', File.separatorChar );
                 if ( pattern.endsWith( File.separator ) )
@@ -353,6 +357,10 @@
             this.excludes = new String[excludes.length];
             for ( int i = 0; i < excludes.length; i++ )
             {
+                if ( excludes[i] == null )
+                {
+                    throw new NullPointerException( messageForNullListElement( "excludes" ) );
+                }
                 String pattern;
                 pattern = excludes[i].trim().replace( '/', File.separatorChar ).replace( '\\', File.separatorChar );
                 if ( pattern.endsWith( File.separator ) )
@@ -364,6 +372,11 @@
         }
     }
 
+    private static String messageForNullListElement( String listName )
+    {
+        return "If a non-null " + listName + " list is given, all elements must be non-null";
+    }
+
     /**
      * @param scanConductor {@link #scanConductor}
      */
diff --git a/src/test/java/org/apache/maven/shared/utils/io/DirectoryScannerTest.java b/src/test/java/org/apache/maven/shared/utils/io/DirectoryScannerTest.java
index 0111006..9dffdad 100644
--- a/src/test/java/org/apache/maven/shared/utils/io/DirectoryScannerTest.java
+++ b/src/test/java/org/apache/maven/shared/utils/io/DirectoryScannerTest.java
@@ -25,6 +25,7 @@
 import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.ExpectedException;
 import org.junit.rules.TemporaryFolder;
 
 import java.io.File;
@@ -128,6 +129,41 @@
                 /* expExclDirs     */ NONE );
     }
 
+    @Rule
+    public ExpectedException xcludesNPExRule = ExpectedException.none();
+
+    @Test
+    public void testIncludesWithNull()
+        throws Exception
+    {
+        testXcludesWithNull( new String[]{ null }, null, "includes" );
+    }
+
+    @Test
+    public void testExcludesWithNull()
+        throws Exception
+    {
+        testXcludesWithNull( null, new String[]{ null }, "excludes" );
+    }
+
+    private void testXcludesWithNull( String[] includes, String[] excludes, String listName )
+        throws Exception
+    {
+        createTestData();
+        xcludesNPExRule.expect( NullPointerException.class );
+        xcludesNPExRule.expectMessage( "If a non-null " + listName + " list is given, all elements must be non-null" );
+
+        fitScanTest( true, true, true,
+                /* includes        */ includes,
+                /* excludes        */ excludes,
+                /* expInclFiles    */ new String[]{ "file3.dat", "folder1/file5.dat" },
+                /* expInclDirs     */ NONE,
+                /* expNotInclFiles */ new String[]{ "file1.txt", "file2.txt", "folder1/file4.txt" },
+                /* expNotInclDirs  */ new String[]{ "", "folder1" },
+                /* expExclFiles    */ NONE,
+                /* expExclDirs     */ NONE );
+    }
+
     @Test
     public void checkSymlinkBehaviour()
     {