1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Bug 244050 - AssertionFailedException in QuickDiff prevents save

This commit is contained in:
Anton Leherbauer 2008-09-05 10:32:14 +00:00
parent 507c732870
commit 6184a53e92

View file

@ -934,62 +934,11 @@ public class CDocumentProvider extends TextFileDocumentProvider {
*/
@Override
protected DocumentProviderOperation createSaveOperation(final Object element, final IDocument document, final boolean overwrite) throws CoreException {
//add a newline to the end of the document (if it is not already present)
//-----------------------------------------------------------------------
//for people who do not want auto-modification of their files,
//this flag will prevent addition of a newline unless the user
//explicitly sets the preference thru Window -> Preferences -> C/C++ -> Editor
// -> Appearance Tab -> Ensure newline end of file when saving
if (PreferenceConstants.getPreferenceStore().getBoolean(
PreferenceConstants.ENSURE_NEWLINE_AT_EOF)) {
// even if the document is empty, there will be at least one line in
// it (the 0th one)
int lastLineIndex = document.getNumberOfLines() - 1;
try {
// we have to ensure that the length of the last line is 0.
// this will also take care of empty files. empty files have
// only one line in them and the length of this one and only
// line is 0.
// Thus we do not need to append an extra line separator to
// empty files.
int lastLineLength = document.getLineLength(lastLineIndex);
if (lastLineLength != 0) {
document.replace(document.getLength(), 0,
TextUtilities.getDefaultLineDelimiter(document));
}
} catch (BadLocationException e) {
}
}
// Remove trailing whitespace when saving. Triggered by the flag
// in Preferences -> C/C++ -> Editor
if (PreferenceConstants.getPreferenceStore().getBoolean(
PreferenceConstants.REMOVE_TRAILING_WHITESPACE)) {
try {
int lineCount= document.getNumberOfLines();
for (int i= 0; i < lineCount; i++) {
IRegion region= document.getLineInformation(i);
if (region.getLength() == 0)
continue;
int lineStart= region.getOffset();
int lineExclusiveEnd= lineStart + region.getLength();
// Find the rightmost none-whitespace character
int charPos= lineExclusiveEnd - 1;
while (charPos >= lineStart && Character.isWhitespace(document.getChar(charPos)))
charPos--;
charPos++;
if (charPos < lineExclusiveEnd) {
DeleteEdit edit= new DeleteEdit(charPos, lineExclusiveEnd - charPos);
edit.apply(document);
}
}
} catch (BadLocationException e) {
}
try {
performSaveActions(document);
} catch (Exception exc) {
// log any exeption, but perform save anyway
CUIPlugin.log(exc);
}
final FileInfo info= getFileInfo(element);
@ -1021,6 +970,67 @@ public class CDocumentProvider extends TextFileDocumentProvider {
return null;
}
/**
* Perform configured document manipulations before save.
*
* @param document
* @throws BadLocationException
*/
private void performSaveActions(final IDocument document) throws BadLocationException {
//add a newline to the end of the document (if it is not already present)
//-----------------------------------------------------------------------
//for people who do not want auto-modification of their files,
//this flag will prevent addition of a newline unless the user
//explicitly sets the preference thru Window -> Preferences -> C/C++ -> Editor
// -> Appearance Tab -> Ensure newline end of file when saving
if (PreferenceConstants.getPreferenceStore().getBoolean(
PreferenceConstants.ENSURE_NEWLINE_AT_EOF)) {
// even if the document is empty, there will be at least one line in
// it (the 0th one)
int lastLineIndex = document.getNumberOfLines() - 1;
// we have to ensure that the length of the last line is 0.
// this will also take care of empty files. empty files have
// only one line in them and the length of this one and only
// line is 0.
// Thus we do not need to append an extra line separator to
// empty files.
int lastLineLength = document.getLineLength(lastLineIndex);
if (lastLineLength != 0) {
document.replace(document.getLength(), 0,
TextUtilities.getDefaultLineDelimiter(document));
}
}
// Remove trailing whitespace when saving. Triggered by the flag
// in Preferences -> C/C++ -> Editor
if (PreferenceConstants.getPreferenceStore().getBoolean(
PreferenceConstants.REMOVE_TRAILING_WHITESPACE)) {
int lineCount= document.getNumberOfLines();
for (int i= 0; i < lineCount; i++) {
IRegion region= document.getLineInformation(i);
if (region.getLength() == 0)
continue;
int lineStart= region.getOffset();
int lineExclusiveEnd= lineStart + region.getLength();
// Find the rightmost none-whitespace character
int charPos= lineExclusiveEnd - 1;
while (charPos >= lineStart && Character.isWhitespace(document.getChar(charPos)))
charPos--;
charPos++;
if (charPos < lineExclusiveEnd) {
DeleteEdit edit= new DeleteEdit(charPos, lineExclusiveEnd - charPos);
edit.apply(document);
}
}
}
}
/**
* Returns the preference whether handling temporary problems is enabled.
*/