Skip to content

Commit e480691

Browse files
committed
noticket: Extract TypeToken.of(...).getRawType() into an utility method to reduce direct Guava TypeToken usage
1 parent 65b6f5b commit e480691

File tree

5 files changed

+30
-14
lines changed

5 files changed

+30
-14
lines changed

databind/src/main/java/tech/ydb/yoj/databind/CustomValueTypes.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package tech.ydb.yoj.databind;
22

33
import com.google.common.base.Preconditions;
4-
import com.google.common.reflect.TypeToken;
54
import lombok.NonNull;
65
import tech.ydb.yoj.ExperimentalApi;
76
import tech.ydb.yoj.InternalApi;
@@ -11,6 +10,7 @@
1110
import tech.ydb.yoj.databind.schema.CustomValueTypeInfo;
1211
import tech.ydb.yoj.databind.schema.Schema.JavaField;
1312
import tech.ydb.yoj.util.lang.Annotations;
13+
import tech.ydb.yoj.util.lang.Types;
1414

1515
import javax.annotation.Nullable;
1616
import java.lang.reflect.InvocationTargetException;
@@ -75,7 +75,7 @@ private static <J, C extends Comparable<? super C>> ValueConverter<J, C> createC
7575
public static <J, C extends Comparable<? super C>> CustomValueTypeInfo<J, C> getCustomValueTypeInfo(
7676
@NonNull Type type, @Nullable Column columnAnnotation
7777
) {
78-
Class<?> rawType = type instanceof Class<?> ? (Class<?>) type : TypeToken.of(type).getRawType();
78+
Class<?> rawType = Types.getRawType(type);
7979
CustomValueType cvt = getCustomValueType(rawType, columnAnnotation);
8080
if (cvt == null) {
8181
return null;

databind/src/main/java/tech/ydb/yoj/databind/expression/values/StringFieldValue.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package tech.ydb.yoj.databind.expression.values;
22

3-
import com.google.common.reflect.TypeToken;
43
import lombok.NonNull;
54
import tech.ydb.yoj.databind.FieldValueType;
65
import tech.ydb.yoj.databind.expression.IllegalExpressionException.FieldTypeError.StringFieldExpected;
76
import tech.ydb.yoj.databind.expression.IllegalExpressionException.FieldTypeError.UnknownEnumConstant;
87
import tech.ydb.yoj.databind.expression.IllegalExpressionException.FieldTypeError.UuidFieldExpected;
8+
import tech.ydb.yoj.util.lang.Types;
99

1010
import java.lang.reflect.Type;
1111
import java.util.Optional;
@@ -23,7 +23,7 @@ public Optional<Comparable<?>> getComparableByType(Type fieldType, FieldValueTyp
2323
return switch (valueType) {
2424
case STRING -> Optional.of(str);
2525
case ENUM -> {
26-
@SuppressWarnings({"rawtypes", "unchecked"}) var enumType = (Class<Enum>) TypeToken.of(fieldType).getRawType();
26+
@SuppressWarnings({"rawtypes", "unchecked"}) var enumType = (Class<Enum>) Types.getRawType(fieldType);
2727
@SuppressWarnings("unchecked") var enumValue = (Comparable<?>) Enum.valueOf(enumType, str);
2828
yield Optional.of(enumValue);
2929
}
@@ -45,7 +45,7 @@ public Optional<Comparable<?>> getComparableByType(Type fieldType, FieldValueTyp
4545
public ValidationResult isValidValueOfType(Type fieldType, FieldValueType valueType) {
4646
return switch (valueType) {
4747
case STRING -> validFieldValue();
48-
case ENUM -> enumHasConstant(TypeToken.of(fieldType).getRawType(), str)
48+
case ENUM -> enumHasConstant(Types.getRawType(fieldType), str)
4949
? validFieldValue()
5050
: invalidFieldValue(p -> new UnknownEnumConstant(p, str), p -> format("Unknown enum constant for field \"%s\": \"%s\"", p, str));
5151
case UUID -> isValidUuid()

databind/src/main/java/tech/ydb/yoj/databind/schema/reflect/KotlinDataClassComponent.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package tech.ydb.yoj.databind.schema.reflect;
22

33
import com.google.common.base.Preconditions;
4-
import com.google.common.reflect.TypeToken;
54
import kotlin.jvm.JvmClassMappingKt;
65
import kotlin.reflect.KClass;
76
import kotlin.reflect.KClassifier;
@@ -10,6 +9,7 @@
109
import kotlin.reflect.jvm.KCallablesJvm;
1110
import kotlin.reflect.jvm.ReflectJvmMapping;
1211
import tech.ydb.yoj.databind.schema.FieldValueException;
12+
import tech.ydb.yoj.util.lang.Types;
1313

1414
import javax.annotation.Nullable;
1515
import java.lang.reflect.Field;
@@ -22,26 +22,26 @@
2222
private final KProperty1.Getter<?, ?> getter;
2323

2424
public KotlinDataClassComponent(Reflector reflector, String name, KProperty1<?, ?> property) {
25-
super(reflector, name, genericType(property), rawType(property), field(property));
25+
super(reflector, name, genericJavaType(property), rawJavaType(property), field(property));
2626

2727
this.getter = property.getGetter();
2828
KCallablesJvm.setAccessible(this.getter, true);
2929
}
3030

31-
private static Type genericType(KProperty1<?, ?> property) {
31+
private static Type genericJavaType(KProperty1<?, ?> property) {
3232
return ReflectJvmMapping.getJavaType(property.getReturnType());
3333
}
3434

35-
private static Class<?> rawType(KProperty1<?, ?> property) {
36-
Type genericType = genericType(property);
35+
private static Class<?> rawJavaType(KProperty1<?, ?> property) {
36+
Type genericJavaType = genericJavaType(property);
3737

3838
KType kPropertyType = property.getReturnType();
3939
KClassifier kClassifier = kPropertyType.getClassifier();
4040
if (kClassifier instanceof KClass<?> kClass) {
4141
return JvmClassMappingKt.getJavaClass(kClass);
4242
} else {
43-
// fallback to Guava's TypeToken if kotlin-reflect returns unpredictable results ;-)
44-
return TypeToken.of(genericType).getRawType();
43+
// Fallback to java.lang.reflect if kotlin-reflect returns unpredictable results ;-)
44+
return Types.getRawType(genericJavaType);
4545
}
4646
}
4747

databind/src/main/java/tech/ydb/yoj/databind/schema/reflect/StdReflector.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package tech.ydb.yoj.databind.schema.reflect;
22

3-
import com.google.common.reflect.TypeToken;
43
import lombok.NonNull;
54
import tech.ydb.yoj.databind.FieldValueType;
65
import tech.ydb.yoj.databind.schema.configuration.SchemaRegistry;
6+
import tech.ydb.yoj.util.lang.Types;
77

88
import java.lang.reflect.Type;
99
import java.util.List;
@@ -49,7 +49,7 @@ public ReflectType<?> reflectFieldType(Type genericType, FieldValueType bindingT
4949
}
5050

5151
private ReflectType<?> reflectFor(Type type, FieldValueType fvt) {
52-
Class<?> rawType = type instanceof Class<?> clazz ? clazz : TypeToken.of(type).getRawType();
52+
Class<?> rawType = Types.getRawType(type);
5353
for (TypeFactory m : matchers) {
5454
if (m.matches(rawType, fvt)) {
5555
return m.create(this, rawType, fvt);
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package tech.ydb.yoj.util.lang;
2+
3+
import com.google.common.reflect.TypeToken;
4+
import lombok.NonNull;
5+
6+
import java.lang.reflect.Type;
7+
8+
public final class Types {
9+
private Types() {
10+
}
11+
12+
@NonNull
13+
public static Class<?> getRawType(@NonNull Type genericType) {
14+
return genericType instanceof Class<?> clazz ? clazz : TypeToken.of(genericType).getRawType();
15+
}
16+
}

0 commit comments

Comments
 (0)