From afcb9283b0f7f8a8e9f1c1376b378353f6a6fd9d Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Mon, 3 Aug 2015 14:56:18 +0200 Subject: 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 Reviewed-by: Niels Weber --- plugins/autotest/testvisitor.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'plugins/autotest/testvisitor.cpp') 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"))) -- cgit v1.2.1