aboutsummaryrefslogtreecommitdiffstats
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)
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;
};