From 7025192e75b060efbc7173024fcf8754584b6416 Mon Sep 17 00:00:00 2001 From: David Kral Date: Fri, 10 Jan 2025 13:47:38 +0100 Subject: [PATCH] tmp Signed-off-by: David Kral --- .../java/io/helidon/common/GenericType.java | 25 ++++++++++--------- .../json/codegen/JsonConverterGenerator.java | 2 +- .../tests/ClassUsingClassWithGenerics.java | 10 ++++++++ .../helidon/json/tests/ClassWithGenerics.java | 1 + .../main/java/io/helidon/json/tests/Main.java | 14 ++++++++--- 5 files changed, 35 insertions(+), 17 deletions(-) create mode 100644 json/tests/src/main/java/io/helidon/json/tests/ClassUsingClassWithGenerics.java diff --git a/common/common/src/main/java/io/helidon/common/GenericType.java b/common/common/src/main/java/io/helidon/common/GenericType.java index f6ba482ed17..74fbfad3f33 100644 --- a/common/common/src/main/java/io/helidon/common/GenericType.java +++ b/common/common/src/main/java/io/helidon/common/GenericType.java @@ -91,7 +91,8 @@ public class GenericType implements Type { public static GenericType create(Type genericType) throws IllegalArgumentException { Objects.requireNonNull(genericType); - return new GenericType<>(genericType, GenericTypeUtil.rawClass(genericType)); + Type type = genericType instanceof GenericType genType ? genType.type : genericType; + return new GenericType<>(type, GenericTypeUtil.rawClass(type)); } /** @@ -116,8 +117,8 @@ public static GenericType create(N object) { return GenericType.create(object.getClass()); } - public static Builder builder() { - return new Builder(); + public static Builder builder1() { + return new Builder<>(); } private GenericType(Type type, Class rawType) { @@ -216,13 +217,13 @@ public String toString() { return type.toString(); } - public static final class Builder implements io.helidon.common.Builder> { +// public static final class Builder implements io.helidon.common.Builder, GenericType> { + public static final class Builder { - private Class baseType; + private Class baseType; private List> genericParameters = new ArrayList<>(); - @Override - public GenericType build() { + public GenericType build() { if (baseType == null) { throw new IllegalStateException("Base type has to be set"); } @@ -234,23 +235,23 @@ public GenericType build() { return new GenericType<>(parameterizedType, baseType); } - public Builder baseType(Class baseType) { + public Builder baseType(Class baseType) { this.baseType = baseType; return this; } - public Builder genericParameters(List> genericParameters) { + public Builder genericParameters(List> genericParameters) { this.genericParameters = genericParameters; return this; } - public Builder addGenericParameter(GenericType genericParameter) { + public Builder addGenericParameter(GenericType genericParameter) { this.genericParameters.add(genericParameter); return this; } - public Builder addGenericParameter(Consumer consumer) { - Builder builder = new Builder(); + public Builder addGenericParameter(Consumer> consumer) { + Builder builder = new Builder(); consumer.accept(builder); this.genericParameters.add(builder.build()); return this; diff --git a/json/codegen/src/main/java/io/helidon/json/codegen/JsonConverterGenerator.java b/json/codegen/src/main/java/io/helidon/json/codegen/JsonConverterGenerator.java index dedd642862f..750ffe456b3 100644 --- a/json/codegen/src/main/java/io/helidon/json/codegen/JsonConverterGenerator.java +++ b/json/codegen/src/main/java/io/helidon/json/codegen/JsonConverterGenerator.java @@ -200,7 +200,7 @@ private static Consumer constructComplexGenericType(Constru constructor.addContent(TypeNames.GENERIC_TYPE) .addContent(" " + variableName + " = ") .addContent(TypeNames.GENERIC_TYPE) - .addContentLine(".builder()") + .addContentLine(".builder1()") .increaseContentPadding() .increaseContentPadding() .addContent(".baseType(").addContent(typeName.genericTypeName()).addContentLine(".class)"); diff --git a/json/tests/src/main/java/io/helidon/json/tests/ClassUsingClassWithGenerics.java b/json/tests/src/main/java/io/helidon/json/tests/ClassUsingClassWithGenerics.java new file mode 100644 index 00000000000..8366ea30305 --- /dev/null +++ b/json/tests/src/main/java/io/helidon/json/tests/ClassUsingClassWithGenerics.java @@ -0,0 +1,10 @@ +package io.helidon.json.tests; + +import io.helidon.json.binding.Json; + +@Json.AsJson +public class ClassUsingClassWithGenerics { + + public ClassWithGenerics test; + +} diff --git a/json/tests/src/main/java/io/helidon/json/tests/ClassWithGenerics.java b/json/tests/src/main/java/io/helidon/json/tests/ClassWithGenerics.java index d6b0d406a4d..8bbbb338a4b 100644 --- a/json/tests/src/main/java/io/helidon/json/tests/ClassWithGenerics.java +++ b/json/tests/src/main/java/io/helidon/json/tests/ClassWithGenerics.java @@ -11,6 +11,7 @@ public class ClassWithGenerics { private T field; private List collection = new ArrayList<>(); private List> collection2 = new ArrayList<>(); + public ClassWithGenerics test; private List collection23 = new ArrayList<>(); //widlcard //upper/lower bounds diff --git a/json/tests/src/main/java/io/helidon/json/tests/Main.java b/json/tests/src/main/java/io/helidon/json/tests/Main.java index aa3ecb67931..3dfa089c608 100644 --- a/json/tests/src/main/java/io/helidon/json/tests/Main.java +++ b/json/tests/src/main/java/io/helidon/json/tests/Main.java @@ -9,12 +9,18 @@ public class Main { public static void main(String[] args) { - GenericType> genericType = new GenericType<>() { }; -// SimpleClass deserialize = JsonBinding.deserialize("{\"name\":\"value\"}", SimpleClass.class); - SimpleRecord record = JsonBinding.deserialize("{\"ints\":[1,2,3]}", SimpleRecord.class); - System.out.println(); +// GenericType> genericType = new GenericType<>() { }; +//// SimpleClass deserialize = JsonBinding.deserialize("{\"name\":\"value\"}", SimpleClass.class); +// SimpleRecord record = JsonBinding.deserialize("{\"ints\":[1,2,3]}", SimpleRecord.class); +// System.out.println(); // SimpleRecord record = new SimpleRecord("testValue", List.of(1, 2, 3), 1); + + ClassUsingClassWithGenerics deserialize = JsonBinding.deserialize("{\"test\":{\"collection\":[1,2,3]}}", + ClassUsingClassWithGenerics.class); + + System.out.println(); + } }