package com.sap.ide.refactoring.ui;
import java.io.PrintWriter;
import java.io.StringWriter;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.jface.text.source.SourceViewerConfiguration;
import org.eclipse.ltk.core.refactoring.RefactoringStatusContext;
import org.eclipse.ltk.ui.refactoring.TextStatusContextViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
/**
* Shows the exception message and stacktrace.
*
* @author Stephan Erb (d049157)
*
*/
public class ExceptionStatusContextViewer extends TextStatusContextViewer {
@Override
protected SourceViewer createSourceViewer(Composite parent) {
SourceViewer viewer = new SourceViewer(parent, null, SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI | SWT.FULL_SELECTION);
viewer.configure(new SourceViewerConfiguration());
return viewer;
}
@Override
public void setInput(RefactoringStatusContext input) {
assert input instanceof ExceptionStatusContext;
Throwable throwable = (Throwable) input.getCorrespondingElement();
IDocument document = new Document(getStackTraceAsString(throwable));
setInput(document, /* region */null);
}
public String getStackTraceAsString(Throwable throwable) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
pw.print(" [ ");
pw.print(throwable.getClass().getName());
pw.print(" ] ");
pw.print(throwable.getMessage() + "\n\n");
throwable.printStackTrace(pw);
return sw.toString();
}
}