[java][switch completion] IDEA-271902 Fix the completion tail in case labels

Java didn't use to have switch expressions and the insert handler for switch statements simply inserted ":" at the end of a case label. In the presence of switch expressions such an automatic completion is not correct anymore.

The SwitchUtils#isRuleFormatSwitch method checks if the passed switch block is actually a switch expression, this fix allows TailTypes.forSwitchLabel return the correct tail type.

Type references in case labels are most likely used as a pattern matching variables, so JavaPsiClassReferenceElement overrides the handleInsert method which checks if it's appropriate to add a pattern variable to the declaration.

Signed-off-by: Nikita Eshkeev <nikita.eshkeev@jetbrains.com>

GitOrigin-RevId: 7b6d381d528136dbedc181ae756cef374938983a
This commit is contained in:
Nikita Eshkeev
2021-07-07 18:49:13 +00:00
committed by intellij-monorepo-bot
parent db22db3c14
commit c03aca779d
11 changed files with 130 additions and 33 deletions
@@ -0,0 +1,8 @@
class Main {
int f(Object o) {
return switch(o) {
case Intege<caret>
}
}
}