package org.eclipse.cdt.codan.internal.checkers.ui.quickfix;
import org.eclipse.cdt.codan.core.model.IProblem;
import org.eclipse.cdt.codan.core.param.RootProblemPreference;
import org.eclipse.cdt.codan.internal.checkers.CaseBreakChecker;
import org.eclipse.cdt.codan.ui.AbstractCodanCMarkerResolution;
import org.eclipse.core.resources.IMarker;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.text.edits.InsertEdit;
import org.eclipse.text.edits.MalformedTreeException;
public class CaseBreakQuickFixComment extends AbstractCodanCMarkerResolution {
public String getLabel() {
return Messages.CaseBreakQuickFixComment_Label;
}
@Override
public void apply(IMarker marker, IDocument document) {
try {
int line = marker.getAttribute(IMarker.LINE_NUMBER, -1);
if (line < 0)
return;
int offset = document.getLineOffset(line);
String indent = getIndentationStr(document, line);
String comment = getNoBreakComment(marker);
String editStr = String.format("%s/* %s */\n", indent, comment);//$NON-NLS-1$
InsertEdit edit = new InsertEdit(offset, editStr);
edit.apply(document);
} catch (MalformedTreeException e) {
return;
} catch (BadLocationException e) {
return;
}
}
private String getIndentationStr(IDocument document, int line) throws BadLocationException {
int prevLine = line - 1;
IRegion lineInformation = document.getLineInformation(prevLine);
String prevLineStr = document.get(lineInformation.getOffset(), lineInformation.getLength());
int nonSpace = prevLineStr.indexOf(prevLineStr.trim());
String indent = prevLineStr.substring(0, nonSpace);
return indent;
}
private String getNoBreakComment(IMarker marker) {
IProblem problem = getProblem(marker);
RootProblemPreference map = (RootProblemPreference) problem.getPreference();
String comment = (String) map.getChildValue(CaseBreakChecker.PARAM_NO_BREAK_COMMENT);
if (comment == null || comment.trim().length() == 0)
comment = "no break"; //$NON-NLS-1$
return comment;
}
}