diff options
author | Christian Stenger <christian.stenger@theqtcompany.com> | 2015-08-03 14:56:18 +0200 |
---|---|---|
committer | Christian Stenger <christian.stenger@theqtcompany.com> | 2015-08-24 16:50:30 +0300 |
commit | afcb9283b0f7f8a8e9f1c1376b378353f6a6fd9d (patch) | |
tree | 05e52d3f512150504719901fd73918b73c9cf6ff | |
parent | c405a4bc87016b001ead2f7e044a74ff0edb40b1 (diff) | |
download | qt-creator-afcb9283b0f7f8a8e9f1c1376b378353f6a6fd9d.tar.gz |
Store location of definition of functions...
...instead of declarations. Declarations will now be used only as
fallback if definition cannot be found for some reason.
Change-Id: I1b79622e70d2227cd715f3d82b12f36997080a2e
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
Reviewed-by: Niels Weber <niels.weber@theqtcompany.com>
-rw-r--r-- | plugins/autotest/testvisitor.cpp | 16 | ||||
-rw-r--r-- | plugins/autotest/testvisitor.h | 3 |
2 files changed, 15 insertions, 4 deletions
diff --git a/plugins/autotest/testvisitor.cpp b/plugins/autotest/testvisitor.cpp index 2d38cb56b4..d0179c1ca7 100644 --- a/plugins/autotest/testvisitor.cpp +++ b/plugins/autotest/testvisitor.cpp @@ -68,11 +68,19 @@ bool TestVisitor::visit(CPlusPlus::Class *symbol) if (const auto func = type->asFunctionType()) { if (func->isSlot() && member->isPrivate()) { const QString name = o.prettyName(func->name()); - // TODO use definition of function instead of declaration! TestCodeLocationAndType locationAndType; - locationAndType.m_fileName = QLatin1String(member->fileName()); - locationAndType.m_line = member->line(); - locationAndType.m_column = member->column() - 1; + + CPlusPlus::Function *functionDefinition = m_symbolFinder.findMatchingDefinition( + func, CppTools::CppModelManager::instance()->snapshot(), true); + if (functionDefinition) { + locationAndType.m_fileName = QString::fromUtf8(functionDefinition->fileName()); + locationAndType.m_line = functionDefinition->line(); + locationAndType.m_column = functionDefinition->column() - 1; + } else { // if we cannot find the definition use declaration as fallback + locationAndType.m_fileName = QString::fromUtf8(member->fileName()); + locationAndType.m_line = member->line(); + locationAndType.m_column = member->column() - 1; + } if (specialFunctions.contains(name)) locationAndType.m_type = TestTreeItem::TEST_SPECIALFUNCTION; else if (name.endsWith(QLatin1String("_data"))) diff --git a/plugins/autotest/testvisitor.h b/plugins/autotest/testvisitor.h index 279aca6cbe..07d5835293 100644 --- a/plugins/autotest/testvisitor.h +++ b/plugins/autotest/testvisitor.h @@ -27,6 +27,8 @@ #include <cplusplus/Scope.h> #include <cplusplus/SymbolVisitor.h> +#include <cpptools/symbolfinder.h> + #include <qmljs/parser/qmljsastvisitor_p.h> #include <qmljs/qmljsdocument.h> @@ -47,6 +49,7 @@ public: bool visit(CPlusPlus::Class *symbol); private: + CppTools::SymbolFinder m_symbolFinder; QString m_className; QMap<QString, TestCodeLocationAndType> m_privSlots; }; |