/** * Returns the schema wrapper. */ static <T> HasSchema<T> getSchemaWrapper(Class<T> typeClass, IdStrategy strategy) { return strategy.getSchemaWrapper(typeClass, true); }
@Override @SuppressWarnings("unchecked") public Schema<T> getSchema() { Schema<T> schema = this.schema; if (schema == null) { synchronized (this) { if ((schema = this.schema) == null) { if (Message.class.isAssignableFrom(typeClass)) { // use the message's schema. final Message<T> m = (Message<T>) createMessageInstance(typeClass); this.schema = schema = m.cachedSchema(); } else { // create new this.schema = schema = strategy.newSchema(typeClass); } } } } return schema; }
@SuppressWarnings("unchecked") static <T> Delegate<T> getDelegateOrInline(Class<T> typeClass, IdStrategy strategy) { Delegate<T> d = strategy.getDelegate(typeClass); if (d == null) d = (RuntimeFieldFactory<T>) __inlineValues .get(typeClass.getName()); return d; }
static void writeObjectTo(Output output, Object value, Schema<?> currentSchema, IdStrategy strategy) throws IOException { final Class<?> clazz = value.getClass(); if (clazz.getSuperclass() != null && clazz.getSuperclass().isEnum()) { EnumIO<?> eio = strategy.getEnumIO(clazz.getSuperclass()); strategy.writeEnumIdTo(output, ID_ENUM, clazz.getSuperclass()); eio.writeTo(output, ID_ENUM_VALUE, false, (Enum<?>) value); } else { EnumIO<?> eio = strategy.getEnumIO(clazz); strategy.writeEnumIdTo(output, ID_ENUM, clazz); eio.writeTo(output, ID_ENUM_VALUE, false, (Enum<?>) value); } }
final IdStrategy strategy) final HasSchema<Object> schemaK = strategy.getSchemaWrapper(clazzK, true); final EnumIO<?> eioV = strategy.getEnumIO(clazzV);
final HasDelegate<Object> hd = strategy.tryWriteDelegateIdTo(output, ID_DELEGATE, clazz); final Schema<Object> schema = strategy.writeMessageIdTo( output, ID_POJO, (Message<Object>) value); HasSchema<Object> hs = strategy.tryWritePojoIdTo(output, ID_POJO, clazz, false); if (hs != null) EnumIO<?> eio = strategy.getEnumIO(clazz); strategy.writeEnumIdTo(output, ID_ENUM, clazz); eio.writeTo(output, ID_ENUM_VALUE, false, (Enum<?>) value); return; EnumIO<?> eio = strategy.getEnumIO(clazz.getSuperclass()); strategy.writeEnumIdTo(output, ID_ENUM, clazz.getSuperclass()); eio.writeTo(output, ID_ENUM_VALUE, false, (Enum<?>) value); return; final HasDelegate<Object> hdArray = strategy.tryWriteDelegateIdTo(output, ID_ARRAY_DELEGATE, (Class<Object>) componentType); final EnumIO<?> eio = strategy.getEnumIO(componentType); strategy.writeEnumIdTo(output, ID_ARRAY_ENUM, componentType); strategy.isRegistered(componentType)) hs = strategy.writePojoIdTo(output,
return strategy.getDelegateWrapper(ct).genericElementSchema; return strategy.getEnumIO(ct).genericElementSchema; return strategy.getSchemaWrapper(ct, true).genericElementSchema;
.getEnumIO(enumType).getEnumSetFactory(), enumType, strategy); .getCollectionFactory(clazz); if (genericType == null || ((Map.class.isAssignableFrom(genericType) || Collection.class.isAssignableFrom(genericType)) && !strategy.isRegistered(genericType)))
messageFactory = strategy.getEnumIO(enumType) .getEnumMapFactory(); messageFactory = strategy.getMapFactory(f.getType()); if (clazzK == null || ((Map.class.isAssignableFrom(clazzK) || Collection.class.isAssignableFrom(clazzK)) && !strategy.isRegistered(clazzK))) if (clazzV == null || ((Map.class.isAssignableFrom(clazzV) || Collection.class.isAssignableFrom(clazzV)) && !strategy.isRegistered(clazzV)))
final IdStrategy strategy) final EnumIO<? extends Enum<?>> eio = strategy.getEnumIO(f .getType()); final long offset = us.objectFieldOffset(f);
@Override public Schema<T> getSchema() { Schema<T> schema = this.schema; if (schema == null) { synchronized (this) { if ((schema = this.schema) == null) { // create new this.schema = schema = strategy.newSchema(typeClass); } } } return schema; }
IdStrategy strategy) if (strategy.isDelegateRegistered(clazz)) return DELEGATE; if (strategy.isRegistered(clazz)) return clazz.isInterface() ? POJO : POLYMORPHIC_POJO;
final HasDelegate<Object> hd = strategy.tryWriteDelegateIdTo(output, ID_DELEGATE, clazz); final Schema<Object> schema = strategy.writeMessageIdTo( output, ID_POJO, (Message<Object>) value); HasSchema<Object> hs = strategy.tryWritePojoIdTo(output, ID_POJO, clazz, false); if (hs != null) EnumIO<?> eio = strategy.getEnumIO(clazz); strategy.writeEnumIdTo(output, ID_ENUM, clazz); eio.writeTo(output, ID_ENUM_VALUE, false, (Enum<?>) value); return; EnumIO<?> eio = strategy.getEnumIO(clazz.getSuperclass()); strategy.writeEnumIdTo(output, ID_ENUM, clazz.getSuperclass()); eio.writeTo(output, ID_ENUM_VALUE, false, (Enum<?>) value); return; final HasDelegate<Object> hdArray = strategy.tryWriteDelegateIdTo(output, ID_ARRAY_DELEGATE, (Class<Object>) componentType); final EnumIO<?> eio = strategy.getEnumIO(componentType); strategy.writeEnumIdTo(output, ID_ARRAY_ENUM, componentType); strategy.isRegistered(componentType)) hs = strategy.writePojoIdTo(output,
return strategy.getDelegateWrapper(ct).genericElementSchema; return strategy.getEnumIO(ct).genericElementSchema; return strategy.getSchemaWrapper(ct, true).genericElementSchema;
final IdStrategy strategy) final EnumIO<?> eioK = strategy.getEnumIO(clazzK); final HasSchema<Object> schemaV = strategy.getSchemaWrapper(clazzV, true);
.getEnumIO(enumType).getEnumSetFactory(), enumType, strategy); .getCollectionFactory(clazz); if (genericType == null || ((Map.class.isAssignableFrom(genericType) || Collection.class.isAssignableFrom(genericType)) && !strategy.isRegistered(genericType)))
messageFactory = strategy.getEnumIO(enumType) .getEnumMapFactory(); messageFactory = strategy.getMapFactory(f.getType()); if (clazzK == null || ((Map.class.isAssignableFrom(clazzK) || Collection.class.isAssignableFrom(clazzK)) && !strategy.isRegistered(clazzK))) if (clazzV == null || ((Map.class.isAssignableFrom(clazzV) || Collection.class.isAssignableFrom(clazzV)) && !strategy.isRegistered(clazzV)))
final IdStrategy strategy) final EnumIO<? extends Enum<?>> eio = strategy.getEnumIO(f .getType()); return new Field<T>(FieldType.ENUM, number, name,
@Override public Schema<T> getSchema() { Schema<T> schema = this.schema; if (schema == null) { synchronized (this) { if ((schema = this.schema) == null) { // create new this.schema = schema = strategy.newSchema(typeClass); } } } return schema; }
static void writeObjectTo(Output output, Object value, Schema<?> currentSchema, IdStrategy strategy) throws IOException { final Class<?> clazz = value.getClass(); if (clazz.getSuperclass() != null && clazz.getSuperclass().isEnum()) { EnumIO<?> eio = strategy.getEnumIO(clazz.getSuperclass()); strategy.writeEnumIdTo(output, ID_ENUM, clazz.getSuperclass()); eio.writeTo(output, ID_ENUM_VALUE, false, (Enum<?>) value); } else { EnumIO<?> eio = strategy.getEnumIO(clazz); strategy.writeEnumIdTo(output, ID_ENUM, clazz); eio.writeTo(output, ID_ENUM_VALUE, false, (Enum<?>) value); } }