diff --git a/src/plugins/autotest/testcodeparser.cpp b/src/plugins/autotest/testcodeparser.cpp index 990f7348f36..e39400d2e9a 100644 --- a/src/plugins/autotest/testcodeparser.cpp +++ b/src/plugins/autotest/testcodeparser.cpp @@ -404,31 +404,31 @@ static CPlusPlus::Document::Ptr declaringDocument(CPlusPlus::Document::Ptr doc, return declaringDoc; } -static bool hasFunctionWithDataTagUsage(const QMap &testFunctions) -{ - foreach (const QString &functionName, testFunctions.keys()) { - if (functionName.endsWith(QLatin1String("_data")) && - testFunctions.contains(functionName.left(functionName.size() - 5))) { - return true; - } - } - return false; -} - -static QMap checkForDataTags(const QString &fileName, +static QSet filesWithDataFunctionDefinitions( const QMap &testFunctions) { - if (hasFunctionWithDataTagUsage(testFunctions)) { - const CPlusPlus::Snapshot snapshot = CPlusPlus::CppModelManagerBase::instance()->snapshot(); - const QByteArray fileContent = getFileContent(fileName); - CPlusPlus::Document::Ptr document = snapshot.preprocessedDocument(fileContent, fileName); - document->check(); - CPlusPlus::AST *ast = document->translationUnit()->ast(); - TestDataFunctionVisitor visitor(document); - visitor.accept(ast); - return visitor.dataTags(); + QSet result; + QMap::ConstIterator it = testFunctions.begin(); + const QMap::ConstIterator end = testFunctions.end(); + + for ( ; it != end; ++it) { + const QString &key = it.key(); + if (key.endsWith(QLatin1String("_data")) && testFunctions.contains(key.left(key.size() - 5))) + result.insert(it.value().m_name); } - return QMap(); + return result; +} + +static QMap checkForDataTags(const QString &fileName) +{ + const CPlusPlus::Snapshot snapshot = CPlusPlus::CppModelManagerBase::instance()->snapshot(); + const QByteArray fileContent = getFileContent(fileName); + CPlusPlus::Document::Ptr document = snapshot.preprocessedDocument(fileContent, fileName); + document->check(); + CPlusPlus::AST *ast = document->translationUnit()->ast(); + TestDataFunctionVisitor visitor(document); + visitor.accept(ast); + return visitor.dataTags(); } /****** end of helpers ******/ @@ -549,12 +549,11 @@ static void checkDocumentForTestCode(QFutureInterface futureInt return; const QMap testFunctions = visitor.privateSlots(); + const QSet &files = filesWithDataFunctionDefinitions(testFunctions); - QMap dataTags = - checkForDataTags(declaringDoc->fileName(), testFunctions); - - if (declaringDoc->fileName() != document->fileName()) - dataTags.unite(checkForDataTags(document->fileName(), testFunctions)); + QMap dataTags; + foreach (const QString &file, files) + dataTags.unite(checkForDataTags(file)); TestParseResult parseResult(TestTreeModel::AutoTest); parseResult.fileName = declaringDoc->fileName();