Skip to content

Commit 92e4fa0

Browse files
committed
Make completion handler a teeny tiny bit more robust
Signed-off-by: Fred Bricon <[email protected]>
1 parent c5f0db9 commit 92e4fa0

File tree

1 file changed

+29
-25
lines changed

1 file changed

+29
-25
lines changed

org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CompletionHandler.java

+29-25
Original file line numberDiff line numberDiff line change
@@ -33,49 +33,53 @@ public class CompletionHandler{
3333

3434
CompletableFuture<Either<List<CompletionItem>, CompletionList>> completion(TextDocumentPositionParams position){
3535
return CompletableFutures.computeAsync(cancelChecker->{
36-
ICompilationUnit unit = JDTUtils.resolveCompilationUnit(position.getTextDocument().getUri());
37-
List<CompletionItem> completionItems = this.computeContentAssist(unit,
38-
position.getPosition().getLine(),
39-
position.getPosition().getCharacter(), new CancellableProgressMonitor(cancelChecker));
36+
List<CompletionItem> completionItems;
37+
try {
38+
ICompilationUnit unit = JDTUtils.resolveCompilationUnit(position.getTextDocument().getUri());
39+
completionItems = this.computeContentAssist(unit,
40+
position.getPosition().getLine(),
41+
position.getPosition().getCharacter(), new CancellableProgressMonitor(cancelChecker));
42+
} catch (Exception e) {
43+
JavaLanguageServerPlugin.logException("Problem with codeComplete for " + position.getTextDocument().getUri(), e);
44+
completionItems = Collections.emptyList();
45+
}
4046
CompletionList $ = new CompletionList();
4147
$.setItems(completionItems);
4248
JavaLanguageServerPlugin.logInfo("Completion request completed");
4349
return Either.forRight($);
4450
});
4551
}
4652

47-
private List<CompletionItem> computeContentAssist(ICompilationUnit unit, int line, int column, IProgressMonitor monitor) {
53+
private List<CompletionItem> computeContentAssist(ICompilationUnit unit, int line, int column, IProgressMonitor monitor) throws JavaModelException {
4854
CompletionResponses.clear();
4955
if (unit == null) {
5056
return Collections.emptyList();
5157
}
5258
List<CompletionItem> proposals = new ArrayList<>();
53-
try {
54-
final int offset = JsonRpcHelpers.toOffset(unit.getBuffer(), line, column);
55-
CompletionProposalRequestor collector = new CompletionProposalRequestor(unit, offset);
56-
// Allow completions for unresolved types - since 3.3
57-
collector.setAllowsRequiredProposals(CompletionProposal.FIELD_REF, CompletionProposal.TYPE_REF, true);
58-
collector.setAllowsRequiredProposals(CompletionProposal.FIELD_REF, CompletionProposal.TYPE_IMPORT, true);
59-
collector.setAllowsRequiredProposals(CompletionProposal.FIELD_REF, CompletionProposal.FIELD_IMPORT, true);
6059

61-
collector.setAllowsRequiredProposals(CompletionProposal.METHOD_REF, CompletionProposal.TYPE_REF, true);
62-
collector.setAllowsRequiredProposals(CompletionProposal.METHOD_REF, CompletionProposal.TYPE_IMPORT, true);
63-
collector.setAllowsRequiredProposals(CompletionProposal.METHOD_REF, CompletionProposal.METHOD_IMPORT, true);
60+
final int offset = JsonRpcHelpers.toOffset(unit.getBuffer(), line, column);
61+
CompletionProposalRequestor collector = new CompletionProposalRequestor(unit, offset);
62+
// Allow completions for unresolved types - since 3.3
63+
collector.setAllowsRequiredProposals(CompletionProposal.FIELD_REF, CompletionProposal.TYPE_REF, true);
64+
collector.setAllowsRequiredProposals(CompletionProposal.FIELD_REF, CompletionProposal.TYPE_IMPORT, true);
65+
collector.setAllowsRequiredProposals(CompletionProposal.FIELD_REF, CompletionProposal.FIELD_IMPORT, true);
6466

65-
collector.setAllowsRequiredProposals(CompletionProposal.CONSTRUCTOR_INVOCATION, CompletionProposal.TYPE_REF, true);
67+
collector.setAllowsRequiredProposals(CompletionProposal.METHOD_REF, CompletionProposal.TYPE_REF, true);
68+
collector.setAllowsRequiredProposals(CompletionProposal.METHOD_REF, CompletionProposal.TYPE_IMPORT, true);
69+
collector.setAllowsRequiredProposals(CompletionProposal.METHOD_REF, CompletionProposal.METHOD_IMPORT, true);
6670

67-
collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION, CompletionProposal.TYPE_REF, true);
68-
collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_DECLARATION, CompletionProposal.TYPE_REF, true);
71+
collector.setAllowsRequiredProposals(CompletionProposal.CONSTRUCTOR_INVOCATION, CompletionProposal.TYPE_REF, true);
6972

70-
collector.setAllowsRequiredProposals(CompletionProposal.TYPE_REF, CompletionProposal.TYPE_REF, true);
73+
collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION, CompletionProposal.TYPE_REF, true);
74+
collector.setAllowsRequiredProposals(CompletionProposal.ANONYMOUS_CLASS_DECLARATION, CompletionProposal.TYPE_REF, true);
7175

72-
if (offset >-1 && !monitor.isCanceled()) {
73-
unit.codeComplete(offset, collector, monitor);
74-
proposals.addAll(collector.getCompletionItems());
75-
}
76-
} catch (JavaModelException e) {
77-
JavaLanguageServerPlugin.logException("Problem with codeComplete for " + unit.getElementName(), e);
76+
collector.setAllowsRequiredProposals(CompletionProposal.TYPE_REF, CompletionProposal.TYPE_REF, true);
77+
78+
if (offset >-1 && !monitor.isCanceled()) {
79+
unit.codeComplete(offset, collector, monitor);
80+
proposals.addAll(collector.getCompletionItems());
7881
}
82+
7983
return proposals;
8084
}
8185
}

0 commit comments

Comments
 (0)