Bug 506423 - [1.9] NPE in SelectionEngine.select on hover over "module"

Change-Id: I5f817bac05d992d0b03c70111507015ed9e0f11e
Signed-off-by: Jay Arthanareeswaran <jarthana@in.ibm.com>
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/Java9ElementTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/Java9ElementTests.java
index 4896c5e..671a438 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/Java9ElementTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/Java9ElementTests.java
@@ -28,7 +28,7 @@
 public class Java9ElementTests extends AbstractJavaModelTests { 
 
 	static {
-//		TESTS_NAMES = new String[] {"test009"};
+//		TESTS_NAMES = new String[] {"test010"};
 	}
 
 	public Java9ElementTests(String name) {
@@ -315,4 +315,25 @@
 			deleteProject("Java9Elements");
 		}	
 	}
+	public void test010() throws Exception {
+		try {
+			IJavaProject project = createJavaProject("Java9Elements", new String[] {"src"}, new String[] {"JCL18_LIB"}, "bin", "1.9");
+			project.open(null);
+			String fileContent =  "// A very simple module"
+					+ "module my.mod {\n" +
+					"	exports p.q.r;" +
+					"}";
+			createFolder("/Java9Elements/src/p/q/r");
+			createFile("/Java9Elements/src/module-info.java",	fileContent);
+			int start = fileContent.lastIndexOf("module");
+
+			ICompilationUnit unit = getCompilationUnit("/Java9Elements/src/module-info.java");
+
+			IJavaElement[] elements = unit.codeSelect(start, "module".length());
+			assertEquals("Incorrect no of elements", 0, elements.length);
+		}
+		finally {
+			deleteProject("Java9Elements");
+		}
+	}
 }
diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/SelectionEngine.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/SelectionEngine.java
index 179c57f..7c1df73 100644
--- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/SelectionEngine.java
+++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/SelectionEngine.java
@@ -964,7 +964,8 @@
 						}
 					}
 				}
-				if (parsedUnit.isModuleInfo()) {
+				if (parsedUnit.isModuleInfo() && parsedUnit.types != null &&
+						parsedUnit.types.length > 0) {
 					ModuleDeclaration module = (ModuleDeclaration) parsedUnit.types[0];//TODO, could be null
 					ExportReference[] exports = module.exports;
 					if (exports != null) {