diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/Breakpoint.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/Breakpoint.java
index 085669d3bf42..cfee49e7c399 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/Breakpoint.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/Breakpoint.java
@@ -558,7 +558,7 @@ public abstract class Breakpoint
implements
return getProperties().getClassExclusionFilters();
}
- protected void setClassExclusionFilters(ClassFilter[] filters) {
+ public void setClassExclusionFilters(ClassFilter[] filters) {
if (getProperties().setClassExclusionFilters(filters)) {
fireBreakpointChanged();
}
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/ExceptionBreakpoint.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/ExceptionBreakpoint.java
index 357b54ea99bf..40764bf435ff 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/ExceptionBreakpoint.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/ExceptionBreakpoint.java
@@ -40,6 +40,7 @@ import com.intellij.psi.JavaPsiFacade;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.search.GlobalSearchScope;
+import com.intellij.ui.classFilter.ClassFilter;
import com.intellij.xdebugger.breakpoints.XBreakpoint;
import com.sun.jdi.AbsentInformationException;
import com.sun.jdi.Location;
@@ -283,4 +284,16 @@ public class ExceptionBreakpoint extends Breakpoint readClassFilters(String filtersString) {
+ ArrayList include = new ArrayList<>();
+ ArrayList exclude = new ArrayList<>();
+ for (String s : filtersString.split(",")) {
+ ClassFilter filter = new ClassFilter();
+ filter.setEnabled(true);
+ if (s.startsWith("-")) {
+ exclude.add(filter);
+ s = s.substring(1);
+ } else {
+ include.add(filter);
+ }
+ filter.setPattern(s);
+ }
+ return Pair.create(include.toArray(ClassFilter.EMPTY_ARRAY), exclude.toArray(ClassFilter.EMPTY_ARRAY));
+ }
+
public void createBreakpoints(final PsiFile file) {
Runnable runnable = () -> {
BreakpointManager breakpointManager = DebuggerManagerImpl.getInstanceEx(myProject).getBreakpointManager();
@@ -399,19 +417,21 @@ public abstract class ExecutionWithDebuggerToolsTestCase extends ExecutionTestCa
String classFilters = readValue(comment, "Class filters");
if (classFilters != null) {
breakpoint.setClassFiltersEnabled(true);
- StringTokenizer tokenizer = new StringTokenizer(classFilters, " ,");
- ArrayList lst = new ArrayList();
-
- while (tokenizer.hasMoreTokens()) {
- ClassFilter filter = new ClassFilter();
- filter.setEnabled(true);
- filter.setPattern(tokenizer.nextToken());
- lst.add(filter);
- }
-
- breakpoint.setClassFilters(lst.toArray(new ClassFilter[lst.size()]));
+ Pair filters = readClassFilters(classFilters);
+ breakpoint.setClassFilters(filters.first);
+ breakpoint.setClassExclusionFilters(filters.second);
println("Class filters = " + classFilters, ProcessOutputTypes.SYSTEM);
}
+
+ String catchClassFilters = readValue(comment, "Catch class filters");
+ if (catchClassFilters != null && breakpoint instanceof ExceptionBreakpoint) {
+ ExceptionBreakpoint exceptionBreakpoint = (ExceptionBreakpoint)breakpoint;
+ exceptionBreakpoint.setCatchFiltersEnabled(true);
+ Pair filters = readClassFilters(catchClassFilters);
+ exceptionBreakpoint.setCatchClassFilters(filters.first);
+ exceptionBreakpoint.setCatchClassExclusionFilters(filters.second);
+ println("Catch class filters = " + catchClassFilters, ProcessOutputTypes.SYSTEM);
+ }
}
};
if (!SwingUtilities.isEventDispatchThread()) {