diff options
author | Christian Kamm <christian.d.kamm@nokia.com> | 2011-09-20 13:10:17 +0200 |
---|---|---|
committer | Christian Kamm <christian.d.kamm@nokia.com> | 2011-09-20 13:25:36 +0200 |
commit | 71cbd765b2f887a68495b947e202ee4ca4295fd8 (patch) | |
tree | bdb0a445f3f9390a9693cbf13d1d1daf80185d1e /src/plugins/texteditor/refactoringchanges.cpp | |
parent | 7c7562f2a1c7cea30a612a35a9f1356b90806952 (diff) | |
download | qt-creator-71cbd765b2f887a68495b947e202ee4ca4295fd8.tar.gz |
RefactoringChanges: Fix problems with encodings.
Task-number: QTCREATORBUG-6140
Change-Id: Iedbfca6987bffa2670df39f5f461690218f6da14
Reviewed-on: http://codereview.qt-project.org/5233
Reviewed-by: Leandro T. C. Melo <leandro.melo@nokia.com>
Diffstat (limited to 'src/plugins/texteditor/refactoringchanges.cpp')
-rw-r--r-- | src/plugins/texteditor/refactoringchanges.cpp | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/src/plugins/texteditor/refactoringchanges.cpp b/src/plugins/texteditor/refactoringchanges.cpp index 811be2ba41..9a5fda951a 100644 --- a/src/plugins/texteditor/refactoringchanges.cpp +++ b/src/plugins/texteditor/refactoringchanges.cpp @@ -37,7 +37,7 @@ #include <coreplugin/editormanager/editormanager.h> #include <extensionsystem/pluginmanager.h> -#include <utils/fileutils.h> +#include <utils/qtcassert.h> #include <QtCore/QFile> #include <QtCore/QSet> @@ -120,10 +120,12 @@ bool RefactoringChanges::createFile(const QString &fileName, const QString &cont } if (!editor) { - Utils::FileSaver saver(fileName); - saver.write(document->toPlainText().toUtf8()); + Utils::TextFileFormat format; + format.codec = Core::EditorManager::instance()->defaultTextCodec(); + QString error; + bool saveOk = format.writeFile(fileName, document->toPlainText(), &error); delete document; - if (!saver.finalize(Core::ICore::instance()->mainWindow())) + if (!saveOk) return false; } @@ -219,11 +221,19 @@ QTextDocument *RefactoringFile::mutableDocument() const return m_editor->document(); else if (!m_document) { QString fileContents; - if (!m_fileName.isEmpty() && QFile::exists(m_fileName)) { - Utils::FileReader reader; - if (reader.fetch(m_fileName, Core::ICore::instance()->mainWindow())) - fileContents = QString::fromUtf8(reader.data()); + if (!m_fileName.isEmpty()) { + QString error; + QTextCodec *defaultCodec = Core::EditorManager::instance()->defaultTextCodec(); + Utils::TextFileFormat::ReadResult result = Utils::TextFileFormat::readFile( + m_fileName, defaultCodec, + &fileContents, &m_textFileFormat, + &error); + if (result != Utils::TextFileFormat::ReadSuccess) { + qWarning() << "Could not read " << m_fileName << ". Error: " << error; + m_textFileFormat.codec = 0; + } } + // always make a QTextDocument to avoid excessive null checks m_document = new QTextDocument(fileContents); } return m_document; @@ -325,7 +335,10 @@ void RefactoringFile::apply() // apply changes, if any if (m_data && !(m_indentRanges.isEmpty() && m_changes.isEmpty())) { QTextDocument *doc = mutableDocument(); - if (doc) { + if (!doc) + return; + + { QTextCursor c(doc); c.beginEditBlock(); @@ -346,10 +359,11 @@ void RefactoringFile::apply() } // if this document doesn't have an editor, write the result to a file - if (!m_editor && !m_fileName.isEmpty()) { - Utils::FileSaver saver(m_fileName); - saver.write(doc->toPlainText().toUtf8()); - saver.finalize(Core::ICore::instance()->mainWindow()); + if (!m_editor && m_textFileFormat.codec) { + QTC_ASSERT(!m_fileName.isEmpty(), return); + QString error; + if (!m_textFileFormat.writeFile(m_fileName, doc->toPlainText(), &error)) + qWarning() << "Could not apply changes to" << m_fileName << ". Error: " << error; } fileChanged(); |