Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Herrmann2017-10-10 13:13:55 +0000
committerStephan Herrmann2017-11-07 14:36:25 +0000
commit61e0b5004ce74c3fe43e05009fd3dce1e688331e (patch)
tree28ab0e5fd6810f889d3ddcce9aadcd6da82f2226
parent89d027a32400905e02f236e34d2b8a117e9cb48b (diff)
downloadeclipse.jdt.core-61e0b5004ce74c3fe43e05009fd3dce1e688331e.tar.gz
eclipse.jdt.core-61e0b5004ce74c3fe43e05009fd3dce1e688331e.tar.xz
eclipse.jdt.core-61e0b5004ce74c3fe43e05009fd3dce1e688331e.zip
Bug 525522: [9] NullPointerException when compiling java9 projectM20171108-0500M20171108-0400
-rw-r--r--org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java64
-rw-r--r--org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/NameEnvironment.java5
2 files changed, 69 insertions, 0 deletions
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java
index 99596cc0e9..f1af2d6ebb 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ModuleBuilderTests.java
@@ -5862,6 +5862,70 @@ public class ModuleBuilderTests extends ModifyingResourceTests {
}
}
+ public void testBug525522() throws Exception {
+ if (!isJRE9) return;
+ String save = System.getProperty("modules.to.load");
+ System.setProperty("modules.to.load", "java.base;java.desktop;java.rmi;java.sql;java.jnlp");
+ JRTUtil.reset();
+ ClasspathJrt.resetCaches();
+ try {
+ // non-modular substitute for java.jnlp:
+ IClasspathAttribute[] jreAttribs = { JavaCore.newClasspathAttribute(IClasspathAttribute.LIMIT_MODULES, "java.base,java.desktop,java.rmi,java.sql") };
+ IJavaProject jnlp = createJava9ProjectWithJREAttributes("jnlp", new String[] {"src"}, jreAttribs);
+ createFolder("jnlp/src/javax/jnlp");
+ createFile("jnlp/src/javax/jnlp/UnavailableServiceException.java",
+ "package javax.jnlp;\n" +
+ "@SuppressWarnings(\"serial\")\n" +
+ "public class UnavailableServiceException extends Exception {\n" +
+ "}\n");
+ createFile("jnlp/src/javax/jnlp/ServiceManager.java",
+ "package javax.jnlp;\n" +
+ "public class ServiceManager {\n" +
+ " public static void lookup(String s) throws UnavailableServiceException {}\n" +
+ "}\n");
+
+ // non-modular project consuming the non-modular jnlp, instead of the module from the JRE:
+ IJavaProject p1 = createJava9ProjectWithJREAttributes("nonmod1", new String[] {"src"}, jreAttribs);
+ addClasspathEntry(p1, JavaCore.newProjectEntry(jnlp.getPath()));
+
+ createFolder("nonmod1/src/test");
+ createFile("nonmod1/src/test/Test.java",
+ "package test;\n" +
+ "import javax.jnlp.ServiceManager;\n" +
+ "import javax.jnlp.UnavailableServiceException;\n" +
+ "\n" +
+ "public class Test {\n" +
+ "\n" +
+ " void init() {\n" +
+ " try {\n" +
+ " ServiceManager.lookup(\"\");\n" +
+ " } catch (final UnavailableServiceException e) {\n" +
+ " e.printStackTrace();\n" +
+ " }\n" +
+ "\n" +
+ " }\n" +
+ "}\n");
+ p1.getProject().getWorkspace().build(IncrementalProjectBuilder.FULL_BUILD, null);
+ assertNoErrors();
+
+ this.problemRequestor.reset();
+ ICompilationUnit cu = getCompilationUnit("/nonmod1/src/test/Test.java");
+ cu.getWorkingCopy(this.wcOwner, null);
+ assertProblems(
+ "Unexpected problems",
+ "----------\n" +
+ "----------\n",
+ this.problemRequestor);
+
+ } finally {
+ System.setProperty("modules.to.load", save);
+ JRTUtil.reset();
+ ClasspathJrt.resetCaches();
+ deleteProject("jnlp");
+ deleteProject("nonmod1");
+ }
+ }
+
protected void assertNoErrors() throws CoreException {
for (IProject p : getWorkspace().getRoot().getProjects()) {
int maxSeverity = p.findMaxProblemSeverity(null, true, IResource.DEPTH_INFINITE);
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/NameEnvironment.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/NameEnvironment.java
index fe90c9135d..bcf5f72c6c 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/NameEnvironment.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/NameEnvironment.java
@@ -449,6 +449,11 @@ private NameEnvironmentAnswer findClass(String qualifiedTypeName, char[] typeNam
}
NameEnvironmentAnswer answer = classpathLocation.findClass(binaryFileName, qPackageName, moduleName, qBinaryFileName, false);
if (answer != null) {
+ char[] answerMod = answer.moduleName();
+ if (answerMod != null && this.modulePathEntries != null) {
+ if (!this.modulePathEntries.containsKey(String.valueOf(answerMod)))
+ continue; // assumed to be filtered out by --limit-modules
+ }
if (!answer.ignoreIfBetter()) {
if (answer.isBetter(suggestedAnswer))
return answer;

Back to the top