From 1153ea1fd67efb9715b080b7d8417700637601fe Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 26 Jan 2017 17:15:29 +0100 Subject: [PATCH] restore JDK jars in groovyc's classpath, suppress loading "java." classes in the loader (IDEA-166169) some JDK jars (e.g. tools.jar) are not in the default classpath and so compilation might fail if they're used --- .../src/org/jetbrains/jps/ProjectPaths.java | 5 ----- .../groovy/JointCompilationClassLoader.java | 11 ++++++++++- .../jps/incremental/groovy/JpsGroovycRunner.java | 14 ++------------ 3 files changed, 12 insertions(+), 18 deletions(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/ProjectPaths.java b/jps/jps-builders/src/org/jetbrains/jps/ProjectPaths.java index 43eceb22bd0c..8ff69c0646d7 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/ProjectPaths.java +++ b/jps/jps-builders/src/org/jetbrains/jps/ProjectPaths.java @@ -51,11 +51,6 @@ public class ProjectPaths { return getClasspathFiles(chunk, JpsJavaClasspathKind.compile(chunk.containsTests()), excludeMainModuleOutput, ClasspathPart.BEFORE_PLUS_JDK, true); } - @NotNull - public static Collection getRuntimeBootClasspath(@NotNull ModuleChunk chunk) { - return getClasspathFiles(chunk, JpsJavaClasspathKind.compile(chunk.containsTests()), false, ClasspathPart.BEFORE_JDK, false); - } - @NotNull public static Collection getCompilationClasspath(ModuleChunk chunk, boolean excludeMainModuleOutput) { return getClasspathFiles(chunk, JpsJavaClasspathKind.compile(chunk.containsTests()), excludeMainModuleOutput, ClasspathPart.AFTER_JDK, true); diff --git a/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/JointCompilationClassLoader.java b/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/JointCompilationClassLoader.java index 8ded22a10c9d..8abb9cf5253f 100644 --- a/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/JointCompilationClassLoader.java +++ b/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/JointCompilationClassLoader.java @@ -15,6 +15,7 @@ */ package org.jetbrains.jps.incremental.groovy; +import com.intellij.util.SystemProperties; import com.intellij.util.lang.ClassPath; import com.intellij.util.lang.UrlClassLoader; import org.jetbrains.annotations.NotNull; @@ -23,15 +24,23 @@ import org.jetbrains.annotations.NotNull; * @author peter */ class JointCompilationClassLoader extends UrlClassLoader { + private static final boolean ourExplicitlyAvoidLoadingJava = SystemProperties.getBooleanProperty("groovy.classloader.skip.java.package", true); @NotNull private final Builder myBuilder; @NotNull private ClassPath myClassPath; - + public JointCompilationClassLoader(@NotNull Builder builder) { super(builder); myBuilder = builder; myClassPath = super.getClassPath(); } + @Override + protected Class findClass(String name) throws ClassNotFoundException { + if (ourExplicitlyAvoidLoadingJava && name.startsWith("java.")) return null; + + return super.findClass(name); + } + @Override protected Class _defineClass(String name, byte[] b) { try { diff --git a/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/JpsGroovycRunner.java b/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/JpsGroovycRunner.java index bc76c68268e7..8cc03b0ef4da 100644 --- a/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/JpsGroovycRunner.java +++ b/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/JpsGroovycRunner.java @@ -23,7 +23,6 @@ import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; -import com.intellij.util.SystemProperties; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.MultiMap; import org.jetbrains.annotations.NotNull; @@ -389,11 +388,8 @@ public abstract class JpsGroovycRunner cp, Collection files) { - for (File file : files) { - cp.add(FileUtil.toCanonicalPath(file.getPath())); - } - } - private Map buildClassToSourceMap(ModuleChunk chunk, CompileContext context, Set toCompilePaths, Map finalOutputs) throws IOException { final Map class2Src = new HashMap(); JpsJavaCompilerConfiguration configuration = JpsJavaExtensionService.getInstance().getOrCreateCompilerConfiguration(