package org.openflexo.swing.layout;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import org.openflexo.swing.layout.MultiSplitLayout.Node;
import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.TypeAdapterFactory;
import com.google.gson.internal.$Gson$Types;
import com.google.gson.reflect.TypeToken;
public class MultiSplitLayoutTypeAdapterFactory implements TypeAdapterFactory {
@Override
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
Class<? super T> rawType = type.getRawType();
if (Node.class.isAssignableFrom(rawType)) {
TypeAdapter<List<Node>> collectionAdapter = gson.getAdapter(new TypeToken<List<Node>>() {
});
return (TypeAdapter<T>) new NodeAdapter(collectionAdapter);
} else if (List.class.isAssignableFrom(rawType)) {
Type type2 = type.getType();
if (type2 instanceof ParameterizedType && ((ParameterizedType) type2).getActualTypeArguments().length == 1) {
Type type3 = ((ParameterizedType) type2).getActualTypeArguments()[0];
if (Node.class.isAssignableFrom($Gson$Types.getRawType(type3))) {
TypeAdapter<Node> nodeAdapter = gson.getAdapter(Node.class);
TypeAdapter<List<?>> collectionAdapter = gson.getAdapter(new TypeToken<List<?>>() {
});
return (TypeAdapter<T>) new NodeListAdapter(collectionAdapter, nodeAdapter);
}
}
}
return null;
}
}