public void setGenerics (Kryo kryo, Class[] generics) { if (!config.isOptimizedGenerics()) return; this.generics = generics; if (typeParameters != null && typeParameters.length > 0) { // There is no need to rebuild all cached fields from scratch. // Generic parameter types do not affect the set of fields, offsets of fields, // transient and non-transient properties. They only affect the type of // fields and serializers selected for each field. rebuildCachedFields(true); } }
public void setGenerics (Kryo kryo, Class[] generics) { if (!config.isOptimizedGenerics()) return; this.generics = generics; if (typeParameters != null && typeParameters.length > 0) { // There is no need to rebuild all cached fields from scratch. // Generic parameter types do not affect the set of fields, offsets of fields, // transient and non-transient properties. They only affect the type of // fields and serializers selected for each field. rebuildCachedFields(true); } }
CachedField newCachedField (Field field, int fieldIndex, int accessIndex) { Class[] fieldClass = new Class[] {field.getType()}; Type fieldGenericType = (config.isOptimizedGenerics()) ? field.getGenericType() : null; CachedField cachedField; if (!config.isOptimizedGenerics() || fieldGenericType == fieldClass[0]) { // For optimized generics this is a field without generic type parameters if (TRACE) trace("kryo", "Field " + field.getName() + ": " + fieldClass[0]); cachedField = newMatchingCachedField(field, accessIndex, fieldClass[0], fieldGenericType, null); } else { cachedField = genericsUtil.newCachedFieldOfGenericType(field, accessIndex, fieldClass, fieldGenericType); } if (cachedField instanceof ObjectField) { hasObjectFields = true; } cachedField.field = field; cachedField.varIntsEnabled = varIntsEnabled; if (!config.isUseAsm()) { cachedField.offset = unsafeUtil.getObjectFieldOffset(field); } cachedField.access = (FieldAccess)access; cachedField.accessIndex = accessIndex; cachedField.canBeNull = config.isFieldsCanBeNull() && !fieldClass[0].isPrimitive() && !field.isAnnotationPresent(NotNull.class); // Always use the same serializer for this field if the field's class is final. if (kryo.isFinal(fieldClass[0]) || config.isFixedFieldTypes()) cachedField.valueClass = fieldClass[0]; return cachedField; }
CachedField newCachedField (Field field, int fieldIndex, int accessIndex) { Class[] fieldClass = new Class[] {field.getType()}; Type fieldGenericType = (config.isOptimizedGenerics()) ? field.getGenericType() : null; CachedField cachedField; if (!config.isOptimizedGenerics() || fieldGenericType == fieldClass[0]) { // For optimized generics this is a field without generic type parameters if (TRACE) trace("kryo", "Field " + field.getName() + ": " + fieldClass[0]); cachedField = newMatchingCachedField(field, accessIndex, fieldClass[0], fieldGenericType, null); } else { cachedField = genericsUtil.newCachedFieldOfGenericType(field, accessIndex, fieldClass, fieldGenericType); } if (cachedField instanceof ObjectField) { hasObjectFields = true; } cachedField.field = field; cachedField.varIntsEnabled = varIntsEnabled; if (!config.isUseAsm()) { cachedField.offset = unsafeUtil.getObjectFieldOffset(field); } cachedField.access = (FieldAccess)access; cachedField.accessIndex = accessIndex; cachedField.canBeNull = config.isFieldsCanBeNull() && !fieldClass[0].isPrimitive() && !field.isAnnotationPresent(NotNull.class); // Always use the same serializer for this field if the field's class is final. if (kryo.isFinal(fieldClass[0]) || config.isFixedFieldTypes()) cachedField.valueClass = fieldClass[0]; return cachedField; }
if (TRACE) trace("kryo", "FieldSerializer.write fields of class: " + object.getClass().getName()); if (config.isOptimizedGenerics()) { if (typeParameters != null && generics != null) { if (config.isOptimizedGenerics() && genericsScope != null) {
if (TRACE) trace("kryo", "FieldSerializer.write fields of class: " + object.getClass().getName()); if (config.isOptimizedGenerics()) { if (typeParameters != null && generics != null) { if (config.isOptimizedGenerics() && genericsScope != null) {
if (config.isOptimizedGenerics()) {
if (config.isOptimizedGenerics()) {
public T read (Kryo kryo, Input input, Class<T> type) { try { if (config.isOptimizedGenerics()) { if (typeParameters != null && generics != null) { if (config.isOptimizedGenerics() && genericsScope != null && kryo.getGenericsResolver() != null) {
CachedField newMatchingCachedField (Field field, int accessIndex, Class fieldClass, Type fieldGenericType, Class[] fieldGenerics) { CachedField cachedField; if (accessIndex != -1) { cachedField = getAsmFieldFactory().createCachedField(fieldClass, field, this); } else if (!config.isUseAsm()) { cachedField = getUnsafeFieldFactory().createCachedField(fieldClass, field, this); } else { cachedField = getObjectFieldFactory().createCachedField(fieldClass, field, this); if (config.isOptimizedGenerics()) { if (fieldGenerics != null) ((ObjectField)cachedField).generics = fieldGenerics; else if (fieldGenericType != null) { Class[] cachedFieldGenerics = FieldSerializerGenericsUtil.getGenerics(fieldGenericType, kryo); ((ObjectField)cachedField).generics = cachedFieldGenerics; if (TRACE) trace("kryo", "Field generics: " + Arrays.toString(cachedFieldGenerics)); } } } return cachedField; }
CachedField newMatchingCachedField (Field field, int accessIndex, Class fieldClass, Type fieldGenericType, Class[] fieldGenerics) { CachedField cachedField; if (accessIndex != -1) { cachedField = getAsmFieldFactory().createCachedField(fieldClass, field, this); } else if (!config.isUseAsm()) { cachedField = getUnsafeFieldFactory().createCachedField(fieldClass, field, this); } else { cachedField = getObjectFieldFactory().createCachedField(fieldClass, field, this); if (config.isOptimizedGenerics()) { if (fieldGenerics != null) ((ObjectField)cachedField).generics = fieldGenerics; else if (fieldGenericType != null) { Class[] cachedFieldGenerics = FieldSerializerGenericsUtil.getGenerics(fieldGenericType, kryo); ((ObjectField)cachedField).generics = cachedFieldGenerics; if (TRACE) trace("kryo", "Field generics: " + Arrays.toString(cachedFieldGenerics)); } } } return cachedField; }
public T read (Kryo kryo, Input input, Class<T> type) { try { if (config.isOptimizedGenerics()) { if (typeParameters != null && generics != null) { if (config.isOptimizedGenerics() && genericsScope != null && kryo.getGenericsResolver() != null) {