builder.append(" private final HollowObjectProvider ").append(hollowObjectProviderName(schema.getName())).append(";\n"); builder.append(" if(cachedTypes.contains(\"").append(schema.getName()).append("\")) {\n"); builder.append(" HollowObjectCacheProvider previousCacheProvider = null;\n"); builder.append(" if(previousCycleAPI != null && (previousCycleAPI.").append(hollowObjectProviderName(schema.getName())).append(" instanceof HollowObjectCacheProvider))\n"); builder.append(" previousCacheProvider = (HollowObjectCacheProvider) previousCycleAPI.").append(hollowObjectProviderName(schema.getName())).append(";\n"); builder.append(" ").append(hollowObjectProviderName(schema.getName())).append(" = new HollowObjectCacheProvider(typeDataAccess, ").append(lowercase(typeAPIClassname(schema.getName()))).append(", factory, previousCacheProvider);\n"); builder.append(" } else {\n"); builder.append(" ").append(hollowObjectProviderName(schema.getName())).append(" = new HollowObjectFactoryProvider(typeDataAccess, ").append(lowercase(typeAPIClassname(schema.getName()))).append(", factory);\n"); builder.append(" }\n\n"); builder.append(" if(").append(hollowObjectProviderName(schema.getName())).append(" instanceof HollowObjectCacheProvider)\n"); builder.append(" ((HollowObjectCacheProvider)").append(hollowObjectProviderName(schema.getName())).append(").detach();\n"); builder.append(" return (T) ").append(hollowObjectProviderName(schema.getName())).append(".getHollowObject(ordinal);\n"); builder.append(" }\n"); } else { builder.append(" return (").append(hollowImplClassname).append(")").append(hollowObjectProviderName(schema.getName())).append(".getHollowObject(ordinal);\n"); builder.append(" }\n");