blob: 50ac65055ec50424d95e10d5edebe3273ebe1da3 [file] [log] [blame]
package org.eclipse.lsp4j.adapters;
import java.util.List;
import org.eclipse.lsp4j.Location;
import org.eclipse.lsp4j.LocationLink;
import org.eclipse.lsp4j.jsonrpc.json.adapters.EitherTypeAdapter;
import org.eclipse.lsp4j.jsonrpc.json.adapters.EitherTypeAdapter.ListChecker;
import org.eclipse.lsp4j.jsonrpc.json.adapters.EitherTypeAdapter.PropertyChecker;
import org.eclipse.lsp4j.jsonrpc.messages.Either;
import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.TypeAdapterFactory;
import com.google.gson.reflect.TypeToken;
public class LocationLinkListAdapter implements TypeAdapterFactory {
private static final TypeToken<Either<List<? extends Location>, List<? extends LocationLink>>> EITHER_TYPE
= new TypeToken<Either<List<? extends Location>, List<? extends LocationLink>>>() {};
@SuppressWarnings("unchecked")
@Override
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
ListChecker leftChecker = new ListChecker(new PropertyChecker("uri"), true);
ListChecker rightChecker = new ListChecker(new PropertyChecker("targetUri"), false);
return (TypeAdapter<T>) new EitherTypeAdapter<>(gson, EITHER_TYPE, leftChecker, rightChecker);
}
}