Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Herrmann2017-10-10 13:13:55 +0000
committerStephan Herrmann2017-10-10 19:44:25 +0000
commitb273229012adce2930c3653a12ec1af11e4e9895 (patch)
tree9b21ac6fdb896a2fb2dc799912ca65f3b5101339
parent30089883a917eade20b36479b5c83c148ec35e5a (diff)
downloadeclipse.jdt.core-b273229012adce2930c3653a12ec1af11e4e9895.tar.gz
eclipse.jdt.core-b273229012adce2930c3653a12ec1af11e4e9895.tar.xz
eclipse.jdt.core-b273229012adce2930c3653a12ec1af11e4e9895.zip
Bug 525522: [9] NullPointerException when compiling java9 projectI20171011-0305I20171010-2000
-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 df82c75ff8..a985e3242f 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
@@ -5933,6 +5933,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 b6a283bff0..9b0f03a0d9 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
@@ -447,6 +447,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