Skip to content

Commit 07fa339

Browse files
committed
Consistently warn **once** about @Deprecated(forRemoval=true) calls that will be removed in YOJ 3.0.0
1 parent 3c47ff7 commit 07fa339

File tree

12 files changed

+97
-79
lines changed

12 files changed

+97
-79
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package tech.ydb.yoj;
2+
3+
import com.google.common.base.Strings;
4+
import org.slf4j.Logger;
5+
import org.slf4j.LoggerFactory;
6+
7+
import java.util.Collections;
8+
import java.util.Set;
9+
import java.util.concurrent.ConcurrentHashMap;
10+
11+
public final class DeprecationWarnings {
12+
private static final Logger log = LoggerFactory.getLogger(DeprecationWarnings.class);
13+
private static final Set<String> warnings = Collections.newSetFromMap(new ConcurrentHashMap<>());
14+
15+
private DeprecationWarnings() {
16+
}
17+
18+
public static void warnOnce(String key, String msg, Object... args) {
19+
if (warnings.add(key)) {
20+
var formattedMsg = Strings.lenientFormat(msg, args);
21+
log.warn(formattedMsg, new Throwable(key + " stack trace"));
22+
}
23+
}
24+
}

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

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22

33
import com.google.common.base.Preconditions;
44
import lombok.NonNull;
5-
import org.slf4j.Logger;
6-
import org.slf4j.LoggerFactory;
5+
import tech.ydb.yoj.DeprecationWarnings;
76
import tech.ydb.yoj.ExperimentalApi;
87
import tech.ydb.yoj.databind.schema.Column;
98
import tech.ydb.yoj.databind.schema.CustomValueTypeInfo;
@@ -104,8 +103,6 @@ public enum FieldValueType {
104103
@Deprecated(forRemoval = true)
105104
UNKNOWN;
106105

107-
private static final Logger log = LoggerFactory.getLogger(FieldValueType.class);
108-
109106
private static final Set<FieldValueType> SORTABLE_VALUE_TYPES = Set.of(
110107
INTEGER, STRING, ENUM, TIMESTAMP, BYTE_ARRAY
111108
);
@@ -134,11 +131,10 @@ public enum FieldValueType {
134131
@Deprecated(forRemoval = true)
135132
@ExperimentalApi(issue = "https://github.com/ydb-platform/yoj-project/issues/24")
136133
public static void registerStringValueType(@NonNull Class<?> clazz) {
137-
log.error("You are using FieldValueType.registerStringValueType({}.class) which is deprecated for removal in YOJ 3.0.0. "
134+
DeprecationWarnings.warnOnce("FieldValueType.registerStringValueType(Class)",
135+
"You are using FieldValueType.registerStringValueType(%s.class) which is deprecated for removal in YOJ 3.0.0. "
138136
+ "Please use @StringColumn annotation on the Entity field or a @StringValueType annotation on the string-valued type",
139-
clazz.getCanonicalName(),
140-
new Throwable("FieldValueType.registerStringValueType(Class) call stack trace")
141-
);
137+
clazz.getCanonicalName());
142138

143139
boolean isFinal = isFinal(clazz.getModifiers());
144140
boolean isSealed = clazz.isSealed();
@@ -278,8 +274,8 @@ public static boolean isCustomStringValueType(Class<?> clazz) {
278274
*/
279275
@Deprecated(forRemoval = true)
280276
public static boolean isComposite(@NonNull Type type) {
281-
log.error("You are using FieldValueType.isComposite(Type) which is deprecated for removal in YOJ 3.0.0. Please update your code accordingly",
282-
new Throwable("FieldValueType.isComposite(Type) call stack trace"));
277+
DeprecationWarnings.warnOnce("FieldValueType.isComposite(Type)",
278+
"You are using FieldValueType.isComposite(Type) which is deprecated for removal in YOJ 3.0.0. Please update your code accordingly");
283279
return forJavaType(type).isComposite();
284280
}
285281

@@ -297,8 +293,8 @@ public boolean isComposite() {
297293
*/
298294
@Deprecated(forRemoval = true)
299295
public boolean isUnknown() {
300-
log.error("You are using FieldValueType.isUnknown() which is deprecated for removal in YOJ 3.0.0. Please update your code accordingly",
301-
new Throwable("FieldValueType.isUnknown() call stack trace"));
296+
DeprecationWarnings.warnOnce("FieldValueType.isUnknown()",
297+
"You are using FieldValueType.isUnknown() which is deprecated for removal in YOJ 3.0.0. Please update your code accordingly");
302298
return this == UNKNOWN;
303299
}
304300

@@ -316,8 +312,8 @@ public boolean isUnknown() {
316312
*/
317313
@Deprecated(forRemoval = true)
318314
public boolean isSortable() {
319-
log.error("You are using FieldValueType.isSortable() which is deprecated for removal in YOJ 3.0.0. Please update your code accordingly",
320-
new Throwable("FieldValueType.isSortable() call stack trace"));
315+
DeprecationWarnings.warnOnce("FieldValueType.isSortable()",
316+
"You are using FieldValueType.isSortable() which is deprecated for removal in YOJ 3.0.0. Please update your code accordingly");
321317
return SORTABLE_VALUE_TYPES.contains(this);
322318
}
323319
}

repository-ydb-v1/src/main/java/tech/ydb/yoj/repository/ydb/YdbLegacySpliterator.java

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,22 @@
11
package tech.ydb.yoj.repository.ydb;
22

3-
import org.slf4j.Logger;
4-
import org.slf4j.LoggerFactory;
5-
63
import java.util.Spliterator;
74
import java.util.function.Consumer;
85
import java.util.stream.Stream;
96
import java.util.stream.StreamSupport;
107

118
/**
12-
* @deprecated Legacy implementation of {@code Spliterator} for {@code ReadTable}. Will be removed in YOJ 3.0.0.
13-
* <p>To opt into using of this legacy implementation, explicitly set {@code ReadTableParams.<ID>builder().<...>.useNewSpliterator(false)}.
9+
* @deprecated Legacy implementation of {@code Spliterator} for {@code ReadTable}. Will be eventually removed in a future YOJ version.
10+
* <p>To use the new {@code Spliterator} contract-conformant implementation, set {@code ReadTableParams.builder().<...>.useNewSpliterator(true)}.
11+
* <p>Note that using the new implementation currently has a negative performance impact, for more information refer to
12+
* <a href="https://github.com/ydb-platform/yoj-project/issues/42">GitHub Issue #42</a>.
1413
*/
15-
@Deprecated(forRemoval = true)
14+
@Deprecated
1615
class YdbLegacySpliterator<V> implements Spliterator<V> {
17-
private static final Logger log = LoggerFactory.getLogger(YdbLegacySpliterator.class);
18-
1916
private final int flags;
2017
private final Consumer<Consumer<? super V>> action;
2118

2219
public YdbLegacySpliterator(boolean isOrdered, Consumer<Consumer<? super V>> action) {
23-
log.error("You are using YdbLegacySpliterator which is deprecated for removal in YOJ 3.0.0. "
24-
+ "Please use readTable(ReadTableParams.builder().<...>.useNewSpliterator(true).build())",
25-
new Throwable("YdbLegacySpliterator construction stack trace"));
2620
this.action = action;
2721
flags = (isOrdered ? ORDERED : 0) | NONNULL;
2822
}

repository-ydb-v1/src/main/java/tech/ydb/yoj/repository/ydb/YdbSpliterator.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.yandex.ydb.core.Status;
55
import org.slf4j.Logger;
66
import org.slf4j.LoggerFactory;
7+
import tech.ydb.yoj.ExperimentalApi;
78
import tech.ydb.yoj.repository.db.exception.DeadlineExceededException;
89
import tech.ydb.yoj.repository.db.exception.QueryInterruptedException;
910
import tech.ydb.yoj.repository.ydb.client.YdbValidator;
@@ -22,11 +23,16 @@
2223
import java.util.stream.StreamSupport;
2324

2425
/**
25-
* {@code YdbSpliterator} is used for read data from YDB streams.
26-
* It's possible to supply values from different threads, but supplier threads mustn't call onNext concurrently.
27-
* <p>
28-
* Should be closed by close() method for finish work in session.
26+
* {@code YdbSpliterator} used to read data from YDB streams.
27+
* It's possible to supply values from different threads, but supplier threads must not call {@code onNext()} concurrently.
28+
* This Spliterator should be explicitly closed by the {@code close()} method for finish work in YDB session; when the stream returned by
29+
* {@code readTable()} is used inside a YOJ transaction, {@code close()} will be called automatically at transaction end (both commit and rollback).
30+
* <p>To use the new implementation, set {@link tech.ydb.yoj.repository.db.readtable.ReadTableParams.ReadTableParamsBuilder#useNewSpliterator(boolean)
31+
* ReadTableParams<...>.builder().<...>.useNewSpliterator(true)}.
32+
* <p>Note that using the new implementation currently has a negative performance impact, for more information refer to
33+
* <a href="https://github.com/ydb-platform/yoj-project/issues/42">GitHub Issue #42</a>.
2934
*/
35+
@ExperimentalApi(issue = "https://github.com/ydb-platform/yoj-project/issues/42")
3036
class YdbSpliterator<V> implements Spliterator<V> {
3137
private static final Logger log = LoggerFactory.getLogger(YdbSpliterator.class);
3238

repository-ydb-v1/src/main/java/tech/ydb/yoj/repository/ydb/yql/YqlPredicate.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
import lombok.AllArgsConstructor;
66
import lombok.NonNull;
77
import lombok.RequiredArgsConstructor;
8-
import org.slf4j.Logger;
9-
import org.slf4j.LoggerFactory;
8+
import tech.ydb.yoj.DeprecationWarnings;
109
import tech.ydb.yoj.repository.db.Entity;
1110
import tech.ydb.yoj.repository.db.EntitySchema;
1211
import tech.ydb.yoj.repository.ydb.statement.PredicateStatement;
@@ -56,15 +55,14 @@ public abstract class YqlPredicate implements YqlStatementPart<YqlPredicate> {
5655
public static final String TYPE = "Predicate";
5756
private static final AtomicBoolean useLegacyIn = new AtomicBoolean(false);
5857
private static final AtomicBoolean useLegacyRel = new AtomicBoolean(false);
59-
private static final Logger log = LoggerFactory.getLogger(YqlPredicate.class);
6058

6159
/**
6260
* @deprecated This method will be removed in YOJ 3.0.0. There is no alternative, just stop calling it.
6361
*/
6462
@Deprecated(forRemoval = true)
6563
public static void setUseLegacyIn(boolean value) {
66-
log.error("You are using YqlPredicate.setUseLegacyIn(boolean) which is deprecated for removal in YOJ 3.0.0. Please stop calling this method",
67-
new Throwable("YqlPredicate.setUseLegacyIn(boolean) call stack trace"));
64+
DeprecationWarnings.warnOnce("YqlPredicate.setUseLegacyIn(boolean)",
65+
"You are using YqlPredicate.setUseLegacyIn(boolean) which is deprecated for removal in YOJ 3.0.0. Please stop calling this method");
6866
YqlPredicate.useLegacyIn.set(value);
6967
}
7068

@@ -73,8 +71,8 @@ public static void setUseLegacyIn(boolean value) {
7371
*/
7472
@Deprecated(forRemoval = true)
7573
public static void setUseLegacyRel(boolean value) {
76-
log.error("You are using YqlPredicate.setUseLegacyRel(boolean) which is deprecated for removal in YOJ 3.0.0. Please stop calling this method",
77-
new Throwable("YqlPredicate.setUseLegacyRel(boolean) call stack trace"));
74+
DeprecationWarnings.warnOnce("YqlPredicate.setUseLegacyRel(boolean)",
75+
"You are using YqlPredicate.setUseLegacyRel(boolean) which is deprecated for removal in YOJ 3.0.0. Please stop calling this method");
7876
YqlPredicate.useLegacyRel.set(value);
7977
}
8078

repository-ydb-v1/src/main/java/tech/ydb/yoj/repository/ydb/yql/YqlPrimitiveType.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@
1212
import lombok.NonNull;
1313
import lombok.Value;
1414
import lombok.With;
15-
import org.slf4j.Logger;
16-
import org.slf4j.LoggerFactory;
15+
import tech.ydb.yoj.DeprecationWarnings;
1716
import tech.ydb.yoj.databind.ByteArray;
1817
import tech.ydb.yoj.databind.CustomValueType;
1918
import tech.ydb.yoj.databind.CustomValueTypes;
@@ -50,8 +49,6 @@
5049
@Value
5150
@AllArgsConstructor(access = PRIVATE)
5251
public class YqlPrimitiveType implements YqlType {
53-
private static final Logger log = LoggerFactory.getLogger(YqlPrimitiveType.class);
54-
5552
// Only table column data types. See https://ydb.tech/en/docs/yql/reference/types/
5653
private static final Map<PrimitiveTypeId, String> YQL_TYPE_NAMES = Map.ofEntries(
5754
Map.entry(PrimitiveTypeId.BOOL, "Bool"),
@@ -345,8 +342,8 @@ public static void resetStringDefaultTypeToDefaults() {
345342
@NonNull
346343
@Deprecated(forRemoval = true)
347344
public static YqlPrimitiveType of(Type javaType) {
348-
log.error("You are using YqlPrimitiveType.of(Type) which will be removed in YOJ 3.0.0. Please use YqlPrimitiveType.of(JavaField)",
349-
new Throwable("YqlPrimitiveType.of(Type) call stack trace"));
345+
DeprecationWarnings.warnOnce("YqlPrimitiveType.of(Type)",
346+
"You are using YqlPrimitiveType.of(Type) which will be removed in YOJ 3.0.0. Please use YqlPrimitiveType.of(JavaField)");
350347
var valueType = FieldValueType.forJavaType(javaType, null, null);
351348
return resolveYqlType(javaType, valueType, null, null);
352349
}

repository-ydb-v2/src/main/java/tech/ydb/yoj/repository/ydb/YdbLegacySpliterator.java

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,22 @@
11
package tech.ydb.yoj.repository.ydb;
22

3-
import org.slf4j.Logger;
4-
import org.slf4j.LoggerFactory;
5-
63
import java.util.Spliterator;
74
import java.util.function.Consumer;
85
import java.util.stream.Stream;
96
import java.util.stream.StreamSupport;
107

118
/**
12-
* @deprecated Legacy implementation of {@code Spliterator} for {@code ReadTable}. Will be removed in YOJ 3.0.0.
13-
* <p>Please use the new {@code Spliterator} contract-conformant implementation by explicitly setting
14-
* {@code ReadTableParams.builder().<...>.useNewSpliterator(true)}.
9+
* @deprecated Legacy implementation of {@code Spliterator} for {@code ReadTable}. Will be eventually removed in a future YOJ version.
10+
* <p>To use the new {@code Spliterator} contract-conformant implementation, set {@code ReadTableParams.builder().<...>.useNewSpliterator(true)}.
11+
* <p>Note that using the new implementation currently has a negative performance impact, for more information refer to
12+
* <a href="https://github.com/ydb-platform/yoj-project/issues/42">GitHub Issue #42</a>.
1513
*/
16-
@Deprecated(forRemoval = true)
14+
@Deprecated
1715
public class YdbLegacySpliterator<V> implements Spliterator<V> {
18-
private static final Logger log = LoggerFactory.getLogger(YdbLegacySpliterator.class);
19-
2016
private final int flags;
2117
private final Consumer<Consumer<? super V>> action;
2218

2319
public YdbLegacySpliterator(boolean isOrdered, Consumer<Consumer<? super V>> action) {
24-
log.error("You are using YdbLegacySpliterator which is deprecated for removal in YOJ 3.0.0. "
25-
+ "Please use readTable(ReadTableParams.builder().<...>.useNewSpliterator(true).build())",
26-
new Throwable("YdbLegacySpliterator construction stack trace"));
2720
this.action = action;
2821
flags = (isOrdered ? ORDERED : 0) | NONNULL;
2922
}

repository-ydb-v2/src/main/java/tech/ydb/yoj/repository/ydb/YdbSpliterator.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.slf4j.Logger;
55
import org.slf4j.LoggerFactory;
66
import tech.ydb.core.Status;
7+
import tech.ydb.yoj.ExperimentalApi;
78
import tech.ydb.yoj.repository.db.exception.DeadlineExceededException;
89
import tech.ydb.yoj.repository.db.exception.QueryInterruptedException;
910

@@ -23,11 +24,16 @@
2324
import static tech.ydb.yoj.repository.ydb.client.YdbValidator.validate;
2425

2526
/**
26-
* {@code YdbSpliterator} is used for read data from YDB streams.
27-
* It's possible to supply values from different threads, but supplier threads mustn't call onNext concurrently.
28-
* <p>
29-
* Should be closed by close() method for finish work in session.
27+
* {@code YdbSpliterator} used to read data from YDB streams.
28+
* It's possible to supply values from different threads, but supplier threads must not call {@code onNext()} concurrently.
29+
* This Spliterator should be explicitly closed by the {@code close()} method for finish work in YDB session; when the stream returned by
30+
* {@code readTable()} is used inside a YOJ transaction, {@code close()} will be called automatically at transaction end (both commit and rollback).
31+
* <p>To use the new implementation, set {@link tech.ydb.yoj.repository.db.readtable.ReadTableParams.ReadTableParamsBuilder#useNewSpliterator(boolean)
32+
* ReadTableParams<...>.builder().<...>.useNewSpliterator(true)}.
33+
* <p>Note that using the new implementation currently has a negative performance impact, for more information refer to
34+
* <a href="https://github.com/ydb-platform/yoj-project/issues/42">GitHub Issue #42</a>.
3035
*/
36+
@ExperimentalApi(issue = "https://github.com/ydb-platform/yoj-project/issues/42")
3137
public class YdbSpliterator<V> implements Spliterator<V> {
3238
private static final Logger log = LoggerFactory.getLogger(YdbSpliterator.class);
3339

repository-ydb-v2/src/main/java/tech/ydb/yoj/repository/ydb/yql/YqlPredicate.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@
55
import lombok.AllArgsConstructor;
66
import lombok.NonNull;
77
import lombok.RequiredArgsConstructor;
8-
import org.slf4j.Logger;
9-
import org.slf4j.LoggerFactory;
8+
import tech.ydb.yoj.DeprecationWarnings;
109
import tech.ydb.yoj.repository.db.Entity;
1110
import tech.ydb.yoj.repository.db.EntitySchema;
1211
import tech.ydb.yoj.repository.ydb.statement.PredicateStatement;
@@ -54,7 +53,6 @@
5453
*/
5554
public abstract class YqlPredicate implements YqlStatementPart<YqlPredicate> {
5655
public static final String TYPE = "Predicate";
57-
private static final Logger log = LoggerFactory.getLogger(YqlPredicate.class);
5856
private static final AtomicBoolean useLegacyIn = new AtomicBoolean(false);
5957
private static final AtomicBoolean useLegacyRel = new AtomicBoolean(false);
6058

@@ -63,8 +61,8 @@ public abstract class YqlPredicate implements YqlStatementPart<YqlPredicate> {
6361
*/
6462
@Deprecated(forRemoval = true)
6563
public static void setUseLegacyIn(boolean value) {
66-
log.error("You are using YqlPredicate.setUseLegacyIn(boolean) which is deprecated for removal in YOJ 3.0.0. Please stop calling this method",
67-
new Throwable("YqlPredicate.setUseLegacyIn(boolean) call stack trace"));
64+
DeprecationWarnings.warnOnce("YqlPredicate.setUseLegacyIn(boolean)",
65+
"You are using YqlPredicate.setUseLegacyIn(boolean) which is deprecated for removal in YOJ 3.0.0. Please stop calling this method");
6866
YqlPredicate.useLegacyIn.set(value);
6967
}
7068

@@ -73,8 +71,8 @@ public static void setUseLegacyIn(boolean value) {
7371
*/
7472
@Deprecated(forRemoval = true)
7573
public static void setUseLegacyRel(boolean value) {
76-
log.error("You are using YqlPredicate.setUseLegacyRel(boolean) which is deprecated for removal in YOJ 3.0.0. Please stop calling this method",
77-
new Throwable("YqlPredicate.setUseLegacyRel(boolean) call stack trace"));
74+
DeprecationWarnings.warnOnce("YqlPredicate.setUseLegacyRel(boolean)",
75+
"You are using YqlPredicate.setUseLegacyRel(boolean) which is deprecated for removal in YOJ 3.0.0. Please stop calling this method");
7876
YqlPredicate.useLegacyRel.set(value);
7977
}
8078

repository-ydb-v2/src/main/java/tech/ydb/yoj/repository/ydb/yql/YqlPrimitiveType.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import tech.ydb.proto.ValueProtos.Type.PrimitiveTypeId;
1515
import tech.ydb.proto.ValueProtos.Value.ValueCase;
1616
import tech.ydb.table.values.proto.ProtoValue;
17+
import tech.ydb.yoj.DeprecationWarnings;
1718
import tech.ydb.yoj.ExperimentalApi;
1819
import tech.ydb.yoj.databind.ByteArray;
1920
import tech.ydb.yoj.databind.CustomValueType;
@@ -344,9 +345,9 @@ private static void registerYqlType(
344345
*/
345346
@Deprecated(forRemoval = true)
346347
public static void changeStringDefaultTypeToUtf8() {
347-
log.error("You are using YqlPrimitiveType.changeStringDefaultTypeToUtf8() which will be removed in YOJ 3.0.0. "
348-
+ "Please use YqlPrimitiveType.useNewMappingFor(STRING, ENUM)",
349-
new Throwable("YqlPrimitiveType.changeStringDefaultTypeToUtf8() call stack trace"));
348+
DeprecationWarnings.warnOnce("YqlPrimitiveType.changeStringDefaultTypeToUtf8()",
349+
"You are using YqlPrimitiveType.changeStringDefaultTypeToUtf8() which will be removed in YOJ 3.0.0. "
350+
+ "Please use YqlPrimitiveType.useNewMappingFor(STRING, ENUM)");
350351
useRecommendedMappingFor(FieldValueType.STRING, FieldValueType.ENUM);
351352
}
352353

@@ -356,9 +357,9 @@ public static void changeStringDefaultTypeToUtf8() {
356357
*/
357358
@Deprecated(forRemoval = true)
358359
public static void resetStringDefaultTypeToDefaults() {
359-
log.error("You are using YqlPrimitiveType.resetStringDefaultTypeToDefaults() which will be removed in YOJ 3.0.0. "
360-
+ "Please use YqlPrimitiveType.useLegacyMappingFor(STRING, ENUM)",
361-
new Throwable("YqlPrimitiveType.resetStringDefaultTypeToDefaults() call stack trace"));
360+
DeprecationWarnings.warnOnce("YqlPrimitiveType.resetStringDefaultTypeToDefaults()",
361+
"You are using YqlPrimitiveType.resetStringDefaultTypeToDefaults() which will be removed in YOJ 3.0.0. "
362+
+ "Please use YqlPrimitiveType.useLegacyMappingFor(STRING, ENUM)");
362363
useLegacyMappingFor(FieldValueType.STRING, FieldValueType.ENUM);
363364
}
364365

@@ -422,8 +423,8 @@ public static void useRecommendedMappingFor(FieldValueType... fieldValueTypes) {
422423
@NonNull
423424
@Deprecated(forRemoval = true)
424425
public static YqlPrimitiveType of(Type javaType) {
425-
log.error("You are using YqlPrimitiveType.of(Type) which will be removed in YOJ 3.0.0. Please use YqlPrimitiveType.of(JavaField) instead",
426-
new Throwable("YqlPrimitiveType.of(Type) call stack trace"));
426+
DeprecationWarnings.warnOnce("YqlPrimitiveType.of(Type)",
427+
"You are using YqlPrimitiveType.of(Type) which will be removed in YOJ 3.0.0. Please use YqlPrimitiveType.of(JavaField) instead");
427428
var valueType = FieldValueType.forJavaType(javaType, null, null);
428429
return resolveYqlType(javaType, valueType, null, null);
429430
}

0 commit comments

Comments
 (0)