Skip to content

Commit ca8f1bb

Browse files
committed
Do big refactoring to use Java8 CompletableFuture for
TypeScriptServiceClient. See #63
1 parent ec08dcc commit ca8f1bb

File tree

200 files changed

+4448
-3226
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

200 files changed

+4448
-3226
lines changed

core/ts.core.tests/samples/sample.js

Lines changed: 0 additions & 3 deletions
This file was deleted.

core/ts.core.tests/samples/sample.js.map

Lines changed: 0 additions & 1 deletion
This file was deleted.

core/ts.core.tests/samples/tsconfig.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
"noImplicitAny": true,
55
"removeComments": true,
66
"preserveConstEnums": true,
7-
"sourceMap": true,
8-
"watch": true
7+
"sourceMap": true
98
},
109
"files": [
1110
"sample.ts"
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
package ts.core.tests;
2+
3+
import java.io.File;
4+
import java.util.List;
5+
import java.util.concurrent.CompletableFuture;
6+
import java.util.concurrent.ExecutionException;
7+
8+
import ts.TypeScriptException;
9+
import ts.client.FileSpan;
10+
import ts.client.ITypeScriptServiceClient;
11+
import ts.client.Location;
12+
import ts.client.LoggingInterceptor;
13+
import ts.client.TypeScriptServiceClient;
14+
import ts.client.completions.CompletionEntry;
15+
import ts.client.diagnostics.DiagnosticEvent;
16+
import ts.client.projectinfo.ProjectInfo;
17+
import ts.client.quickinfo.QuickInfo;
18+
import ts.utils.FileUtils;
19+
20+
public class Main3 {
21+
22+
public static void main(String[] args) throws TypeScriptException, InterruptedException, ExecutionException {
23+
File projectDir = new File("./samples");
24+
// sample.ts has the following content:
25+
// var s = "";s.
26+
File sampleFile = new File(projectDir, "sample.ts");
27+
String fileName = FileUtils.getPath(sampleFile);
28+
29+
// Create TypeScript client
30+
ITypeScriptServiceClient client = new TypeScriptServiceClient(projectDir,
31+
new File("../ts.repository/node_modules/typescript/bin/tsserver"), null);
32+
33+
client.addInterceptor(LoggingInterceptor.getInstance());
34+
35+
// Open "sample.ts" in an editor
36+
client.openFile(fileName, null);
37+
38+
// compile on save
39+
client.compileOnSaveEmitFile(fileName, true);
40+
41+
42+
// Completions with line/offset
43+
CompletableFuture<List<CompletionEntry>> completionPromise = client.completions(fileName, 1, 14);
44+
List<CompletionEntry> entries = completionPromise.get();
45+
displayCompletions(entries);
46+
47+
// Completions with position (only since TypeScript 2.0)
48+
// completionPromise = client.completions(fileName, 14);
49+
// entries = completionPromise.get();
50+
// displayCompletions(entries);
51+
52+
// QuickInfo
53+
CompletableFuture<QuickInfo> quickInfoPromise = client.quickInfo(fileName, 1, 5);
54+
QuickInfo quickInfo = quickInfoPromise.get();
55+
displayQuickInfo(quickInfo);
56+
57+
// Definition
58+
CompletableFuture<List<FileSpan>> definitionPromise = client.definition(fileName, 1, 5);
59+
List<FileSpan> definition = definitionPromise.get();
60+
displayDefinition(definition);
61+
62+
// Update the editor content to set s as number
63+
// var s = 1;s.
64+
// client.changeFile(fileName, 9, 11, "1"); // position change, doesn't
65+
// work with TypeScript 2.1.4
66+
client.changeFile(fileName, 1, 9, 1, 11, "1");
67+
68+
// Do completion after the last dot of "s" variable which is a Number
69+
// (toExponential, ....)
70+
completionPromise = client.completions(fileName, 1, 14);
71+
entries = completionPromise.get();
72+
displayCompletions(entries);
73+
74+
// geterr
75+
List<DiagnosticEvent> events = client.geterr(new String[] { fileName }, 0).get();
76+
displayDiagnostics(events);
77+
78+
// projectInfo
79+
ProjectInfo projectInfo = client.projectInfo(fileName, null, true).get();
80+
displayProjectInfo(projectInfo);
81+
82+
//
83+
// client.geterrForProjectRequest(file, delay, projectInfo)
84+
85+
// Close "sample.ts"
86+
client.closeFile(fileName);
87+
88+
89+
// synchronized (client) {t
90+
// try {
91+
// client.wait(2000);
92+
// } catch (InterruptedException e) {
93+
// // TODO Auto-generated catch block
94+
// e.printStackTrace();
95+
// }
96+
// }
97+
client.dispose();
98+
99+
}
100+
101+
public static void displayCompletions(List<CompletionEntry> entries) {
102+
for (CompletionEntry entry : entries) {
103+
System.err.println(entry.getName());
104+
}
105+
}
106+
107+
private static void displayQuickInfo(QuickInfo quickInfo) {
108+
System.err.println("DisplayString: " + quickInfo.getDisplayString() + ", start: "
109+
+ toString(quickInfo.getStart()) + ", end: " + toString(quickInfo.getEnd()));
110+
}
111+
112+
private static void displayDefinition(List<FileSpan> spans) {
113+
for (FileSpan span : spans) {
114+
System.err.println("file: " + span.getFile() + ", start: " + toString(span.getStart()) + ", end: "
115+
+ toString(span.getEnd()));
116+
}
117+
}
118+
119+
private static void displayDiagnostics(List<DiagnosticEvent> events) {
120+
for (DiagnosticEvent event : events) {
121+
System.err.println(event.getBody().getFile());
122+
}
123+
}
124+
125+
private static void displayProjectInfo(ProjectInfo projectInfo) {
126+
System.err.println(projectInfo.getConfigFileName());
127+
}
128+
129+
private static String toString(Location loc) {
130+
return "{" + loc.getLine() + ", " + loc.getOffset() + "}";
131+
}
132+
133+
}

core/ts.core/.classpath

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<classpath>
3-
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
3+
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
44
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
55
<classpathentry kind="src" path="src"/>
66
<classpathentry kind="output" path="target/classes"/>

core/ts.core/META-INF/MANIFEST.MF

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,20 @@ Bundle-Localization: plugin
66
Bundle-SymbolicName: ts.core
77
Bundle-Version: 1.2.0.qualifier
88
Bundle-Activator: ts.internal.Activator
9-
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
9+
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
1010
Import-Package: com.eclipsesource.json;version="0.9.4",
1111
org.osgi.framework;version="1.3.0"
1212
Bundle-ActivationPolicy: lazy
1313
Export-Package: ts,
1414
ts.client,
1515
ts.client.codefixes,
1616
ts.client.completions,
17-
ts.client.definition,
17+
ts.client.configure,
1818
ts.client.diagnostics,
1919
ts.client.format,
2020
ts.client.navbar,
2121
ts.client.occurrences,
22+
ts.client.projectinfo,
2223
ts.client.quickinfo,
2324
ts.client.references,
2425
ts.client.signaturehelp,

core/ts.core/src/ts/client/AbstractTypeScriptCollector.java

Lines changed: 0 additions & 5 deletions
This file was deleted.

core/ts.core/src/ts/client/CommandNames.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,14 @@ public enum CommandNames {
2828
Definition("definition"),
2929
SignatureHelp("signatureHelp"),
3030
QuickInfo("quickinfo"),
31-
Geterr("geterr"),
31+
Geterr("geterr"),
32+
GeterrForProject("geterrForProject"),
3233
Format("format"),
3334
References("references"),
3435
Occurrences("occurrences"),
35-
Configure("configure"),
36+
Configure("configure"),
37+
ProjectInfo("projectInfo"),
38+
Rename("rename"),
3639

3740
// 2.0.3
3841
SemanticDiagnosticsSync("semanticDiagnosticsSync", "2.0.3"),

core/ts.core/src/ts/client/Event.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package ts.client;
2+
3+
import ts.internal.client.protocol.Message;
4+
5+
/**
6+
* Server-initiated event message
7+
*
8+
* @param <T>
9+
*/
10+
public class Event<T> extends Message {
11+
12+
/**
13+
* Name fo event.
14+
*/
15+
private String event;
16+
17+
/**
18+
* Event-specific information
19+
*/
20+
private T body;
21+
22+
public String getEvent() {
23+
return event;
24+
}
25+
26+
public T getBody() {
27+
return body;
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright (c) 2015-2016 Angelo ZERR.
2+
* Copyright (c) 2015-2017 Angelo ZERR.
33
* All rights reserved. This program and the accompanying materials
44
* are made available under the terms of the Eclipse Public License v1.0
55
* which accompanies this distribution, and is available at
@@ -8,20 +8,22 @@
88
* Contributors:
99
* Angelo Zerr <[email protected]> - initial API and implementation
1010
*/
11-
package ts.client.completions;
11+
package ts.client;
1212

1313
/**
14-
* @see https://github.com/Microsoft/TypeScript/blob/master/src/services/services.ts
15-
*
14+
* Object found in response messages defining a span of text in a specific
15+
* source file.
16+
*
17+
* @see https://github.com/Microsoft/TypeScript/blob/master/src/server/protocol.ts
1618
*/
17-
public interface ICompletionInfo {
19+
public class FileSpan extends TextSpan {
1820

19-
boolean isMemberCompletion();
2021
/**
21-
* Returns true when the current location also allows for a new identifier
22-
* @return true when the current location also allows for a new identifier
22+
* File containing text span.
2323
*/
24-
boolean isNewIdentifierLocation();
25-
26-
ICompletionEntry[] getEntries();
24+
private String file;
25+
26+
public String getFile() {
27+
return file;
28+
}
2729
}

core/ts.core/src/ts/client/ICancellationToken.java

Lines changed: 0 additions & 7 deletions
This file was deleted.

core/ts.core/src/ts/client/IInterceptor.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,15 @@
1010
*/
1111
package ts.client;
1212

13-
import com.eclipsesource.json.JsonObject;
14-
13+
import ts.internal.client.protocol.Response;
1514
import ts.internal.client.protocol.Request;
1615

1716
public interface IInterceptor {
1817

19-
void handleRequest(Request request, ITypeScriptServiceClient client, String methodName);
18+
void handleRequest(Request<?> request, String json, ITypeScriptServiceClient client);
2019

21-
void handleResponse(JsonObject response, ITypeScriptServiceClient client,
22-
String methodName, long ellapsedTime);
20+
void handleResponse(Response<?> response, String json,
21+
long ellapsedTime, TypeScriptServiceClient typeScriptServiceClient);
2322

2423
void handleError(Throwable error, ITypeScriptServiceClient client, String methodName,
2524
long ellapsedTime);

core/ts.core/src/ts/client/ITypeScriptAsynchCollector.java

Lines changed: 0 additions & 12 deletions
This file was deleted.

core/ts.core/src/ts/client/ITypeScriptCollector.java

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)