private static function generateSerializationSignature(Clazz $instanceType, CRC32 $crc, SerializationPolicy $policy) { $crc->update(self::getSerializedTypeName($instanceType)); if (self::excludeImplementationFromSerializationSignature($instanceType)) { return; } $customSerializer = self::hasCustomFieldSerializer($instanceType); if (!is_null($customSerializer)) { self::generateSerializationSignature($customSerializer, $crc, $policy); } else { if ($instanceType->isArray()) { self::generateSerializationSignature($instanceType->getComponentType(), $crc, $policy); } else { if (!$instanceType->isPrimitive()) { $fields = self::applyFieldSerializationPolicy($instanceType); $clientFieldNames = $policy->getClientFieldNamesForEnhancedClass($instanceType); foreach ($fields as $field) { assert(!is_null($field)); /** * If clientFieldNames is non-null, use only the fields listed there * to generate the signature. Otherwise, use all known fields. */ if (is_null($clientFieldNames) || $clientFieldNames->contains($field->getName())) { $crc->update($field->getName()); $crc->update(self::getSerializedTypeName($field->getType())); } } $superClass = $instanceType->getSuperClass(); if (!is_null($superClass)) { self::generateSerializationSignature($superClass, $crc, $policy); } } } } }