From 1ef83d5b8df940794143d776c927d55f30f80386 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 12 Dec 2013 14:14:11 +0100 Subject: [PATCH] IDEA-117682 Annotation parameter completion: show defaults in variants popup --- .../completion/JavaCompletionContributor.java | 16 ++++++++++++++-- .../DisplayDefaultValueInAnnotationMethods.java | 9 +++++++++ .../completion/NormalCompletionTest.groovy | 14 ++++++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/normal/DisplayDefaultValueInAnnotationMethods.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java index 1cd098331978..4732480615a8 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java @@ -462,18 +462,30 @@ public class JavaCompletionContributor extends CompletionContributor { final PsiNameValuePair[] existingPairs = parameterList.getAttributes(); methods: for (PsiMethod method : annoClass.getMethods()) { + if (!(method instanceof PsiAnnotationMethod)) continue; + final String attrName = method.getName(); for (PsiNameValuePair apair : existingPairs) { if (Comparing.equal(apair.getName(), attrName)) continue methods; } - result.addElement(new LookupItem(method, attrName).setInsertHandler(new InsertHandler() { + LookupElementBuilder element = LookupElementBuilder.createWithIcon(method).withInsertHandler(new InsertHandler() { @Override public void handleInsert(InsertionContext context, LookupElement item) { final Editor editor = context.getEditor(); TailType.EQ.processTail(editor, editor.getCaretModel().getOffset()); context.setAddCompletionChar(false); } - })); + }); + + PsiAnnotationMemberValue defaultValue = ((PsiAnnotationMethod)method).getDefaultValue(); + if (defaultValue != null) { + Object constant = JavaPsiFacade.getInstance(method.getProject()).getConstantEvaluationHelper().computeConstantExpression(defaultValue); + if (constant != null) { + element = element.withTailText(" default " + (constant instanceof String ? "\"" + constant + "\"" : constant), true); + } + } + + result.addElement(element); } } } diff --git a/java/java-tests/testData/codeInsight/completion/normal/DisplayDefaultValueInAnnotationMethods.java b/java/java-tests/testData/codeInsight/completion/normal/DisplayDefaultValueInAnnotationMethods.java new file mode 100644 index 000000000000..2995c015818a --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/DisplayDefaultValueInAnnotationMethods.java @@ -0,0 +1,9 @@ +@interface Anno { + String myString() default "unknown"; + boolean myBool() default false; +} + +@Anno() +public class State { + +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy index 48febc3e52c2..ba7c4d2ad22e 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy @@ -100,6 +100,20 @@ public class NormalCompletionTest extends LightFixtureCompletionTestCase { assert "Param2" == presentation.itemText assert presentation.tailText == " (type parameter of goo)" } + + public void testDisplayDefaultValueInAnnotationMethods() { + configure() + LookupElementPresentation presentation = renderElement(myItems[0]) + assert "myBool" == presentation.itemText + assert presentation.tailText == " default false" + assert presentation.tailFragments[0].grayed + assert !presentation.typeText + assert !presentation.itemTextBold + + presentation = renderElement(myItems[1]) + assert "myString" == presentation.itemText + assert presentation.tailText == ' default "unknown"' + } public void testMethodItemPresentation() { configure()