Bug 80608 SWT.error does not initialize the causing exception.
SWTException stores the "cause" exception in a public field named "throwable". This prevents access to the causing exception in a standard way, the Exception.getCause method. SWT.error should call initCause to set this up.
bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/InternalErrorDialog.java
* @param parent the parent composite
     * @return the drop-down list component
     */
    protected void createDropDownText(Composite parent) {
        
        text = new Text(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
        text.setFont(parent.getFont());
        
        try {
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            PrintStream ps = new PrintStream(baos);
            detail.printStackTrace(ps);
            if ((detail instanceof SWTError)
                    && (((SWTError) detail).throwable != null)) {
                ps.println("\n*** Stack trace of contained exception ***"); 
                ((SWTError) detail).throwable.printStackTrace(ps);
            } else if ((detail instanceof SWTException)
                    && (((SWTException) detail).throwable != null)) {
                ps.println("\n*** Stack trace of contained exception ***"); 
                ((SWTException) detail).throwable.printStackTrace(ps);
            }
            ps.flush();
            baos.flush();
            text.setText(baos.toString());
        } catch (IOException e) {
        }
        GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL
                | GridData.GRAB_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL
                | GridData.GRAB_VERTICAL);
        data.heightHint = text.getLineHeight() * TEXT_LINE_COUNT;