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()) {