forked from qt-creator/qt-creator
QuickFix: Simplify getting a Document for a C++ refactoring.
This commit is contained in:
@@ -84,12 +84,12 @@ public:
|
||||
|
||||
void performChanges(TextEditor::RefactoringFile *, CppRefactoringChanges *refactoring)
|
||||
{
|
||||
Document::Ptr targetDoc = refactoring->document(m_targetFileName);
|
||||
TextEditor::RefactoringFile targetFile = refactoring->file(m_targetFileName);
|
||||
Document::Ptr targetDoc = refactoring->document(targetFile);
|
||||
InsertionPointLocator locator(targetDoc);
|
||||
const InsertionLocation loc = locator.methodDeclarationInClass(m_targetSymbol, m_xsSpec);
|
||||
Q_ASSERT(loc.isValid());
|
||||
|
||||
TextEditor::RefactoringFile targetFile = refactoring->file(m_targetFileName);
|
||||
int targetPosition1 = targetFile.position(loc.line(), loc.column());
|
||||
int targetPosition2 = qMax(0, targetFile.position(loc.line(), 1) - 1);
|
||||
|
||||
|
||||
@@ -63,33 +63,13 @@ const LookupContext &CppRefactoringChanges::context() const
|
||||
return m_context;
|
||||
}
|
||||
|
||||
Document::Ptr CppRefactoringChanges::document(const QString &fileName) const
|
||||
Document::Ptr CppRefactoringChanges::document(const TextEditor::RefactoringFile &file) const
|
||||
{
|
||||
QString source;
|
||||
unsigned editorRevision = 0;
|
||||
QDateTime lastModified;
|
||||
|
||||
if (m_workingCopy.contains(fileName)) {
|
||||
const QPair<QString, unsigned> workingCopy = m_workingCopy.get(fileName);
|
||||
source = workingCopy.first;
|
||||
editorRevision = workingCopy.second;
|
||||
} else {
|
||||
QFile file(fileName);
|
||||
if (! file.open(QFile::ReadOnly))
|
||||
return Document::Ptr();
|
||||
|
||||
lastModified = QFileInfo(file).lastModified();
|
||||
source = QTextStream(&file).readAll(); // ### FIXME read bytes, and remove the convert below
|
||||
file.close();
|
||||
}
|
||||
QString source = file.document()->toPlainText();
|
||||
QString fileName = file.fileName();
|
||||
|
||||
const QByteArray contents = m_snapshot.preprocessedCode(source, fileName);
|
||||
Document::Ptr doc = m_snapshot.documentFromSource(contents, fileName);
|
||||
|
||||
if (lastModified.isValid())
|
||||
doc->setLastModified(lastModified);
|
||||
else
|
||||
doc->setEditorRevision(editorRevision);
|
||||
doc->check();
|
||||
|
||||
return doc;
|
||||
|
||||
@@ -48,9 +48,10 @@ public:
|
||||
|
||||
CPlusPlus::Document::Ptr thisDocument() const;
|
||||
const CPlusPlus::Snapshot &snapshot() const;
|
||||
CPlusPlus::Document::Ptr document(const QString &fileName) const;
|
||||
const CPlusPlus::LookupContext &context() const;
|
||||
|
||||
CPlusPlus::Document::Ptr document(const TextEditor::RefactoringFile &file) const;
|
||||
|
||||
private:
|
||||
virtual void indentSelection(const QTextCursor &selection) const;
|
||||
virtual void fileChanged(const QString &fileName);
|
||||
|
||||
@@ -270,6 +270,11 @@ const QTextCursor RefactoringFile::cursor() const
|
||||
return QTextCursor();
|
||||
}
|
||||
|
||||
QString RefactoringFile::fileName() const
|
||||
{
|
||||
return m_fileName;
|
||||
}
|
||||
|
||||
int RefactoringFile::position(unsigned line, unsigned column) const
|
||||
{
|
||||
Q_ASSERT(line != 0);
|
||||
|
||||
@@ -57,6 +57,7 @@ public:
|
||||
|
||||
const QTextDocument *document() const;
|
||||
const QTextCursor cursor() const;
|
||||
QString fileName() const;
|
||||
|
||||
// converts 1-based line and column into 0-based offset
|
||||
int position(unsigned line, unsigned column) const;
|
||||
|
||||
Reference in New Issue
Block a user