diff options
author | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2017-08-18 14:51:32 +0200 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2017-08-22 10:01:31 +0000 |
commit | 0db7ad77a068d51764100fabeecce9a649b3ad58 (patch) | |
tree | 8def9c3cdb993c700a8f0e315e861d3788ce6dcb /src/plugins/clangcodemodel | |
parent | a9ddbb61a4bed1cec59b8fb2d2b56ac25ba4254f (diff) | |
download | qt-creator-0db7ad77a068d51764100fabeecce9a649b3ad58.tar.gz |
Clang: Fix built-in's ExtractFunction action
Since
Clang: Provide highlighting for identifier under cursor
commit ca72c29462d9caae5e6095f8361f843758c5972c
the LocalUseMap, used for some refactoring actions, was not updated
anymore. Fall back to the built-in implementation for the LocalUseMap
because it contains pointers to built-in AST that clang obviously can't
provide.
Task-number: QTCREATORBUG-18607
Change-Id: I08762fe457835d4d83aca719febcb3497ee9696b
Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Reviewed-by: Robert Loehning <robert.loehning@qt.io>
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
Diffstat (limited to 'src/plugins/clangcodemodel')
3 files changed, 32 insertions, 14 deletions
diff --git a/src/plugins/clangcodemodel/clangbackendipcintegration.cpp b/src/plugins/clangcodemodel/clangbackendipcintegration.cpp index cfb52f1528..bb4d4c3010 100644 --- a/src/plugins/clangcodemodel/clangbackendipcintegration.cpp +++ b/src/plugins/clangcodemodel/clangbackendipcintegration.cpp @@ -129,8 +129,10 @@ void IpcReceiver::deleteProcessorsOfEditorWidget(TextEditor::TextEditorWidget *t } } -QFuture<CppTools::CursorInfo> IpcReceiver::addExpectedReferencesMessage(quint64 ticket, - QTextDocument *textDocument) +QFuture<CppTools::CursorInfo> IpcReceiver::addExpectedReferencesMessage( + quint64 ticket, + QTextDocument *textDocument, + const CppTools::SemanticInfo::LocalUseMap &localUses) { QTC_CHECK(textDocument); QTC_CHECK(!m_referencesTable.contains(ticket)); @@ -138,7 +140,7 @@ QFuture<CppTools::CursorInfo> IpcReceiver::addExpectedReferencesMessage(quint64 QFutureInterface<CppTools::CursorInfo> futureInterface; futureInterface.reportStarted(); - const ReferencesEntry entry{futureInterface, textDocument}; + const ReferencesEntry entry{futureInterface, textDocument, localUses}; m_referencesTable.insert(ticket, entry); return futureInterface.future(); @@ -229,6 +231,7 @@ CppTools::CursorInfo::Range toCursorInfoRange(const QTextDocument &textDocument, static CppTools::CursorInfo toCursorInfo(const QTextDocument &textDocument, + const CppTools::SemanticInfo::LocalUseMap &localUses, const ReferencesMessage &message) { CppTools::CursorInfo result; @@ -239,6 +242,7 @@ CppTools::CursorInfo toCursorInfo(const QTextDocument &textDocument, result.useRanges.append(toCursorInfoRange(textDocument, reference)); result.useRanges.reserve(references.size()); + result.localUses = localUses; return result; } @@ -257,7 +261,7 @@ void IpcReceiver::references(const ReferencesMessage &message) return; // Editor document closed or a new request was issued making this result outdated. QTC_ASSERT(entry.textDocument, return); - futureInterface.reportResult(toCursorInfo(*entry.textDocument, message)); + futureInterface.reportResult(toCursorInfo(*entry.textDocument, entry.localUses, message)); futureInterface.reportFinished(); } @@ -672,12 +676,14 @@ QFuture<CppTools::CursorInfo> IpcCommunicator::requestReferences( const FileContainer &fileContainer, quint32 line, quint32 column, - QTextDocument *textDocument) + QTextDocument *textDocument, + const CppTools::SemanticInfo::LocalUseMap &localUses) { const RequestReferencesMessage message(fileContainer, line, column); m_ipcSender->requestReferences(message); - return m_ipcReceiver.addExpectedReferencesMessage(message.ticketNumber(), textDocument); + return m_ipcReceiver.addExpectedReferencesMessage(message.ticketNumber(), textDocument, + localUses); } void IpcCommunicator::updateTranslationUnitWithRevisionCheck(Core::IDocument *document) diff --git a/src/plugins/clangcodemodel/clangbackendipcintegration.h b/src/plugins/clangcodemodel/clangbackendipcintegration.h index e98565f48c..842d68f266 100644 --- a/src/plugins/clangcodemodel/clangbackendipcintegration.h +++ b/src/plugins/clangcodemodel/clangbackendipcintegration.h @@ -75,8 +75,10 @@ public: void addExpectedCodeCompletedMessage(quint64 ticket, ClangCompletionAssistProcessor *processor); void deleteProcessorsOfEditorWidget(TextEditor::TextEditorWidget *textEditorWidget); - QFuture<CppTools::CursorInfo> addExpectedReferencesMessage(quint64 ticket, - QTextDocument *textDocument); + QFuture<CppTools::CursorInfo> + addExpectedReferencesMessage(quint64 ticket, + QTextDocument *textDocument, + const CppTools::SemanticInfo::LocalUseMap &localUses); bool isExpectingCodeCompletedMessage() const; void reset(); @@ -99,11 +101,14 @@ private: struct ReferencesEntry { ReferencesEntry() = default; ReferencesEntry(QFutureInterface<CppTools::CursorInfo> futureInterface, - QTextDocument *textDocument) + QTextDocument *textDocument, + const CppTools::SemanticInfo::LocalUseMap &localUses) : futureInterface(futureInterface) - , textDocument(textDocument) {} + , textDocument(textDocument) + , localUses(localUses) {} QFutureInterface<CppTools::CursorInfo> futureInterface; QPointer<QTextDocument> textDocument; + CppTools::SemanticInfo::LocalUseMap localUses; }; QHash<quint64, ReferencesEntry> m_referencesTable; }; @@ -149,9 +154,12 @@ public: void registerUnsavedFilesForEditor(const FileContainers &fileContainers); void unregisterUnsavedFilesForEditor(const FileContainers &fileContainers); void requestDocumentAnnotations(const ClangBackEnd::FileContainer &fileContainer); - QFuture<CppTools::CursorInfo> requestReferences(const FileContainer &fileContainer, - quint32 line, - quint32 column, QTextDocument *textDocument); + QFuture<CppTools::CursorInfo> requestReferences( + const FileContainer &fileContainer, + quint32 line, + quint32 column, + QTextDocument *textDocument, + const CppTools::SemanticInfo::LocalUseMap &localUses); void completeCode(ClangCompletionAssistProcessor *assistProcessor, const QString &filePath, quint32 line, quint32 column, diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp index e29f72ae9e..943c126c59 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp @@ -36,6 +36,7 @@ #include <diagnosticcontainer.h> #include <sourcelocationcontainer.h> +#include <cpptools/builtincursorinfo.h> #include <cpptools/clangdiagnosticconfigsmodel.h> #include <cpptools/clangdiagnosticconfigsmodel.h> #include <cpptools/compileroptionsbuilder.h> @@ -334,11 +335,14 @@ ClangEditorDocumentProcessor::cursorInfo(const CppTools::CursorInfoParams ¶m const QTextBlock block = params.textCursor.document()->findBlockByNumber(line - 1); column += ClangCodeModel::Utils::extraUtf8CharsShift(block.text(), column); + const CppTools::SemanticInfo::LocalUseMap localUses + = CppTools::BuiltinCursorInfo::findLocalUses(params.semanticInfo.doc, line, column); return m_ipcCommunicator.requestReferences(simpleFileContainer(), static_cast<quint32>(line), static_cast<quint32>(column), - textDocument()); + textDocument(), + localUses); } ClangBackEnd::FileContainer ClangEditorDocumentProcessor::fileContainerWithArguments() const |