/*******************************************************************************
* Copyright (c) 2010, 2011 Alena Laskavaia and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Alena Laskavaia - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.codan.internal.checkers.ui.quickfix;
import org.eclipse.cdt.codan.internal.checkers.ui.CheckersUiActivator;
import org.eclipse.cdt.codan.internal.checkers.ui.Messages;
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;
/**
* quick fix for catch by value
*/
public class CatchByReferenceQuickFix extends AbstractCodanCMarkerResolution {
public String getLabel() {
return Messages.CatchByReferenceQuickFix_Message;
}
public void apply(IMarker marker, IDocument document) {
applyCatchByReferenceQuickFix(marker, document, false);
}
static void applyCatchByReferenceQuickFix(IMarker marker, IDocument document, boolean addConst) {
try {
int left = marker.getAttribute(IMarker.CHAR_START, -1);
int right = marker.getAttribute(IMarker.CHAR_END, -1);
String inStr = document.get(left, right - left);
document.replace(left, right - left, getCatchByReferenceString(inStr, addConst));
} catch (BadLocationException e) {
CheckersUiActivator.log(e);
}
}
/**
* Returns a catch by reference string from a catch by value string
*/
static private String getCatchByReferenceString(String inStr, boolean addConst) {
StringBuilder stringBuilder = new StringBuilder(inStr.length() + 10);
if (addConst) {
stringBuilder.append("const "); //$NON-NLS-1$
}
String typename;
int space = inStr.lastIndexOf(' ');
boolean hasDeclName = space != -1;
if (hasDeclName) {
typename = inStr.substring(0,space);
} else {
typename = inStr;
}
stringBuilder.append(typename);
stringBuilder.append(" &"); //$NON-NLS-1$
if (hasDeclName) {
stringBuilder.append(" "); //$NON-NLS-1$
String declname = inStr.substring(space+1);
stringBuilder.append(declname);
}
return stringBuilder.toString();
}
}