diff --git a/avro-data/src/main/java/io/confluent/connect/avro/AvroData.java b/avro-data/src/main/java/io/confluent/connect/avro/AvroData.java index a5f04ef5cd5..50f3c7ae75c 100644 --- a/avro-data/src/main/java/io/confluent/connect/avro/AvroData.java +++ b/avro-data/src/main/java/io/confluent/connect/avro/AvroData.java @@ -607,7 +607,10 @@ avroSchema, maybeWrapSchemaless(schema, converted, ANYTHING_SCHEMA_MAP_FIELD), //This handles the inverting of a union which is held as a struct, where each field is // one of the union types. if (isUnionSchema(schema)) { - for (Field field : schema.fields()) { + List fields = schema.fields(); + int numFields = fields.size(); + for (int i = 0; i < numFields; i++) { + Field field = fields.get(i); Object object = ignoreDefaultForNullables ? struct.getWithoutDefault(field.name()) : struct.get(field); if (object != null) { @@ -625,7 +628,10 @@ avroSchema, maybeWrapSchemaless(schema, converted, ANYTHING_SCHEMA_MAP_FIELD), org.apache.avro.Schema underlyingAvroSchema = avroSchemaForUnderlyingTypeIfOptional( schema, avroSchema, scrubInvalidNames); GenericRecordBuilder convertedBuilder = new GenericRecordBuilder(underlyingAvroSchema); - for (Field field : schema.fields()) { + List fields = schema.fields(); + int numFields = fields.size(); + for (int i = 0; i < numFields; i++) { + Field field = fields.get(i); String fieldName = scrubName(field.name(), scrubInvalidNames); org.apache.avro.Schema.Field theField = underlyingAvroSchema.getField(fieldName); org.apache.avro.Schema fieldAvroSchema = theField.schema(); @@ -1648,7 +1654,10 @@ private Object toConnectData(Schema schema, Object value, ToConnectContext toCon valueRecord.getSchema(), true, null, null, toConnectContext); } int index = 0; - for (Field field : schema.fields()) { + List fields = schema.fields(); + int numFields = fields.size(); + for (int i = 0; i < numFields; i++) { + Field field = fields.get(i); Schema fieldSchema = field.schema(); if (isInstanceOfAvroSchemaTypeForSimpleSchema(fieldSchema, value, index) || (valueRecordSchema != null && schemaEquals(valueRecordSchema, fieldSchema))) { @@ -1666,7 +1675,10 @@ private Object toConnectData(Schema schema, Object value, ToConnectContext toCon // Default values from Avro are returned as Map Map original = (Map) value; Struct result = new Struct(schema); - for (Field field : schema.fields()) { + List fields = schema.fields(); + int numFields = fields.size(); + for (int i = 0; i < numFields; i++) { + Field field = fields.get(i); String fieldName = scrubName(field.name()); Object convertedFieldValue = toConnectData(field.schema(), original.getOrDefault(fieldName, field.schema().defaultValue()), @@ -1677,7 +1689,10 @@ private Object toConnectData(Schema schema, Object value, ToConnectContext toCon } else { IndexedRecord original = (IndexedRecord) value; Struct result = new Struct(schema); - for (Field field : schema.fields()) { + List fields = schema.fields(); + int numFields = fields.size(); + for (int i = 0; i < numFields; i++) { + Field field = fields.get(i); String fieldName = scrubName(field.name()); int avroFieldIndex = original.getSchema().getField(fieldName).pos(); Object convertedFieldValue = diff --git a/json-schema-converter/src/main/java/io/confluent/connect/json/JsonSchemaData.java b/json-schema-converter/src/main/java/io/confluent/connect/json/JsonSchemaData.java index f1458bd0b5b..a0e68a13f81 100644 --- a/json-schema-converter/src/main/java/io/confluent/connect/json/JsonSchemaData.java +++ b/json-schema-converter/src/main/java/io/confluent/connect/json/JsonSchemaData.java @@ -545,7 +545,10 @@ public JsonNode fromConnectData(Schema schema, Object logicalValue) { //This handles the inverting of a union which is held as a struct, where each field is // one of the union types. if (isUnionSchema(schema)) { - for (Field field : schema.fields()) { + List fields = schema.fields(); + int numFields = fields.size(); + for (int i = 0; i < numFields; i++) { + Field field = fields.get(i); Object object = config.ignoreDefaultForNullables() ? struct.getWithoutDefault(field.name()) : struct.get(field); if (object != null) { @@ -555,7 +558,10 @@ public JsonNode fromConnectData(Schema schema, Object logicalValue) { return fromConnectData(schema, null); } else { ObjectNode obj = JSON_NODE_FACTORY.objectNode(); - for (Field field : schema.fields()) { + List fields = schema.fields(); + int numFields = fields.size(); + for (int i = 0; i < numFields; i++) { + Field field = fields.get(i); Object fieldValue = config.ignoreDefaultForNullables() ? struct.getWithoutDefault(field.name()) : struct.get(field); JsonNode jsonNode = fromConnectData(field.schema(), fieldValue); diff --git a/protobuf-converter/src/main/java/io/confluent/connect/protobuf/ProtobufData.java b/protobuf-converter/src/main/java/io/confluent/connect/protobuf/ProtobufData.java index 3eda2e5e611..7f46b03841d 100644 --- a/protobuf-converter/src/main/java/io/confluent/connect/protobuf/ProtobufData.java +++ b/protobuf-converter/src/main/java/io/confluent/connect/protobuf/ProtobufData.java @@ -460,7 +460,7 @@ private Object fromConnectData( if (listValue.isEmpty()) { return null; } - List newListValue = new ArrayList<>(); + List newListValue = new ArrayList<>(listValue.size()); for (Object o : listValue) { newListValue.add(fromConnectData(ctx, schema.valueSchema(), scope, o, protobufSchema)); } @@ -468,7 +468,7 @@ private Object fromConnectData( case MAP: final Map mapValue = (Map) value; String scopedMapName = ((Descriptor) ctx).getFullName(); - List newMapValue = new ArrayList<>(); + List newMapValue = new ArrayList<>(mapValue.size()); for (Map.Entry mapEntry : mapValue.entrySet()) { DynamicMessage.Builder mapBuilder = protobufSchema.newMessageBuilder(scopedMapName); if (mapBuilder == null) { @@ -508,7 +508,10 @@ private Object fromConnectData( //This handles the inverting of a union which is held as a struct, where each field is // one of the union types. if (isUnionSchema(schema)) { - for (Field field : schema.fields()) { + List fields = schema.fields(); + int numFields = fields.size(); + for (int i = 0; i < numFields; i++) { + Field field = fields.get(i); Object object = ignoreDefaultForNullables ? struct.getWithoutDefault(field.name()) : struct.get(field); if (object != null) { @@ -527,7 +530,10 @@ private Object fromConnectData( if (messageBuilder == null) { throw new DataException("Invalid message name: " + scopedStructName); } - for (Field field : schema.fields()) { + List fields = schema.fields(); + int numFields = fields.size(); + for (int i = 0; i < numFields; i++) { + Field field = fields.get(i); String fieldName = scrubName(field.name()); Object fieldCtx = getFieldType(ctx, fieldName); Object connectFieldVal = ignoreDefaultForNullables @@ -1224,7 +1230,10 @@ protected Object toConnectData(Schema schema, Object value) { final Struct struct = new Struct(schema.schema()); final Descriptor descriptor = message.getDescriptorForType(); - for (OneofDescriptor oneOfDescriptor : descriptor.getRealOneofs()) { + List oneOfDescriptors = descriptor.getRealOneofs(); + int numRealOneOfs = oneOfDescriptors.size(); + for (int i = 0; i < numRealOneOfs; i++) { + OneofDescriptor oneOfDescriptor = oneOfDescriptors.get(i); if (message.hasOneof(oneOfDescriptor)) { FieldDescriptor fieldDescriptor = message.getOneofFieldDescriptor(oneOfDescriptor); Object obj = message.getField(fieldDescriptor); @@ -1238,7 +1247,10 @@ protected Object toConnectData(Schema schema, Object value) { } } - for (FieldDescriptor fieldDescriptor : descriptor.getFields()) { + List fields = descriptor.getFields(); + int numFields = fields.size(); + for (int i = 0; i < numFields; i++) { + FieldDescriptor fieldDescriptor = fields.get(i); OneofDescriptor oneOfDescriptor = fieldDescriptor.getRealContainingOneof(); if (oneOfDescriptor != null) { // Already added field as oneof