Skip to content

Commit d7e8241

Browse files
mickaelistriaRob Stryker
authored andcommitted
Improve support for completing enum constants in switch case
1 parent 3e2c9d4 commit d7e8241

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/DOMCompletionEngine.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,16 @@ public void run() {
425425
// however if an enum is expected, we can build out the completion for that
426426
suggestDefaultCompletions = false;
427427
}
428+
if ((context.getLocationInParent() == SwitchCase.EXPRESSIONS2_PROPERTY || context.getLocationInParent() == SwitchCase.EXPRESSION_PROPERTY) && context.getParent() instanceof SwitchCase switchCase) {
429+
completionContext.expectedTypes.getExpectedTypes().stream()
430+
.map(ITypeBinding::getDeclaredFields)
431+
.flatMap(Arrays::stream)
432+
.filter(IVariableBinding::isEnumConstant)
433+
.filter(constant -> this.pattern.matchesName(this.prefix.toCharArray(), constant.getName().toCharArray()))
434+
.map(this::toProposal)
435+
.forEach(this.requestor::accept);
436+
suggestDefaultCompletions = false;
437+
}
428438
if (context.getParent() instanceof MethodDeclaration) {
429439
suggestDefaultCompletions = false;
430440
}
@@ -2109,7 +2119,7 @@ private CompletionProposal toProposal(IBinding binding, String completion) {
21092119
}
21102120
if (!inheritedValue && !this.modelUnit.getType(topLevelClass.getName()).exists()) {
21112121
if (this.qualifiedPrefix.equals(this.prefix) && !this.modelUnit.getJavaProject().getOption(JavaCore.CODEASSIST_SUGGEST_STATIC_IMPORTS, true).equals(JavaCore.DISABLED)) {
2112-
if (((List<ImportDeclaration>)this.unit.imports()).stream().filter(ImportDeclaration::isStatic).map(ImportDeclaration::resolveBinding).noneMatch(binding::isEqualTo)) {
2122+
if (!isStaticallyImported(variableBinding) && !(variableBinding.isEnumConstant() && Set.of(SwitchCase.EXPRESSION_PROPERTY, SwitchCase.EXPRESSIONS2_PROPERTY).contains(this.toComplete.getLocationInParent()))) {
21132123
res.setRequiredProposals(new CompletionProposal[] { toStaticImportProposal(variableBinding) });
21142124
}
21152125
} else {
@@ -2180,7 +2190,8 @@ private CompletionProposal toProposal(IBinding binding, String completion) {
21802190
(res.getRequiredProposals() != null || inJavadoc ? 0 : computeRelevanceForQualification(false)) +
21812191
CompletionEngine.computeRelevanceForRestrictions(IAccessRule.K_ACCESSIBLE) + //no access restriction for class field
21822192
((insideQualifiedReference() && !staticOnly() && !Modifier.isStatic(binding.getModifiers())) || (inJavadoc && !res.isConstructor) ? RelevanceConstants.R_NON_STATIC : 0) +
2183-
(!staticOnly() || inheritedValue ? 0 : RelevanceConstants.R_NON_INHERITED) // TODO: when is this active?
2193+
(!staticOnly() || inheritedValue ? 0 : RelevanceConstants.R_NON_INHERITED) + // TODO: when is this active?
2194+
(binding instanceof IVariableBinding field && field.isEnumConstant() ? RelevanceConstants.R_ENUM + RelevanceConstants.R_ENUM_CONSTANT : 0)
21842195
);
21852196
if (res.getRequiredProposals() != null) {
21862197
for (CompletionProposal req : res.getRequiredProposals()) {

0 commit comments

Comments
 (0)