diff --git a/ide-test/org.codehaus.groovy.eclipse.codeassist.completion.test/src/org/codehaus/groovy/eclipse/codeassist/tests/AnnotationCompletionTests.groovy b/ide-test/org.codehaus.groovy.eclipse.codeassist.completion.test/src/org/codehaus/groovy/eclipse/codeassist/tests/AnnotationCompletionTests.groovy index a00ab2e01c..a074633d55 100644 --- a/ide-test/org.codehaus.groovy.eclipse.codeassist.completion.test/src/org/codehaus/groovy/eclipse/codeassist/tests/AnnotationCompletionTests.groovy +++ b/ide-test/org.codehaus.groovy.eclipse.codeassist.completion.test/src/org/codehaus/groovy/eclipse/codeassist/tests/AnnotationCompletionTests.groovy @@ -374,6 +374,35 @@ final class AnnotationCompletionTests extends CompletionTestSuite { assertThat(proposals).excludes('one', 'three').includes('two') } + @Test // https://github.com/groovy/groovy-eclipse/issues/769 + void testAnnoAttr12() { + addJavaSource '''\ + package p; + import java.lang.annotation.*; + @Target(ElementType.METHOD) + public @interface A { + boolean one(); + String two(); + } + ''', 'A', 'p' + + addJavaSource '''\ + package p; + public class Three { + } + ''', 'Three', 'p' + + String contents = '''\ + import p.* + @A(one=false, t) + class Something { + } + '''.stripIndent() + def proposals = getProposals(contents, ', t') + + assertThat(proposals).excludes('one', 'Three').includes('two') + } + @Test void testAnnoAttrPacks() { String contents = '''\ diff --git a/ide/org.codehaus.groovy.eclipse.codeassist.completion/src/org/codehaus/groovy/eclipse/codeassist/factories/AnnotationMemberValueCompletionProcessorFactory.java b/ide/org.codehaus.groovy.eclipse.codeassist.completion/src/org/codehaus/groovy/eclipse/codeassist/factories/AnnotationMemberValueCompletionProcessorFactory.java index 00d0caec5f..f47ecd6bf1 100644 --- a/ide/org.codehaus.groovy.eclipse.codeassist.completion/src/org/codehaus/groovy/eclipse/codeassist/factories/AnnotationMemberValueCompletionProcessorFactory.java +++ b/ide/org.codehaus.groovy.eclipse.codeassist.completion/src/org/codehaus/groovy/eclipse/codeassist/factories/AnnotationMemberValueCompletionProcessorFactory.java @@ -79,14 +79,14 @@ public List generateProposals(IProgressMonitor monitor) { try { List proposals = new ArrayList<>(); String memberName = getPerceivedCompletionMember(); + boolean memberFound = !getAnnotation().getClassNode().getMethods(memberName).isEmpty(); - if (memberName == null || isImplicitValueExpression() || - getAnnotation().getClassNode().getMethods(memberName).isEmpty()) { + if (!memberFound || isImplicitValueExpression()) { generateAnnotationMemberProposals(proposals); } monitor.worked(1); - if (memberName != null || (getAnnotation().getMembers().isEmpty() && isImplicitValueSupported())) { + if (memberFound || (isImplicitValueSupported() && getAnnotation().getMembers().isEmpty())) { generateAnnotationMemberValueProposals(proposals, memberName != null ? memberName : "value", monitor); } monitor.worked(1);