Skip to content

Commit 7b9c2a1

Browse files
AndrienkoAleksandrevidolob
authored andcommitted
Update lsp4J lib to newer version. (eclipse-che#5292)
* eclipse-che#5360 Upgrade LSP4J library version to 0.2.0 Signed-off-by: Yevhen Vydolob <evidolob@codenvy.com>
1 parent 455a152 commit 7b9c2a1

16 files changed

Lines changed: 208 additions & 91 deletions

File tree

agents/ls-json/src/main/resources/org.eclipse.che.ls.json.script.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,9 +159,9 @@ else
159159
fi
160160

161161

162-
#####################
163-
### Install C# LS ###
164-
#####################
162+
#######################
163+
### Install Json LS ###
164+
#######################
165165

166166
curl -s ${AGENT_BINARIES_URI} | tar xzf - -C ${LS_DIR}
167167

plugins/plugin-languageserver/che-plugin-languageserver-ide/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,10 @@
9292
</exclusion>
9393
</exclusions>
9494
</dependency>
95+
<dependency>
96+
<groupId>org.eclipse.lsp4j</groupId>
97+
<artifactId>org.eclipse.lsp4j.jsonrpc</artifactId>
98+
</dependency>
9599
<dependency>
96100
<groupId>org.eclipse.xtext</groupId>
97101
<artifactId>org.eclipse.xtext.xbase.lib.gwt</artifactId>

plugins/plugin-languageserver/che-plugin-languageserver-ide/src/main/java/org/eclipse/che/plugin/languageserver/ide/LanguageServerExtension.java

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.google.inject.Inject;
1414
import com.google.inject.Singleton;
1515
import com.google.web.bindery.event.shared.EventBus;
16+
1617
import org.eclipse.che.api.promises.client.Operation;
1718
import org.eclipse.che.api.promises.client.OperationException;
1819
import org.eclipse.che.ide.api.action.ActionManager;
@@ -114,9 +115,14 @@ public void onFileOperation(final FileEvent event) {
114115
break;
115116
}
116117
}
118+
// onOpen(event.getEditor(), event.getFile(), dtoFactory, serviceClient, fileTypeRegister);
117119
});
118120
}
119121

