in hollow/src/main/java/com/netflix/hollow/api/codegen/delegate/HollowObjectDelegateLookupImplGenerator.java [157:244]
private void addShortcutAccessMethod(StringBuilder builder, String methodFieldName, Shortcut shortcut) {
String finalFieldName = substituteInvalidChars(uppercase(shortcut.getPath()[shortcut.getPath().length-1]));
String finalTypeAPI = typeAPIClassname(shortcut.getPathTypes()[shortcut.getPathTypes().length-1]);
switch(shortcut.getType()) {
case BOOLEAN:
builder.append(" public boolean get").append(methodFieldName).append("(int ordinal) {\n");
builder.append(" ordinal = typeAPI.get").append(methodFieldName).append("Ordinal(ordinal);\n");
addShortcutTraversal(builder, shortcut);
builder.append(" return ordinal == -1 ? false : typeAPI.getAPI().get" + finalTypeAPI + "().get").append(finalFieldName).append("(ordinal);\n");
builder.append(" }\n\n");
builder.append(" public Boolean get").append(methodFieldName).append("Boxed(int ordinal) {\n");
builder.append(" ordinal = typeAPI.get").append(methodFieldName).append("Ordinal(ordinal);\n");
addShortcutTraversal(builder, shortcut);
builder.append(" return ordinal == -1 ? null : typeAPI.getAPI().get" + finalTypeAPI + "().get").append(finalFieldName).append("Boxed(ordinal);\n");
builder.append(" }\n\n");
break;
case BYTES:
builder.append(" public byte[] get").append(methodFieldName).append("(int ordinal) {\n");
builder.append(" ordinal = typeAPI.get").append(methodFieldName).append("Ordinal(ordinal);\n");
addShortcutTraversal(builder, shortcut);
builder.append(" return ordinal == -1 ? null : typeAPI.getAPI().get" + finalTypeAPI + "().get").append(finalFieldName).append("(ordinal);\n");
builder.append(" }\n\n");
break;
case DOUBLE:
builder.append(" public double get").append(methodFieldName).append("(int ordinal) {\n");
builder.append(" ordinal = typeAPI.get").append(methodFieldName).append("Ordinal(ordinal);\n");
addShortcutTraversal(builder, shortcut);
builder.append(" return ordinal == -1 ? Double.NaN : typeAPI.getAPI().get" + finalTypeAPI + "().get").append(finalFieldName).append("(ordinal);\n");
builder.append(" }\n\n");
builder.append(" public Double get").append(methodFieldName).append("Boxed(int ordinal) {\n");
builder.append(" ordinal = typeAPI.get").append(methodFieldName).append("Ordinal(ordinal);\n");
addShortcutTraversal(builder, shortcut);
builder.append(" return ordinal == -1 ? null : typeAPI.getAPI().get" + finalTypeAPI + "().get").append(finalFieldName).append("Boxed(ordinal);\n");
builder.append(" }\n\n");
break;
case FLOAT:
builder.append(" public float get").append(methodFieldName).append("(int ordinal) {\n");
builder.append(" ordinal = typeAPI.get").append(methodFieldName).append("Ordinal(ordinal);\n");
addShortcutTraversal(builder, shortcut);
builder.append(" return ordinal == -1 ? Float.NaN : typeAPI.getAPI().get" + finalTypeAPI + "().get").append(finalFieldName).append("(ordinal);\n");
builder.append(" }\n\n");
builder.append(" public Float get").append(methodFieldName).append("Boxed(int ordinal) {\n");
builder.append(" ordinal = typeAPI.get").append(methodFieldName).append("Ordinal(ordinal);\n");
addShortcutTraversal(builder, shortcut);
builder.append(" return ordinal == -1 ? null : typeAPI.getAPI().get" + finalTypeAPI + "().get").append(finalFieldName).append("Boxed(ordinal);\n");
builder.append(" }\n\n");
break;
case INT:
builder.append(" public int get").append(methodFieldName).append("(int ordinal) {\n");
builder.append(" ordinal = typeAPI.get").append(methodFieldName).append("Ordinal(ordinal);\n");
addShortcutTraversal(builder, shortcut);
builder.append(" return ordinal == -1 ? Integer.MIN_VALUE : typeAPI.getAPI().get" + finalTypeAPI + "().get").append(finalFieldName).append("(ordinal);\n");
builder.append(" }\n\n");
builder.append(" public Integer get").append(methodFieldName).append("Boxed(int ordinal) {\n");
builder.append(" ordinal = typeAPI.get").append(methodFieldName).append("Ordinal(ordinal);\n");
addShortcutTraversal(builder, shortcut);
builder.append(" return ordinal == -1 ? null : typeAPI.getAPI().get" + finalTypeAPI + "().get").append(finalFieldName).append("Boxed(ordinal);\n");
builder.append(" }\n\n");
break;
case LONG:
builder.append(" public long get").append(methodFieldName).append("(int ordinal) {\n");
builder.append(" ordinal = typeAPI.get").append(methodFieldName).append("Ordinal(ordinal);\n");
addShortcutTraversal(builder, shortcut);
builder.append(" return ordinal == -1 ? Long.MIN_VALUE : typeAPI.getAPI().get" + finalTypeAPI + "().get").append(finalFieldName).append("(ordinal);\n");
builder.append(" }\n\n");
builder.append(" public Long get").append(methodFieldName).append("Boxed(int ordinal) {\n");
builder.append(" ordinal = typeAPI.get").append(methodFieldName).append("Ordinal(ordinal);\n");
addShortcutTraversal(builder, shortcut);
builder.append(" return ordinal == -1 ? null : typeAPI.getAPI().get" + finalTypeAPI + "().get").append(finalFieldName).append("Boxed(ordinal);\n");
builder.append(" }\n\n");
break;
case STRING:
builder.append(" public String get").append(methodFieldName).append("(int ordinal) {\n");
builder.append(" ordinal = typeAPI.get").append(methodFieldName).append("Ordinal(ordinal);\n");
addShortcutTraversal(builder, shortcut);
builder.append(" return ordinal == -1 ? null : typeAPI.getAPI().get" + finalTypeAPI + "().get").append(finalFieldName).append("(ordinal);\n");
builder.append(" }\n\n");
builder.append(" public boolean is").append(methodFieldName).append("Equal(int ordinal, String testValue) {\n");
builder.append(" ordinal = typeAPI.get").append(methodFieldName).append("Ordinal(ordinal);\n");
addShortcutTraversal(builder, shortcut);
builder.append(" return ordinal == -1 ? testValue == null : typeAPI.getAPI().get" + finalTypeAPI + "().is").append(finalFieldName).append("Equal(ordinal, testValue);\n");
builder.append(" }\n\n");
break;
default:
throw new IllegalArgumentException();
}
}