mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-55146 Autocomplete case inside switch
indent, remove duplicates, restore completion after 'case' (IDEA-CR-12610)
This commit is contained in:
+1
-2
@@ -54,7 +54,6 @@ import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
import com.intellij.util.DocumentUtil;
|
||||
import com.intellij.util.PairConsumer;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -845,7 +844,7 @@ public class JavaCompletionContributor extends CompletionContributor {
|
||||
return null;
|
||||
}
|
||||
|
||||
private static class IndentingDecorator extends LookupElementDecorator<LookupElement> {
|
||||
static class IndentingDecorator extends LookupElementDecorator<LookupElement> {
|
||||
public IndentingDecorator(LookupElement delegate) {
|
||||
super(delegate);
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ import com.intellij.psi.util.InheritanceUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.util.Consumer;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -303,7 +304,11 @@ public class JavaKeywordCompletion {
|
||||
}
|
||||
|
||||
private static PsiSwitchStatement getSwitchFromLabelPosition(PsiElement position) {
|
||||
return PsiTreeUtil.getParentOfType(position, PsiSwitchStatement.class, false, PsiMember.class, PsiSwitchLabelStatement.class);
|
||||
PsiStatement statement = PsiTreeUtil.getParentOfType(position, PsiStatement.class, false, PsiMember.class);
|
||||
if (statement != null && !(statement instanceof PsiSwitchLabelStatement) && statement.getParent() instanceof PsiCodeBlock) {
|
||||
return ObjectUtils.tryCast(statement.getParent().getParent(), PsiSwitchStatement.class);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
static void addEnumCases(CompletionResultSet result, PsiElement position) {
|
||||
@@ -315,12 +320,18 @@ public class JavaKeywordCompletion {
|
||||
Set<PsiField> used = ReferenceExpressionCompletionContributor.findConstantsUsedInSwitch(switchStatement);
|
||||
for (PsiField field : switchType.getAllFields()) {
|
||||
String name = field.getName();
|
||||
if (!(field instanceof PsiEnumConstant) || used.contains(field) || name == null) {
|
||||
if (!(field instanceof PsiEnumConstant) || used.contains(CompletionUtil.getOriginalOrSelf(field)) || name == null) {
|
||||
continue;
|
||||
}
|
||||
String prefix = "case ";
|
||||
String suffix = name + ":";
|
||||
result.addElement(LookupElementBuilder.create(field, prefix + suffix).bold().withPresentableText(prefix).withTailText(suffix).withLookupString(name));
|
||||
LookupElementBuilder caseConst = LookupElementBuilder
|
||||
.create(field, prefix + suffix)
|
||||
.bold()
|
||||
.withPresentableText(prefix)
|
||||
.withTailText(suffix)
|
||||
.withLookupString(name);
|
||||
result.addElement(new JavaCompletionContributor.IndentingDecorator(caseConst));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
public class StructuredConfigKey {
|
||||
{
|
||||
switch (x) {
|
||||
case 2:
|
||||
while (true) <caret>
|
||||
}
|
||||
}
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
class A extends Base{
|
||||
void foo(B b){
|
||||
switch(b) {
|
||||
case FOO:
|
||||
GOO<caret>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enum B{
|
||||
FOO, BAR, GOO
|
||||
}
|
||||
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
class A extends Base{
|
||||
void foo(B b){
|
||||
switch(b) {
|
||||
case FOO:
|
||||
case GOO:<caret>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enum B{
|
||||
FOO, BAR, GOO
|
||||
}
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ class A extends Base{
|
||||
void foo(){
|
||||
B x = null;
|
||||
switch(x){
|
||||
case GOO:<caret>
|
||||
case GOO:<caret>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -126,6 +126,7 @@ public class KeywordCompletionTest extends LightCompletionTestCase {
|
||||
public void testFinalAfterParameterAnno() throws Exception { doTest(2, "final", "float", "class"); }
|
||||
public void testFinalAfterParameterAnno2() throws Exception { doTest(2, "final", "float", "class"); }
|
||||
public void testFinalAfterCase() { doTest(3, "final", "float", "class"); }
|
||||
public void testNoCaseInsideWhileInSwitch() { doTest(0, "case", "default"); }
|
||||
public void testFinalInCatch() { doTest(1, "final"); }
|
||||
public void testFinalInIncompleteCatch() { doTest(1, "final"); }
|
||||
public void testFinalInTryWithResources() throws Exception { doTest(1, "final", "float", "class"); }
|
||||
|
||||
+1
@@ -291,6 +291,7 @@ public class NormalCompletionTest extends LightFixtureCompletionTestCase {
|
||||
}
|
||||
|
||||
public void testSwitchCaseWithEnumConstant() { doTest() }
|
||||
public void testSecondSwitchCaseWithEnumConstant() { doTest() }
|
||||
|
||||
public void testMethodInAnnotation() throws Exception {
|
||||
configureByFile("Annotation.java");
|
||||
|
||||
Reference in New Issue
Block a user