@@ -2048,6 +2048,15 @@ public void complete(org.eclipse.jdt.internal.compiler.env.ICompilationUnit sour
20482048
20492049 if (suggestDefaultCompletions ) {
20502050 statementLikeKeywords ();
2051+ if (this .expectedTypes .getExpectedTypes ().size () == 1 && toComplete instanceof SimpleName simple ) {
2052+ ITypeBinding expected = this .expectedTypes .getExpectedTypes ().getFirst ();
2053+ if (expected .isEnum ()) {
2054+ Arrays .stream (expected .getDeclaredFields ())
2055+ .filter (field -> field .getName ().startsWith (this .prefix ))
2056+ .map (this ::toProposal )
2057+ .forEach (this .requestor ::accept );
2058+ }
2059+ }
20512060 if (!this .prefix .isEmpty () && this .extendsOrImplementsInfo == null ) {
20522061 suggestTypeKeywords (DOMCompletionUtil .findParent (this .toComplete , new int [] { ASTNode .BLOCK }) == null );
20532062 }
@@ -3896,28 +3905,21 @@ private CompletionProposal toProposal(IBinding binding, String completion) {
38963905 }
38973906 } else if (kind == CompletionProposal .LOCAL_VARIABLE_REF ) {
38983907 var variableBinding = (IVariableBinding ) binding ;
3899- res .setSignature (
3900- Signature .createTypeSignature (variableBinding .getType ().getQualifiedName ().toCharArray (), true )
3901- .toCharArray ());
3908+ res .setSignature (SignatureUtils .getSignatureChar (variableBinding .getType ()));
39023909 } else if (kind == CompletionProposal .FIELD_REF ) {
39033910 var variableBinding = (IVariableBinding ) binding ;
39043911 ITypeBinding declaringClass = variableBinding .getDeclaringClass ();
3905- res .setSignature (
3906- Signature .createTypeSignature (variableBinding .getType ().getQualifiedName ().toCharArray (), true )
3907- .toCharArray ());
3912+ res .setSignature (SignatureUtils .getSignatureChar (variableBinding .getType ()));
39083913 if (declaringClass != null && !declaringClass .getQualifiedName ().isEmpty ()) {
3909- char [] declSignature = Signature
3910- .createTypeSignature (
3911- declaringClass .getQualifiedName ().toCharArray (), true )
3912- .toCharArray ();
3914+ char [] declSignature = SignatureUtils .getSignatureChar (declaringClass );
39133915 res .setDeclarationSignature (declSignature );
39143916 } else if (declaringClass != null && declaringClass .isAnonymous ()) {
39153917 res .setDeclarationSignature (SignatureUtils .getSignatureChar (declaringClass .getSuperclass ()));
39163918 } else {
39173919 res .setDeclarationSignature (new char [0 ]);
39183920 }
39193921
3920- if ((variableBinding .getModifiers () & Flags .AccStatic ) != 0 ) {
3922+ if ((variableBinding .getModifiers () & Flags .AccStatic ) != 0 || variableBinding . isEnumConstant () ) {
39213923 ITypeBinding topLevelClass = variableBinding .getDeclaringClass ();
39223924 while (topLevelClass .getDeclaringClass () != null ) {
39233925 topLevelClass = topLevelClass .getDeclaringClass ();
@@ -3949,8 +3951,7 @@ private CompletionProposal toProposal(IBinding binding, String completion) {
39493951 }
39503952 } else if (kind == CompletionProposal .TYPE_REF ) {
39513953 var typeBinding = (ITypeBinding ) binding ;
3952- res .setSignature (
3953- Signature .createTypeSignature (typeBinding .getQualifiedName ().toCharArray (), true ).toCharArray ());
3954+ res .setSignature (SignatureUtils .getSignatureChar (typeBinding ));
39543955 } else if (kind == CompletionProposal .ANNOTATION_ATTRIBUTE_REF ) {
39553956 var methodBinding = (IMethodBinding ) binding ;
39563957 StringBuilder annotationCompletion = new StringBuilder (completion );
@@ -3963,14 +3964,9 @@ private CompletionProposal toProposal(IBinding binding, String completion) {
39633964 annotationCompletion .append (' ' );
39643965 }
39653966 res .setCompletion (annotationCompletion .toString ().toCharArray ());
3966- res .setSignature (Signature .createTypeSignature (qualifiedTypeName (methodBinding .getReturnType ()), true )
3967- .toCharArray ());
3968- res .setReceiverSignature (Signature
3969- .createTypeSignature (methodBinding .getDeclaringClass ().getQualifiedName ().toCharArray (), true )
3970- .toCharArray ());
3971- res .setDeclarationSignature (Signature
3972- .createTypeSignature (methodBinding .getDeclaringClass ().getQualifiedName ().toCharArray (), true )
3973- .toCharArray ());
3967+ res .setSignature (SignatureUtils .getSignatureChar (methodBinding .getReturnType ()));
3968+ res .setReceiverSignature (SignatureUtils .getSignatureChar (methodBinding .getDeclaringClass ()));
3969+ res .setDeclarationSignature (SignatureUtils .getSignatureChar (methodBinding .getDeclaringClass ()));
39743970 } else {
39753971 res .setSignature (new char [] {});
39763972 res .setReceiverSignature (new char [] {});
@@ -4068,7 +4064,7 @@ private String qualifiedTypeName(ITypeBinding typeBinding) {
40684064 private CompletionProposal toProposal (IType type ) {
40694065 DOMInternalCompletionProposal res = createProposal (CompletionProposal .TYPE_REF );
40704066 char [] simpleName = type .getElementName ().toCharArray ();
4071- char [] signature = Signature . createTypeSignature (type . getFullyQualifiedName (), true ).toCharArray ();
4067+ char [] signature = SignatureUtils . createSignature (type ).toCharArray ();
40724068
40734069 res .setSignature (signature );
40744070
@@ -4430,7 +4426,7 @@ private CompletionProposal toConstructorProposal(IMethod method, boolean isExact
44304426
44314427 IPackageFragment packageFragment = (IPackageFragment )declaringClass .getAncestor (IJavaElement .PACKAGE_FRAGMENT );
44324428
4433- res .setDeclarationSignature (Signature . createTypeSignature (declaringClass . getFullyQualifiedName (), true ).toCharArray ());
4429+ res .setDeclarationSignature (SignatureUtils . createSignature (declaringClass ).toCharArray ());
44344430 res .setDeclarationTypeName (simpleName );
44354431 res .setDeclarationPackageName (packageFragment .getElementName ().toCharArray ());
44364432 res .setParameterPackageNames (CharOperation .NO_CHAR_CHAR );
@@ -4492,7 +4488,7 @@ private CompletionProposal toDefaultConstructorProposal(IType type, boolean isEx
44924488
44934489 IPackageFragment packageFragment = (IPackageFragment )type .getAncestor (IJavaElement .PACKAGE_FRAGMENT );
44944490
4495- res .setDeclarationSignature (Signature . createTypeSignature (type . getFullyQualifiedName (), true ).toCharArray ());
4491+ res .setDeclarationSignature (SignatureUtils . createSignature (type ).toCharArray ());
44964492 res .setDeclarationTypeName (simpleName );
44974493 res .setDeclarationPackageName (packageFragment .getElementName ().toCharArray ());
44984494 res .setParameterPackageNames (CharOperation .NO_CHAR_CHAR );
@@ -4536,7 +4532,7 @@ private CompletionProposal toDefaultConstructorProposal(IType type, boolean isEx
45364532
45374533 private CompletionProposal toAnonymousConstructorProposal (IType type ) {
45384534 DOMInternalCompletionProposal res = createProposal (CompletionProposal .ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION );
4539- res .setDeclarationSignature (Signature . createTypeSignature (type . getFullyQualifiedName (), true ).toCharArray ());
4535+ res .setDeclarationSignature (SignatureUtils . createSignature (type ).toCharArray ());
45404536 res .setDeclarationKey (type .getKey ().toCharArray ());
45414537 res .setSignature (
45424538 CompletionEngine .createMethodSignature (
@@ -4577,7 +4573,7 @@ private CompletionProposal toAnonymousConstructorProposal(IType type) {
45774573
45784574 DOMInternalCompletionProposal typeProposal = createProposal (CompletionProposal .TYPE_REF );
45794575 typeProposal .setDeclarationSignature (packageFragment .getElementName ().toCharArray ());
4580- typeProposal .setSignature (Signature . createTypeSignature (type . getFullyQualifiedName (), true ).toCharArray ());
4576+ typeProposal .setSignature (SignatureUtils . createSignature (type ).toCharArray ());
45814577 typeProposal .setPackageName (packageFragment .getElementName ().toCharArray ());
45824578 typeProposal .setTypeName (type .getElementName ().toCharArray ());
45834579 typeProposal .setCompletion (type .getElementName ().toCharArray ());
@@ -4648,8 +4644,7 @@ private CompletionProposal toStaticImportProposal(IBinding binding) {
46484644 res = createProposal (CompletionProposal .FIELD_IMPORT );
46494645
46504646 res .setDeclarationSignature (SignatureUtils .getSignatureChar (variableBinding .getDeclaringClass ()));
4651- res .setSignature (Signature .createTypeSignature (variableBinding .getType ().getQualifiedName ().toCharArray (), true )
4652- .toCharArray ());
4647+ res .setSignature (SignatureUtils .getSignatureChar (variableBinding .getType ()));;
46534648 res .setDeclarationPackageName (variableBinding .getDeclaringClass ().getPackage ().getName ().toCharArray ());
46544649 res .setDeclarationTypeName (variableBinding .getDeclaringClass ().getQualifiedName ().toCharArray ());
46554650 if (variableBinding .getType ().getPackage () != null ) {
0 commit comments