a more user-friendly message when Ivy is missing in groovyc or grape plugin
authorpeter <peter.gromov@jetbrains.com>
Mon, 26 Apr 2010 17:19:43 +0000 (18:19 +0100)
committerpeter <peter.gromov@jetbrains.com>
Mon, 26 Apr 2010 17:19:43 +0000 (18:19 +0100)
plugins/groovy/grape/src/META-INF/plugin.xml
plugins/groovy/grape/src/org/jetbrains/plugins/groovy/grape/GrabDependencies.java
plugins/groovy/rt/src/org/jetbrains/groovy/compiler/rt/GroovyCompilerWrapper.java

index 567169a12a5de1b40247f05a9231d305a3381101..69d1b78d6c984495042ddaab1442b08f0558c198 100644 (file)
@@ -2,7 +2,7 @@
   <id>org.intellij.groovy.grape</id>
   <name>Groovy Grape support</name>
   <description>An intention on @Grab annotations to download the needed dependencies</description>
-  <version>0.3</version>
+  <version>0.4</version>
   <idea-version since-build="95.28" until-build="96.1"/>
   <vendor logo="/org/jetbrains/plugins/groovy/images/groovy_16x16.png" url="http://www.jetbrains.com">JetBrains Inc.</vendor>
   <depends>org.intellij.groovy</depends>
index b2edce871e1ff665d1c9281e3cd1dd36be86aed5..f4bd7bb6c045f3362b1c1551a774342a046e08bc 100644 (file)
@@ -37,6 +37,7 @@ import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.openapi.vfs.JarFileSystem;
 import com.intellij.openapi.vfs.LocalFileSystem;
 import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.JavaPsiFacade;
 import com.intellij.psi.PsiFile;
 import com.intellij.psi.util.PsiTreeUtil;
 import com.intellij.util.IncorrectOperationException;
@@ -96,6 +97,11 @@ public class GrabDependencies implements IntentionAction {
     final VirtualFile vfile = file.getOriginalFile().getVirtualFile();
     assert vfile != null;
 
+    if (JavaPsiFacade.getInstance(project).findClass("org.apache.ivy.core.report.ResolveReport", file.getResolveScope()) == null) {
+      Messages.showErrorDialog("Sorry, but IDEA cannot @Grab the dependencies without Ivy. Please add Ivy to your module dependencies and re-run the action.", "Ivy missing");
+      return;
+    }
+
     final JavaParameters javaParameters = GroovyScriptRunConfiguration.createJavaParametersWithSdk(module);
     try {
       //debug
index 821950cb45d3487d803ffd15dfd87ff93186cad4..56a5f0e3175e454e2dbccacc1a4800b1ef718ccc 100644 (file)
@@ -50,7 +50,13 @@ public class GroovyCompilerWrapper {
       processException(e, collector, forStubs);
     }
     catch (NoClassDefFoundError e) {
-      addMessageWithoutLocation(collector, "Groovyc error: " + e.getMessage() + " class not found, try compiling it explicitly", !forStubs);
+      final String className = e.getMessage();
+      if (className.startsWith("org/apache/ivy/")) {
+        addMessageWithoutLocation(collector, "Cannot @Grab without Ivy, please add it to your module dependencies (NoClassDefFoundError: " + className + ")", true);
+      } else {
+        addMessageWithoutLocation(collector, "Groovyc error: " + className + " class not found, try compiling it explicitly", !forStubs);
+      }
+
     }
     finally {
       addWarnings(unit.getErrorCollector(), collector);