mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-170487 Resource validation in groovy should stop processing dependent module if errors are found
plus cleanup
This commit is contained in:
+1
-1
@@ -117,7 +117,7 @@ public class GreclipseBuilder extends ModuleLevelBuilder {
|
||||
if (!useGreclipse(context)) return ModuleLevelBuilder.ExitCode.NOTHING_DONE;
|
||||
|
||||
try {
|
||||
final List<File> toCompile = myHelper.collectChangedFiles(context, dirtyFilesHolder, false, true, Ref.create(false));
|
||||
List<File> toCompile = myHelper.collectChangedFiles(context, dirtyFilesHolder, false, Ref.create(false));
|
||||
if (toCompile.isEmpty()) {
|
||||
return ExitCode.NOTHING_DONE;
|
||||
}
|
||||
|
||||
-1
@@ -21,7 +21,6 @@ import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
+14
-9
@@ -23,6 +23,7 @@ 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.ObjectUtils;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.MultiMap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -36,11 +37,8 @@ import org.jetbrains.jps.builders.FileProcessor;
|
||||
import org.jetbrains.jps.builders.java.JavaBuilderUtil;
|
||||
import org.jetbrains.jps.builders.java.dependencyView.Callbacks;
|
||||
import org.jetbrains.jps.builders.storage.SourceToOutputMapping;
|
||||
import org.jetbrains.jps.incremental.Builder;
|
||||
import org.jetbrains.jps.incremental.CompileContext;
|
||||
import org.jetbrains.jps.incremental.*;
|
||||
import org.jetbrains.jps.incremental.ModuleLevelBuilder.ExitCode;
|
||||
import org.jetbrains.jps.incremental.ProjectBuildException;
|
||||
import org.jetbrains.jps.incremental.Utils;
|
||||
import org.jetbrains.jps.incremental.messages.BuildMessage;
|
||||
import org.jetbrains.jps.incremental.messages.CompilerMessage;
|
||||
import org.jetbrains.jps.model.JpsDummyElement;
|
||||
@@ -72,12 +70,13 @@ public abstract class JpsGroovycRunner<R extends BuildRootDescriptor, T extends
|
||||
ModuleChunk chunk,
|
||||
DirtyFilesHolder<R, T> dirtyFilesHolder,
|
||||
Builder builder, GroovyOutputConsumer outputConsumer) throws ProjectBuildException {
|
||||
List<CompilerMessage> messages;
|
||||
long start = 0;
|
||||
try {
|
||||
JpsGroovySettings settings = JpsGroovySettings.getSettings(context.getProjectDescriptor().getProject());
|
||||
|
||||
Ref<Boolean> hasStubExcludes = Ref.create(false);
|
||||
final List<File> toCompile = collectChangedFiles(context, dirtyFilesHolder, myForStubs, false, hasStubExcludes);
|
||||
final List<File> toCompile = collectChangedFiles(context, dirtyFilesHolder, myForStubs, hasStubExcludes);
|
||||
if (toCompile.isEmpty()) {
|
||||
return ExitCode.NOTHING_DONE;
|
||||
}
|
||||
@@ -104,7 +103,8 @@ public abstract class JpsGroovycRunner<R extends BuildRootDescriptor, T extends
|
||||
return ExitCode.CHUNK_REBUILD_REQUIRED;
|
||||
}
|
||||
|
||||
for (CompilerMessage message : parser.getCompilerMessages()) {
|
||||
messages = parser.getCompilerMessages();
|
||||
for (CompilerMessage message : messages) {
|
||||
context.processMessage(message);
|
||||
}
|
||||
|
||||
@@ -114,7 +114,6 @@ public abstract class JpsGroovycRunner<R extends BuildRootDescriptor, T extends
|
||||
else {
|
||||
updateDependencies(context, toCompile, compiled, outputConsumer, builder);
|
||||
}
|
||||
return ExitCode.OK;
|
||||
}
|
||||
catch (Exception e) {
|
||||
throw new ProjectBuildException(e);
|
||||
@@ -124,6 +123,12 @@ public abstract class JpsGroovycRunner<R extends BuildRootDescriptor, T extends
|
||||
LOG.debug(builder.getPresentableName() + " took " + (System.currentTimeMillis() - start) + " on " + chunk.getName());
|
||||
}
|
||||
}
|
||||
|
||||
if (ContainerUtil.exists(messages, message -> message.getKind() == BuildMessage.Kind.ERROR)) {
|
||||
throw new StopBuildException();
|
||||
}
|
||||
|
||||
return ExitCode.OK;
|
||||
}
|
||||
|
||||
protected void stubsGenerated(CompileContext context, Map<T, String> generationOutputs, MultiMap<T, GroovycOutputParser.OutputItem> compiled) {
|
||||
@@ -294,7 +299,7 @@ public abstract class JpsGroovycRunner<R extends BuildRootDescriptor, T extends
|
||||
|
||||
//todo honor package prefixes
|
||||
File correctRoot = new File(srcTargetOutput);
|
||||
File correctOutput = new File(correctRoot, FileUtil.getRelativePath(new File(compilerOutput), output));
|
||||
File correctOutput = new File(correctRoot, ObjectUtils.assertNotNull(FileUtil.getRelativePath(new File(compilerOutput), output)));
|
||||
|
||||
FileUtil.rename(output, correctOutput);
|
||||
return correctOutput.getPath();
|
||||
@@ -308,7 +313,7 @@ public abstract class JpsGroovycRunner<R extends BuildRootDescriptor, T extends
|
||||
|
||||
List<File> collectChangedFiles(CompileContext context,
|
||||
DirtyFilesHolder<R, T> dirtyFilesHolder,
|
||||
final boolean forStubs, final boolean forEclipse, final Ref<Boolean> hasExcludes)
|
||||
boolean forStubs, Ref<Boolean> hasExcludes)
|
||||
throws IOException {
|
||||
|
||||
final JpsJavaCompilerConfiguration configuration =
|
||||
|
||||
+14
@@ -77,4 +77,18 @@ class GroovyResourceCheckerTest extends GroovyCompilerTestCase {
|
||||
assertEmpty checkResources()
|
||||
}
|
||||
|
||||
void "test stop after errors in one module"() {
|
||||
Module depModule = addModule("dependent", false)
|
||||
ModuleRootModificationUtil.addDependency(depModule, myModule)
|
||||
addGroovyLibrary(depModule)
|
||||
PsiTestUtil.addSourceRoot(depModule, myFixture.tempDirFixture.findOrCreateDir('dependent/res'), JavaResourceRootType.RESOURCE)
|
||||
|
||||
myFixture.addFileToProject('res/Util.groovy', '@groovy.transform.CompileStatic class C1 {{ println Xxx1.name }}')
|
||||
myFixture.addFileToProject('dependent/res/Usage.groovy', '@groovy.transform.CompileStatic class C2 {{ println Xxx2.name }}')
|
||||
|
||||
def messages = checkResources()
|
||||
assert messages.find { it.message.contains('Xxx1') }
|
||||
assert !messages.find { it.message.contains('Xxx2') }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user