summaryrefslogtreecommitdiff
path: root/src/plugins/clangcodemodel
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@qt.io>2017-08-18 14:51:32 +0200
committerNikolai Kosjar <nikolai.kosjar@qt.io>2017-08-22 10:01:31 +0000
commit0db7ad77a068d51764100fabeecce9a649b3ad58 (patch)
tree8def9c3cdb993c700a8f0e315e861d3788ce6dcb /src/plugins/clangcodemodel
parenta9ddbb61a4bed1cec59b8fb2d2b56ac25ba4254f (diff)
downloadqt-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')
-rw-r--r--src/plugins/clangcodemodel/clangbackendipcintegration.cpp18
-rw-r--r--src/plugins/clangcodemodel/clangbackendipcintegration.h22
-rw-r--r--src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp6
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 &param
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