mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
don't use joint groovy compilation when there are files excluded from stub generation in that module (IDEA-137381)
This commit is contained in:
+2
-1
@@ -18,6 +18,7 @@ package org.jetbrains.jps.incremental.groovy;
|
||||
import com.intellij.openapi.application.PathManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
@@ -109,7 +110,7 @@ public class GreclipseBuilder extends ModuleLevelBuilder {
|
||||
if (!useGreclipse(context)) return ModuleLevelBuilder.ExitCode.NOTHING_DONE;
|
||||
|
||||
try {
|
||||
final List<File> toCompile = GroovyBuilder.collectChangedFiles(context, dirtyFilesHolder, false, true);
|
||||
final List<File> toCompile = GroovyBuilder.collectChangedFiles(context, dirtyFilesHolder, false, true, Ref.create(false));
|
||||
if (toCompile.isEmpty()) {
|
||||
return ExitCode.NOTHING_DONE;
|
||||
}
|
||||
|
||||
+7
-5
@@ -94,7 +94,8 @@ public class GroovyBuilder extends ModuleLevelBuilder {
|
||||
try {
|
||||
JpsGroovySettings settings = JpsGroovySettings.getSettings(context.getProjectDescriptor().getProject());
|
||||
|
||||
final List<File> toCompile = collectChangedFiles(context, dirtyFilesHolder, myForStubs, false);
|
||||
Ref<Boolean> hasStubExcludes = Ref.create(false);
|
||||
final List<File> toCompile = collectChangedFiles(context, dirtyFilesHolder, myForStubs, false, hasStubExcludes);
|
||||
if (toCompile.isEmpty()) {
|
||||
return hasFilesToCompileForNextRound(context) ? ExitCode.ADDITIONAL_PASS_REQUIRED : ExitCode.NOTHING_DONE;
|
||||
}
|
||||
@@ -112,7 +113,7 @@ public class GroovyBuilder extends ModuleLevelBuilder {
|
||||
Map<ModuleBuildTarget, String> generationOutputs = myForStubs ? getStubGenerationOutputs(chunk, context) : finalOutputs;
|
||||
String compilerOutput = generationOutputs.get(chunk.representativeTarget());
|
||||
|
||||
GroovycOutputParser parser = runGroovycOrContinuation(context, chunk, settings, finalOutputs, compilerOutput, toCompile);
|
||||
GroovycOutputParser parser = runGroovycOrContinuation(context, chunk, settings, finalOutputs, compilerOutput, toCompile, hasStubExcludes.get());
|
||||
|
||||
Map<ModuleBuildTarget, Collection<GroovycOutputParser.OutputItem>>
|
||||
compiled = processCompiledFiles(context, chunk, generationOutputs, compilerOutput, parser.getSuccessfullyCompiled());
|
||||
@@ -154,7 +155,7 @@ public class GroovyBuilder extends ModuleLevelBuilder {
|
||||
ModuleChunk chunk,
|
||||
JpsGroovySettings settings,
|
||||
Map<ModuleBuildTarget, String> finalOutputs,
|
||||
String compilerOutput, List<File> toCompile) throws Exception {
|
||||
String compilerOutput, List<File> toCompile, boolean hasStubExcludes) throws Exception {
|
||||
GroovycContinuation continuation = takeContinuation(context, chunk);
|
||||
if (continuation != null) {
|
||||
if (Utils.IS_TEST_MODE || LOG.isDebugEnabled()) {
|
||||
@@ -192,7 +193,7 @@ public class GroovyBuilder extends ModuleLevelBuilder {
|
||||
optimizeClassLoading ? StringUtil.join(classpath, File.pathSeparator) : ""
|
||||
);
|
||||
GroovycFlavor groovyc =
|
||||
inProcess ? new InProcessGroovyc(finalOutputs.values()) : new ForkedGroovyc(optimizeClassLoading, chunk);
|
||||
inProcess ? new InProcessGroovyc(finalOutputs.values(), hasStubExcludes) : new ForkedGroovyc(optimizeClassLoading, chunk);
|
||||
|
||||
GroovycOutputParser parser = new GroovycOutputParser(chunk, context);
|
||||
|
||||
@@ -402,7 +403,7 @@ public class GroovyBuilder extends ModuleLevelBuilder {
|
||||
|
||||
static List<File> collectChangedFiles(CompileContext context,
|
||||
DirtyFilesHolder<JavaSourceRootDescriptor, ModuleBuildTarget> dirtyFilesHolder,
|
||||
final boolean forStubs, final boolean forEclipse)
|
||||
final boolean forStubs, final boolean forEclipse, final Ref<Boolean> hasExcludes)
|
||||
throws IOException {
|
||||
|
||||
final JpsJavaCompilerConfiguration configuration =
|
||||
@@ -419,6 +420,7 @@ public class GroovyBuilder extends ModuleLevelBuilder {
|
||||
if ((isGroovyFile(path) || forEclipse && path.endsWith(".java")) &&
|
||||
!configuration.isResourceFile(file, sourceRoot.root)) {
|
||||
if (forStubs && settings.isExcludedFromStubGeneration(file)) {
|
||||
hasExcludes.set(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
+5
-2
@@ -54,9 +54,11 @@ class InProcessGroovyc implements GroovycFlavor {
|
||||
private static SoftReference<Pair<String, ClassLoader>> ourParentLoaderCache;
|
||||
private static final UrlClassLoader.CachePool ourLoaderCachePool = UrlClassLoader.createCachePool();
|
||||
private final Collection<String> myOutputs;
|
||||
private final boolean myHasStubExcludes;
|
||||
|
||||
InProcessGroovyc(Collection<String> outputs) {
|
||||
InProcessGroovyc(Collection<String> outputs, boolean hasStubExcludes) {
|
||||
myOutputs = outputs;
|
||||
myHasStubExcludes = hasStubExcludes;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -65,7 +67,8 @@ class InProcessGroovyc implements GroovycFlavor {
|
||||
final JpsGroovySettings settings,
|
||||
final File tempFile,
|
||||
final GroovycOutputParser parser) throws Exception {
|
||||
final LinkedBlockingQueue<String> mailbox = forStubs && SystemProperties.getBooleanProperty("groovyc.joint.compilation", true)
|
||||
boolean jointPossible = forStubs && !myHasStubExcludes;
|
||||
final LinkedBlockingQueue<String> mailbox = jointPossible && SystemProperties.getBooleanProperty("groovyc.joint.compilation", true)
|
||||
? new LinkedBlockingQueue<String>() : null;
|
||||
|
||||
final JointCompilationClassLoader loader = createCompilationClassLoader(compilationClassPath);
|
||||
|
||||
+13
-1
@@ -693,8 +693,20 @@ public class Main {
|
||||
shouldFail { rebuild() }
|
||||
}
|
||||
|
||||
public void "test compile groovy excluded from stub generation"() {
|
||||
def foo = myFixture.addFileToProject('Foo.groovy', 'class Foo {}')
|
||||
myFixture.addFileToProject 'Bar.groovy', 'class Bar extends Foo {}'
|
||||
|
||||
excludeFromCompilation(GroovyCompilerConfiguration.getInstance(project).excludeFromStubGeneration, foo)
|
||||
|
||||
assertEmpty make()
|
||||
}
|
||||
|
||||
private void excludeFromCompilation(PsiFile foo) {
|
||||
final ExcludesConfiguration configuration = CompilerConfiguration.getInstance(project).getExcludedEntriesConfiguration()
|
||||
excludeFromCompilation(CompilerConfiguration.getInstance(project).getExcludedEntriesConfiguration(), foo)
|
||||
}
|
||||
|
||||
private excludeFromCompilation(ExcludesConfiguration configuration, PsiFile foo) {
|
||||
configuration.addExcludeEntryDescription(new ExcludeEntryDescription(foo.virtualFile, false, true, testRootDisposable))
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user