From 680f4703dbdf3d36b0a827c3e57ccd631c1b63a4 Mon Sep 17 00:00:00 2001 From: Peter Gromov Date: Wed, 8 Jan 2020 18:48:17 +0100 Subject: [PATCH] java completion: show initializers for non-imported fields (IDEA-226639) GitOrigin-RevId: c1aff6352023ed3a953ab8e32e1d1a34d8fcd8ae --- .../completion/MemberLookupHelper.java | 2 +- .../lookup/VariableLookupItem.java | 17 +++++++------- .../ShowNonImportedVarInitializers.java | 22 +++++++++++++++++++ .../completion/NormalCompletionTest.groovy | 18 ++++++++++----- 4 files changed, 45 insertions(+), 14 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/normal/ShowNonImportedVarInitializers.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/MemberLookupHelper.java b/java/java-impl/src/com/intellij/codeInsight/completion/MemberLookupHelper.java index 81a63b56ef6c..683563757a04 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/MemberLookupHelper.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/MemberLookupHelper.java @@ -85,7 +85,7 @@ public class MemberLookupHelper { : myMember instanceof PsiMethod ? getMethodParameterString((PsiMethod)myMember, substitutor) : ""; - presentation.clearTail(); + presentation.appendTailText(params, false); if (myShouldImport && StringUtil.isNotEmpty(className)) { presentation.appendTailText(" in " + className + location, true); diff --git a/java/java-impl/src/com/intellij/codeInsight/lookup/VariableLookupItem.java b/java/java-impl/src/com/intellij/codeInsight/lookup/VariableLookupItem.java index f82f51e5abb7..50ac800e2c65 100644 --- a/java/java-impl/src/com/intellij/codeInsight/lookup/VariableLookupItem.java +++ b/java/java-impl/src/com/intellij/codeInsight/lookup/VariableLookupItem.java @@ -1,7 +1,8 @@ // Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.codeInsight.lookup; -import com.intellij.codeInsight.*; +import com.intellij.codeInsight.AutoPopupController; +import com.intellij.codeInsight.TailType; import com.intellij.codeInsight.completion.*; import com.intellij.codeInsight.daemon.impl.JavaColorProvider; import com.intellij.codeInsight.daemon.impl.analysis.HighlightControlFlowUtil; @@ -135,6 +136,13 @@ public class VariableLookupItem extends LookupItem implements Typed presentation.setIcon(DefaultLookupItemRenderer.getRawIcon(this, presentation.isReal())); presentation.setStrikeout(JavaElementLookupRenderer.isToStrikeout(this)); + if (myTailText != null) { + if (myTailText.startsWith(EQ)) { + presentation.appendTailTextItalic(" (" + myTailText + ")", true); + } else { + presentation.setTailText(myTailText, true); + } + } if (myHelper != null) { myHelper.renderElement(presentation, qualify, true, getSubstitutor()); } @@ -143,13 +151,6 @@ public class VariableLookupItem extends LookupItem implements Typed } else { presentation.setTypeText(getType().getPresentableText()); } - if (myTailText != null && StringUtil.isEmpty(presentation.getTailText())) { - if (myTailText.startsWith(EQ)) { - presentation.appendTailTextItalic(" (" + myTailText + ")", true); - } else { - presentation.setTailText(myTailText, true); - } - } } @Override diff --git a/java/java-tests/testData/codeInsight/completion/normal/ShowNonImportedVarInitializers.java b/java/java-tests/testData/codeInsight/completion/normal/ShowNonImportedVarInitializers.java new file mode 100644 index 000000000000..a93882297ad1 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/ShowNonImportedVarInitializers.java @@ -0,0 +1,22 @@ +import static E.FIELD3; + +class X { + { + FIELD + } +} + +enum E { + FIELD1( "x"), + FIELD2("y") { + public String toString() { + return super.toString(); + } + }, + FIELD3 {}; + + E(String s) { + } + + public static final int FIELD4 = 42; +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.groovy index 48e2ad2a6374..cf4e091b8d94 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.groovy @@ -1706,11 +1706,19 @@ class Bar { void testShowVarInitializers() { configure() - assert LookupElementPresentation.renderElement(myFixture.lookup.items[0]).tailText == '( "x")' - assert LookupElementPresentation.renderElement(myFixture.lookup.items[1]).tailText == '("y") {...}' - assert !LookupElementPresentation.renderElement(myFixture.lookup.items[2]).tailText - assert LookupElementPresentation.renderElement(myFixture.lookup.items[3]).tailText == ' ( = 42)' - assert LookupElementPresentation.renderElement(myFixture.lookup.items[3]).tailFragments[0].italic + myFixture.assertPreferredCompletionItems 0, 'FIELD1', 'FIELD2', 'FIELD3', 'FIELD4' + def items = myFixture.lookup.items + assert items.collect { LookupElementPresentation.renderElement(it).tailText } == ['( "x")', '("y") {...}', null, ' ( = 42)'] + assert LookupElementPresentation.renderElement(items[3]).tailFragments[0].italic + } + + void testShowNonImportedVarInitializers() { + configure() + myFixture.assertPreferredCompletionItems 1, 'Field', 'FIELD1', 'FIELD2', 'FIELD3', 'FIELD4' + def fieldItems = myFixture.lookup.items[1..4] + assert fieldItems.collect { LookupElementPresentation.renderElement(it).tailText } == ['( "x") in E', '("y") {...} in E', null, ' ( = 42) in E'] + assert LookupElementPresentation.renderElement(fieldItems[3]).tailFragments[0].italic + assert !LookupElementPresentation.renderElement(fieldItems[3]).tailFragments[1].italic } void testSuggestInterfaceArrayWhenObjectIsExpected() {