Skip to content

Commit 81ea130

Browse files
fix: correct field index in PerfAPI codegen when fields are filtered (#788)
When generating PerfAPI accessor methods, field indices were incorrect if some fields were skipped (e.g., filtered reference types). The loop index was used instead of tracking actual field positions in the schema.
1 parent d927029 commit 81ea130

File tree

2 files changed

+13
-11
lines changed

2 files changed

+13
-11
lines changed

hollow/src/main/java/com/netflix/hollow/api/codegen/perfapi/HollowObjectTypePerfAPIClassGenerator.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
import com.netflix.hollow.core.HollowDataset;
2121
import com.netflix.hollow.core.schema.HollowObjectSchema;
2222
import com.netflix.hollow.core.schema.HollowObjectSchema.FieldType;
23+
24+
import java.util.ArrayList;
25+
import java.util.List;
2326
import java.util.Set;
2427

2528
import static com.netflix.hollow.api.codegen.HollowCodeGenerationUtils.includeType;
@@ -60,17 +63,18 @@ public String generate() {
6063
builder.append("\n@SuppressWarnings(\"all\")\n");
6164
builder.append("public class " + schema.getName() + "PerfAPI extends HollowObjectTypePerfAPI {\n\n");
6265

66+
List<Integer> fieldPositions = new ArrayList<>(schema.numFields());
67+
6368
builder.append(" public static final String fieldNames[] = { ");
6469
int addedFields = 0;
6570
for(int i=0;i<schema.numFields();i++) {
66-
if (dataset != null && schema.getFieldType(i) == HollowObjectSchema.FieldType.REFERENCE &&
67-
!includeType(schema.getReferencedType(i), dataset)) {
71+
if (dataset != null && schema.getFieldType(i) == HollowObjectSchema.FieldType.REFERENCE && !includeType(schema.getReferencedType(i), dataset)) {
6872
continue;
6973
}
70-
7174
if(addedFields > 0) {
7275
builder.append(", ");
7376
}
77+
fieldPositions.add(i);
7478
builder.append("\"").append(schema.getFieldName(i)).append("\"");
7579
addedFields++;
7680
}
@@ -81,14 +85,11 @@ public String generate() {
8185
builder.append(" super(dataAccess, typeName, api, fieldNames);\n");
8286
builder.append(" }\n\n");
8387

84-
for(int i=0;i<schema.numFields();i++) {
85-
if (dataset != null && schema.getFieldType(i) == HollowObjectSchema.FieldType.REFERENCE && !includeType(schema.getReferencedType(i), dataset)) {
86-
continue;
87-
}
88-
89-
FieldType fieldType = schema.getFieldType(i);
90-
String fieldName = schema.getFieldName(i);
91-
String referencedType = schema.getReferencedType(i);
88+
for(int i=0;i<fieldPositions.size();i++) {
89+
int position = fieldPositions.get(i);
90+
String fieldName = schema.getFieldName(position);
91+
FieldType fieldType = schema.getFieldType(position);
92+
String referencedType = schema.getReferencedType(position);
9293
appendFieldMethod(builder, fieldType, fieldName, i, referencedType);
9394
}
9495

hollow/src/test/resources/hollow_code_gen_test.schema

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ TopLevelObject {
1313
MapOfStringToObject2 invalidMapField1;
1414
MapOfObject2ToString invalidMapField2;
1515
Object2 invalidMemberField;
16+
String validStringField;
1617
}
1718

1819
ListOfObject1 List<Object1>;

0 commit comments

Comments
 (0)