diff --git a/plugins/clang/codegen/adaptsignatureassistant.cpp b/plugins/clang/codegen/adaptsignatureassistant.cpp --- a/plugins/clang/codegen/adaptsignatureassistant.cpp +++ b/plugins/clang/codegen/adaptsignatureassistant.cpp @@ -48,8 +48,19 @@ bool isConstructor(const Declaration *functionDecl) { + ENSURE_CHAIN_READ_LOCKED auto classFun = dynamic_cast(functionDecl); - return classFun && classFun->isConstructor(); + if(classFun) { + return classFun->isConstructor(); + } + + auto funDef = dynamic_cast(functionDecl); + if(funDef && funDef->hasDeclaration()) { + auto funDec = funDef->declaration(); + auto classFun = dynamic_cast(funDec); + return classFun && classFun->isConstructor(); + } + return false; } Signature getDeclarationSignature(const Declaration *functionDecl, const DUContext *functionCtxt, bool includeDefaults) diff --git a/plugins/clang/tests/test_assistants.cpp b/plugins/clang/tests/test_assistants.cpp --- a/plugins/clang/tests/test_assistants.cpp +++ b/plugins/clang/tests/test_assistants.cpp @@ -484,6 +484,14 @@ << "class Foo { Foo(char c); };" << "Foo::Foo(char c)\n{}"; + // see https://bugs.kde.org/show_bug.cgi?id=365420 + QTest::newRow("no_retval_on_ctor_while_editing_definition") + << "class Foo {\nFoo(int a); \n};" + << "Foo::Foo(int a)\n{}" + << (QList() << StateChange(Testbed::CppDoc, Range(0,13,0,14), QStringLiteral("b"), SHOULD_ASSIST)) + << "class Foo {\nFoo(int b); \n};" + << "Foo::Foo(int b)\n{}"; + // see https://bugs.kde.org/show_bug.cgi?id=298511 QTest::newRow("change_return_type_header") << "struct Foo { int bar(); };"