CppEditor: Fix crash on proposal creation

The assumption that all items are CppAssistProposalItem is wrong.
Snippets items have been AssistProposalItems, and since
22c72f9999 they are SnippetProposalItems.

Change-Id: Ic483741f6e7eb5382d327702600c88d6ec6e30ed
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
David Schulz
2023-06-19 07:43:13 +02:00
parent 8e9f34662e
commit 8ea70c5185

View File

@@ -850,20 +850,20 @@ IAssistProposal *InternalCppCompletionAssistProcessor::createContentProposal()
QSet<QString> processed;
auto it = m_completions.begin();
while (it != m_completions.end()) {
auto item = static_cast<CppAssistProposalItem *>(*it);
if (!processed.contains(item->text()) || item->isSnippet()) {
if ((*it)->isSnippet()) {
++it;
if (!item->isSnippet()) {
processed.insert(item->text());
if (!item->isOverloaded()) {
if (auto symbol = qvariant_cast<Symbol *>(item->data())) {
if (Function *funTy = symbol->type()->asFunctionType()) {
if (funTy->hasArguments())
item->markAsOverloaded();
}
} else if (!processed.contains((*it)->text())) {
auto item = static_cast<CppAssistProposalItem *>(*it);
processed.insert(item->text());
if (!item->isOverloaded()) {
if (auto symbol = qvariant_cast<Symbol *>(item->data())) {
if (Function *funTy = symbol->type()->asFunctionType()) {
if (funTy->hasArguments())
item->markAsOverloaded();
}
}
}
++it;
} else {
delete *it;
it = m_completions.erase(it);