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) {