diff --git a/connect/test-plugins/src/main/java/org/apache/kafka/connect/tools/MockConnector.java b/connect/test-plugins/src/main/java/org/apache/kafka/connect/tools/MockConnector.java index 267466a4b0b..f598feede8c 100644 --- a/connect/test-plugins/src/main/java/org/apache/kafka/connect/tools/MockConnector.java +++ b/connect/test-plugins/src/main/java/org/apache/kafka/connect/tools/MockConnector.java @@ -24,7 +24,6 @@ import org.apache.kafka.connect.connector.Task; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.Executors; @@ -91,7 +90,7 @@ public class MockConnector extends Connector { @Override public List> taskConfigs(int maxTasks) { log.debug("Creating single task for MockConnector"); - return Collections.singletonList(config); + return List.of(config); } @Override diff --git a/connect/test-plugins/src/main/java/org/apache/kafka/connect/tools/MockSourceTask.java b/connect/test-plugins/src/main/java/org/apache/kafka/connect/tools/MockSourceTask.java index f69c58b99ab..49dc5e8a7e6 100644 --- a/connect/test-plugins/src/main/java/org/apache/kafka/connect/tools/MockSourceTask.java +++ b/connect/test-plugins/src/main/java/org/apache/kafka/connect/tools/MockSourceTask.java @@ -23,7 +23,6 @@ import org.apache.kafka.connect.source.SourceTask; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Collections; import java.util.List; import java.util.Map; @@ -67,7 +66,7 @@ public class MockSourceTask extends SourceTask { throw new RuntimeException(); } } - return Collections.emptyList(); + return List.of(); } @Override diff --git a/connect/test-plugins/src/main/java/org/apache/kafka/connect/tools/SchemaSourceTask.java b/connect/test-plugins/src/main/java/org/apache/kafka/connect/tools/SchemaSourceTask.java index c40e0932e53..d79c133f673 100644 --- a/connect/test-plugins/src/main/java/org/apache/kafka/connect/tools/SchemaSourceTask.java +++ b/connect/test-plugins/src/main/java/org/apache/kafka/connect/tools/SchemaSourceTask.java @@ -27,7 +27,6 @@ import org.apache.kafka.server.util.ThroughputThrottler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Collections; import java.util.List; import java.util.Map; @@ -104,7 +103,7 @@ public class SchemaSourceTask extends SourceTask { } throttler = new ThroughputThrottler(throughput, System.currentTimeMillis()); - partition = Collections.singletonMap(ID_FIELD, id); + partition = Map.of(ID_FIELD, id); Map previousOffset = this.context.offsetStorageReader().offset(partition); if (previousOffset != null) { seqno = (Long) previousOffset.get(SEQNO_FIELD) + 1; @@ -124,7 +123,7 @@ public class SchemaSourceTask extends SourceTask { throttler.throttle(); } - Map ccOffset = Collections.singletonMap(SEQNO_FIELD, seqno); + Map ccOffset = Map.of(SEQNO_FIELD, seqno); int partitionVal = (int) (seqno % partitionCount); final Struct data; final SourceRecord srcRecord; @@ -158,10 +157,10 @@ public class SchemaSourceTask extends SourceTask { System.out.println("{\"task\": " + id + ", \"seqno\": " + seqno + "}"); seqno++; count++; - return Collections.singletonList(srcRecord); + return List.of(srcRecord); } else { throttler.throttle(); - return Collections.emptyList(); + return List.of(); } } diff --git a/connect/test-plugins/src/main/java/org/apache/kafka/connect/tools/VerifiableSourceTask.java b/connect/test-plugins/src/main/java/org/apache/kafka/connect/tools/VerifiableSourceTask.java index 49151b40d1e..1fe2bd31802 100644 --- a/connect/test-plugins/src/main/java/org/apache/kafka/connect/tools/VerifiableSourceTask.java +++ b/connect/test-plugins/src/main/java/org/apache/kafka/connect/tools/VerifiableSourceTask.java @@ -31,7 +31,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -94,7 +93,7 @@ public class VerifiableSourceTask extends SourceTask { throw new ConnectException("Invalid VerifiableSourceTask configuration", e); } - partition = Collections.singletonMap(ID_FIELD, id); + partition = Map.of(ID_FIELD, id); Map previousOffset = this.context.offsetStorageReader().offset(partition); if (previousOffset != null) seqno = (Long) previousOffset.get(SEQNO_FIELD) + 1; @@ -129,11 +128,11 @@ public class VerifiableSourceTask extends SourceTask { } System.out.println(dataJson); - Map ccOffset = Collections.singletonMap(SEQNO_FIELD, seqno); + Map ccOffset = Map.of(SEQNO_FIELD, seqno); Schema valueSchema = completeRecordData ? COMPLETE_VALUE_SCHEMA : Schema.INT64_SCHEMA; Object value = completeRecordData ? completeValue(data) : seqno; SourceRecord srcRecord = new SourceRecord(partition, ccOffset, topic, Schema.INT32_SCHEMA, id, valueSchema, value); - List result = Collections.singletonList(srcRecord); + List result = List.of(srcRecord); seqno++; return result; } diff --git a/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/Cast.java b/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/Cast.java index 099e1a64882..7c13ef4d785 100644 --- a/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/Cast.java +++ b/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/Cast.java @@ -231,38 +231,26 @@ public abstract class Cast> implements Transformation } private SchemaBuilder convertFieldType(Schema.Type type) { - switch (type) { - case INT8: - return SchemaBuilder.int8(); - case INT16: - return SchemaBuilder.int16(); - case INT32: - return SchemaBuilder.int32(); - case INT64: - return SchemaBuilder.int64(); - case FLOAT32: - return SchemaBuilder.float32(); - case FLOAT64: - return SchemaBuilder.float64(); - case BOOLEAN: - return SchemaBuilder.bool(); - case STRING: - return SchemaBuilder.string(); - default: - throw new DataException("Unexpected type in Cast transformation: " + type); - } + return switch (type) { + case INT8 -> SchemaBuilder.int8(); + case INT16 -> SchemaBuilder.int16(); + case INT32 -> SchemaBuilder.int32(); + case INT64 -> SchemaBuilder.int64(); + case FLOAT32 -> SchemaBuilder.float32(); + case FLOAT64 -> SchemaBuilder.float64(); + case BOOLEAN -> SchemaBuilder.bool(); + case STRING -> SchemaBuilder.string(); + default -> throw new DataException("Unexpected type in Cast transformation: " + type); + }; } private static Object encodeLogicalType(Schema schema, Object value) { - switch (schema.name()) { - case Date.LOGICAL_NAME: - return Date.fromLogical(schema, (java.util.Date) value); - case Time.LOGICAL_NAME: - return Time.fromLogical(schema, (java.util.Date) value); - case Timestamp.LOGICAL_NAME: - return Timestamp.fromLogical(schema, (java.util.Date) value); - } - return value; + return switch (schema.name()) { + case Date.LOGICAL_NAME -> Date.fromLogical(schema, (java.util.Date) value); + case Time.LOGICAL_NAME -> Time.fromLogical(schema, (java.util.Date) value); + case Timestamp.LOGICAL_NAME -> Timestamp.fromLogical(schema, (java.util.Date) value); + default -> value; + }; } private static Object castValueToType(Schema schema, Object value, Schema.Type targetType) { @@ -283,26 +271,17 @@ public abstract class Cast> implements Transformation value = encodeLogicalType(schema, value); } - switch (targetType) { - case INT8: - return castToInt8(value); - case INT16: - return castToInt16(value); - case INT32: - return castToInt32(value); - case INT64: - return castToInt64(value); - case FLOAT32: - return castToFloat32(value); - case FLOAT64: - return castToFloat64(value); - case BOOLEAN: - return castToBoolean(value); - case STRING: - return castToString(value); - default: - throw new DataException(targetType + " is not supported in the Cast transformation."); - } + return switch (targetType) { + case INT8 -> castToInt8(value); + case INT16 -> castToInt16(value); + case INT32 -> castToInt32(value); + case INT64 -> castToInt64(value); + case FLOAT32 -> castToFloat32(value); + case FLOAT64 -> castToFloat64(value); + case BOOLEAN -> castToBoolean(value); + case STRING -> castToString(value); + default -> throw new DataException(targetType + " is not supported in the Cast transformation."); + }; } catch (NumberFormatException e) { throw new DataException("Value (" + value.toString() + ") was out of range for requested data type", e); } diff --git a/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/HeaderFrom.java b/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/HeaderFrom.java index 1773233394e..8b9030066ae 100644 --- a/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/HeaderFrom.java +++ b/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/HeaderFrom.java @@ -87,14 +87,11 @@ public abstract class HeaderFrom> implements Transfor } static Operation fromName(String name) { - switch (name) { - case MOVE_OPERATION: - return MOVE; - case COPY_OPERATION: - return COPY; - default: - throw new IllegalArgumentException(); - } + return switch (name) { + case MOVE_OPERATION -> MOVE; + case COPY_OPERATION -> COPY; + default -> throw new IllegalArgumentException(); + }; } public String toString() { diff --git a/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/MaskField.java b/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/MaskField.java index c3a45d9170e..df76a923d81 100644 --- a/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/MaskField.java +++ b/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/MaskField.java @@ -65,32 +65,30 @@ public abstract class MaskField> implements Transform private static final String PURPOSE = "mask fields"; - private static final Map, Function> REPLACEMENT_MAPPING_FUNC = new HashMap<>(); - private static final Map, Object> PRIMITIVE_VALUE_MAPPING = new HashMap<>(); - - static { - PRIMITIVE_VALUE_MAPPING.put(Boolean.class, Boolean.FALSE); - PRIMITIVE_VALUE_MAPPING.put(Byte.class, (byte) 0); - PRIMITIVE_VALUE_MAPPING.put(Short.class, (short) 0); - PRIMITIVE_VALUE_MAPPING.put(Integer.class, 0); - PRIMITIVE_VALUE_MAPPING.put(Long.class, 0L); - PRIMITIVE_VALUE_MAPPING.put(Float.class, 0f); - PRIMITIVE_VALUE_MAPPING.put(Double.class, 0d); - PRIMITIVE_VALUE_MAPPING.put(BigInteger.class, BigInteger.ZERO); - PRIMITIVE_VALUE_MAPPING.put(BigDecimal.class, BigDecimal.ZERO); - PRIMITIVE_VALUE_MAPPING.put(Date.class, new Date(0)); - PRIMITIVE_VALUE_MAPPING.put(String.class, ""); - - REPLACEMENT_MAPPING_FUNC.put(Byte.class, v -> Values.convertToByte(null, v)); - REPLACEMENT_MAPPING_FUNC.put(Short.class, v -> Values.convertToShort(null, v)); - REPLACEMENT_MAPPING_FUNC.put(Integer.class, v -> Values.convertToInteger(null, v)); - REPLACEMENT_MAPPING_FUNC.put(Long.class, v -> Values.convertToLong(null, v)); - REPLACEMENT_MAPPING_FUNC.put(Float.class, v -> Values.convertToFloat(null, v)); - REPLACEMENT_MAPPING_FUNC.put(Double.class, v -> Values.convertToDouble(null, v)); - REPLACEMENT_MAPPING_FUNC.put(String.class, Function.identity()); - REPLACEMENT_MAPPING_FUNC.put(BigDecimal.class, BigDecimal::new); - REPLACEMENT_MAPPING_FUNC.put(BigInteger.class, BigInteger::new); - } + private static final Map, Function> REPLACEMENT_MAPPING_FUNC = Map.of( + Byte.class, v -> Values.convertToByte(null, v), + Short.class, v -> Values.convertToShort(null, v), + Integer.class, v -> Values.convertToInteger(null, v), + Long.class, v -> Values.convertToLong(null, v), + Float.class, v -> Values.convertToFloat(null, v), + Double.class, v -> Values.convertToDouble(null, v), + String.class, Function.identity(), + BigDecimal.class, BigDecimal::new, + BigInteger.class, BigInteger::new + ); + private static final Map, Object> PRIMITIVE_VALUE_MAPPING = Map.ofEntries( + Map.entry(Boolean.class, Boolean.FALSE), + Map.entry(Byte.class, (byte) 0), + Map.entry(Short.class, (short) 0), + Map.entry(Integer.class, 0), + Map.entry(Long.class, 0L), + Map.entry(Float.class, 0f), + Map.entry(Double.class, 0d), + Map.entry(BigInteger.class, BigInteger.ZERO), + Map.entry(BigDecimal.class, BigDecimal.ZERO), + Map.entry(Date.class, new Date(0)), + Map.entry(String.class, "") + ); private Set maskedFields; private String replacement; diff --git a/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/ReplaceField.java b/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/ReplaceField.java index 38d27e8a818..9584ecfc978 100644 --- a/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/ReplaceField.java +++ b/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/ReplaceField.java @@ -31,7 +31,6 @@ import org.apache.kafka.connect.data.Struct; import org.apache.kafka.connect.transforms.util.SchemaUtil; import org.apache.kafka.connect.transforms.util.SimpleConfig; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -56,11 +55,11 @@ public abstract class ReplaceField> implements Transf } public static final ConfigDef CONFIG_DEF = new ConfigDef() - .define(ConfigName.EXCLUDE, ConfigDef.Type.LIST, Collections.emptyList(), ConfigDef.Importance.MEDIUM, + .define(ConfigName.EXCLUDE, ConfigDef.Type.LIST, List.of(), ConfigDef.Importance.MEDIUM, "Fields to exclude. This takes precedence over the fields to include.") - .define(ConfigName.INCLUDE, ConfigDef.Type.LIST, Collections.emptyList(), ConfigDef.Importance.MEDIUM, + .define(ConfigName.INCLUDE, ConfigDef.Type.LIST, List.of(), ConfigDef.Importance.MEDIUM, "Fields to include. If specified, only these fields will be used.") - .define(ConfigName.RENAMES, ConfigDef.Type.LIST, Collections.emptyList(), + .define(ConfigName.RENAMES, ConfigDef.Type.LIST, List.of(), ConfigDef.LambdaValidator.with( (name, value) -> { @SuppressWarnings("unchecked") diff --git a/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/TimestampConverter.java b/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/TimestampConverter.java index aeec9ea4189..940bb6045a9 100644 --- a/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/TimestampConverter.java +++ b/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/TimestampConverter.java @@ -166,17 +166,15 @@ public abstract class TimestampConverter> implements public Date toRaw(Config config, Object orig) { if (!(orig instanceof Long unixTime)) throw new DataException("Expected Unix timestamp to be a Long, but found " + orig.getClass()); - switch (config.unixPrecision) { - case UNIX_PRECISION_SECONDS: - return Timestamp.toLogical(Timestamp.SCHEMA, TimeUnit.SECONDS.toMillis(unixTime)); - case UNIX_PRECISION_MICROS: - return Timestamp.toLogical(Timestamp.SCHEMA, TimeUnit.MICROSECONDS.toMillis(unixTime)); - case UNIX_PRECISION_NANOS: - return Timestamp.toLogical(Timestamp.SCHEMA, TimeUnit.NANOSECONDS.toMillis(unixTime)); - case UNIX_PRECISION_MILLIS: - default: - return Timestamp.toLogical(Timestamp.SCHEMA, unixTime); - } + return switch (config.unixPrecision) { + case UNIX_PRECISION_SECONDS -> + Timestamp.toLogical(Timestamp.SCHEMA, TimeUnit.SECONDS.toMillis(unixTime)); + case UNIX_PRECISION_MICROS -> + Timestamp.toLogical(Timestamp.SCHEMA, TimeUnit.MICROSECONDS.toMillis(unixTime)); + case UNIX_PRECISION_NANOS -> + Timestamp.toLogical(Timestamp.SCHEMA, TimeUnit.NANOSECONDS.toMillis(unixTime)); + default -> Timestamp.toLogical(Timestamp.SCHEMA, unixTime); + }; } @Override @@ -186,18 +184,13 @@ public abstract class TimestampConverter> implements @Override public Long toType(Config config, Date orig) { - Long unixTimeMillis = Timestamp.fromLogical(Timestamp.SCHEMA, orig); - switch (config.unixPrecision) { - case UNIX_PRECISION_SECONDS: - return TimeUnit.MILLISECONDS.toSeconds(unixTimeMillis); - case UNIX_PRECISION_MICROS: - return TimeUnit.MILLISECONDS.toMicros(unixTimeMillis); - case UNIX_PRECISION_NANOS: - return TimeUnit.MILLISECONDS.toNanos(unixTimeMillis); - case UNIX_PRECISION_MILLIS: - default: - return unixTimeMillis; - } + long unixTimeMillis = Timestamp.fromLogical(Timestamp.SCHEMA, orig); + return switch (config.unixPrecision) { + case UNIX_PRECISION_SECONDS -> TimeUnit.MILLISECONDS.toSeconds(unixTimeMillis); + case UNIX_PRECISION_MICROS -> TimeUnit.MILLISECONDS.toMicros(unixTimeMillis); + case UNIX_PRECISION_NANOS -> TimeUnit.MILLISECONDS.toNanos(unixTimeMillis); + default -> unixTimeMillis; + }; } }); diff --git a/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/field/SingleFieldPath.java b/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/field/SingleFieldPath.java index 326a844025d..6016707d367 100644 --- a/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/field/SingleFieldPath.java +++ b/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/field/SingleFieldPath.java @@ -22,7 +22,6 @@ import org.apache.kafka.connect.data.Schema; import org.apache.kafka.connect.data.Struct; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Objects; @@ -53,7 +52,7 @@ public class SingleFieldPath { this.version = version; switch (version) { case V1: // backward compatibility - this.steps = Collections.singletonList(pathText); + this.steps = List.of(pathText); break; case V2: this.steps = buildFieldPathV2(pathText); @@ -134,7 +133,7 @@ public class SingleFieldPath { // add last step if last char is a dot if (!path.isEmpty() && path.charAt(path.length() - 1) == DOT) steps.add(""); - return Collections.unmodifiableList(steps); + return List.copyOf(steps); } private static void failWhenIncompleteBacktickPair(String path, int backtickAt) { diff --git a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/CastTest.java b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/CastTest.java index e79e163b463..1a470095a41 100644 --- a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/CastTest.java +++ b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/CastTest.java @@ -39,7 +39,6 @@ import org.junit.jupiter.params.provider.MethodSource; import java.math.BigDecimal; import java.nio.ByteBuffer; import java.util.Arrays; -import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -72,38 +71,38 @@ public class CastTest { @Test public void testConfigEmpty() { - assertThrows(ConfigException.class, () -> xformKey.configure(Collections.singletonMap(Cast.SPEC_CONFIG, ""))); + assertThrows(ConfigException.class, () -> xformKey.configure(Map.of(Cast.SPEC_CONFIG, ""))); } @Test public void testConfigInvalidSchemaType() { - assertThrows(ConfigException.class, () -> xformKey.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "foo:faketype"))); + assertThrows(ConfigException.class, () -> xformKey.configure(Map.of(Cast.SPEC_CONFIG, "foo:faketype"))); } @Test public void testConfigInvalidTargetType() { - assertThrows(ConfigException.class, () -> xformKey.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "foo:array"))); - assertThrows(ConfigException.class, () -> xformKey.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "array"))); + assertThrows(ConfigException.class, () -> xformKey.configure(Map.of(Cast.SPEC_CONFIG, "foo:array"))); + assertThrows(ConfigException.class, () -> xformKey.configure(Map.of(Cast.SPEC_CONFIG, "array"))); } @Test public void testUnsupportedTargetType() { - assertThrows(ConfigException.class, () -> xformKey.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "foo:bytes"))); + assertThrows(ConfigException.class, () -> xformKey.configure(Map.of(Cast.SPEC_CONFIG, "foo:bytes"))); } @Test public void testConfigInvalidMap() { - assertThrows(ConfigException.class, () -> xformKey.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "foo:int8:extra"))); + assertThrows(ConfigException.class, () -> xformKey.configure(Map.of(Cast.SPEC_CONFIG, "foo:int8:extra"))); } @Test public void testConfigMixWholeAndFieldTransformation() { - assertThrows(ConfigException.class, () -> xformKey.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "foo:int8,int32"))); + assertThrows(ConfigException.class, () -> xformKey.configure(Map.of(Cast.SPEC_CONFIG, "foo:int8,int32"))); } @Test public void castNullValueRecordWithSchema() { - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "foo:int64")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "foo:int64")); SourceRecord original = new SourceRecord(null, null, "topic", 0, Schema.STRING_SCHEMA, "key", Schema.STRING_SCHEMA, null); SourceRecord transformed = xformValue.apply(original); @@ -129,7 +128,7 @@ public class CastTest { @Test public void castNullValueRecordSchemaless() { - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "foo:int64")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "foo:int64")); SourceRecord original = new SourceRecord(null, null, "topic", 0, Schema.STRING_SCHEMA, "key", null, null); SourceRecord transformed = xformValue.apply(original); @@ -138,7 +137,7 @@ public class CastTest { @Test public void castNullKeyRecordWithSchema() { - xformKey.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "foo:int64")); + xformKey.configure(Map.of(Cast.SPEC_CONFIG, "foo:int64")); SourceRecord original = new SourceRecord(null, null, "topic", 0, Schema.STRING_SCHEMA, null, Schema.STRING_SCHEMA, "value"); SourceRecord transformed = xformKey.apply(original); @@ -147,7 +146,7 @@ public class CastTest { @Test public void castNullKeyRecordSchemaless() { - xformKey.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "foo:int64")); + xformKey.configure(Map.of(Cast.SPEC_CONFIG, "foo:int64")); SourceRecord original = new SourceRecord(null, null, "topic", 0, null, null, Schema.STRING_SCHEMA, "value"); SourceRecord transformed = xformKey.apply(original); @@ -156,7 +155,7 @@ public class CastTest { @Test public void castWholeRecordKeyWithSchema() { - xformKey.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "int8")); + xformKey.configure(Map.of(Cast.SPEC_CONFIG, "int8")); SourceRecord transformed = xformKey.apply(new SourceRecord(null, null, "topic", 0, Schema.INT32_SCHEMA, 42, Schema.STRING_SCHEMA, "bogus")); @@ -166,7 +165,7 @@ public class CastTest { @Test public void castWholeRecordValueWithSchemaInt8() { - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "int8")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "int8")); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, Schema.INT32_SCHEMA, 42)); @@ -176,7 +175,7 @@ public class CastTest { @Test public void castWholeRecordValueWithSchemaInt16() { - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "int16")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "int16")); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, Schema.INT32_SCHEMA, 42)); @@ -186,7 +185,7 @@ public class CastTest { @Test public void castWholeRecordValueWithSchemaInt32() { - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "int32")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "int32")); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, Schema.INT32_SCHEMA, 42)); @@ -196,7 +195,7 @@ public class CastTest { @Test public void castWholeRecordValueWithSchemaInt64() { - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "int64")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "int64")); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, Schema.INT32_SCHEMA, 42)); @@ -206,7 +205,7 @@ public class CastTest { @Test public void castWholeRecordValueWithSchemaFloat32() { - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "float32")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "float32")); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, Schema.INT32_SCHEMA, 42)); @@ -216,7 +215,7 @@ public class CastTest { @Test public void castWholeRecordValueWithSchemaFloat64() { - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "float64")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "float64")); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, Schema.INT32_SCHEMA, 42)); @@ -226,7 +225,7 @@ public class CastTest { @Test public void castWholeRecordValueWithSchemaBooleanTrue() { - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "boolean")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "boolean")); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, Schema.INT32_SCHEMA, 42)); @@ -236,7 +235,7 @@ public class CastTest { @Test public void castWholeRecordValueWithSchemaBooleanFalse() { - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "boolean")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "boolean")); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, Schema.INT32_SCHEMA, 0)); @@ -246,7 +245,7 @@ public class CastTest { @Test public void castWholeRecordValueWithSchemaString() { - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "string")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "string")); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, Schema.INT32_SCHEMA, 42)); @@ -257,7 +256,7 @@ public class CastTest { @Test public void castWholeBigDecimalRecordValueWithSchemaString() { BigDecimal bigDecimal = new BigDecimal(42); - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "string")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "string")); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, Decimal.schema(bigDecimal.scale()), bigDecimal)); @@ -268,7 +267,7 @@ public class CastTest { @Test public void castWholeDateRecordValueWithSchemaString() { Date timestamp = new Date(MILLIS_PER_DAY + 1); // day + 1msec to get a timestamp formatting. - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "string")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "string")); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, Timestamp.SCHEMA, timestamp)); @@ -279,7 +278,7 @@ public class CastTest { @Test public void castWholeRecordDefaultValue() { // Validate default value in schema is correctly converted - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "int32")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "int32")); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, SchemaBuilder.float32().defaultValue(-42.125f).build(), 42.125f)); @@ -290,7 +289,7 @@ public class CastTest { @Test public void castWholeRecordKeySchemaless() { - xformKey.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "int8")); + xformKey.configure(Map.of(Cast.SPEC_CONFIG, "int8")); SourceRecord transformed = xformKey.apply(new SourceRecord(null, null, "topic", 0, null, 42, Schema.STRING_SCHEMA, "bogus")); @@ -300,7 +299,7 @@ public class CastTest { @Test public void castWholeRecordValueSchemalessInt8() { - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "int8")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "int8")); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, null, 42)); @@ -310,7 +309,7 @@ public class CastTest { @Test public void castWholeRecordValueSchemalessInt16() { - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "int16")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "int16")); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, null, 42)); @@ -320,7 +319,7 @@ public class CastTest { @Test public void castWholeRecordValueSchemalessInt32() { - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "int32")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "int32")); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, null, 42)); @@ -330,7 +329,7 @@ public class CastTest { @Test public void castWholeRecordValueSchemalessInt64() { - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "int64")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "int64")); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, null, 42)); @@ -340,7 +339,7 @@ public class CastTest { @Test public void castWholeRecordValueSchemalessFloat32() { - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "float32")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "float32")); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, null, 42)); @@ -350,7 +349,7 @@ public class CastTest { @Test public void castWholeRecordValueSchemalessFloat64() { - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "float64")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "float64")); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, null, 42)); @@ -360,7 +359,7 @@ public class CastTest { @Test public void castWholeRecordValueSchemalessBooleanTrue() { - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "boolean")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "boolean")); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, null, 42)); @@ -370,7 +369,7 @@ public class CastTest { @Test public void castWholeRecordValueSchemalessBooleanFalse() { - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "boolean")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "boolean")); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, null, 0)); @@ -380,7 +379,7 @@ public class CastTest { @Test public void castWholeRecordValueSchemalessString() { - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "string")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "string")); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, null, 42)); @@ -390,15 +389,15 @@ public class CastTest { @Test public void castWholeRecordValueSchemalessUnsupportedType() { - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "int8")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "int8")); assertThrows(DataException.class, () -> xformValue.apply(new SourceRecord(null, null, "topic", 0, - null, Collections.singletonList("foo")))); + null, List.of("foo")))); } @Test public void castLogicalToPrimitive() { - List specParts = Arrays.asList( + List specParts = List.of( "date_to_int32:int32", // Cast to underlying representation "timestamp_to_int64:int64", // Cast to underlying representation "time_to_int64:int64", // Cast to wider datatype than underlying representation @@ -408,7 +407,7 @@ public class CastTest { ); Date day = new Date(MILLIS_PER_DAY); - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, + xformValue.configure(Map.of(Cast.SPEC_CONFIG, String.join(",", specParts))); SchemaBuilder builder = SchemaBuilder.struct(); @@ -455,7 +454,7 @@ public class CastTest { Date time = new Date(MILLIS_PER_HOUR); Date timestamp = new Date(); - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "date:string,decimal:string,time:string,timestamp:string")); SchemaBuilder builder = SchemaBuilder.struct(); @@ -494,7 +493,7 @@ public class CastTest { byte[] byteArray = new byte[] {(byte) 0xFE, (byte) 0xDC, (byte) 0xBA, (byte) 0x98, 0x76, 0x54, 0x32, 0x10}; ByteBuffer byteBuffer = ByteBuffer.wrap(Arrays.copyOf(byteArray, byteArray.length)); - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "int8:int16,int16:int32,int32:int64,int64:boolean,float32:float64,float64:boolean,boolean:int8,string:int32,bigdecimal:string,date:string,optional:int32,bytes:string,byteArray:string")); // Include an optional fields and fields with defaults to validate their values are passed through properly @@ -578,7 +577,7 @@ public class CastTest { @SuppressWarnings("unchecked") @Test public void castFieldsSchemaless() { - xformValue.configure(Collections.singletonMap(Cast.SPEC_CONFIG, "int8:int16,int16:int32,int32:int64,int64:boolean,float32:float64,float64:boolean,boolean:int8,string:int32")); + xformValue.configure(Map.of(Cast.SPEC_CONFIG, "int8:int16,int16:int32,int32:int64,int64:boolean,float32:float64,float64:boolean,boolean:int8,string:int32")); Map recordValue = new HashMap<>(); recordValue.put("int8", (byte) 8); recordValue.put("int16", (short) 16); diff --git a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/DropHeadersTest.java b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/DropHeadersTest.java index d164512897b..2def8f2e4d2 100644 --- a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/DropHeadersTest.java +++ b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/DropHeadersTest.java @@ -25,10 +25,9 @@ import org.apache.kafka.connect.source.SourceRecord; import org.junit.jupiter.api.Test; import java.util.HashMap; +import java.util.List; import java.util.Map; -import static java.util.Arrays.asList; -import static java.util.Collections.singletonMap; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -38,7 +37,7 @@ public class DropHeadersTest { private Map config(String... headers) { Map result = new HashMap<>(); - result.put(DropHeaders.HEADERS_FIELD, asList(headers)); + result.put(DropHeaders.HEADERS_FIELD, List.of(headers)); return result; } @@ -106,8 +105,8 @@ public class DropHeadersTest { } private SourceRecord sourceRecord(ConnectHeaders headers) { - Map sourcePartition = singletonMap("foo", "bar"); - Map sourceOffset = singletonMap("baz", "quxx"); + Map sourcePartition = Map.of("foo", "bar"); + Map sourceOffset = Map.of("baz", "quxx"); String topic = "topic"; Integer partition = 0; Schema keySchema = null; diff --git a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/ExtractFieldTest.java b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/ExtractFieldTest.java index ff11ffe4e85..414dec56095 100644 --- a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/ExtractFieldTest.java +++ b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/ExtractFieldTest.java @@ -29,7 +29,6 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.stream.Stream; @@ -57,9 +56,9 @@ public class ExtractFieldTest { @Test public void schemaless() { - xformKey.configure(Collections.singletonMap("field", "magic")); + xformKey.configure(Map.of("field", "magic")); - final SinkRecord record = new SinkRecord("test", 0, null, Collections.singletonMap("magic", 42), null, null, 0); + final SinkRecord record = new SinkRecord("test", 0, null, Map.of("magic", 42), null, null, 0); final SinkRecord transformedRecord = xformKey.apply(record); assertNull(transformedRecord.keySchema()); @@ -73,7 +72,7 @@ public class ExtractFieldTest { configs.put("field", "magic.foo"); xformKey.configure(configs); - final Map key = Collections.singletonMap("magic", Collections.singletonMap("foo", 42)); + final Map key = Map.of("magic", Map.of("foo", 42)); final SinkRecord record = new SinkRecord("test", 0, null, key, null, null, 0); final SinkRecord transformedRecord = xformKey.apply(record); @@ -83,7 +82,7 @@ public class ExtractFieldTest { @Test public void nullSchemaless() { - xformKey.configure(Collections.singletonMap("field", "magic")); + xformKey.configure(Map.of("field", "magic")); final Map key = null; final SinkRecord record = new SinkRecord("test", 0, null, key, null, null, 0); @@ -95,7 +94,7 @@ public class ExtractFieldTest { @Test public void withSchema() { - xformKey.configure(Collections.singletonMap("field", "magic")); + xformKey.configure(Map.of("field", "magic")); final Schema keySchema = SchemaBuilder.struct().field("magic", Schema.INT32_SCHEMA).build(); final Struct key = new Struct(keySchema).put("magic", 42); @@ -125,7 +124,7 @@ public class ExtractFieldTest { @Test public void testNullWithSchema() { - xformKey.configure(Collections.singletonMap("field", "magic")); + xformKey.configure(Map.of("field", "magic")); final Schema keySchema = SchemaBuilder.struct().field("magic", Schema.INT32_SCHEMA).optional().build(); final Struct key = null; @@ -138,9 +137,9 @@ public class ExtractFieldTest { @Test public void nonExistentFieldSchemalessShouldReturnNull() { - xformKey.configure(Collections.singletonMap("field", "nonexistent")); + xformKey.configure(Map.of("field", "nonexistent")); - final SinkRecord record = new SinkRecord("test", 0, null, Collections.singletonMap("magic", 42), null, null, 0); + final SinkRecord record = new SinkRecord("test", 0, null, Map.of("magic", 42), null, null, 0); final SinkRecord transformedRecord = xformKey.apply(record); assertNull(transformedRecord.keySchema()); @@ -154,7 +153,7 @@ public class ExtractFieldTest { configs.put("field", "magic.nonexistent"); xformKey.configure(configs); - final Map key = Collections.singletonMap("magic", Collections.singletonMap("foo", 42)); + final Map key = Map.of("magic", Map.of("foo", 42)); final SinkRecord record = new SinkRecord("test", 0, null, key, null, null, 0); final SinkRecord transformedRecord = xformKey.apply(record); @@ -164,7 +163,7 @@ public class ExtractFieldTest { @Test public void nonExistentFieldWithSchemaShouldFail() { - xformKey.configure(Collections.singletonMap("field", "nonexistent")); + xformKey.configure(Map.of("field", "nonexistent")); final Schema keySchema = SchemaBuilder.struct().field("magic", Schema.INT32_SCHEMA).build(); final Struct key = new Struct(keySchema).put("magic", 42); diff --git a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/FlattenTest.java b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/FlattenTest.java index f771d4f0ac3..8873f4c03b0 100644 --- a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/FlattenTest.java +++ b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/FlattenTest.java @@ -27,10 +27,9 @@ import org.apache.kafka.connect.source.SourceRecord; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; -import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import static org.junit.jupiter.api.Assertions.assertArrayEquals; @@ -52,21 +51,21 @@ public class FlattenTest { @Test public void topLevelStructRequired() { - xformValue.configure(Collections.emptyMap()); + xformValue.configure(Map.of()); assertThrows(DataException.class, () -> xformValue.apply(new SourceRecord(null, null, "topic", 0, Schema.INT32_SCHEMA, 42))); } @Test public void topLevelMapRequired() { - xformValue.configure(Collections.emptyMap()); + xformValue.configure(Map.of()); assertThrows(DataException.class, () -> xformValue.apply(new SourceRecord(null, null, "topic", 0, null, 42))); } @Test public void testNestedStruct() { - xformValue.configure(Collections.emptyMap()); + xformValue.configure(Map.of()); SchemaBuilder builder = SchemaBuilder.struct(); builder.field("int8", Schema.INT8_SCHEMA); @@ -125,7 +124,7 @@ public class FlattenTest { @Test public void testNestedMapWithDelimiter() { - xformValue.configure(Collections.singletonMap("delimiter", "#")); + xformValue.configure(Map.of("delimiter", "#")); Map supportedTypes = new HashMap<>(); supportedTypes.put("int8", (byte) 8); @@ -138,8 +137,8 @@ public class FlattenTest { supportedTypes.put("string", "stringy"); supportedTypes.put("bytes", "bytes".getBytes()); - Map oneLevelNestedMap = Collections.singletonMap("B", supportedTypes); - Map twoLevelNestedMap = Collections.singletonMap("A", oneLevelNestedMap); + Map oneLevelNestedMap = Map.of("B", supportedTypes); + Map twoLevelNestedMap = Map.of("A", oneLevelNestedMap); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, @@ -163,7 +162,7 @@ public class FlattenTest { @Test public void testOptionalFieldStruct() { - xformValue.configure(Collections.emptyMap()); + xformValue.configure(Map.of()); SchemaBuilder builder = SchemaBuilder.struct(); builder.field("opt_int32", Schema.OPTIONAL_INT32_SCHEMA); @@ -190,7 +189,7 @@ public class FlattenTest { @Test public void testOptionalStruct() { - xformValue.configure(Collections.emptyMap()); + xformValue.configure(Map.of()); SchemaBuilder builder = SchemaBuilder.struct().optional(); builder.field("opt_int32", Schema.OPTIONAL_INT32_SCHEMA); @@ -206,7 +205,7 @@ public class FlattenTest { @Test public void testOptionalNestedStruct() { - xformValue.configure(Collections.emptyMap()); + xformValue.configure(Map.of()); SchemaBuilder builder = SchemaBuilder.struct().optional(); builder.field("opt_int32", Schema.OPTIONAL_INT32_SCHEMA); @@ -230,12 +229,12 @@ public class FlattenTest { @Test public void testOptionalFieldMap() { - xformValue.configure(Collections.emptyMap()); + xformValue.configure(Map.of()); Map supportedTypes = new HashMap<>(); supportedTypes.put("opt_int32", null); - Map oneLevelNestedMap = Collections.singletonMap("B", supportedTypes); + Map oneLevelNestedMap = Map.of("B", supportedTypes); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", 0, @@ -251,9 +250,9 @@ public class FlattenTest { @Test public void testKey() { - xformKey.configure(Collections.emptyMap()); + xformKey.configure(Map.of()); - Map> key = Collections.singletonMap("A", Collections.singletonMap("B", 12)); + Map> key = Map.of("A", Map.of("B", 12)); SourceRecord src = new SourceRecord(null, null, "topic", null, key, null, null); SourceRecord transformed = xformKey.apply(src); @@ -266,14 +265,14 @@ public class FlattenTest { @Test public void testSchemalessArray() { - xformValue.configure(Collections.emptyMap()); - Object value = Collections.singletonMap("foo", Arrays.asList("bar", Collections.singletonMap("baz", Collections.singletonMap("lfg", "lfg")))); + xformValue.configure(Map.of()); + Object value = Map.of("foo", List.of("bar", Map.of("baz", Map.of("lfg", "lfg")))); assertEquals(value, xformValue.apply(new SourceRecord(null, null, "topic", null, null, null, value)).value()); } @Test public void testArrayWithSchema() { - xformValue.configure(Collections.emptyMap()); + xformValue.configure(Map.of()); Schema nestedStructSchema = SchemaBuilder.struct().field("lfg", Schema.STRING_SCHEMA).build(); Schema innerStructSchema = SchemaBuilder.struct().field("baz", nestedStructSchema).build(); Schema structSchema = SchemaBuilder.struct() @@ -284,7 +283,7 @@ public class FlattenTest { Struct innerValue = new Struct(innerStructSchema); innerValue.put("baz", nestedValue); Struct value = new Struct(structSchema); - value.put("foo", Collections.singletonList(innerValue)); + value.put("foo", List.of(innerValue)); SourceRecord transformed = xformValue.apply(new SourceRecord(null, null, "topic", null, null, structSchema, value)); assertEquals(value, transformed.value()); assertEquals(structSchema, transformed.valueSchema()); @@ -296,7 +295,7 @@ public class FlattenTest { // children should also be optional. Similarly, if the parent Struct has a default value, the default value for // the flattened field - xformValue.configure(Collections.emptyMap()); + xformValue.configure(Map.of()); SchemaBuilder builder = SchemaBuilder.struct().optional(); builder.field("req_field", Schema.STRING_SCHEMA); @@ -325,7 +324,7 @@ public class FlattenTest { @Test public void tombstoneEventWithoutSchemaShouldPassThrough() { - xformValue.configure(Collections.emptyMap()); + xformValue.configure(Map.of()); final SourceRecord record = new SourceRecord(null, null, "test", 0, null, null); @@ -337,7 +336,7 @@ public class FlattenTest { @Test public void tombstoneEventWithSchemaShouldPassThrough() { - xformValue.configure(Collections.emptyMap()); + xformValue.configure(Map.of()); final Schema simpleStructSchema = SchemaBuilder.struct().name("name").version(1).doc("doc").field("magic", Schema.OPTIONAL_INT64_SCHEMA).build(); final SourceRecord record = new SourceRecord(null, null, "test", 0, @@ -350,7 +349,7 @@ public class FlattenTest { @Test public void testMapWithNullFields() { - xformValue.configure(Collections.emptyMap()); + xformValue.configure(Map.of()); // Use a LinkedHashMap to ensure the SMT sees entries in a specific order Map value = new LinkedHashMap<>(); @@ -368,7 +367,7 @@ public class FlattenTest { @Test public void testStructWithNullFields() { - xformValue.configure(Collections.emptyMap()); + xformValue.configure(Map.of()); final Schema structSchema = SchemaBuilder.struct() .field("firstNull", Schema.OPTIONAL_STRING_SCHEMA) diff --git a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/HeaderFromTest.java b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/HeaderFromTest.java index da9e3584325..f68d7493a75 100644 --- a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/HeaderFromTest.java +++ b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/HeaderFromTest.java @@ -36,10 +36,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import static java.util.Arrays.asList; -import static java.util.Collections.emptyList; -import static java.util.Collections.singletonList; -import static java.util.Collections.singletonMap; import static org.apache.kafka.connect.data.Schema.STRING_SCHEMA; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -103,8 +99,8 @@ public class HeaderFromTest { } private SourceRecord sourceRecord(boolean keyTransform, Schema keyOrValueSchema, Object keyOrValue) { - Map sourcePartition = singletonMap("foo", "bar"); - Map sourceOffset = singletonMap("baz", "quxx"); + Map sourcePartition = Map.of("foo", "bar"); + Map sourceOffset = Map.of("baz", "quxx"); String topic = "topic"; Integer partition = 0; Long timestamp = 0L; @@ -140,7 +136,7 @@ public class HeaderFromTest { List result = new ArrayList<>(); - for (Boolean testKeyTransform : asList(true, false)) { + for (Boolean testKeyTransform : List.of(true, false)) { result.add( Arguments.of( "basic copy", @@ -149,7 +145,7 @@ public class HeaderFromTest { .withField("field1", STRING_SCHEMA, "field1-value") .withField("field2", STRING_SCHEMA, "field2-value") .addHeader("header1", STRING_SCHEMA, "existing-value"), - singletonList("field1"), singletonList("inserted1"), HeaderFrom.Operation.COPY, true, + List.of("field1"), List.of("inserted1"), HeaderFrom.Operation.COPY, true, new RecordBuilder() .withField("field1", STRING_SCHEMA, "field1-value") .withField("field2", STRING_SCHEMA, "field2-value") @@ -164,7 +160,7 @@ public class HeaderFromTest { .withField("field1", STRING_SCHEMA, "field1-value") .withField("field2", STRING_SCHEMA, "field2-value") .addHeader("header1", STRING_SCHEMA, "existing-value"), - singletonList("field1"), singletonList("inserted1"), HeaderFrom.Operation.MOVE, true, + List.of("field1"), List.of("inserted1"), HeaderFrom.Operation.MOVE, true, new RecordBuilder() // field1 got moved .withField("field2", STRING_SCHEMA, "field2-value") @@ -179,7 +175,7 @@ public class HeaderFromTest { .withField("field1", STRING_SCHEMA, "field1-value") .withField("field2", STRING_SCHEMA, "field2-value") .addHeader("inserted1", STRING_SCHEMA, "existing-value"), - singletonList("field1"), singletonList("inserted1"), HeaderFrom.Operation.COPY, true, + List.of("field1"), List.of("inserted1"), HeaderFrom.Operation.COPY, true, new RecordBuilder() .withField("field1", STRING_SCHEMA, "field1-value") .withField("field2", STRING_SCHEMA, "field2-value") @@ -194,7 +190,7 @@ public class HeaderFromTest { .withField("field1", STRING_SCHEMA, "field1-value") .withField("field2", STRING_SCHEMA, "field2-value") .addHeader("inserted1", STRING_SCHEMA, "existing-value"), - singletonList("field1"), singletonList("inserted1"), HeaderFrom.Operation.MOVE, true, + List.of("field1"), List.of("inserted1"), HeaderFrom.Operation.MOVE, true, new RecordBuilder() // field1 got moved .withField("field2", STRING_SCHEMA, "field2-value") @@ -211,7 +207,7 @@ public class HeaderFromTest { .withField("field1", schema, struct) .withField("field2", STRING_SCHEMA, "field2-value") .addHeader("header1", STRING_SCHEMA, "existing-value"), - singletonList("field1"), singletonList("inserted1"), HeaderFrom.Operation.COPY, true, + List.of("field1"), List.of("inserted1"), HeaderFrom.Operation.COPY, true, new RecordBuilder() .withField("field1", schema, struct) .withField("field2", STRING_SCHEMA, "field2-value") @@ -226,7 +222,7 @@ public class HeaderFromTest { .withField("field1", schema, struct) .withField("field2", STRING_SCHEMA, "field2-value") .addHeader("header1", STRING_SCHEMA, "existing-value"), - singletonList("field1"), singletonList("inserted1"), HeaderFrom.Operation.MOVE, true, + List.of("field1"), List.of("inserted1"), HeaderFrom.Operation.MOVE, true, new RecordBuilder() // field1 got moved .withField("field2", STRING_SCHEMA, "field2-value") @@ -242,7 +238,7 @@ public class HeaderFromTest { .withField("field2", STRING_SCHEMA, "field2-value") .addHeader("header1", STRING_SCHEMA, "existing-value"), // two headers from the same field - asList("field1", "field1"), asList("inserted1", "inserted2"), HeaderFrom.Operation.MOVE, true, + List.of("field1", "field1"), List.of("inserted1", "inserted2"), HeaderFrom.Operation.MOVE, true, new RecordBuilder() // field1 got moved .withField("field2", STRING_SCHEMA, "field2-value") @@ -259,7 +255,7 @@ public class HeaderFromTest { .withField("field2", STRING_SCHEMA, "field2-value") .addHeader("header1", STRING_SCHEMA, "existing-value"), // two headers from the same field - asList("field1", "field2"), asList("inserted1", "inserted1"), HeaderFrom.Operation.MOVE, true, + List.of("field1", "field2"), List.of("inserted1", "inserted1"), HeaderFrom.Operation.MOVE, true, new RecordBuilder() // field1 and field2 got moved .addHeader("header1", STRING_SCHEMA, "existing-value") @@ -274,7 +270,7 @@ public class HeaderFromTest { .withField("field1", SchemaBuilder.string().defaultValue("default").optional().build(), "field1-value") .withField("field2", SchemaBuilder.string().defaultValue("default").optional().build(), null) .addHeader("header1", STRING_SCHEMA, "existing-value"), - asList("field1", "field2"), asList("inserted1", "inserted2"), HeaderFrom.Operation.COPY, false, + List.of("field1", "field2"), List.of("inserted1", "inserted2"), HeaderFrom.Operation.COPY, false, new RecordBuilder() .withField("field1", SchemaBuilder.string().defaultValue("default").optional().build(), "field1-value") .withField("field2", SchemaBuilder.string().defaultValue("default").optional().build(), null) @@ -290,7 +286,7 @@ public class HeaderFromTest { .withField("field1", SchemaBuilder.string().defaultValue("default").optional().build(), "field1-value") .withField("field2", SchemaBuilder.string().defaultValue("default").optional().build(), null) .addHeader("header1", STRING_SCHEMA, "existing-value"), - asList("field1", "field2"), asList("inserted1", "inserted2"), HeaderFrom.Operation.MOVE, false, + List.of("field1", "field2"), List.of("inserted1", "inserted2"), HeaderFrom.Operation.MOVE, false, new RecordBuilder() .addHeader("header1", STRING_SCHEMA, "existing-value") .addHeader("inserted1", SchemaBuilder.string().defaultValue("default").optional().build(), "field1-value") @@ -353,7 +349,7 @@ public class HeaderFromTest { @ParameterizedTest @ValueSource(booleans = {true, false}) public void invalidConfigExtraHeaderConfig(boolean keyTransform) { - Map config = config(singletonList("foo"), asList("foo", "bar"), HeaderFrom.Operation.COPY, true); + Map config = config(List.of("foo"), List.of("foo", "bar"), HeaderFrom.Operation.COPY, true); HeaderFrom xform = keyTransform ? new HeaderFrom.Key<>() : new HeaderFrom.Value<>(); assertThrows(ConfigException.class, () -> xform.configure(config)); } @@ -361,7 +357,7 @@ public class HeaderFromTest { @ParameterizedTest @ValueSource(booleans = {true, false}) public void invalidConfigExtraFieldConfig(boolean keyTransform) { - Map config = config(asList("foo", "bar"), singletonList("foo"), HeaderFrom.Operation.COPY, true); + Map config = config(List.of("foo", "bar"), List.of("foo"), HeaderFrom.Operation.COPY, true); HeaderFrom xform = keyTransform ? new HeaderFrom.Key<>() : new HeaderFrom.Value<>(); assertThrows(ConfigException.class, () -> xform.configure(config)); } @@ -369,7 +365,7 @@ public class HeaderFromTest { @ParameterizedTest @ValueSource(booleans = {true, false}) public void invalidConfigEmptyHeadersAndFieldsConfig(boolean keyTransform) { - Map config = config(emptyList(), emptyList(), HeaderFrom.Operation.COPY, true); + Map config = config(List.of(), List.of(), HeaderFrom.Operation.COPY, true); HeaderFrom xform = keyTransform ? new HeaderFrom.Key<>() : new HeaderFrom.Value<>(); assertThrows(ConfigException.class, () -> xform.configure(config)); } diff --git a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/HoistFieldTest.java b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/HoistFieldTest.java index b72dddcdd15..93b69d5413d 100644 --- a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/HoistFieldTest.java +++ b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/HoistFieldTest.java @@ -24,7 +24,6 @@ import org.apache.kafka.connect.sink.SinkRecord; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; -import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -41,18 +40,18 @@ public class HoistFieldTest { @Test public void schemaless() { - xform.configure(Collections.singletonMap("field", "magic")); + xform.configure(Map.of("field", "magic")); final SinkRecord record = new SinkRecord("test", 0, null, 42, null, null, 0); final SinkRecord transformedRecord = xform.apply(record); assertNull(transformedRecord.keySchema()); - assertEquals(Collections.singletonMap("magic", 42), transformedRecord.key()); + assertEquals(Map.of("magic", 42), transformedRecord.key()); } @Test public void withSchema() { - xform.configure(Collections.singletonMap("field", "magic")); + xform.configure(Map.of("field", "magic")); final SinkRecord record = new SinkRecord("test", 0, Schema.INT32_SCHEMA, 42, null, null, 0); final SinkRecord transformedRecord = xform.apply(record); @@ -64,7 +63,7 @@ public class HoistFieldTest { @Test public void testSchemalessMapIsMutable() { - xform.configure(Collections.singletonMap("field", "magic")); + xform.configure(Map.of("field", "magic")); final SinkRecord record = new SinkRecord("test", 0, null, 420, null, null, 0); final SinkRecord transformedRecord = xform.apply(record); diff --git a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/InsertFieldTest.java b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/InsertFieldTest.java index cb48fdd810f..705f60f5a2e 100644 --- a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/InsertFieldTest.java +++ b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/InsertFieldTest.java @@ -30,7 +30,6 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.Map; @@ -59,7 +58,7 @@ public class InsertFieldTest { @Test public void topLevelStructRequired() { - xformValue.configure(Collections.singletonMap("topic.field", "topic_field")); + xformValue.configure(Map.of("topic.field", "topic_field")); assertThrows(DataException.class, () -> xformValue.apply(new SourceRecord(null, null, "", 0, Schema.INT32_SCHEMA, 42))); } @@ -118,7 +117,7 @@ public class InsertFieldTest { xformValue.configure(props); final SourceRecord record = new SourceRecord(null, null, "test", 0, - null, null, null, Collections.singletonMap("magic", 42L), 123L); + null, null, null, Map.of("magic", 42L), 123L); final SourceRecord transformedRecord = xformValue.apply(record); @@ -183,7 +182,7 @@ public class InsertFieldTest { xformKey.configure(props); final SourceRecord record = new SourceRecord(null, null, "test", 0, - null, Collections.singletonMap("magic", 42L), null, null); + null, Map.of("magic", 42L), null, null); final SourceRecord transformedRecord = xformKey.apply(record); @@ -207,7 +206,7 @@ public class InsertFieldTest { xformKey.configure(props); final SourceRecord record = new SourceRecord(null, null, "test", 0, - null, null, null, Collections.singletonMap("magic", 42L)); + null, null, null, Map.of("magic", 42L)); final SourceRecord transformedRecord = xformKey.apply(record); diff --git a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/InsertHeaderTest.java b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/InsertHeaderTest.java index 20c5b67a50a..190931b829b 100644 --- a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/InsertHeaderTest.java +++ b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/InsertHeaderTest.java @@ -28,7 +28,6 @@ import org.junit.jupiter.api.Test; import java.util.HashMap; import java.util.Map; -import static java.util.Collections.singletonMap; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -105,8 +104,8 @@ public class InsertHeaderTest { } private SourceRecord sourceRecord(ConnectHeaders headers) { - Map sourcePartition = singletonMap("foo", "bar"); - Map sourceOffset = singletonMap("baz", "quxx"); + Map sourcePartition = Map.of("foo", "bar"); + Map sourceOffset = Map.of("baz", "quxx"); String topic = "topic"; Integer partition = 0; Schema keySchema = null; diff --git a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/MaskFieldTest.java b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/MaskFieldTest.java index 05989af572f..3bdc1cd3b4c 100644 --- a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/MaskFieldTest.java +++ b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/MaskFieldTest.java @@ -33,73 +33,69 @@ import org.junit.jupiter.api.Test; import java.math.BigDecimal; import java.math.BigInteger; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; -import static java.util.Collections.singletonList; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; public class MaskFieldTest { private static final Schema SCHEMA = SchemaBuilder.struct() - .field("magic", Schema.INT32_SCHEMA) - .field("bool", Schema.BOOLEAN_SCHEMA) - .field("byte", Schema.INT8_SCHEMA) - .field("short", Schema.INT16_SCHEMA) - .field("int", Schema.INT32_SCHEMA) - .field("long", Schema.INT64_SCHEMA) - .field("float", Schema.FLOAT32_SCHEMA) - .field("double", Schema.FLOAT64_SCHEMA) - .field("string", Schema.STRING_SCHEMA) - .field("date", org.apache.kafka.connect.data.Date.SCHEMA) - .field("time", Time.SCHEMA) - .field("timestamp", Timestamp.SCHEMA) - .field("decimal", Decimal.schema(0)) - .field("array", SchemaBuilder.array(Schema.INT32_SCHEMA)) - .field("map", SchemaBuilder.map(Schema.STRING_SCHEMA, Schema.STRING_SCHEMA)) - .field("withDefault", SchemaBuilder.string().optional().defaultValue("default").build()) - .build(); - private static final Map VALUES = new HashMap<>(); - private static final Struct VALUES_WITH_SCHEMA = new Struct(SCHEMA); + .field("magic", Schema.INT32_SCHEMA) + .field("bool", Schema.BOOLEAN_SCHEMA) + .field("byte", Schema.INT8_SCHEMA) + .field("short", Schema.INT16_SCHEMA) + .field("int", Schema.INT32_SCHEMA) + .field("long", Schema.INT64_SCHEMA) + .field("float", Schema.FLOAT32_SCHEMA) + .field("double", Schema.FLOAT64_SCHEMA) + .field("string", Schema.STRING_SCHEMA) + .field("date", org.apache.kafka.connect.data.Date.SCHEMA) + .field("time", Time.SCHEMA) + .field("timestamp", Timestamp.SCHEMA) + .field("decimal", Decimal.schema(0)) + .field("array", SchemaBuilder.array(Schema.INT32_SCHEMA)) + .field("map", SchemaBuilder.map(Schema.STRING_SCHEMA, Schema.STRING_SCHEMA)) + .field("withDefault", SchemaBuilder.string().optional().defaultValue("default").build()) + .build(); - static { - VALUES.put("magic", 42); - VALUES.put("bool", true); - VALUES.put("byte", (byte) 42); - VALUES.put("short", (short) 42); - VALUES.put("int", 42); - VALUES.put("long", 42L); - VALUES.put("float", 42f); - VALUES.put("double", 42d); - VALUES.put("string", "55.121.20.20"); - VALUES.put("date", new Date()); - VALUES.put("bigint", new BigInteger("42")); - VALUES.put("bigdec", new BigDecimal("42.0")); - VALUES.put("list", singletonList(42)); - VALUES.put("map", Collections.singletonMap("key", "value")); + private static final Map VALUES = Map.ofEntries( + Map.entry("magic", 42), + Map.entry("bool", true), + Map.entry("byte", (byte) 42), + Map.entry("short", (short) 42), + Map.entry("int", 42), + Map.entry("long", 42L), + Map.entry("float", 42f), + Map.entry("double", 42d), + Map.entry("string", "55.121.20.20"), + Map.entry("date", new Date()), + Map.entry("bigint", new BigInteger("42")), + Map.entry("bigdec", new BigDecimal("42.0")), + Map.entry("list", List.of(42)), + Map.entry("map", Map.of("key", "value")) + ); - VALUES_WITH_SCHEMA.put("magic", 42); - VALUES_WITH_SCHEMA.put("bool", true); - VALUES_WITH_SCHEMA.put("byte", (byte) 42); - VALUES_WITH_SCHEMA.put("short", (short) 42); - VALUES_WITH_SCHEMA.put("int", 42); - VALUES_WITH_SCHEMA.put("long", 42L); - VALUES_WITH_SCHEMA.put("float", 42f); - VALUES_WITH_SCHEMA.put("double", 42d); - VALUES_WITH_SCHEMA.put("string", "hmm"); - VALUES_WITH_SCHEMA.put("date", new Date()); - VALUES_WITH_SCHEMA.put("time", new Date()); - VALUES_WITH_SCHEMA.put("timestamp", new Date()); - VALUES_WITH_SCHEMA.put("decimal", new BigDecimal(42)); - VALUES_WITH_SCHEMA.put("array", Arrays.asList(1, 2, 3)); - VALUES_WITH_SCHEMA.put("map", Collections.singletonMap("what", "what")); - VALUES_WITH_SCHEMA.put("withDefault", null); - } + private static final Struct VALUES_WITH_SCHEMA = new Struct(SCHEMA) + .put("magic", 42) + .put("bool", true) + .put("byte", (byte) 42) + .put("short", (short) 42) + .put("int", 42) + .put("long", 42L) + .put("float", 42f) + .put("double", 42d) + .put("string", "hmm") + .put("date", new Date()) + .put("time", new Date()) + .put("timestamp", new Date()) + .put("decimal", new BigDecimal(42)) + .put("array", List.of(1, 2, 3)) + .put("map", Map.of("what", "what")) + .put("withDefault", null); private static MaskField transform(List fields, String replacement) { final MaskField xform = new MaskField.Value<>(); @@ -117,20 +113,20 @@ public class MaskFieldTest { private static void checkReplacementWithSchema(String maskField, Object replacement) { SinkRecord record = record(SCHEMA, VALUES_WITH_SCHEMA); - final Struct updatedValue = (Struct) transform(singletonList(maskField), String.valueOf(replacement)).apply(record).value(); + final Struct updatedValue = (Struct) transform(List.of(maskField), String.valueOf(replacement)).apply(record).value(); assertEquals(replacement, updatedValue.get(maskField), "Invalid replacement for " + maskField + " value"); } private static void checkReplacementSchemaless(String maskField, Object replacement) { - checkReplacementSchemaless(singletonList(maskField), replacement); + checkReplacementSchemaless(List.of(maskField), replacement); } @SuppressWarnings("unchecked") private static void checkReplacementSchemaless(List maskFields, Object replacement) { SinkRecord record = record(null, VALUES); final Map updatedValue = (Map) transform(maskFields, String.valueOf(replacement)) - .apply(record) - .value(); + .apply(record) + .value(); for (String maskField : maskFields) { assertEquals(replacement, updatedValue.get(maskField), "Invalid replacement for " + maskField + " value"); } @@ -154,8 +150,8 @@ public class MaskFieldTest { assertEquals(new Date(0), updatedValue.get("date")); assertEquals(BigInteger.ZERO, updatedValue.get("bigint")); assertEquals(BigDecimal.ZERO, updatedValue.get("bigdec")); - assertEquals(Collections.emptyList(), updatedValue.get("list")); - assertEquals(Collections.emptyMap(), updatedValue.get("map")); + assertEquals(List.of(), updatedValue.get("list")); + assertEquals(Map.of(), updatedValue.get("map")); } @Test @@ -182,8 +178,8 @@ public class MaskFieldTest { assertEquals(new Date(0), updatedValue.get("time")); assertEquals(new Date(0), updatedValue.get("timestamp")); assertEquals(BigDecimal.ZERO, updatedValue.get("decimal")); - assertEquals(Collections.emptyList(), updatedValue.get("array")); - assertEquals(Collections.emptyMap(), updatedValue.get("map")); + assertEquals(List.of(), updatedValue.get("array")); + assertEquals(Map.of(), updatedValue.get("map")); assertEquals(null, updatedValue.getWithoutDefault("withDefault")); } @@ -206,10 +202,10 @@ public class MaskFieldTest { Class exClass = DataException.class; assertThrows(exClass, () -> checkReplacementSchemaless("date", new Date()), exMessage); - assertThrows(exClass, () -> checkReplacementSchemaless(Arrays.asList("int", "date"), new Date()), exMessage); + assertThrows(exClass, () -> checkReplacementSchemaless(List.of("int", "date"), new Date()), exMessage); assertThrows(exClass, () -> checkReplacementSchemaless("bool", false), exMessage); - assertThrows(exClass, () -> checkReplacementSchemaless("list", singletonList("123")), exMessage); - assertThrows(exClass, () -> checkReplacementSchemaless("map", Collections.singletonMap("123", "321")), exMessage); + assertThrows(exClass, () -> checkReplacementSchemaless("list", List.of("123")), exMessage); + assertThrows(exClass, () -> checkReplacementSchemaless("map", Map.of("123", "321")), exMessage); } @Test @@ -231,7 +227,7 @@ public class MaskFieldTest { assertThrows(exClass, () -> checkReplacementWithSchema("time", new Date()), exMessage); assertThrows(exClass, () -> checkReplacementWithSchema("timestamp", new Date()), exMessage); - assertThrows(exClass, () -> checkReplacementWithSchema("array", singletonList(123)), exMessage); + assertThrows(exClass, () -> checkReplacementWithSchema("array", List.of(123)), exMessage); } @Test @@ -249,7 +245,7 @@ public class MaskFieldTest { assertThrows(exClass, () -> checkReplacementSchemaless("bigdec", "foo"), exMessage); assertThrows(exClass, () -> checkReplacementSchemaless("int", new Date()), exMessage); assertThrows(exClass, () -> checkReplacementSchemaless("int", new Object()), exMessage); - assertThrows(exClass, () -> checkReplacementSchemaless(Arrays.asList("string", "int"), "foo"), exMessage); + assertThrows(exClass, () -> checkReplacementSchemaless(List.of("string", "int"), "foo"), exMessage); } @Test @@ -259,17 +255,17 @@ public class MaskFieldTest { @Test public void testNullListAndMapReplacementsAreMutable() { - final List maskFields = Arrays.asList("array", "map"); + final List maskFields = List.of("array", "map"); final Struct updatedValue = (Struct) transform(maskFields, null).apply(record(SCHEMA, VALUES_WITH_SCHEMA)).value(); @SuppressWarnings("unchecked") List actualList = (List) updatedValue.get("array"); - assertEquals(Collections.emptyList(), actualList); + assertEquals(List.of(), actualList); actualList.add(0); - assertEquals(Collections.singletonList(0), actualList); + assertEquals(List.of(0), actualList); @SuppressWarnings("unchecked") Map actualMap = (Map) updatedValue.get("map"); - assertEquals(Collections.emptyMap(), actualMap); + assertEquals(Map.of(), actualMap); actualMap.put("k", "v"); - assertEquals(Collections.singletonMap("k", "v"), actualMap); + assertEquals(Map.of("k", "v"), actualMap); } @Test diff --git a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/SetSchemaMetadataTest.java b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/SetSchemaMetadataTest.java index 5f0e51559bd..7f47dd0f8c0 100644 --- a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/SetSchemaMetadataTest.java +++ b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/SetSchemaMetadataTest.java @@ -30,7 +30,6 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.stream.Stream; @@ -57,7 +56,7 @@ public class SetSchemaMetadataTest { @Test public void schemaNameUpdate() { - xform.configure(Collections.singletonMap("schema.name", "foo")); + xform.configure(Map.of("schema.name", "foo")); final SinkRecord record = new SinkRecord("", 0, null, null, SchemaBuilder.struct().build(), null, 0); final SinkRecord updatedRecord = xform.apply(record); assertEquals("foo", updatedRecord.valueSchema().name()); @@ -65,7 +64,7 @@ public class SetSchemaMetadataTest { @Test public void schemaVersionUpdate() { - xform.configure(Collections.singletonMap("schema.version", 42)); + xform.configure(Map.of("schema.version", 42)); final SinkRecord record = new SinkRecord("", 0, null, null, SchemaBuilder.struct().build(), null, 0); final SinkRecord updatedRecord = xform.apply(record); assertEquals(42, updatedRecord.valueSchema().version()); diff --git a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/TimestampConverterTest.java b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/TimestampConverterTest.java index a807ad1fc21..d67d031482d 100644 --- a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/TimestampConverterTest.java +++ b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/TimestampConverterTest.java @@ -34,7 +34,6 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import java.util.Calendar; -import java.util.Collections; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.Map; @@ -108,13 +107,13 @@ public class TimestampConverterTest { @Test public void testConfigNoTargetType() { - assertThrows(ConfigException.class, () -> xformValue.configure(Collections.emptyMap())); + assertThrows(ConfigException.class, () -> xformValue.configure(Map.of())); } @Test public void testConfigInvalidTargetType() { assertThrows(ConfigException.class, - () -> xformValue.configure(Collections.singletonMap(TimestampConverter.TARGET_TYPE_CONFIG, "invalid"))); + () -> xformValue.configure(Map.of(TimestampConverter.TARGET_TYPE_CONFIG, "invalid"))); } @Test @@ -136,7 +135,7 @@ public class TimestampConverterTest { @Test public void testConfigMissingFormat() { assertThrows(ConfigException.class, - () -> xformValue.configure(Collections.singletonMap(TimestampConverter.TARGET_TYPE_CONFIG, "string"))); + () -> xformValue.configure(Map.of(TimestampConverter.TARGET_TYPE_CONFIG, "string"))); } @Test @@ -151,7 +150,7 @@ public class TimestampConverterTest { @Test public void testSchemalessIdentity() { - xformValue.configure(Collections.singletonMap(TimestampConverter.TARGET_TYPE_CONFIG, "Timestamp")); + xformValue.configure(Map.of(TimestampConverter.TARGET_TYPE_CONFIG, "Timestamp")); SourceRecord transformed = xformValue.apply(createRecordSchemaless(DATE_PLUS_TIME.getTime())); assertNull(transformed.valueSchema()); @@ -160,7 +159,7 @@ public class TimestampConverterTest { @Test public void testSchemalessTimestampToDate() { - xformValue.configure(Collections.singletonMap(TimestampConverter.TARGET_TYPE_CONFIG, "Date")); + xformValue.configure(Map.of(TimestampConverter.TARGET_TYPE_CONFIG, "Date")); SourceRecord transformed = xformValue.apply(createRecordSchemaless(DATE_PLUS_TIME.getTime())); assertNull(transformed.valueSchema()); @@ -169,7 +168,7 @@ public class TimestampConverterTest { @Test public void testSchemalessTimestampToTime() { - xformValue.configure(Collections.singletonMap(TimestampConverter.TARGET_TYPE_CONFIG, "Time")); + xformValue.configure(Map.of(TimestampConverter.TARGET_TYPE_CONFIG, "Time")); SourceRecord transformed = xformValue.apply(createRecordSchemaless(DATE_PLUS_TIME.getTime())); assertNull(transformed.valueSchema()); @@ -178,7 +177,7 @@ public class TimestampConverterTest { @Test public void testSchemalessTimestampToUnix() { - xformValue.configure(Collections.singletonMap(TimestampConverter.TARGET_TYPE_CONFIG, "unix")); + xformValue.configure(Map.of(TimestampConverter.TARGET_TYPE_CONFIG, "unix")); SourceRecord transformed = xformValue.apply(createRecordSchemaless(DATE_PLUS_TIME.getTime())); assertNull(transformed.valueSchema()); @@ -202,7 +201,7 @@ public class TimestampConverterTest { @Test public void testSchemalessDateToTimestamp() { - xformValue.configure(Collections.singletonMap(TimestampConverter.TARGET_TYPE_CONFIG, "Timestamp")); + xformValue.configure(Map.of(TimestampConverter.TARGET_TYPE_CONFIG, "Timestamp")); SourceRecord transformed = xformValue.apply(createRecordSchemaless(DATE.getTime())); assertNull(transformed.valueSchema()); @@ -212,7 +211,7 @@ public class TimestampConverterTest { @Test public void testSchemalessTimeToTimestamp() { - xformValue.configure(Collections.singletonMap(TimestampConverter.TARGET_TYPE_CONFIG, "Timestamp")); + xformValue.configure(Map.of(TimestampConverter.TARGET_TYPE_CONFIG, "Timestamp")); SourceRecord transformed = xformValue.apply(createRecordSchemaless(TIME.getTime())); assertNull(transformed.valueSchema()); @@ -222,7 +221,7 @@ public class TimestampConverterTest { @Test public void testSchemalessUnixToTimestamp() { - xformValue.configure(Collections.singletonMap(TimestampConverter.TARGET_TYPE_CONFIG, "Timestamp")); + xformValue.configure(Map.of(TimestampConverter.TARGET_TYPE_CONFIG, "Timestamp")); SourceRecord transformed = xformValue.apply(createRecordSchemaless(DATE_PLUS_TIME_UNIX)); assertNull(transformed.valueSchema()); @@ -246,7 +245,7 @@ public class TimestampConverterTest { @Test public void testWithSchemaIdentity() { - xformValue.configure(Collections.singletonMap(TimestampConverter.TARGET_TYPE_CONFIG, "Timestamp")); + xformValue.configure(Map.of(TimestampConverter.TARGET_TYPE_CONFIG, "Timestamp")); SourceRecord transformed = xformValue.apply(createRecordWithSchema(Timestamp.SCHEMA, DATE_PLUS_TIME.getTime())); assertEquals(Timestamp.SCHEMA, transformed.valueSchema()); @@ -255,7 +254,7 @@ public class TimestampConverterTest { @Test public void testWithSchemaTimestampToDate() { - xformValue.configure(Collections.singletonMap(TimestampConverter.TARGET_TYPE_CONFIG, "Date")); + xformValue.configure(Map.of(TimestampConverter.TARGET_TYPE_CONFIG, "Date")); SourceRecord transformed = xformValue.apply(createRecordWithSchema(Timestamp.SCHEMA, DATE_PLUS_TIME.getTime())); assertEquals(Date.SCHEMA, transformed.valueSchema()); @@ -264,7 +263,7 @@ public class TimestampConverterTest { @Test public void testWithSchemaTimestampToTime() { - xformValue.configure(Collections.singletonMap(TimestampConverter.TARGET_TYPE_CONFIG, "Time")); + xformValue.configure(Map.of(TimestampConverter.TARGET_TYPE_CONFIG, "Time")); SourceRecord transformed = xformValue.apply(createRecordWithSchema(Timestamp.SCHEMA, DATE_PLUS_TIME.getTime())); assertEquals(Time.SCHEMA, transformed.valueSchema()); @@ -273,7 +272,7 @@ public class TimestampConverterTest { @Test public void testWithSchemaTimestampToUnix() { - xformValue.configure(Collections.singletonMap(TimestampConverter.TARGET_TYPE_CONFIG, "unix")); + xformValue.configure(Map.of(TimestampConverter.TARGET_TYPE_CONFIG, "unix")); SourceRecord transformed = xformValue.apply(createRecordWithSchema(Timestamp.SCHEMA, DATE_PLUS_TIME.getTime())); assertEquals(Schema.INT64_SCHEMA, transformed.valueSchema()); @@ -348,7 +347,7 @@ public class TimestampConverterTest { @Test public void testWithSchemaDateToTimestamp() { - xformValue.configure(Collections.singletonMap(TimestampConverter.TARGET_TYPE_CONFIG, "Timestamp")); + xformValue.configure(Map.of(TimestampConverter.TARGET_TYPE_CONFIG, "Timestamp")); SourceRecord transformed = xformValue.apply(createRecordWithSchema(Date.SCHEMA, DATE.getTime())); assertEquals(Timestamp.SCHEMA, transformed.valueSchema()); @@ -358,7 +357,7 @@ public class TimestampConverterTest { @Test public void testWithSchemaTimeToTimestamp() { - xformValue.configure(Collections.singletonMap(TimestampConverter.TARGET_TYPE_CONFIG, "Timestamp")); + xformValue.configure(Map.of(TimestampConverter.TARGET_TYPE_CONFIG, "Timestamp")); SourceRecord transformed = xformValue.apply(createRecordWithSchema(Time.SCHEMA, TIME.getTime())); assertEquals(Timestamp.SCHEMA, transformed.valueSchema()); @@ -368,7 +367,7 @@ public class TimestampConverterTest { @Test public void testWithSchemaUnixToTimestamp() { - xformValue.configure(Collections.singletonMap(TimestampConverter.TARGET_TYPE_CONFIG, "Timestamp")); + xformValue.configure(Map.of(TimestampConverter.TARGET_TYPE_CONFIG, "Timestamp")); SourceRecord transformed = xformValue.apply(createRecordWithSchema(Schema.INT64_SCHEMA, DATE_PLUS_TIME_UNIX)); assertEquals(Timestamp.SCHEMA, transformed.valueSchema()); @@ -530,11 +529,11 @@ public class TimestampConverterTest { config.put(TimestampConverter.FIELD_CONFIG, "ts"); xformValue.configure(config); - Object value = Collections.singletonMap("ts", DATE_PLUS_TIME.getTime()); + Object value = Map.of("ts", DATE_PLUS_TIME.getTime()); SourceRecord transformed = xformValue.apply(createRecordSchemaless(value)); assertNull(transformed.valueSchema()); - assertEquals(Collections.singletonMap("ts", DATE.getTime()), transformed.value()); + assertEquals(Map.of("ts", DATE.getTime()), transformed.value()); } @Test @@ -590,7 +589,7 @@ public class TimestampConverterTest { .build(); assertEquals(expectedSchema, transformed.valueSchema()); - assertEquals(null, ((Struct) transformed.value()).get("ts")); + assertNull(((Struct) transformed.value()).get("ts")); assertEquals("test", ((Struct) transformed.value()).get("other")); } @@ -716,7 +715,7 @@ public class TimestampConverterTest { @Test public void testKey() { - xformKey.configure(Collections.singletonMap(TimestampConverter.TARGET_TYPE_CONFIG, "Timestamp")); + xformKey.configure(Map.of(TimestampConverter.TARGET_TYPE_CONFIG, "Timestamp")); SourceRecord transformed = xformKey.apply(new SourceRecord(null, null, "topic", 0, null, DATE_PLUS_TIME.getTime(), null, null)); assertNull(transformed.keySchema()); diff --git a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/TimestampRouterTest.java b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/TimestampRouterTest.java index 43b3b1f384f..a98c4406ad9 100644 --- a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/TimestampRouterTest.java +++ b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/TimestampRouterTest.java @@ -23,7 +23,7 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.util.Collections; +import java.util.Map; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -32,7 +32,7 @@ public class TimestampRouterTest { @BeforeEach public void setup() { xform = new TimestampRouter<>(); - xform.configure(Collections.emptyMap()); // defaults + xform.configure(Map.of()); // defaults } @AfterEach diff --git a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/ValueToKeyTest.java b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/ValueToKeyTest.java index df528cf518a..775bfbabac2 100644 --- a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/ValueToKeyTest.java +++ b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/ValueToKeyTest.java @@ -29,7 +29,6 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.stream.Stream; @@ -55,7 +54,7 @@ public class ValueToKeyTest { @Test public void schemaless() { - xform.configure(Collections.singletonMap("fields", "a,b")); + xform.configure(Map.of("fields", "a,b")); final HashMap value = new HashMap<>(); value.put("a", 1); @@ -75,7 +74,7 @@ public class ValueToKeyTest { @Test public void withSchema() { - xform.configure(Collections.singletonMap("fields", "a,b")); + xform.configure(Map.of("fields", "a,b")); final Schema valueSchema = SchemaBuilder.struct() .field("a", Schema.INT32_SCHEMA) @@ -106,7 +105,7 @@ public class ValueToKeyTest { @Test public void nonExistingField() { - xform.configure(Collections.singletonMap("fields", "not_exist")); + xform.configure(Map.of("fields", "not_exist")); final Schema valueSchema = SchemaBuilder.struct() .field("a", Schema.INT32_SCHEMA) diff --git a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/field/FieldSyntaxVersionTest.java b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/field/FieldSyntaxVersionTest.java index d400141c95b..a0c2e2c4861 100644 --- a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/field/FieldSyntaxVersionTest.java +++ b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/field/FieldSyntaxVersionTest.java @@ -35,18 +35,18 @@ public class FieldSyntaxVersionTest { @Test void shouldAppendConfigToDef() { ConfigDef def = FieldSyntaxVersion.appendConfigTo(new ConfigDef()); - assertEquals(def.configKeys().size(), 1); + assertEquals(1, def.configKeys().size()); final ConfigDef.ConfigKey configKey = def.configKeys().get("field.syntax.version"); - assertEquals(configKey.name, "field.syntax.version"); - assertEquals(configKey.defaultValue, "V1"); + assertEquals("field.syntax.version", configKey.name); + assertEquals("V1", configKey.defaultValue); } @Test void shouldFailWhenAppendConfigToDefAgain() { ConfigDef def = FieldSyntaxVersion.appendConfigTo(new ConfigDef()); - assertEquals(def.configKeys().size(), 1); + assertEquals(1, def.configKeys().size()); ConfigException e = assertThrows(ConfigException.class, () -> FieldSyntaxVersion.appendConfigTo(def)); - assertEquals(e.getMessage(), "Configuration field.syntax.version is defined twice."); + assertEquals("Configuration field.syntax.version is defined twice.", e.getMessage()); } @ParameterizedTest diff --git a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/predicates/HasHeaderKeyTest.java b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/predicates/HasHeaderKeyTest.java index e3e3920858d..f6b98aab8c4 100644 --- a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/predicates/HasHeaderKeyTest.java +++ b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/predicates/HasHeaderKeyTest.java @@ -26,13 +26,11 @@ import org.apache.kafka.connect.transforms.util.SimpleConfig; import org.junit.jupiter.api.Test; import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import static java.util.Collections.singletonList; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -58,16 +56,16 @@ public class HasHeaderKeyTest { @Test public void testConfig() { HasHeaderKey predicate = new HasHeaderKey<>(); - predicate.config().validate(Collections.singletonMap("name", "foo")); + predicate.config().validate(Map.of("name", "foo")); - List configs = predicate.config().validate(Collections.singletonMap("name", "")); - assertEquals(singletonList("Invalid value for configuration name: String must be non-empty"), configs.get(0).errorMessages()); + List configs = predicate.config().validate(Map.of("name", "")); + assertEquals(List.of("Invalid value for configuration name: String must be non-empty"), configs.get(0).errorMessages()); } @Test public void testTest() { HasHeaderKey predicate = new HasHeaderKey<>(); - predicate.configure(Collections.singletonMap("name", "foo")); + predicate.configure(Map.of("name", "foo")); assertTrue(predicate.test(recordWithHeaders("foo"))); assertTrue(predicate.test(recordWithHeaders("foo", "bar"))); diff --git a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/predicates/TopicNameMatchesTest.java b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/predicates/TopicNameMatchesTest.java index 3d9ac4dba90..140d0d6c30f 100644 --- a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/predicates/TopicNameMatchesTest.java +++ b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/predicates/TopicNameMatchesTest.java @@ -23,7 +23,6 @@ import org.apache.kafka.connect.transforms.util.SimpleConfig; import org.junit.jupiter.api.Test; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -61,9 +60,9 @@ public class TopicNameMatchesTest { @Test public void testConfig() { TopicNameMatches predicate = new TopicNameMatches<>(); - predicate.config().validate(Collections.singletonMap("pattern", "my-prefix-.*")); + predicate.config().validate(Map.of("pattern", "my-prefix-.*")); - List configs = predicate.config().validate(Collections.singletonMap("pattern", "*")); + List configs = predicate.config().validate(Map.of("pattern", "*")); List errorMsgs = configs.get(0).errorMessages(); assertEquals(1, errorMsgs.size()); assertTrue(errorMsgs.get(0).contains("Invalid regex")); @@ -72,7 +71,7 @@ public class TopicNameMatchesTest { @Test public void testTest() { TopicNameMatches predicate = new TopicNameMatches<>(); - predicate.configure(Collections.singletonMap("pattern", "my-prefix-.*")); + predicate.configure(Map.of("pattern", "my-prefix-.*")); assertTrue(predicate.test(recordWithTopicName("my-prefix-"))); assertTrue(predicate.test(recordWithTopicName("my-prefix-foo"))); diff --git a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/util/NonEmptyListValidatorTest.java b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/util/NonEmptyListValidatorTest.java index 5060346a2d9..3a9ef48f8dd 100644 --- a/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/util/NonEmptyListValidatorTest.java +++ b/connect/transforms/src/test/java/org/apache/kafka/connect/transforms/util/NonEmptyListValidatorTest.java @@ -20,7 +20,7 @@ import org.apache.kafka.common.config.ConfigException; import org.junit.jupiter.api.Test; -import java.util.Collections; +import java.util.List; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -34,11 +34,11 @@ public class NonEmptyListValidatorTest { @Test public void testEmptyList() { assertThrows(ConfigException.class, - () -> new NonEmptyListValidator().ensureValid("foo", Collections.emptyList())); + () -> new NonEmptyListValidator().ensureValid("foo", List.of())); } @Test public void testValidList() { - new NonEmptyListValidator().ensureValid("foo", Collections.singletonList("foo")); + new NonEmptyListValidator().ensureValid("foo", List.of("foo")); } }