Skip to content

Commit f648b5c

Browse files
authored
Deserialization support for AWS LSP extended InitializeResult (#49)
1 parent 9127d39 commit f648b5c

File tree

9 files changed

+111
-1
lines changed

9 files changed

+111
-1
lines changed

plugin/META-INF/MANIFEST.MF

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,4 +115,4 @@ Bundle-Classpath: .,
115115
target/dependency/utils-2.25.33.jar,
116116
target/dependency/xml-apis-ext-1.3.04.jar,
117117
target/dependency/xmlgraphics-commons-2.9.jar,
118-
target/dependency/xz-1.9.jar
118+
target/dependency/xz-1.9.jar

plugin/src/software/aws/toolkits/eclipse/amazonq/lsp/AmazonQLspServerBuilder.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@
1010
import org.eclipse.lsp4j.jsonrpc.MessageConsumer;
1111
import org.eclipse.lsp4j.jsonrpc.messages.Message;
1212
import org.eclipse.lsp4j.jsonrpc.messages.RequestMessage;
13+
import org.eclipse.lsp4j.jsonrpc.messages.ResponseMessage;
1314

15+
import software.aws.toolkits.eclipse.amazonq.lsp.model.AwsExtendedInitializeResult;
16+
import software.aws.toolkits.eclipse.amazonq.lsp.model.Command;
17+
import software.aws.toolkits.eclipse.amazonq.lsp.model.QuickActionsCommandGroup;
1418
import software.aws.toolkits.eclipse.amazonq.providers.LspProvider;
1519
import software.aws.toolkits.eclipse.amazonq.util.ClientMetadata;
1620

@@ -19,6 +23,9 @@ public class AmazonQLspServerBuilder extends Builder<AmazonQLspServer> {
1923
@Override
2024
public final Launcher<AmazonQLspServer> create() {
2125
super.setRemoteInterface(AmazonQLspServer.class);
26+
super.configureGson(builder -> {
27+
builder.registerTypeAdapterFactory(new QLspTypeAdapterFactory());
28+
});
2229
Launcher<AmazonQLspServer> launcher = super.create();
2330
LspProvider.setServer(AmazonQLspServer.class, launcher.getRemoteProxy());
2431
return launcher;
@@ -31,6 +38,15 @@ protected final MessageConsumer wrapMessageConsumer(final MessageConsumer consum
3138
InitializeParams initParams = (InitializeParams) ((RequestMessage) message).getParams();
3239
initParams.setClientInfo(new ClientInfo(ClientMetadata.getPluginName(), ClientMetadata.getPluginVersion()));
3340
}
41+
if (message instanceof ResponseMessage && ((ResponseMessage) message).getResult() instanceof AwsExtendedInitializeResult) {
42+
AwsExtendedInitializeResult result = (AwsExtendedInitializeResult) ((ResponseMessage) message).getResult();
43+
for (QuickActionsCommandGroup commandGroups : result.getAwsServerCapabilities().chatOptions().quickActions().quickActionsCommandGroups()) {
44+
for (Command command : commandGroups.commands()) {
45+
System.out.println("Command: " + command.command());
46+
System.out.println("Description: " + command.description());
47+
}
48+
}
49+
}
3450
consumer.consume(message);
3551
});
3652
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package software.aws.toolkits.eclipse.amazonq.lsp;
5+
6+
import java.io.IOException;
7+
8+
import org.eclipse.lsp4j.InitializeResult;
9+
10+
import com.google.gson.Gson;
11+
import com.google.gson.TypeAdapter;
12+
import com.google.gson.TypeAdapterFactory;
13+
import com.google.gson.reflect.TypeToken;
14+
import com.google.gson.stream.JsonReader;
15+
import com.google.gson.stream.JsonWriter;
16+
17+
import software.aws.toolkits.eclipse.amazonq.lsp.model.AwsExtendedInitializeResult;
18+
19+
public class QLspTypeAdapterFactory implements TypeAdapterFactory {
20+
21+
@Override
22+
@SuppressWarnings("unchecked")
23+
public final <T> TypeAdapter<T> create(final Gson gson, final TypeToken<T> type) {
24+
if (type.getRawType() == InitializeResult.class) {
25+
final TypeAdapter<InitializeResult> delegate = (TypeAdapter<InitializeResult>) gson.getDelegateAdapter(this, type);
26+
27+
return (TypeAdapter<T>) new TypeAdapter<InitializeResult>() {
28+
@Override
29+
public void write(final JsonWriter out, final InitializeResult value) throws IOException {
30+
delegate.write(out, value);
31+
}
32+
33+
@Override
34+
public InitializeResult read(final JsonReader in) throws IOException {
35+
return gson.fromJson(in, AwsExtendedInitializeResult.class);
36+
}
37+
};
38+
}
39+
return null;
40+
}
41+
42+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package software.aws.toolkits.eclipse.amazonq.lsp.model;
5+
6+
import org.eclipse.lsp4j.InitializeResult;
7+
8+
public class AwsExtendedInitializeResult extends InitializeResult {
9+
private AwsServerCapabilities awsServerCapabilities;
10+
11+
public final AwsServerCapabilities getAwsServerCapabilities() {
12+
return awsServerCapabilities;
13+
}
14+
15+
public final void setAwsServerCapabilities(final AwsServerCapabilities awsServerCapabilities) {
16+
this.awsServerCapabilities = awsServerCapabilities;
17+
}
18+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package software.aws.toolkits.eclipse.amazonq.lsp.model;
5+
6+
public record AwsServerCapabilities(ChatOptions chatOptions) { }
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package software.aws.toolkits.eclipse.amazonq.lsp.model;
5+
6+
public record ChatOptions(QuickActions quickActions) { }
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package software.aws.toolkits.eclipse.amazonq.lsp.model;
5+
6+
public record Command(String command, String description) { }
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package software.aws.toolkits.eclipse.amazonq.lsp.model;
5+
6+
import java.util.List;
7+
8+
public record QuickActions(List<QuickActionsCommandGroup> quickActionsCommandGroups) { }
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package software.aws.toolkits.eclipse.amazonq.lsp.model;
5+
6+
import java.util.List;
7+
8+
public record QuickActionsCommandGroup(List<Command> commands) { }

0 commit comments

Comments
 (0)