122+
// private boolean checkIsLSExist(Path location, LanguageServerFileTypeRegister fileTypeRegister){
123+
// return !(location.getFileExtension() == null || !fileTypeRegister.hasLSForExtension(location.getFileExtension()));
124+
// }
125+
120126
private void onSave(TextDocumentIdentifier documentId,
121127
DtoFactory dtoFactory,
122128
TextDocumentServiceClient serviceClient) {
@@ -137,22 +143,19 @@ private void onOpen(final FileEvent event,
137143
final DtoFactory dtoFactory,
138144
final TextDocumentServiceClient serviceClient,
139145
final LanguageServerRegistry lsRegistry) {
140-
event.getFile().getContent().then(new Operation<String>() {
141-
@Override
142-
public void apply(String text) throws OperationException {
143-
TextDocumentItem documentItem = dtoFactory.createDto(TextDocumentItem.class);
144-
documentItem.setUri(event.getFile().getLocation().toString());
145-
documentItem.setVersion(LanguageServerEditorConfiguration.INITIAL_DOCUMENT_VERSION);
146-
documentItem.setText(text);
147-
documentItem.setLanguageId(lsRegistry.getLanguageDescription(event.getFile()).getLanguageId());
148-
149-
DidOpenTextDocumentParams openEvent = dtoFactory.createDto(DidOpenTextDocumentParams.class);
150-
openEvent.setTextDocument(documentItem);
151-
openEvent.getTextDocument().setUri(event.getFile().getLocation().toString());
152-
openEvent.setText(text);
153-
154-
serviceClient.didOpen(openEvent);
155-
}
146+
event.getFile().getContent().then(text -> {
147+
TextDocumentItem documentItem = dtoFactory.createDto(TextDocumentItem.class);
148+
documentItem.setUri(event.getFile().getLocation().toString());
149+
documentItem.setVersion(LanguageServerEditorConfiguration.INITIAL_DOCUMENT_VERSION);
150+
documentItem.setText(text);
151+
documentItem.setLanguageId(lsRegistry.getLanguageDescription(event.getFile()).getLanguageId());
152+
153+
DidOpenTextDocumentParams openEvent = dtoFactory.createDto(DidOpenTextDocumentParams.class);
154+
openEvent.setTextDocument(documentItem);
155+
openEvent.getTextDocument().setUri(event.getFile().getLocation().toString());
156+
openEvent.setText(text);
157+
158+
serviceClient.didOpen(openEvent);
156159
});
157160
}
158161
}

plugins/plugin-languageserver/che-plugin-languageserver-ide/src/main/java/org/eclipse/che/plugin/languageserver/ide/editor/LanguageServerReconcileStrategy.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import org.eclipse.che.plugin.languageserver.ide.editor.sync.TextDocumentSynchronizeFactory;
2424
import org.eclipse.lsp4j.ServerCapabilities;
2525
import org.eclipse.lsp4j.TextDocumentSyncKind;
26+
import org.eclipse.lsp4j.TextDocumentSyncOptions;
27+
import org.eclipse.lsp4j.jsonrpc.messages.Either;
2628

2729
/**
2830
* Responsible for document synchronization
@@ -38,7 +40,14 @@ public class LanguageServerReconcileStrategy implements ReconcilingStrategy {
3840
public LanguageServerReconcileStrategy(TextDocumentSynchronizeFactory synchronizeFactory,
3941
@Assisted ServerCapabilities serverCapabilities) {
4042

41-
TextDocumentSyncKind documentSync = serverCapabilities.getTextDocumentSync();
43+
Either<TextDocumentSyncKind, TextDocumentSyncOptions> sync = serverCapabilities.getTextDocumentSync();
44+
TextDocumentSyncKind documentSync;
45+
if(sync.isLeft()){
46+
documentSync = sync.getLeft();
47+
} else {
48+
documentSync = sync.getRight().getChange();
49+
}
50+
4251
synchronize = synchronizeFactory.getSynchronize(documentSync);
4352
}
4453

plugins/plugin-languageserver/che-plugin-languageserver-ide/src/main/java/org/eclipse/che/plugin/languageserver/ide/editor/codeassist/LanguageServerCodeAssistProcessor.java

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,6 @@
1414
import com.google.inject.assistedinject.Assisted;
1515

1616
import org.eclipse.che.api.languageserver.shared.model.ExtendedCompletionItem;
17-
import org.eclipse.che.api.languageserver.shared.model.ExtendedCompletionList;
18-
import org.eclipse.che.api.promises.client.Operation;
19-
import org.eclipse.che.api.promises.client.OperationException;
20-
import org.eclipse.che.api.promises.client.PromiseError;
2117
import org.eclipse.che.ide.api.editor.codeassist.CodeAssistCallback;
2218
import org.eclipse.che.ide.api.editor.codeassist.CodeAssistProcessor;
2319
import org.eclipse.che.ide.api.editor.codeassist.CompletionProposal;
@@ -81,17 +77,11 @@ public void computeCompletionProposals(TextEditor editor, final int offset, fina
8177
// no need to send new completion request
8278
computeProposals(currentWord, offset - latestCompletionResult.getOffset(), callback);
8379
} else {
84-
documentServiceClient.completion(documentPosition).then(new Operation<ExtendedCompletionList>() {
85-
@Override
86-
public void apply(ExtendedCompletionList list) throws OperationException {
87-
latestCompletionResult.update(documentId, offset, currentWord, list);
88-
computeProposals(currentWord, 0, callback);
89-
}
90-
}).catchError(new Operation<PromiseError>() {
91-
@Override
92-
public void apply(PromiseError error) throws OperationException {
93-
lastErrorMessage = error.getMessage();
94-
}
80+
documentServiceClient.completion(documentPosition).then(list -> {
81+
latestCompletionResult.update(documentId, offset, currentWord, list);
82+
computeProposals(currentWord, 0, callback);
83+
}).catchError(error -> {
84+
lastErrorMessage = error.getMessage();
9585
});
9686
}
9787
}
@@ -133,7 +123,7 @@ private List<Match> filter(String word, String label, String filterText) {
133123
// return the highlights based on the label
134124
List<Match> highlights = fuzzyMatches.fuzzyMatch(word, label);
135125
// return empty list of highlights if nothing matches the label
136-
return (highlights == null) ? new ArrayList<Match>() : highlights;
126+
return (highlights == null) ? new ArrayList<>() : highlights;
137127
}
138128

139129
return null;

plugins/plugin-languageserver/che-plugin-languageserver-ide/src/main/java/org/eclipse/che/plugin/languageserver/ide/editor/codeassist/LatestCompletionResult.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class LatestCompletionResult {
2323
private TextDocumentIdentifier documentId;
2424
private int offset;
2525
private String word;
26-
private ExtendedCompletionList completionList;
26+
private ExtendedCompletionList completionList;
2727

2828
/**
2929
* Returns the identifier of document used to compute the latest completion

plugins/plugin-languageserver/che-plugin-languageserver-ide/src/main/java/org/eclipse/che/plugin/languageserver/ide/hover/HoverProvider.java

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
import com.google.inject.Inject;
1515
import com.google.inject.Singleton;
1616

17-
import org.eclipse.che.api.promises.client.Function;
18-
import org.eclipse.che.api.promises.client.FunctionException;
1917
import org.eclipse.che.api.promises.client.Promise;
2018
import org.eclipse.che.api.promises.client.js.JsPromise;
2119
import org.eclipse.che.ide.api.editor.EditorAgent;
@@ -30,7 +28,9 @@
3028
import org.eclipse.che.plugin.languageserver.ide.service.TextDocumentServiceClient;
3129
import org.eclipse.che.plugin.languageserver.ide.util.DtoBuildHelper;
3230
import org.eclipse.lsp4j.Hover;
31+
import org.eclipse.lsp4j.MarkedString;
3332
import org.eclipse.lsp4j.TextDocumentPositionParams;
33+
import org.eclipse.lsp4j.jsonrpc.messages.Either;
3434

3535
import java.util.ArrayList;
3636
import java.util.List;
@@ -76,31 +76,33 @@ public JsPromise<OrionHoverOverlay> computeHover(OrionHoverContextOverlay contex
7676
TextDocumentPositionParams paramsDTO = helper.createTDPP(document, context.getOffset());
7777

7878
Promise<Hover> promise = client.hover(paramsDTO);
79-
Promise<OrionHoverOverlay> then = promise.then(new Function<Hover, OrionHoverOverlay>() {
80-
@Override
81-
public OrionHoverOverlay apply(Hover arg) throws FunctionException {
82-
OrionHoverOverlay hover = OrionHoverOverlay.create();
83-
hover.setType("markdown");
84-
String content = renderContent(arg);
85-
// do not show hover with only white spaces
86-
if (StringUtils.isNullOrWhitespace(content)) {
87-
return null;
88-
}
89-
hover.setContent(content);
90-
91-
return hover;
79+
Promise<OrionHoverOverlay> then = promise.then((Hover arg) -> {
80+
OrionHoverOverlay hover = OrionHoverOverlay.create();
81+
hover.setType("markdown");
82+
String content = renderContent(arg);
83+
// do not show hover with only white spaces
84+
if (StringUtils.isNullOrWhitespace(content)) {
85+
return null;
9286
}
87+
hover.setContent(content);
9388

94-
private String renderContent(Hover hover) {
95-
List<String> contents = new ArrayList<String>();
96-
for (String dto : hover.getContents()) {
97-
// plain markdown text
98-
contents.add(dto);
99-
}
100-
return Joiner.on("\n\n").join(contents);
101-
}
89+
return hover;
10290
});
10391
return (JsPromise<OrionHoverOverlay>)then;
10492

10593
}
94+
95+
private String renderContent(Hover hover) {
96+
List<String> contents = new ArrayList<>();
97+
for (Either<String, MarkedString> dto : hover.getContents()) {
98+
if (dto.isLeft()) {
99+
// plain markdown text
100+
contents.add(dto.getLeft());
101+
} else {
102+
contents.add(dto.getRight().getLanguage());
103+
contents.add(dto.getRight().getValue());
104+
}
105+
}
106+
return Joiner.on("\n\n").join(contents);
107+
}
106108
}

wsagent/che-core-api-languageserver-maven-plugin/src/main/java/org/eclipse/che/api/languageserver/generator/EitherUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ static Type getRightDisjointType(Type type) {
3232
private static Type getDisjointType(Type type, int index) {
3333
if (type instanceof ParameterizedType) {
3434
final ParameterizedType parameterizedType = (ParameterizedType)type;
35-
return parameterizedType.getActualTypeArguments()[0];
35+
return parameterizedType.getActualTypeArguments()[index];
3636
}
3737
if (type instanceof Class) {
3838
final Class<?> cls = (Class<?>)type;

wsagent/che-core-api-languageserver/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,10 @@
7777
<groupId>org.eclipse.lsp4j</groupId>
7878
<artifactId>org.eclipse.lsp4j</artifactId>
7979
</dependency>
80+
<dependency>
81+
<groupId>org.eclipse.lsp4j</groupId>
82+
<artifactId>org.eclipse.lsp4j.jsonrpc</artifactId>
83+
</dependency>
8084
<dependency>
8185
<groupId>org.slf4j</groupId>
8286
<artifactId>slf4j-api</artifactId>

wsagent/che-core-api-languageserver/src/main/java/org/eclipse/che/api/languageserver/launcher/LanguageServerLauncher.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public interface LanguageServerLauncher {
2222

2323
/**
2424
* Initializes and starts a language server.
25-
*
25+
*
2626
* @param projectPath
2727
* absolute path to the project
2828
* @param client
@@ -36,7 +36,7 @@ public interface LanguageServerLauncher {
3636
LanguageServerDescription getDescription();
3737

3838
/**
39-
* Indicates if language server is installed and is ready to be started.
39+
* Indicates if language server is installed and is ready to be started.
4040
*/
4141
boolean isAbleToLaunch();
4242
}

0 commit comments

Comments
 (0)