private String generateReferenceFieldAccessor()

in hollow/src/main/java/com/netflix/hollow/api/codegen/objects/HollowObjectJavaGenerator.java [207:275]


    private String generateReferenceFieldAccessor(int fieldNum) {
        Shortcut shortcut = ergonomicShortcuts == null ? null : ergonomicShortcuts.getShortcut(schema.getName() + "." + schema.getFieldName(fieldNum));
        String fieldName = substituteInvalidChars(schema.getFieldName(fieldNum));

        StringBuilder builder = new StringBuilder();

        if(shortcut != null) {
            switch(shortcut.getType()) {
            case BOOLEAN:
            case DOUBLE:
            case FLOAT:
            case INT:
            case LONG:
                String methodName = (shortcut.getType()==FieldType.BOOLEAN) ? generateBooleanAccessorMethodName(fieldName, useBooleanFieldErgonomics) : "get" + uppercase(fieldName);
                builder.append("    public ").append(HollowCodeGenerationUtils.getJavaBoxedType(shortcut.getType())).append(" ").append(getterPrefix).append(methodName);
                if(!restrictApiToFieldType) {
                    builder.append("Boxed");
                }
                builder.append("() {\n");
                builder.append("        return delegate().get" + uppercase(fieldName) + "Boxed(ordinal);\n");
                builder.append("    }\n\n");
                if(!restrictApiToFieldType) {
                    builder.append("    public ").append(HollowCodeGenerationUtils.getJavaScalarType(shortcut.getType())).append(" ").append(getterPrefix).append(methodName + "() {\n");
                    builder.append("        return delegate().get" + uppercase(fieldName) + "(ordinal);\n");
                    builder.append("    }\n\n");
                }
                break;
            case BYTES:
                builder.append("    public byte[] ").append(getterPrefix).append("get" + uppercase(fieldName) + "() {\n");
                builder.append("        return delegate().get" + uppercase(fieldName) + "(ordinal);\n");
                builder.append("    }\n\n");
                break;
            case STRING:
                builder.append("    public String ").append(getterPrefix).append("get" + uppercase(fieldName) + "() {\n");
                builder.append("        return delegate().get" + uppercase(fieldName) + "(ordinal);\n");
                builder.append("    }\n\n");
                builder.append("    public boolean ").append(getterPrefix).append("is" + uppercase(fieldName) + "Equal(String testValue) {\n");
                builder.append("        return delegate().is" + uppercase(fieldName) + "Equal(ordinal, testValue);\n");
                builder.append("    }\n\n");
                break;
            default:
            }
        }

        String referencedType = schema.getReferencedType(fieldNum);

        boolean parameterize = parameterizeClassNames || parameterizedTypes.contains(referencedType);

        String methodName = null;
        if (shortcut != null) {
            methodName = getterPrefix + "get" + uppercase(fieldName) + "HollowReference";
        } else {
            boolean isBooleanRefType = Boolean.class.getSimpleName().equals(referencedType);
            methodName = getterPrefix + (isBooleanRefType ?  generateBooleanAccessorMethodName(fieldName, useBooleanFieldErgonomics) : "get" + uppercase(fieldName));
        }

        if(parameterize)
            builder.append("    public <T> T ").append(methodName).append("() {\n");
        else
            builder.append("    public ").append(hollowImplClassname(referencedType)).append(" ").append(methodName).append("() {\n");

        builder.append("        int refOrdinal = delegate().get" + uppercase(fieldName) + "Ordinal(ordinal);\n");
        builder.append("        if(refOrdinal == -1)\n");
        builder.append("            return null;\n");
        builder.append("        return ").append(parameterize ? "(T)" : "").append(" api().get" + hollowImplClassname(referencedType) + "(refOrdinal);\n");
        builder.append("    }");

        return builder.toString();
    }