CPlusPlus: Add missing type information for enum variables

Consider these two variable declarations:
  enum EX { EX1, EX2};
  EX ex;
  emum EY { EY1, EY2} ey;
The ex variable would correctly get assigned type EX, but the ey
variable would not have any type.
This is now fixed.

Task-number: QTCREATORBUG-7487
Change-Id: I3e09c5766fdb9e6baf3a8d7bc6f2fc581f2d824b
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This commit is contained in:
Christian Kandeler
2020-06-04 11:47:02 +02:00
parent eaea03ba42
commit 39047fac5b
2 changed files with 26 additions and 0 deletions

View File

@@ -3176,6 +3176,7 @@ bool Bind::visit(EnumSpecifierAST *ast)
} }
(void) switchScope(previousScope); (void) switchScope(previousScope);
_type.setType(control()->namedType(this->name(ast->name)));
return false; return false;
} }

View File

@@ -369,6 +369,31 @@ void CppEditorPlugin::test_quickfix_data()
"}\n" "}\n"
); );
// Checks: All enum values are added as case statements for a blank switch when
// the variable is declared alongside the enum definition.
QTest::newRow("CompleteSwitchCaseStatement_basic1_enum_with_declaration")
<< CppQuickFixFactoryPtr(new CompleteSwitchCaseStatement) << _(
"enum EnumType { V1, V2 } t;\n"
"\n"
"void f()\n"
"{\n"
" @switch (t) {\n"
" }\n"
"}\n"
) << _(
"enum EnumType { V1, V2 } t;\n"
"\n"
"void f()\n"
"{\n"
" switch (t) {\n"
" case V1:\n"
" break;\n"
" case V2:\n"
" break;\n"
" }\n"
"}\n"
);
// Checks: All enum values are added as case statements for a blank switch with a default case. // Checks: All enum values are added as case statements for a blank switch with a default case.
QTest::newRow("CompleteSwitchCaseStatement_basic2") QTest::newRow("CompleteSwitchCaseStatement_basic2")
<< CppQuickFixFactoryPtr(new CompleteSwitchCaseStatement) << _( << CppQuickFixFactoryPtr(new CompleteSwitchCaseStatement) << _(