IDEA-89651 NPE in external build with Groovy
authorpeter <peter@jetbrains.com>
Thu, 2 Aug 2012 11:53:21 +0000 (13:53 +0200)
committerpeter <peter@jetbrains.com>
Thu, 2 Aug 2012 12:41:29 +0000 (14:41 +0200)
plugins/groovy/rt/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java

index fd248ebb0d0fc29765e9343eb53175aded623367..1dc5c7c2f563363ea39aa366cbde0c756014435b 100644 (file)
@@ -8,6 +8,7 @@ import com.intellij.util.ArrayUtil;
 import com.intellij.util.Consumer;
 import com.intellij.util.SystemProperties;
 import groovy.util.CharsetToolkit;
+import org.jetbrains.annotations.Nullable;
 import org.jetbrains.asm4.ClassReader;
 import org.jetbrains.ether.dependencyView.Callbacks;
 import org.jetbrains.ether.dependencyView.Mappings;
@@ -18,6 +19,7 @@ import org.jetbrains.jps.incremental.*;
 import org.jetbrains.jps.incremental.fs.RootDescriptor;
 import org.jetbrains.jps.incremental.java.ClassPostProcessor;
 import org.jetbrains.jps.incremental.java.JavaBuilder;
+import org.jetbrains.jps.incremental.messages.BuildMessage;
 import org.jetbrains.jps.incremental.messages.CompilerMessage;
 import org.jetbrains.jps.incremental.messages.FileGeneratedEvent;
 import org.jetbrains.jps.incremental.messages.ProgressMessage;
@@ -68,6 +70,9 @@ public class GroovyBuilder extends ModuleLevelBuilder {
       }
 
       Map<JpsModule, String> finalOutputs = getCanonicalModuleOutputs(context, chunk);
+      if (finalOutputs == null) {
+        return ExitCode.ABORT;
+      }
       Map<JpsModule, String> generationOutputs = getGenerationOutputs(chunk, finalOutputs);
 
       final Set<String> toCompilePaths = new LinkedHashSet<String>();
@@ -165,11 +170,14 @@ public class GroovyBuilder extends ModuleLevelBuilder {
     return generationOutputs;
   }
 
-  private static Map<JpsModule, String> getCanonicalModuleOutputs(CompileContext context, ModuleChunk chunk) {
+  @Nullable private static Map<JpsModule, String> getCanonicalModuleOutputs(CompileContext context, ModuleChunk chunk) {
     Map<JpsModule, String> finalOutputs = new HashMap<JpsModule, String>();
     for (JpsModule module : chunk.getModules()) {
       File moduleOutputDir = context.getProjectPaths().getModuleOutputDir(module, context.isCompilingTests());
-      assert moduleOutputDir != null;
+      if (moduleOutputDir == null) {
+        context.processMessage(new CompilerMessage(BUILDER_NAME, BuildMessage.Kind.ERROR, "Output directory not specified for module " + module.getName()));
+        return null;
+      }
       String moduleOutputPath = FileUtil.toCanonicalPath(moduleOutputDir.getPath());
       assert moduleOutputPath != null;
       finalOutputs.put(module, moduleOutputPath.endsWith("/") ? moduleOutputPath : moduleOutputPath + "/");