Skip to content

Commit

Permalink
Deserialization support for AWS LSP extended InitializeResult (#49)
Browse files Browse the repository at this point in the history
  • Loading branch information
breedloj authored Oct 2, 2024
1 parent 9127d39 commit f648b5c
Show file tree
Hide file tree
Showing 9 changed files with 111 additions and 1 deletion.
2 changes: 1 addition & 1 deletion plugin/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -115,4 +115,4 @@ Bundle-Classpath: .,
target/dependency/utils-2.25.33.jar,
target/dependency/xml-apis-ext-1.3.04.jar,
target/dependency/xmlgraphics-commons-2.9.jar,
target/dependency/xz-1.9.jar
target/dependency/xz-1.9.jar
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,11 @@
import org.eclipse.lsp4j.jsonrpc.MessageConsumer;
import org.eclipse.lsp4j.jsonrpc.messages.Message;
import org.eclipse.lsp4j.jsonrpc.messages.RequestMessage;
import org.eclipse.lsp4j.jsonrpc.messages.ResponseMessage;

import software.aws.toolkits.eclipse.amazonq.lsp.model.AwsExtendedInitializeResult;
import software.aws.toolkits.eclipse.amazonq.lsp.model.Command;
import software.aws.toolkits.eclipse.amazonq.lsp.model.QuickActionsCommandGroup;
import software.aws.toolkits.eclipse.amazonq.providers.LspProvider;
import software.aws.toolkits.eclipse.amazonq.util.ClientMetadata;

Expand All @@ -19,6 +23,9 @@ public class AmazonQLspServerBuilder extends Builder<AmazonQLspServer> {
@Override
public final Launcher<AmazonQLspServer> create() {
super.setRemoteInterface(AmazonQLspServer.class);
super.configureGson(builder -> {
builder.registerTypeAdapterFactory(new QLspTypeAdapterFactory());
});
Launcher<AmazonQLspServer> launcher = super.create();
LspProvider.setServer(AmazonQLspServer.class, launcher.getRemoteProxy());
return launcher;
Expand All @@ -31,6 +38,15 @@ protected final MessageConsumer wrapMessageConsumer(final MessageConsumer consum
InitializeParams initParams = (InitializeParams) ((RequestMessage) message).getParams();
initParams.setClientInfo(new ClientInfo(ClientMetadata.getPluginName(), ClientMetadata.getPluginVersion()));
}
if (message instanceof ResponseMessage && ((ResponseMessage) message).getResult() instanceof AwsExtendedInitializeResult) {
AwsExtendedInitializeResult result = (AwsExtendedInitializeResult) ((ResponseMessage) message).getResult();
for (QuickActionsCommandGroup commandGroups : result.getAwsServerCapabilities().chatOptions().quickActions().quickActionsCommandGroups()) {
for (Command command : commandGroups.commands()) {
System.out.println("Command: " + command.command());
System.out.println("Description: " + command.description());
}
}
}
consumer.consume(message);
});
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.eclipse.amazonq.lsp;

import java.io.IOException;

import org.eclipse.lsp4j.InitializeResult;

import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.TypeAdapterFactory;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;

import software.aws.toolkits.eclipse.amazonq.lsp.model.AwsExtendedInitializeResult;

public class QLspTypeAdapterFactory implements TypeAdapterFactory {

@Override
@SuppressWarnings("unchecked")
public final <T> TypeAdapter<T> create(final Gson gson, final TypeToken<T> type) {
if (type.getRawType() == InitializeResult.class) {
final TypeAdapter<InitializeResult> delegate = (TypeAdapter<InitializeResult>) gson.getDelegateAdapter(this, type);

return (TypeAdapter<T>) new TypeAdapter<InitializeResult>() {
@Override
public void write(final JsonWriter out, final InitializeResult value) throws IOException {
delegate.write(out, value);
}

@Override
public InitializeResult read(final JsonReader in) throws IOException {
return gson.fromJson(in, AwsExtendedInitializeResult.class);
}
};
}
return null;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.eclipse.amazonq.lsp.model;

import org.eclipse.lsp4j.InitializeResult;

public class AwsExtendedInitializeResult extends InitializeResult {
private AwsServerCapabilities awsServerCapabilities;

public final AwsServerCapabilities getAwsServerCapabilities() {
return awsServerCapabilities;
}

public final void setAwsServerCapabilities(final AwsServerCapabilities awsServerCapabilities) {
this.awsServerCapabilities = awsServerCapabilities;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.eclipse.amazonq.lsp.model;

public record AwsServerCapabilities(ChatOptions chatOptions) { }
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.eclipse.amazonq.lsp.model;

public record ChatOptions(QuickActions quickActions) { }
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.eclipse.amazonq.lsp.model;

public record Command(String command, String description) { }
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.eclipse.amazonq.lsp.model;

import java.util.List;

public record QuickActions(List<QuickActionsCommandGroup> quickActionsCommandGroups) { }
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
// Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0

package software.aws.toolkits.eclipse.amazonq.lsp.model;

import java.util.List;

public record QuickActionsCommandGroup(List<Command> commands) { }

0 comments on commit f648b5c

Please sign in to comment.