From 9ba1bb61f17f99040ef4083e409c5d4e0abdcd4a Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Date: Tue, 19 May 2015 10:47:17 +0200
Subject: [PATCH] dumpcpp: Speculative fix for methods taking array type
 parameters.

QMetaMethod::methodSignature() produces for an invokable slot with
array type parameters (void foo(const char p1[10],int p2)):
foo(const char[10],int)
Split off the array specification and append it to the parameter name.

Task-number: QTBUG-46177
Change-Id: I58670570357472f6f5b7fcf0e841d3b7cb4189c8
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
---
 tools/dumpcpp/main.cpp | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/tools/dumpcpp/main.cpp b/tools/dumpcpp/main.cpp
index 4ec7697f..691e723f 100644
--- a/tools/dumpcpp/main.cpp
+++ b/tools/dumpcpp/main.cpp
@@ -432,9 +432,16 @@ void generateClassDecl(QTextStream &out, const QString &controlID, const QMetaOb
                 if (!parameterType.contains("::") && namespaceForType.contains(parameterType))
                     parameterType.prepend(namespaceForType.value(parameterType) + "::");
 
+                QByteArray arraySpec; // transform array method signature "foo(int[4])" ->"foo(int p[4])"
+                const int arrayPos = parameterType.lastIndexOf('[');
+                if (arrayPos != -1) {
+                    arraySpec = parameterType.right(parameterType.size() - arrayPos);
+                    parameterType.truncate(arrayPos);
+                }
                 slotNamedSignature += constRefify(parameterType);
                 slotNamedSignature += ' ';
                 slotNamedSignature += parameterSplit.at(i);
+                slotNamedSignature += arraySpec;
                 if (defaultArguments >= signatureSplit.count() - i) {
                     slotNamedSignature += " = ";
                     slotNamedSignature += parameterType + "()";
-- 
GitLab