summaryrefslogtreecommitdiff
path: root/src/qdoc/clangcodeparser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qdoc/clangcodeparser.cpp')
-rw-r--r--src/qdoc/clangcodeparser.cpp24
1 files changed, 14 insertions, 10 deletions
diff --git a/src/qdoc/clangcodeparser.cpp b/src/qdoc/clangcodeparser.cpp
index c28629941..ca8027909 100644
--- a/src/qdoc/clangcodeparser.cpp
+++ b/src/qdoc/clangcodeparser.cpp
@@ -1012,19 +1012,23 @@ void ClangVisitor::processFunction(FunctionNode *fn, CXCursor cursor)
if (!fn->isNonvirtual() && kind != CXCursor_Destructor)
setOverridesForFunction(fn, cursor);
- int numArg = clang_getNumArgTypes(funcType);
Parameters &parameters = fn->parameters();
parameters.clear();
- parameters.reserve(numArg);
-
- for (int i = 0; i < numArg; ++i) {
- CXType argType = clang_getArgType(funcType, i);
- parameters.append(adjustTypeName(fromCXString(clang_getTypeSpelling(argType))));
- if (argType.kind == CXType_Typedef || argType.kind == CXType_Elaborated) {
- parameters.last().setCanonicalType(fromCXString(
- clang_getTypeSpelling(clang_getCanonicalType(argType))));
- }
+ parameters.reserve(function_declaration->getNumParams());
+
+ const clang::LangOptions& lang_options = function_declaration->getASTContext().getLangOpts();
+ clang::PrintingPolicy p{lang_options};
+
+ for (clang::ParmVarDecl* const parameter_declaration : function_declaration->parameters()) {
+ clang::QualType parameter_type = parameter_declaration->getOriginalType();
+
+ parameters.append(adjustTypeName(QString::fromStdString(parameter_type.getAsString(p))));
+
+ if (!parameter_type.isCanonical())
+ parameters.last().setCanonicalType(QString::fromStdString(parameter_type.getCanonicalType().getAsString(p)));
}
+
+
if (parameters.count() > 0) {
if (parameters.last().type().endsWith(QLatin1String("QPrivateSignal"))) {
parameters.pop_back(); // remove the QPrivateSignal argument