Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions blackbox-test/src/main/java/org/example/customer/generics/GMS.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package org.example.customer.generics;

import io.avaje.jsonb.Json;

public class GMS {

public static class Weaver {

@Json
public static class Hornet<T> {
public T value;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package org.example.customer.generics;

import static org.assertj.core.api.Assertions.assertThat;

import java.util.LinkedHashMap;

import org.example.customer.Address;
import org.example.customer.generics.GMS.Weaver.Hornet;
import org.junit.jupiter.api.Test;

import io.avaje.jsonb.JsonType;
import io.avaje.jsonb.Jsonb;
import io.avaje.jsonb.Types;

class NestedClassGenericTest {

Jsonb jsonb = Jsonb.instance();

private static Hornet<Address> createTestData() {
var bean = new Hornet<Address>();
bean.value = new Address(90L, "one");
return bean;
}

@SuppressWarnings({"rawtypes"})
@Test
void toJson() {
var bean = createTestData();

var type = jsonb.type(Hornet.class);

String asJson = type.toJson(bean);
assertThat(asJson).isEqualTo("{\"value\":{\"id\":90,\"street\":\"one\"}}");
assertThat(jsonb.toJson(bean)).isEqualTo(asJson);

var pageResult = type.fromJson(asJson);
Object document = pageResult.value;
// reading via Object means the list contains LinkedHashMap
assertThat(document).isInstanceOf(LinkedHashMap.class);
LinkedHashMap asMap = (LinkedHashMap) document;
assertThat(asMap.get("street")).isEqualTo("one");
}

@Test
void toJson_withGenericParam() {
var bean = createTestData();

JsonType<Hornet<Address>> type =
jsonb.type(Types.newParameterizedType(Hornet.class, Address.class));

String asJson = type.toJson(bean);
assertThat(asJson).isEqualTo("{\"value\":{\"id\":90,\"street\":\"one\"}}");
assertThat(jsonb.toJson(bean)).isEqualTo(asJson);

var genericResult = type.fromJson(asJson);
Address document = genericResult.value;

assertThat(document.getId()).isEqualTo(90L);
assertThat(document.getStreet()).isEqualTo("one");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ void write() throws IOException {
private void writeFactory() {
if (genericParamsCount > 0) {
String typeName = adapterShortName;
final int nestedIndex = adapterShortName.indexOf("$");
final int nestedIndex = adapterShortName.lastIndexOf("$");
if (nestedIndex != -1) {
typeName = typeName.substring(nestedIndex + 1);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package io.avaje.jsonb.generator.models.valid;

import io.avaje.jsonb.Json;

public class GMS {

public static class Weaver {

@Json
public static class Hornet<T> {
public T value;
}
}
}