From 277ee177090843c0b2560e779d3bff3af9dd9ce5 Mon Sep 17 00:00:00 2001 From: Fred Bricon <fbricon@gmail.com> Date: Fri, 9 Jun 2017 10:40:09 -0400 Subject: [PATCH] Handle CompletableFutures more consistently across the board Fixes #243 Fixes #240 Signed-off-by: Fred Bricon <fbricon@gmail.com> --- .../handlers/ClassfileContentHandler.java | 48 +++++++++---------- .../internal/handlers/CodeLensHandler.java | 26 ++++++---- .../internal/handlers/CompletionHandler.java | 36 +++++++------- .../handlers/CompletionResolveHandler.java | 5 +- .../handlers/DocumentHighlightHandler.java | 20 ++++---- .../handlers/DocumentSymbolHandler.java | 35 +++++++------- .../internal/handlers/FormatterHandler.java | 37 ++++++-------- .../core/internal/handlers/HoverHandler.java | 28 +++++------ .../core/internal/handlers/InitHandler.java | 6 +-- .../internal/handlers/JDTLanguageServer.java | 36 +++++++++----- .../handlers/NavigateToDefinitionHandler.java | 12 ++--- .../internal/handlers/ReferencesHandler.java | 6 +-- .../handlers/WorkspaceSymbolHandler.java | 6 +-- .../handlers/ClassfileContentHandlerTest.java | 2 +- .../handlers/CodeLensHandlerTest.java | 16 +++---- .../handlers/DocumentSymbolHandlerTest.java | 4 +- .../internal/handlers/HoverHandlerTest.java | 10 ++-- .../NavigateToDefinitionHandlerTest.java | 6 +-- .../handlers/WorkspaceSymbolHandlerTest.java | 14 +++--- 19 files changed, 176 insertions(+), 177 deletions(-) diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/ClassfileContentHandler.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/ClassfileContentHandler.java index f001c4bff8..851be55059 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/ClassfileContentHandler.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/ClassfileContentHandler.java @@ -10,42 +10,42 @@ *******************************************************************************/ package org.eclipse.jdt.ls.core.internal.handlers; -import java.util.concurrent.CompletableFuture; - +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.IBuffer; import org.eclipse.jdt.core.IClassFile; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.ls.core.internal.JDTUtils; import org.eclipse.jdt.ls.core.internal.JavaLanguageServerPlugin; import org.eclipse.lsp4j.TextDocumentIdentifier; -import org.eclipse.lsp4j.jsonrpc.CompletableFutures; public class ClassfileContentHandler { - public CompletableFuture<String> contents(TextDocumentIdentifier param) { - return CompletableFutures.computeAsync(cm->{ - String source = null; - try { - IClassFile cf = JDTUtils.resolveClassFile(param.getUri()); - if (cf != null) { - IBuffer buffer = cf.getBuffer(); - if (buffer != null){ - cm.checkCanceled(); - JavaLanguageServerPlugin.logInfo("ClassFile contents request completed"); - source = buffer.getContents(); - } - if (source == null) { - source = JDTUtils.disassemble(cf); + private static final String EMPTY_CONTENT = ""; + + public String contents(TextDocumentIdentifier param, IProgressMonitor monitor) { + String source = null; + try { + IClassFile cf = JDTUtils.resolveClassFile(param.getUri()); + if (cf != null) { + IBuffer buffer = cf.getBuffer(); + if (buffer != null) { + if (monitor.isCanceled()) { + return EMPTY_CONTENT; } + source = buffer.getContents(); + JavaLanguageServerPlugin.logInfo("ClassFile contents request completed"); + } + if (source == null) { + source = JDTUtils.disassemble(cf); } - } catch (JavaModelException e) { - JavaLanguageServerPlugin.logException("Exception getting java element ", e); - } - if (source == null) { - source = "";//need to return non null value } - return source; - }); + } catch (JavaModelException e) { + JavaLanguageServerPlugin.logException("Exception getting java element ", e); + } + if (source == null) { + source = EMPTY_CONTENT;// need to return non null value + } + return source; } } \ No newline at end of file diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CodeLensHandler.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CodeLensHandler.java index 8436e1cede..d10a7d1da4 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CodeLensHandler.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CodeLensHandler.java @@ -18,7 +18,7 @@ import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaProject; @@ -51,7 +51,7 @@ public CodeLensHandler(PreferenceManager preferenceManager) { } @SuppressWarnings("unchecked") - public CodeLens resolve(CodeLens lens){ + public CodeLens resolve(CodeLens lens, IProgressMonitor monitor) { if (lens == null) { return null; } @@ -67,7 +67,7 @@ public CodeLens resolve(CodeLens lens){ } Map<String, Object> position = (Map<String, Object>) data.get(1); IJavaElement element = JDTUtils.findElementAtSelection(unit, ((Double)position.get("line")).intValue(), ((Double)position.get("character")).intValue()); - List<Location> locations = findReferences(element); + List<Location> locations = findReferences(element, monitor); int nReferences = locations.size(); Command command = new Command(nReferences == 1 ? "1 reference" : nReferences + " references", "java.show.references", @@ -79,7 +79,8 @@ public CodeLens resolve(CodeLens lens){ return lens; } - private List<Location> findReferences(IJavaElement element) throws JavaModelException, CoreException { + private List<Location> findReferences(IJavaElement element, IProgressMonitor monitor) + throws JavaModelException, CoreException { if (element == null) { return Collections.emptyList(); } @@ -106,12 +107,12 @@ public void acceptSearchMatch(SearchMatch match) throws CoreException { } } - }, new NullProgressMonitor()); + }, monitor); return result; } - public List<CodeLens> getCodeLensSymbols(String uri) { + public List<CodeLens> getCodeLensSymbols(String uri, IProgressMonitor monitor) { if (!preferenceManager.getPreferences().isReferencesCodeLensEnabled()) { return Collections.emptyList(); } @@ -122,7 +123,10 @@ public List<CodeLens> getCodeLensSymbols(String uri) { try { IJavaElement[] elements = unit.getChildren(); ArrayList<CodeLens> lenses = new ArrayList<>(elements.length); - collectChildren(unit, elements, lenses); + collectChildren(unit, elements, lenses, monitor); + if (monitor.isCanceled()) { + lenses.clear(); + } return lenses; } catch (JavaModelException e) { JavaLanguageServerPlugin.logException("Problem getting code lenses for" + unit.getElementName(), e); @@ -130,11 +134,15 @@ public List<CodeLens> getCodeLensSymbols(String uri) { return Collections.emptyList(); } - private void collectChildren(ICompilationUnit unit, IJavaElement[] elements, ArrayList<CodeLens> lenses) + private void collectChildren(ICompilationUnit unit, IJavaElement[] elements, ArrayList<CodeLens> lenses, + IProgressMonitor monitor) throws JavaModelException { for (IJavaElement element : elements) { + if (monitor.isCanceled()) { + return; + } if (element.getElementType() == IJavaElement.TYPE) { - collectChildren(unit, ((IType) element).getChildren(), lenses); + collectChildren(unit, ((IType) element).getChildren(), lenses, monitor); } else if (element.getElementType() != IJavaElement.METHOD || JDTUtils.isHiddenGeneratedElement(element)) { continue; } diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CompletionHandler.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CompletionHandler.java index 47098dc0bf..7518ecbf7e 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CompletionHandler.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CompletionHandler.java @@ -13,41 +13,37 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.concurrent.CompletableFuture; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.CompletionProposal; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.JavaModelException; -import org.eclipse.jdt.ls.core.internal.CancellableProgressMonitor; import org.eclipse.jdt.ls.core.internal.JDTUtils; import org.eclipse.jdt.ls.core.internal.JavaLanguageServerPlugin; import org.eclipse.jdt.ls.core.internal.contentassist.CompletionProposalRequestor; import org.eclipse.lsp4j.CompletionItem; import org.eclipse.lsp4j.CompletionList; import org.eclipse.lsp4j.TextDocumentPositionParams; -import org.eclipse.lsp4j.jsonrpc.CompletableFutures; import org.eclipse.lsp4j.jsonrpc.messages.Either; public class CompletionHandler{ - CompletableFuture<Either<List<CompletionItem>, CompletionList>> completion(TextDocumentPositionParams position){ - return CompletableFutures.computeAsync(cancelChecker->{ - List<CompletionItem> completionItems; - try { - ICompilationUnit unit = JDTUtils.resolveCompilationUnit(position.getTextDocument().getUri()); - completionItems = this.computeContentAssist(unit, - position.getPosition().getLine(), - position.getPosition().getCharacter(), new CancellableProgressMonitor(cancelChecker)); - } catch (Exception e) { - JavaLanguageServerPlugin.logException("Problem with codeComplete for " + position.getTextDocument().getUri(), e); - completionItems = Collections.emptyList(); - } - CompletionList $ = new CompletionList(); - $.setItems(completionItems); - JavaLanguageServerPlugin.logInfo("Completion request completed"); - return Either.forRight($); - }); + Either<List<CompletionItem>, CompletionList> completion(TextDocumentPositionParams position, + IProgressMonitor monitor) { + List<CompletionItem> completionItems; + try { + ICompilationUnit unit = JDTUtils.resolveCompilationUnit(position.getTextDocument().getUri()); + completionItems = this.computeContentAssist(unit, + position.getPosition().getLine(), + position.getPosition().getCharacter(), monitor); + } catch (Exception e) { + JavaLanguageServerPlugin.logException("Problem with codeComplete for " + position.getTextDocument().getUri(), e); + completionItems = Collections.emptyList(); + } + CompletionList $ = new CompletionList(); + $.setItems(completionItems); + JavaLanguageServerPlugin.logInfo("Completion request completed"); + return Either.forRight($); } private List<CompletionItem> computeContentAssist(ICompilationUnit unit, int line, int column, IProgressMonitor monitor) throws JavaModelException { diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CompletionResolveHandler.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CompletionResolveHandler.java index a7f998d2e5..4573b3f1b1 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CompletionResolveHandler.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CompletionResolveHandler.java @@ -18,6 +18,7 @@ import java.util.Map; import java.util.concurrent.TimeUnit; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IField; import org.eclipse.jdt.core.IMember; @@ -61,7 +62,7 @@ public CompletionResolveHandler(PreferenceManager manager) { public static final String DATA_FIELD_REQUEST_ID = "rid"; public static final String DATA_FIELD_PROPOSAL_ID = "pid"; - public CompletionItem resolve(CompletionItem param) { + public CompletionItem resolve(CompletionItem param, IProgressMonitor monitor) { @SuppressWarnings("unchecked") Map<String, String> data = (Map<String, String>) param.getData(); @@ -117,7 +118,7 @@ public CompletionItem resolve(CompletionItem param) { member = type; } - if (member!=null && member.exists()) { + if (member != null && member.exists() && !monitor.isCanceled()) { String javadoc = null; try { final IMember curMember = member; diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/DocumentHighlightHandler.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/DocumentHighlightHandler.java index ecf04a621a..48357eb680 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/DocumentHighlightHandler.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/DocumentHighlightHandler.java @@ -13,9 +13,8 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.concurrent.CompletableFuture; -import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.ITypeRoot; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.dom.CompilationUnit; @@ -34,12 +33,12 @@ @SuppressWarnings("restriction") public class DocumentHighlightHandler{ - private List<DocumentHighlight> computeOccurrences(ITypeRoot unit, int line, int column) { + private List<DocumentHighlight> computeOccurrences(ITypeRoot unit, int line, int column, IProgressMonitor monitor) { if (unit != null) { try { int offset = JsonRpcHelpers.toOffset(unit.getBuffer(), line, column); OccurrencesFinder finder = new OccurrencesFinder(); - CompilationUnit ast = SharedASTProvider.getInstance().getAST(unit, new NullProgressMonitor()); + CompilationUnit ast = SharedASTProvider.getInstance().getAST(unit, monitor); if (ast != null) { String error = finder.initialize(ast, offset, 0); if (error == null){ @@ -47,6 +46,9 @@ private List<DocumentHighlight> computeOccurrences(ITypeRoot unit, int line, int OccurrenceLocation[] occurrences = finder.getOccurrences(); if (occurrences != null) { for (OccurrenceLocation loc : occurrences) { + if (monitor.isCanceled()) { + return Collections.emptyList(); + } result.add(convertToHighlight(unit, loc)); } } @@ -79,12 +81,10 @@ private DocumentHighlight convertToHighlight(ITypeRoot unit, OccurrenceLocation return h; } - CompletableFuture<List<? extends DocumentHighlight>> documentHighlight(TextDocumentPositionParams position){ - return CompletableFuture.supplyAsync(()->{ - ITypeRoot type = JDTUtils.resolveTypeRoot(position.getTextDocument().getUri()); - return computeOccurrences(type, position.getPosition().getLine(), - position.getPosition().getCharacter()); - }); + List<? extends DocumentHighlight> documentHighlight(TextDocumentPositionParams position, IProgressMonitor monitor) { + ITypeRoot type = JDTUtils.resolveTypeRoot(position.getTextDocument().getUri()); + return computeOccurrences(type, position.getPosition().getLine(), + position.getPosition().getCharacter(), monitor); } } diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/DocumentSymbolHandler.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/DocumentSymbolHandler.java index 0006259c0b..ff76cbcc3a 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/DocumentSymbolHandler.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/DocumentSymbolHandler.java @@ -14,9 +14,9 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.concurrent.CompletableFuture; import java.util.stream.Stream; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.Flags; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IMember; @@ -34,11 +34,21 @@ public class DocumentSymbolHandler { - private SymbolInformation[] getOutline(ITypeRoot unit) { + public List<? extends SymbolInformation> documentSymbol(DocumentSymbolParams params, + IProgressMonitor monitor) { + ITypeRoot unit = JDTUtils.resolveTypeRoot(params.getTextDocument().getUri()); + if (unit == null) { + return Collections.emptyList(); + } + SymbolInformation[] elements = this.getOutline(unit, monitor); + return Arrays.asList(elements); + } + + private SymbolInformation[] getOutline(ITypeRoot unit, IProgressMonitor monitor) { try { IJavaElement[] elements = unit.getChildren(); ArrayList<SymbolInformation> symbols = new ArrayList<>(elements.length); - collectChildren(unit, elements, symbols); + collectChildren(unit, elements, symbols, monitor); return symbols.toArray(new SymbolInformation[symbols.size()]); } catch (JavaModelException e) { JavaLanguageServerPlugin.logException("Problem getting outline for" + unit.getElementName(), e); @@ -46,11 +56,15 @@ private SymbolInformation[] getOutline(ITypeRoot unit) { return new SymbolInformation[0]; } - private void collectChildren(ITypeRoot unit, IJavaElement[] elements, ArrayList<SymbolInformation> symbols) + private void collectChildren(ITypeRoot unit, IJavaElement[] elements, ArrayList<SymbolInformation> symbols, + IProgressMonitor monitor) throws JavaModelException { for(IJavaElement element : elements ){ + if (monitor.isCanceled()) { + return; + } if(element instanceof IParent){ - collectChildren(unit, filter(((IParent)element).getChildren()), symbols); + collectChildren(unit, filter(((IParent) element).getChildren()), symbols, monitor); } if(element.getElementType() != IJavaElement.FIELD && element.getElementType() != IJavaElement.METHOD @@ -106,17 +120,6 @@ private boolean isSyntheticElement(IJavaElement element) { } } - public CompletableFuture<List<? extends SymbolInformation>> documentSymbol(DocumentSymbolParams params){ - return CompletableFuture.supplyAsync(()->{ - ITypeRoot unit = JDTUtils.resolveTypeRoot(params.getTextDocument().getUri()); - if(unit == null ) { - return Collections.emptyList(); - } - SymbolInformation[] elements = this.getOutline(unit); - return Arrays.asList(elements); - }); - } - public static SymbolKind mapKind(IJavaElement element) { switch (element.getElementType()) { case IJavaElement.ANNOTATION: diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/FormatterHandler.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/FormatterHandler.java index 5a37b817c7..3ba036b853 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/FormatterHandler.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/FormatterHandler.java @@ -14,9 +14,9 @@ import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; @@ -45,28 +45,21 @@ */ public class FormatterHandler { - CompletableFuture<List<? extends org.eclipse.lsp4j.TextEdit>> formatting(DocumentFormattingParams params){ - return CompletableFuture.supplyAsync( ()->{ - ICompilationUnit cu = JDTUtils.resolveCompilationUnit(params.getTextDocument().getUri()); - if(cu == null ) { - return Collections.emptyList(); - } - return format(cu,params.getOptions(), null); - }); - + List<? extends org.eclipse.lsp4j.TextEdit> formatting(DocumentFormattingParams params, IProgressMonitor monitor) { + return format(params.getTextDocument().getUri(), params.getOptions(), null, monitor); } - CompletableFuture<List<? extends org.eclipse.lsp4j.TextEdit>> rangeFormatting(DocumentRangeFormattingParams params){ - return CompletableFuture.supplyAsync(()->{ - ICompilationUnit cu = JDTUtils.resolveCompilationUnit(params.getTextDocument().getUri()); - if(cu == null ) { - return Collections.emptyList(); - } - return format(cu, params.getOptions(), params.getRange()); - }); + List<? extends org.eclipse.lsp4j.TextEdit> rangeFormatting(DocumentRangeFormattingParams params, + IProgressMonitor monitor) { + return format(params.getTextDocument().getUri(), params.getOptions(), params.getRange(), monitor); } - private List<org.eclipse.lsp4j.TextEdit> format(ICompilationUnit cu, FormattingOptions options, Range range) { + private List<org.eclipse.lsp4j.TextEdit> format(String uri, FormattingOptions options, Range range, + IProgressMonitor monitor) { + ICompilationUnit cu = JDTUtils.resolveCompilationUnit(uri); + if(cu == null ) { + return Collections.emptyList(); + } CodeFormatter formatter = ToolFactory.createCodeFormatter(getOptions(options,cu)); @@ -75,12 +68,12 @@ private List<org.eclipse.lsp4j.TextEdit> format(ICompilationUnit cu, FormattingO String lineDelimiter = TextUtilities.getDefaultLineDelimiter(document); IRegion region = (range == null ? new Region(0,document.getLength()) : getRegion(range,document)); // could not calculate region abort. - if(region == null ) { - return null; + if (region == null || monitor.isCanceled()) { + return Collections.<org.eclipse.lsp4j.TextEdit>emptyList(); } String sourceToFormat = document.get(); TextEdit format = formatter.format(CodeFormatter.K_COMPILATION_UNIT, sourceToFormat, region.getOffset(), region.getLength(), 0, lineDelimiter); - if (format == null || format.getChildren().length == 0) { + if (format == null || format.getChildren().length == 0 || monitor.isCanceled()) { // nothing to return return Collections.<org.eclipse.lsp4j.TextEdit>emptyList(); } diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/HoverHandler.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/HoverHandler.java index f71a31f614..ab7816b576 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/HoverHandler.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/HoverHandler.java @@ -13,32 +13,28 @@ import static org.apache.commons.lang3.StringUtils.defaultString; import java.util.Arrays; -import java.util.concurrent.CompletableFuture; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.ITypeRoot; import org.eclipse.jdt.ls.core.internal.HoverInfoProvider; import org.eclipse.jdt.ls.core.internal.JDTUtils; import org.eclipse.lsp4j.Hover; import org.eclipse.lsp4j.TextDocumentPositionParams; -import org.eclipse.lsp4j.jsonrpc.CompletableFutures; import org.eclipse.lsp4j.jsonrpc.messages.Either; public class HoverHandler{ - public CompletableFuture<Hover> hover(TextDocumentPositionParams position){ - return CompletableFutures.computeAsync(cancelToken->{ - ITypeRoot unit = JDTUtils.resolveTypeRoot(position.getTextDocument().getUri()); - - String hover = null; - if(unit !=null){ - cancelToken.checkCanceled(); - hover = computeHover(unit ,position.getPosition().getLine(), - position.getPosition().getCharacter()); - } - Hover $ = new Hover(); - $.setContents(Arrays.asList(Either.forLeft(defaultString(hover)))); - return $; - }); + public Hover hover(TextDocumentPositionParams position, IProgressMonitor monitor) { + ITypeRoot unit = JDTUtils.resolveTypeRoot(position.getTextDocument().getUri()); + + String hover = null; + if (unit != null && !monitor.isCanceled()) { + hover = computeHover(unit ,position.getPosition().getLine(), + position.getPosition().getCharacter()); + } + Hover $ = new Hover(); + $.setContents(Arrays.asList(Either.forLeft(defaultString(hover)))); + return $; } private String computeHover(ITypeRoot unit, int line, int column) { diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/InitHandler.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/InitHandler.java index 2079bae73d..6279cc1b09 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/InitHandler.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/InitHandler.java @@ -66,9 +66,9 @@ InitializeResult initialize(InitializeParams param){ }else{ preferenceManager.updateClientPrefences(param.getCapabilities()); } - String rootPath = param.getRootPath(); - if (param.getRootUri() != null) { - URI uri = URI.create(param.getRootUri()); + String rootPath = param.getRootUri(); + if (rootPath != null) { + URI uri = URI.create(rootPath); if ("file".equals(uri.getScheme())){ rootPath = Paths.get(uri).toString(); } diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/JDTLanguageServer.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/JDTLanguageServer.java index 514ea227f3..c74f04c3f7 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/JDTLanguageServer.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/JDTLanguageServer.java @@ -11,6 +11,7 @@ package org.eclipse.jdt.ls.core.internal.handlers; import static org.eclipse.jdt.ls.core.internal.JavaLanguageServerPlugin.logInfo; +import static org.eclipse.lsp4j.jsonrpc.CompletableFutures.computeAsync; import java.util.List; import java.util.Map; @@ -18,7 +19,9 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.WorkingCopyOwner; +import org.eclipse.jdt.ls.core.internal.CancellableProgressMonitor; import org.eclipse.jdt.ls.core.internal.JavaClientConnection; import org.eclipse.jdt.ls.core.internal.JavaClientConnection.JavaLanguageClient; import org.eclipse.jdt.ls.core.internal.JavaLanguageServerPlugin; @@ -58,6 +61,7 @@ import org.eclipse.lsp4j.TextEdit; import org.eclipse.lsp4j.WorkspaceEdit; import org.eclipse.lsp4j.WorkspaceSymbolParams; +import org.eclipse.lsp4j.jsonrpc.CancelChecker; import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.eclipse.lsp4j.jsonrpc.services.JsonDelegate; import org.eclipse.lsp4j.services.LanguageServer; @@ -154,7 +158,9 @@ public JavaProtocolExtensions getJavaExtensions(){ public CompletableFuture<List<? extends SymbolInformation>> symbol(WorkspaceSymbolParams params) { logInfo(">> workspace/symbol"); WorkspaceSymbolHandler handler = new WorkspaceSymbolHandler(); - return CompletableFuture.supplyAsync(()->{return handler.search(params.getQuery());}); + return computeAsync((cc) -> { + return handler.search(params.getQuery(), toMonitor(cc)); + }); } /* (non-Javadoc) @@ -190,7 +196,7 @@ public void didChangeWatchedFiles(DidChangeWatchedFilesParams params) { public CompletableFuture<Either<List<CompletionItem>, CompletionList>> completion(TextDocumentPositionParams position) { logInfo(">> document/completion"); CompletionHandler handler = new CompletionHandler(); - return handler.completion(position); + return computeAsync((cc) -> handler.completion(position, toMonitor(cc))); } /* (non-Javadoc) @@ -200,7 +206,7 @@ public CompletableFuture<Either<List<CompletionItem>, CompletionList>> completio public CompletableFuture<CompletionItem> resolveCompletionItem(CompletionItem unresolved) { logInfo(">> document/resolveCompletionItem"); CompletionResolveHandler handler = new CompletionResolveHandler(preferenceManager); - return CompletableFuture.supplyAsync(()->handler.resolve(unresolved)); + return computeAsync((cc) -> handler.resolve(unresolved, toMonitor(cc))); } /* (non-Javadoc) @@ -210,7 +216,7 @@ public CompletableFuture<CompletionItem> resolveCompletionItem(CompletionItem un public CompletableFuture<Hover> hover(TextDocumentPositionParams position) { logInfo(">> document/hover"); HoverHandler handler = new HoverHandler(); - return handler.hover(position); + return computeAsync((cc) -> handler.hover(position, toMonitor(cc))); } /* (non-Javadoc) @@ -230,7 +236,7 @@ public CompletableFuture<SignatureHelp> signatureHelp(TextDocumentPositionParams public CompletableFuture<List<? extends Location>> definition(TextDocumentPositionParams position) { logInfo(">> document/definition"); NavigateToDefinitionHandler handler = new NavigateToDefinitionHandler(); - return handler.definition(position); + return computeAsync((cc) -> handler.definition(position, toMonitor(cc))); } /* (non-Javadoc) @@ -240,7 +246,7 @@ public CompletableFuture<List<? extends Location>> definition(TextDocumentPositi public CompletableFuture<List<? extends Location>> references(ReferenceParams params) { logInfo(">> document/references"); ReferencesHandler handler = new ReferencesHandler(); - return CompletableFuture.supplyAsync(()->handler.findReferences(params)); + return computeAsync((cc) -> handler.findReferences(params, toMonitor(cc))); } /* (non-Javadoc) @@ -250,7 +256,7 @@ public CompletableFuture<List<? extends Location>> references(ReferenceParams pa public CompletableFuture<List<? extends DocumentHighlight>> documentHighlight(TextDocumentPositionParams position) { logInfo(">> document/documentHighlight"); DocumentHighlightHandler handler = new DocumentHighlightHandler(); - return handler.documentHighlight(position); + return computeAsync((cc) -> handler.documentHighlight(position, toMonitor(cc))); } /* (non-Javadoc) @@ -260,7 +266,7 @@ public CompletableFuture<List<? extends DocumentHighlight>> documentHighlight(Te public CompletableFuture<List<? extends SymbolInformation>> documentSymbol(DocumentSymbolParams params) { logInfo(">> document/documentSymbol"); DocumentSymbolHandler handler = new DocumentSymbolHandler(); - return handler.documentSymbol(params); + return computeAsync((cc) -> handler.documentSymbol(params, toMonitor(cc))); } /* (non-Javadoc) @@ -280,7 +286,7 @@ public CompletableFuture<List<? extends Command>> codeAction(CodeActionParams pa public CompletableFuture<List<? extends CodeLens>> codeLens(CodeLensParams params) { logInfo(">> document/codeLens"); CodeLensHandler handler = new CodeLensHandler(preferenceManager); - return CompletableFuture.supplyAsync(()->handler.getCodeLensSymbols(params.getTextDocument().getUri())); + return computeAsync((cc) -> handler.getCodeLensSymbols(params.getTextDocument().getUri(), toMonitor(cc))); } /* (non-Javadoc) @@ -290,7 +296,7 @@ public CompletableFuture<List<? extends CodeLens>> codeLens(CodeLensParams param public CompletableFuture<CodeLens> resolveCodeLens(CodeLens unresolved) { logInfo(">> codeLens/resolve"); CodeLensHandler handler = new CodeLensHandler(preferenceManager); - return CompletableFuture.supplyAsync(()->handler.resolve(unresolved)); + return computeAsync((cc) -> handler.resolve(unresolved, toMonitor(cc))); } /* (non-Javadoc) @@ -300,7 +306,7 @@ public CompletableFuture<CodeLens> resolveCodeLens(CodeLens unresolved) { public CompletableFuture<List<? extends TextEdit>> formatting(DocumentFormattingParams params) { logInfo(">> document/formatting"); FormatterHandler handler = new FormatterHandler(); - return handler.formatting(params); + return computeAsync((cc) -> handler.formatting(params, toMonitor(cc))); } /* (non-Javadoc) @@ -310,7 +316,7 @@ public CompletableFuture<List<? extends TextEdit>> formatting(DocumentFormatting public CompletableFuture<List<? extends TextEdit>> rangeFormatting(DocumentRangeFormattingParams params) { logInfo(">> document/rangeFormatting"); FormatterHandler handler = new FormatterHandler(); - return handler.rangeFormatting(params); + return computeAsync((cc) -> handler.rangeFormatting(params, toMonitor(cc))); } /* (non-Javadoc) @@ -380,7 +386,7 @@ public void didSave(DidSaveTextDocumentParams params) { public CompletableFuture<String> classFileContents(TextDocumentIdentifier param) { logInfo(">> java/classFileContents"); ClassfileContentHandler handler = new ClassfileContentHandler(); - return handler.contents(param); + return computeAsync((cc) -> handler.contents(param, toMonitor(cc))); } /* (non-Javadoc) @@ -399,4 +405,8 @@ public void sendStatus(ServiceStatus serverStatus, String status) { } } + private IProgressMonitor toMonitor(CancelChecker checker) { + return new CancellableProgressMonitor(checker); + } + } diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/NavigateToDefinitionHandler.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/NavigateToDefinitionHandler.java index a8efdfc4e7..ae4ce05507 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/NavigateToDefinitionHandler.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/NavigateToDefinitionHandler.java @@ -12,8 +12,8 @@ import java.util.Arrays; import java.util.List; -import java.util.concurrent.CompletableFuture; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.IClassFile; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IJavaElement; @@ -28,16 +28,10 @@ public class NavigateToDefinitionHandler { - public CompletableFuture<List<? extends Location>> definition(TextDocumentPositionParams position){ - return CompletableFuture.supplyAsync(()->{ - return getDefinition(position); - }); - } - - public List<? extends Location> getDefinition(TextDocumentPositionParams position){ + public List<? extends Location> definition(TextDocumentPositionParams position, IProgressMonitor monitor) { ITypeRoot unit = JDTUtils.resolveTypeRoot(position.getTextDocument().getUri()); Location location = null; - if(unit != null){ + if (unit != null && !monitor.isCanceled()) { location = computeDefinitionNavigation(unit, position.getPosition().getLine(), position.getPosition().getCharacter()); } diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/ReferencesHandler.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/ReferencesHandler.java index a6eccaa687..0cfcd707ba 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/ReferencesHandler.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/ReferencesHandler.java @@ -16,7 +16,7 @@ import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.IClassFile; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IJavaElement; @@ -43,7 +43,7 @@ private IJavaSearchScope createSearchScope() throws JavaModelException { return SearchEngine.createJavaSearchScope(projects, IJavaSearchScope.SOURCES | IJavaSearchScope.APPLICATION_LIBRARIES); } - List<Location> findReferences(ReferenceParams param) { + List<Location> findReferences(ReferenceParams param, IProgressMonitor monitor) { SearchEngine engine = new SearchEngine(); try { @@ -85,7 +85,7 @@ public void acceptSearchMatch(SearchMatch match) throws CoreException { } } - }, new NullProgressMonitor()); + }, monitor); return locations; } catch (CoreException e) { diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/WorkspaceSymbolHandler.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/WorkspaceSymbolHandler.java index 3cb4f2a019..feadf91439 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/WorkspaceSymbolHandler.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/WorkspaceSymbolHandler.java @@ -15,7 +15,7 @@ import java.util.List; import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.Flags; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; @@ -34,7 +34,7 @@ public class WorkspaceSymbolHandler{ - public List<SymbolInformation> search(String query) { + public List<SymbolInformation> search(String query, IProgressMonitor monitor) { if (query == null || query.trim().isEmpty()) { return Collections.emptyList(); } @@ -77,7 +77,7 @@ private SymbolKind mapKind(TypeNameMatch match) { } return SymbolKind.Class; } - }, IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, new NullProgressMonitor()); + }, IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, monitor); return symbols; } catch (Exception e) { JavaLanguageServerPlugin.logException("Problem getting search for" + query, e); diff --git a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/ClassfileContentHandlerTest.java b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/ClassfileContentHandlerTest.java index 6bd62889df..1d2a1625c1 100644 --- a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/ClassfileContentHandlerTest.java +++ b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/ClassfileContentHandlerTest.java @@ -68,7 +68,7 @@ public void testOpenMissingFile() throws Exception { private String getSource(String uri) throws Exception { TextDocumentIdentifier param = new TextDocumentIdentifier(uri); - return handler.contents(param).get(); + return handler.contents(param, monitor); } } diff --git a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/CodeLensHandlerTest.java b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/CodeLensHandlerTest.java index c9c76435a8..0e069157c9 100644 --- a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/CodeLensHandlerTest.java +++ b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/CodeLensHandlerTest.java @@ -107,7 +107,7 @@ public void testGetCodeLensSymbols() throws Exception { String uri = codeLensParams.getTextDocument().getUri(); assertFalse(uri.isEmpty()); //when - List<CodeLens> result = handler.getCodeLensSymbols(uri); + List<CodeLens> result = handler.getCodeLensSymbols(uri, monitor); //then assertEquals("Found " + result, 3, result.size()); @@ -130,14 +130,14 @@ public void testGetCodeLensSymbols() throws Exception { @Test public void testGetCodeLenseBoundaries() { - List<CodeLens> result = handler.getCodeLensSymbols(null); + List<CodeLens> result = handler.getCodeLensSymbols(null, monitor); assertNotNull(result); assertEquals(0, result.size()); String payload = createCodeLensSymbolsRequest("src/java/Missing.java"); CodeLensParams codeLensParams = getParams(payload); String uri = codeLensParams.getTextDocument().getUri(); - result = handler.getCodeLensSymbols(uri); + result = handler.getCodeLensSymbols(uri, monitor); assertEquals(0, result.size()); } @@ -154,7 +154,7 @@ public void testDisableCodeLensSymbols() throws Exception { assertFalse(uri.isEmpty()); //when - List<CodeLens> result = handler.getCodeLensSymbols(uri); + List<CodeLens> result = handler.getCodeLensSymbols(uri, monitor); //then assertEquals(0, result.size()); @@ -171,7 +171,7 @@ public void testResolveCodeLense() { Range range = lens.getRange(); assertRange(5, 13, 16, range); - CodeLens result = handler.resolve(lens); + CodeLens result = handler.resolve(lens, monitor); assertNotNull(result); //Check if command found @@ -203,12 +203,12 @@ public void testResolveCodeLense() { @Test public void testResolveCodeLenseBoundaries() { - CodeLens result = handler.resolve(null); + CodeLens result = handler.resolve(null, monitor); assertNull(result); String payload = createCodeLensRequest("src/java/Missing.java", 5, 13, 16); CodeLens lens = getParams(payload); - result = handler.resolve(lens); + result = handler.resolve(lens, monitor); assertSame(lens, result); assertNull(result.getCommand()); } @@ -220,7 +220,7 @@ public void testIgnoreLombokCodeLensSymbols() throws Exception { String uri = codeLensParams.getTextDocument().getUri(); assertFalse(uri.isEmpty()); //when - List<CodeLens> result = handler.getCodeLensSymbols(uri); + List<CodeLens> result = handler.getCodeLensSymbols(uri, monitor); //then assertEquals("Found " + result, 4, result.size()); diff --git a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/DocumentSymbolHandlerTest.java b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/DocumentSymbolHandlerTest.java index 07381a747c..9449ea9197 100644 --- a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/DocumentSymbolHandlerTest.java +++ b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/DocumentSymbolHandlerTest.java @@ -15,7 +15,6 @@ import java.io.UnsupportedEncodingException; import java.util.List; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import org.eclipse.core.resources.IProject; @@ -94,8 +93,7 @@ private List<? extends SymbolInformation> getSymbols(String className) TextDocumentIdentifier identifier = new TextDocumentIdentifier(uri); DocumentSymbolParams params = new DocumentSymbolParams(); params.setTextDocument(identifier); - CompletableFuture<List<? extends SymbolInformation>> future = handler.documentSymbol(params); - List<? extends SymbolInformation> symbols = future.get(); + List<? extends SymbolInformation> symbols = handler.documentSymbol(params, monitor); assertTrue(symbols.size() > 0); return symbols; } diff --git a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/HoverHandlerTest.java b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/HoverHandlerTest.java index 44854fac1b..e6d9aeee4c 100644 --- a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/HoverHandlerTest.java +++ b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/HoverHandlerTest.java @@ -66,7 +66,7 @@ public void testHover() throws Exception { TextDocumentPositionParams position = getParams(payload); //when - Hover hover = handler.hover(position).get(); + Hover hover = handler.hover(position, monitor); //then assertNotNull(hover); @@ -83,7 +83,7 @@ public void testHoverStandalone() throws Exception { TextDocumentPositionParams position = getParams(payload); //when - Hover hover = handler.hover(position).get(); + Hover hover = handler.hover(position, monitor); //then assertNotNull(hover); @@ -100,7 +100,7 @@ public void testEmptyHover() throws Exception { TextDocumentPositionParams position = getParams(payload); //when - Hover hover = handler.hover(position).get(); + Hover hover = handler.hover(position, monitor); //then assertNotNull(hover); @@ -129,7 +129,7 @@ public void testHoverVariable() throws Exception { TextDocumentPositionParams position = getParams(argParam); //when - Hover hover = handler.hover(position).get(); + Hover hover = handler.hover(position, monitor); //then assertNotNull(hover); @@ -145,7 +145,7 @@ public void testHoverInheritedJavadoc() throws Exception { TextDocumentPositionParams position = getParams(payload); // when - Hover hover = handler.hover(position).get(); + Hover hover = handler.hover(position, monitor); // then assertNotNull(hover); diff --git a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/NavigateToDefinitionHandlerTest.java b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/NavigateToDefinitionHandlerTest.java index 598afb68be..38fd129c7d 100644 --- a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/NavigateToDefinitionHandlerTest.java +++ b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/NavigateToDefinitionHandlerTest.java @@ -46,8 +46,8 @@ public void setUp() throws Exception { @Test public void testGetEmptyDefinition() throws Exception { - List<? extends Location> definitions = handler.getDefinition( - new TextDocumentPositionParams(new TextDocumentIdentifier("/foo/bar"), "/foo/bar", new Position(1, 1))); + List<? extends Location> definitions = handler.definition( + new TextDocumentPositionParams(new TextDocumentIdentifier("/foo/bar"), new Position(1, 1)), monitor); assertNotNull(definitions); assertEquals(1, definitions.size()); assertNotNull("Location has no Range", definitions.get(0).getRange()); @@ -67,7 +67,7 @@ private void testClass(String className, int line, int column) throws JavaModelE String uri = ClassFileUtil.getURI(project, className); TextDocumentIdentifier identifier = new TextDocumentIdentifier(uri); List<? extends Location> definitions = handler - .getDefinition(new TextDocumentPositionParams(identifier, new Position(line, column))); + .definition(new TextDocumentPositionParams(identifier, new Position(line, column)), monitor); assertNotNull(definitions); assertEquals(1, definitions.size()); assertNotNull(definitions.get(0).getUri()); diff --git a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/WorkspaceSymbolHandlerTest.java b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/WorkspaceSymbolHandlerTest.java index 53b3dbafbd..6d877fe8d8 100644 --- a/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/WorkspaceSymbolHandlerTest.java +++ b/org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/handlers/WorkspaceSymbolHandlerTest.java @@ -40,15 +40,15 @@ public void setup() throws Exception { @Test public void testSearchWithEmptyResults() { - List<SymbolInformation> results = handler.search(null); + List<SymbolInformation> results = handler.search(null, monitor); assertNotNull(results); assertEquals(0, results.size()); - results = handler.search(" "); + results = handler.search(" ", monitor); assertNotNull(results); assertEquals(0, results.size()); - results = handler.search("Abracadabra"); + results = handler.search("Abracadabra", monitor); assertNotNull(results); assertEquals(0, results.size()); } @@ -57,7 +57,7 @@ public void testSearchWithEmptyResults() { @Test public void testWorkspaceSearch() { String query = "Abstract"; - List<SymbolInformation> results = handler.search(query); + List<SymbolInformation> results = handler.search(query, monitor); assertNotNull(results); assertTrue("Found "+ results.size() + " results", results.size() > 100); Range defaultRange = JDTUtils.newRange(); @@ -75,7 +75,7 @@ public void testWorkspaceSearch() { @Test public void testProjectSearch() { String query = "IFoo"; - List<SymbolInformation> results = handler.search(query); + List<SymbolInformation> results = handler.search(query, monitor); assertNotNull(results); assertEquals("Found "+ results.size() + " results", 1, results.size()); SymbolInformation symbol = results.get(0); @@ -89,12 +89,12 @@ public void testProjectSearch() { @Test public void testCamelCaseSearch() { - List<SymbolInformation> results = handler.search("NPE"); + List<SymbolInformation> results = handler.search("NPE", monitor); assertNotNull(results); assertEquals("NoPermissionException", results.get(0).getName()); assertEquals("NullPointerException", results.get(results.size()-1).getName()); - results = handler.search("HaMa"); + results = handler.search("HaMa", monitor); String className = "HashMap"; boolean foundClass = results.stream().filter(s -> className.equals(s.getName())).findFirst().isPresent(); assertTrue("Did not find "+className, foundClass);