diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp index cbc04f6a673..962afeddd0f 100644 --- a/src/plugins/cppeditor/cppquickfix_test.cpp +++ b/src/plugins/cppeditor/cppquickfix_test.cpp @@ -514,6 +514,21 @@ void CppEditorPlugin::test_quickfix_data() "}\n" ); + // Checks: Do not crash on incomplete case statetement. + QTest::newRow("CompleteSwitchCaseStatement_doNotCrashOnIncompleteCase") + << CppQuickFixFactoryPtr(new CompleteSwitchCaseStatement) << _( + "enum E {};\n" + "void f(E o)\n" + "{\n" + " @switch (o)\n" + " {\n" + " case\n" + " }\n" + "}\n" + ) << _( + "" + ); + // Checks: // 1. If the name does not start with ("m_" or "_") and does not // end with "_", we are forced to prefix the getter with "get". diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp index 736638ef921..28d711cf8e1 100644 --- a/src/plugins/cppeditor/cppquickfixes.cpp +++ b/src/plugins/cppeditor/cppquickfixes.cpp @@ -2212,11 +2212,13 @@ public: bool preVisit(AST *ast) { if (CaseStatementAST *cs = ast->asCaseStatement()) { foundCaseStatementLevel = true; - if (ExpressionAST *expression = cs->expression->asIdExpression()) { - QList candidates = typeOfExpression(expression, document, scope); - if (!candidates .isEmpty() && candidates.first().declaration()) { - Symbol *decl = candidates.first().declaration(); - values << prettyPrint.prettyName(LookupContext::fullyQualifiedName(decl)); + if (ExpressionAST *csExpression = cs->expression) { + if (ExpressionAST *expression = csExpression->asIdExpression()) { + QList candidates = typeOfExpression(expression, document, scope); + if (!candidates .isEmpty() && candidates.first().declaration()) { + Symbol *decl = candidates.first().declaration(); + values << prettyPrint.prettyName(LookupContext::fullyQualifiedName(decl)); + } } } return true;