From 8d407424c61d67c0d71d1c624b1d62563bf2ed1f Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Tue, 4 Apr 2023 15:54:23 +0200 Subject: [PATCH] Cache and re-use type bindings for a completion invocation Signed-off-by: Snjezana Peco --- .../CompletionProposalReplacementProvider.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/contentassist/CompletionProposalReplacementProvider.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/contentassist/CompletionProposalReplacementProvider.java index 2d73b1f62b..684b28e09f 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/contentassist/CompletionProposalReplacementProvider.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/contentassist/CompletionProposalReplacementProvider.java @@ -97,6 +97,8 @@ public class CompletionProposalReplacementProvider { */ private boolean isResolvingRequest; + final Map bindings = new HashMap<>(); + public CompletionProposalReplacementProvider(ICompilationUnit compilationUnit, CompletionContext context, int offset, Preferences preferences, ClientPreferences clientPrefs, boolean isResolvingRequest) { super(); @@ -937,13 +939,16 @@ private ITypeBinding getExpectedTypeForGenericParameters() { for (int i= 0; i < keys.length; i++) { keys[i]= String.valueOf(chKeys[0]); } + // https://github.com/eclipse/eclipse.jdt.ls/pull/2535 + if (bindings.size() > 0) { + return (ITypeBinding) bindings.get(keys[0]); + } final ASTParser parser = ASTParser.newParser(IASTSharedValues.SHARED_AST_LEVEL); parser.setProject(compilationUnit.getJavaProject()); parser.setResolveBindings(true); parser.setStatementsRecovery(true); - final Map bindings= new HashMap<>(); ASTRequestor requestor= new ASTRequestor() { @Override public void acceptBinding(String bindingKey, IBinding binding) {