summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Stenger <christian.stenger@theqtcompany.com>2015-08-03 14:56:18 +0200
committerChristian Stenger <christian.stenger@theqtcompany.com>2015-08-24 16:50:30 +0300
commitafcb9283b0f7f8a8e9f1c1376b378353f6a6fd9d (patch)
tree05e52d3f512150504719901fd73918b73c9cf6ff
parentc405a4bc87016b001ead2f7e044a74ff0edb40b1 (diff)
downloadqt-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.cpp16
-rw-r--r--plugins/autotest/testvisitor.h3
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;
};