1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 06:32:10 +02:00

Bug 539145 - Avoid opening an editor during CaseBreakQuickFixFallthroughAttribute.isApplicable()

Change-Id: I82c5b345cfb017680d06f3caeff0c9839780ee68
This commit is contained in:
Nathan Ridge 2018-09-22 23:48:04 -04:00
parent 87cd426861
commit acca2b3b6e
2 changed files with 9 additions and 11 deletions

View file

@ -27,8 +27,6 @@ import org.eclipse.core.resources.IMarker;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.ltk.core.refactoring.Change;
abstract public class AbstractCaseBreakQuickFix extends AbstractAstRewriteQuickFix {
@ -57,20 +55,18 @@ abstract public class AbstractCaseBreakQuickFix extends AbstractAstRewriteQuickF
}
protected IASTStatement getStmtBeforeCaseEnd(IMarker marker, IASTTranslationUnit ast) throws BadLocationException {
int line = marker.getAttribute(IMarker.LINE_NUMBER, 0) - 1;
if (line < 0)
int offset = marker.getAttribute(IMarker.CHAR_START, 0);
int endOffset = marker.getAttribute(IMarker.CHAR_END, 0);
if (offset < 0 || endOffset < offset)
return null;
IDocument doc = getDocument();
if (doc == null)
doc = openDocument(marker);
IRegion lineInformation = doc.getLineInformation(line);
int length = endOffset - offset;
IASTNodeSelector nodeSelector = ast.getNodeSelector(null);
IASTNode containedNode = nodeSelector.findFirstContainedNode(lineInformation.getOffset(), lineInformation.getLength());
IASTNode containedNode = nodeSelector.findFirstContainedNode(offset, length);
IASTNode beforeCaseEndNode = null;
if (containedNode != null) {
beforeCaseEndNode = CxxAstUtils.getEnclosingStatement(containedNode);
} else {
beforeCaseEndNode = nodeSelector.findEnclosingNode(lineInformation.getOffset(), lineInformation.getLength());
beforeCaseEndNode = nodeSelector.findEnclosingNode(offset, length);
}
if (beforeCaseEndNode instanceof IASTCompoundStatement) {
while (beforeCaseEndNode != null) {

View file

@ -219,7 +219,9 @@ public class CaseBreakChecker extends AbstractIndexAstChecker implements IChecke
IASTFileLocation astLocation = astNode.getFileLocation();
int line = astLocation.getEndingLineNumber();
IProblemLocationFactory locFactory = getRuntime().getProblemLocationFactory();
return locFactory.createProblemLocation(getFile(), -1, -1, line);
int offset = astLocation.getNodeOffset();
return locFactory.createProblemLocation(getFile(), offset,
offset + astLocation.getNodeLength(), line);
}
/**