/** Creates options related to dealing with exceptions. */ private void createDealingWithExceptionsOptions(Composite composite) { PyExceptionBreakPointManager instance = PyExceptionBreakPointManager.getInstance(); uncaughtExceptionCheck = new Button(composite, SWT.CHECK); uncaughtExceptionCheck.setText("Suspend on uncaught exceptions"); uncaughtExceptionCheck.setSelection(instance.getBreakOnUncaughtExceptions()); caughtExceptionCheck = new Button(composite, SWT.CHECK); caughtExceptionCheck.setText("Suspend on caught exceptions *"); caughtExceptionCheck.setSelection(instance.getBreakOnCaughtExceptions()); stopOnExceptionsHandledInSameContextCheck = new Button(composite, SWT.CHECK); stopOnExceptionsHandledInSameContextCheck.setText( " Skip exceptions caught in same function"); stopOnExceptionsHandledInSameContextCheck.setSelection( instance.getSkipCaughtExceptionsInSameFunction()); ignoreExceptionsThrownInLinesWithIgnoreExceptionCheck = new Button(composite, SWT.CHECK); ignoreExceptionsThrownInLinesWithIgnoreExceptionCheck.setText( " Ignore exceptions thrown in lines with # @IgnoreException"); ignoreExceptionsThrownInLinesWithIgnoreExceptionCheck.setSelection( instance.getIgnoreExceptionsThrownInLinesWithIgnoreException()); caughtExceptionCheck.addSelectionListener( new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { updateStates(); } @Override public void widgetDefaultSelected(SelectionEvent e) {} }); updateStates(); Label label = new Label(composite, SWT.NONE); label.setText("* Will make debugging ~ 2x slower"); breakOnDjangoTemplateExceptionsCheck = new Button(composite, SWT.CHECK); breakOnDjangoTemplateExceptionsCheck.setText("Suspend on django template render exceptions"); breakOnDjangoTemplateExceptionsCheck.setSelection( PydevPlugin.getDefault() .getPreferenceStore() .getBoolean(AbstractPydevPrefs.TRACE_DJANGO_TEMPLATE_RENDER_EXCEPTIONS)); }
@Override public String getOutgoing() { if (file != null) { return makeCommand( AbstractDebuggerCommand.CMD_IGNORE_THROWN_EXCEPTION_AT, sequence, StringUtils.join("|", FileUtils.getFileAbsolutePath(file), this.lineNumber)); } else { // Bulk-creation Collection<String> ignoreThrownExceptions = PyExceptionBreakPointManager.getInstance() .ignoreCaughtExceptionsWhenThrownFrom .getIgnoreThrownExceptions(); return makeCommand( AbstractDebuggerCommand.CMD_IGNORE_THROWN_EXCEPTION_AT, sequence, "REPLACE:" + StringUtils.join("||", ignoreThrownExceptions)); } }
@Override public void run() { IPath ignoreThrownExceptionsPath = PyExceptionBreakPointManager.getInstance() .ignoreCaughtExceptionsWhenThrownFrom .getIgnoreThrownExceptionsPath(); File file = ignoreThrownExceptionsPath.toFile(); IEditorPart openFile = EditorUtils.openFile(file); if (openFile instanceof ITextEditor) { final ITextEditor textEditor = (ITextEditor) openFile; IDocumentProvider documentProvider = textEditor.getDocumentProvider(); final IEditorInput input = openFile.getEditorInput(); if (documentProvider instanceof IStorageDocumentProvider) { IStorageDocumentProvider storageDocumentProvider = (IStorageDocumentProvider) documentProvider; // Make sure the file is seen as UTF-8. storageDocumentProvider.setEncoding(input, "utf-8"); textEditor.doRevertToSaved(); } if (textEditor instanceof ISaveablePart) { IPropertyListener listener = new IPropertyListener() { @Override public void propertyChanged(Object source, int propId) { if (propId == IWorkbenchPartConstants.PROP_DIRTY) { if (source == textEditor) { if (textEditor.getEditorInput() == input) { if (!textEditor.isDirty()) { PyExceptionBreakPointManager.getInstance() .ignoreCaughtExceptionsWhenThrownFrom .updateIgnoreThrownExceptions(); } } } } } }; textEditor.addPropertyListener(listener); } } // Code to provide a dialog to edit it (decided on opening the file instead). // Collection<IgnoredExceptionInfo> ignoreThrownExceptionsForEdition = // PyExceptionBreakPointManager.getInstance() // .getIgnoreThrownExceptionsForEdition(); // HashMap<String, String> map = new HashMap<>(); // for (IgnoredExceptionInfo ignoredExceptionInfo : ignoreThrownExceptionsForEdition) { // map.put(ignoredExceptionInfo.filename + ": " + ignoredExceptionInfo.line, // ignoredExceptionInfo.contents); // } // // EditIgnoredCaughtExceptionsDialog dialog = new // EditIgnoredCaughtExceptionsDialog(EditorUtils.getShell(), map); // int open = dialog.open(); // if (open == dialog.OK) { // Map<String, String> result = dialog.getResult(); // // } else { // System.out.println("Cancel"); // } }