make exception filter return folding descriptor for groovy internals
authorpeter <peter.gromov@jetbrains.com>
Thu, 4 Mar 2010 13:41:38 +0000 (13:41 +0000)
committerpeter <peter.gromov@jetbrains.com>
Thu, 4 Mar 2010 13:41:38 +0000 (13:41 +0000)
java/execution/openapi/src/com/intellij/execution/filters/ExceptionFilter.java

index 18b846685bd9979444e98edf107bdf32bf0fa5d6..6054a4a4d6393c06491605558534697e4670ba4f 100644 (file)
@@ -27,9 +27,12 @@ import com.intellij.psi.PsiClass;
 import com.intellij.psi.PsiFile;
 import com.intellij.psi.PsiManager;
 import com.intellij.psi.search.GlobalSearchScope;
+import com.intellij.ui.classFilter.ClassFilter;
+import com.intellij.ui.classFilter.DebuggerClassFilterProvider;
 import com.intellij.util.ui.UIUtil;
 import org.jetbrains.annotations.NonNls;
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 import java.awt.*;
 
@@ -69,6 +72,7 @@ public class ExceptionFilter implements Filter, DumbAware {
     final int lastDotIndex = line.lastIndexOf('.', lparenthIndex);
     if (lastDotIndex < 0 || lastDotIndex < atIndex) return null;
     String className = line.substring(atIndex + AT.length() + 1, lastDotIndex).trim();
+    final String fullName = className;
     final int dollarIndex = className.indexOf('$');
     if (dollarIndex >= 0){
       className = className.substring(0, dollarIndex);
@@ -112,10 +116,23 @@ public class ExceptionFilter implements Filter, DumbAware {
         attributes.setForegroundColor(color);
         attributes.setEffectColor(color);
       }
-      return new Result(highlightStartOffset, highlightEndOffset, info, attributes);
+      return new Result(highlightStartOffset, highlightEndOffset, info, attributes, getFoldingPlaceholder(fullName));
     }
     catch(NumberFormatException e){
       return null;
     }
   }
+
+  @Nullable
+  private static String getFoldingPlaceholder(String className) {
+    for (DebuggerClassFilterProvider provider : DebuggerClassFilterProvider.EP_NAME.getExtensions()) {
+      for (ClassFilter filter : provider.getFilters()) {
+        final String pattern = filter.getPattern();
+        if (pattern.endsWith("*") && className.startsWith(pattern.substring(0, pattern.length() - 1))) {
+          return "...";
+        }
+      }
+    }
+    return null;
+  }
 }
\ No newline at end of file