From 6b0d3bae3a0c015c3341a6d615a6b6d799322d8a Mon Sep 17 00:00:00 2001 From: Marcelo Lira Date: Fri, 16 Sep 2011 19:43:38 -0300 Subject: Fixed modifications to global functions. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also added unit test. Reviewed by Luciano Wolf Reviewed by Renato Araújo --- abstractmetabuilder.cpp | 10 +++++++++- tests/testmodifyfunction.cpp | 37 +++++++++++++++++++++++++++++++++++++ tests/testmodifyfunction.h | 1 + 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/abstractmetabuilder.cpp b/abstractmetabuilder.cpp index 9fc1674d8..c3ebe3b07 100644 --- a/abstractmetabuilder.cpp +++ b/abstractmetabuilder.cpp @@ -1945,8 +1945,16 @@ AbstractMetaFunction* AbstractMetaBuilder::traverseFunction(FunctionModelItem fu //use relace-default-expression for set default value QString replacedExpression; - if (m_currentClass) + if (m_currentClass) { replacedExpression = metaFunction->replacedDefaultExpression(m_currentClass, i + 1); + } else { + FunctionModificationList mods = TypeDatabase::instance()->functionModifications(metaFunction->minimalSignature()); + if (!mods.isEmpty()) { + QList argMods = mods.first().argument_mods; + if (!argMods.isEmpty()) + replacedExpression = argMods.first().replacedDefaultExpression; + } + } bool hasDefaultValue = false; if (arg->defaultValue() || !replacedExpression.isEmpty()) { diff --git a/tests/testmodifyfunction.cpp b/tests/testmodifyfunction.cpp index 245a3e169..93dae7536 100644 --- a/tests/testmodifyfunction.cpp +++ b/tests/testmodifyfunction.cpp @@ -201,6 +201,43 @@ void TestModifyFunction::testWithApiVersion() QVERIFY(func->ownership(func->ownerClass(), TypeSystem::TargetLangCode, 0) != TypeSystem::CppOwnership); } +void TestModifyFunction::testGlobalFunctionModification() +{ + const char* cppCode ="\ + struct A {};\ + void function(A* a = 0);\ + "; + const char* xmlCode = "\ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + "; + + TestUtil t(cppCode, xmlCode, false); + QCOMPARE(t.builder()->globalFunctions().size(), 1); + + FunctionModificationList mods = TypeDatabase::instance()->functionModifications("function(A*)"); + QCOMPARE(mods.count(), 1); + QList argMods = mods.first().argument_mods; + QCOMPARE(argMods.count(), 1); + ArgumentModification argMod = argMods.first(); + QCOMPARE(argMod.replacedDefaultExpression, QString("A()")); + + const AbstractMetaFunction* func = t.builder()->globalFunctions().first(); + QVERIFY(func); + QCOMPARE(func->arguments().count(), 1); + const AbstractMetaArgument* arg = func->arguments().first(); + QCOMPARE(arg->type()->cppSignature(), QString("A *")); + QCOMPARE(arg->originalDefaultValueExpression(), QString("0")); + QCOMPARE(arg->defaultValueExpression(), QString("A()")); +} QTEST_APPLESS_MAIN(TestModifyFunction) diff --git a/tests/testmodifyfunction.h b/tests/testmodifyfunction.h index 95b7b6a7f..d72a41ddc 100644 --- a/tests/testmodifyfunction.h +++ b/tests/testmodifyfunction.h @@ -34,6 +34,7 @@ class TestModifyFunction : public QObject void testWithApiVersion(); void testRenameArgument(); void invalidateAfterUse(); + void testGlobalFunctionModification(); }; #endif -- cgit v1.2.3