com.alibaba.fastjson2.reader.ObjectReader6 Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of fastjson2 Show documentation
Show all versions of fastjson2 Show documentation
Fastjson is a JSON processor (JSON parser + JSON generator) written in Java
package com.alibaba.fastjson2.reader;
import com.alibaba.fastjson2.JSONB;
import com.alibaba.fastjson2.JSONException;
import com.alibaba.fastjson2.JSONReader;
import com.alibaba.fastjson2.schema.JSONSchema;
import java.lang.reflect.Type;
import java.util.function.Function;
import java.util.function.Supplier;
import static com.alibaba.fastjson2.JSONB.Constants.BC_OBJECT;
import static com.alibaba.fastjson2.JSONB.Constants.BC_OBJECT_END;
import static com.alibaba.fastjson2.util.JDKUtils.UNSAFE;
public class ObjectReader6
extends ObjectReaderAdapter {
protected final FieldReader fieldReader0;
protected final FieldReader fieldReader1;
protected final FieldReader fieldReader2;
protected final FieldReader fieldReader3;
protected final FieldReader fieldReader4;
protected final FieldReader fieldReader5;
final long hashCode0;
final long hashCode1;
final long hashCode2;
final long hashCode3;
final long hashCode4;
final long hashCode5;
final long hashCode0LCase;
final long hashCode1LCase;
final long hashCode2LCase;
final long hashCode3LCase;
final long hashCode4LCase;
final long hashCode5LCase;
protected ObjectReader objectReader0;
protected ObjectReader objectReader1;
protected ObjectReader objectReader2;
protected ObjectReader objectReader3;
protected ObjectReader objectReader4;
protected ObjectReader objectReader5;
ObjectReader6(
Class objectClass,
Supplier creator,
long features,
JSONSchema schema,
Function buildFunction,
FieldReader fieldReader0,
FieldReader fieldReader1,
FieldReader fieldReader2,
FieldReader fieldReader3,
FieldReader fieldReader4,
FieldReader fieldReader5
) {
this(
objectClass,
null,
null,
features,
schema,
creator,
buildFunction,
fieldReader0,
fieldReader1,
fieldReader2,
fieldReader3,
fieldReader4,
fieldReader5
);
}
public ObjectReader6(
Class objectClass,
String typeKey,
String typeName,
long features,
Supplier creator,
Function buildFunction,
FieldReader... fieldReaders
) {
this(objectClass, typeKey, typeName, features, null, creator, buildFunction, fieldReaders);
}
public ObjectReader6(
Class objectClass,
String typeKey,
String typeName,
long features,
JSONSchema schema,
Supplier creator,
Function buildFunction,
FieldReader... fieldReaders
) {
super(objectClass, typeKey, typeName, features, schema, creator, buildFunction, fieldReaders);
this.fieldReader0 = fieldReaders[0];
this.fieldReader1 = fieldReaders[1];
this.fieldReader2 = fieldReaders[2];
this.fieldReader3 = fieldReaders[3];
this.fieldReader4 = fieldReaders[4];
this.fieldReader5 = fieldReaders[5];
this.hashCode0 = fieldReader0.fieldNameHash;
this.hashCode1 = fieldReader1.fieldNameHash;
this.hashCode2 = fieldReader2.fieldNameHash;
this.hashCode3 = fieldReader3.fieldNameHash;
this.hashCode4 = fieldReader4.fieldNameHash;
this.hashCode5 = fieldReader5.fieldNameHash;
this.hashCode0LCase = fieldReader0.fieldNameHashLCase;
this.hashCode1LCase = fieldReader1.fieldNameHashLCase;
this.hashCode2LCase = fieldReader2.fieldNameHashLCase;
this.hashCode3LCase = fieldReader3.fieldNameHashLCase;
this.hashCode4LCase = fieldReader4.fieldNameHashLCase;
this.hashCode5LCase = fieldReader5.fieldNameHashLCase;
hasDefaultValue = fieldReader0.defaultValue != null
|| fieldReader1.defaultValue != null
|| fieldReader2.defaultValue != null
|| fieldReader3.defaultValue != null
|| fieldReader4.defaultValue != null
|| fieldReader5.defaultValue != null;
}
@Override
protected void initDefaultValue(T object) {
fieldReader0.acceptDefaultValue(object);
fieldReader1.acceptDefaultValue(object);
fieldReader2.acceptDefaultValue(object);
fieldReader3.acceptDefaultValue(object);
fieldReader4.acceptDefaultValue(object);
fieldReader5.acceptDefaultValue(object);
}
@Override
public T readArrayMappingJSONBObject(JSONReader jsonReader, Type fieldType, Object fieldName, long features) {
if (!serializable) {
jsonReader.errorOnNoneSerializable(objectClass);
}
ObjectReader autoTypeReader = checkAutoType(jsonReader, features);
if (autoTypeReader != null) {
return (T) autoTypeReader.readArrayMappingJSONBObject(jsonReader, fieldType, fieldName, features);
}
T object = creator.get();
int entryCnt = jsonReader.startArray();
if (entryCnt > 0) {
fieldReader0.readFieldValue(jsonReader, object);
if (entryCnt > 1) {
fieldReader1.readFieldValue(jsonReader, object);
if (entryCnt > 2) {
fieldReader2.readFieldValue(jsonReader, object);
if (entryCnt > 3) {
fieldReader3.readFieldValue(jsonReader, object);
if (entryCnt > 4) {
fieldReader4.readFieldValue(jsonReader, object);
if (entryCnt > 5) {
fieldReader5.readFieldValue(jsonReader, object);
for (int i = 6; i < entryCnt; ++i) {
jsonReader.skipValue();
}
}
}
}
}
}
}
if (buildFunction != null) {
return (T) buildFunction.apply(object);
}
return object;
}
@Override
public T readJSONBObject(JSONReader jsonReader, Type fieldType, Object fieldName, long features) {
if (!serializable) {
jsonReader.errorOnNoneSerializable(objectClass);
}
if (jsonReader.isArray()) {
T object = creator.get();
int entryCnt = jsonReader.startArray();
if (entryCnt > 0) {
fieldReader0.readFieldValue(jsonReader, object);
if (entryCnt > 1) {
fieldReader1.readFieldValue(jsonReader, object);
if (entryCnt > 2) {
fieldReader2.readFieldValue(jsonReader, object);
if (entryCnt > 3) {
fieldReader3.readFieldValue(jsonReader, object);
if (entryCnt > 4) {
fieldReader4.readFieldValue(jsonReader, object);
if (entryCnt > 5) {
fieldReader5.readFieldValue(jsonReader, object);
for (int i = 6; i < entryCnt; ++i) {
jsonReader.skipValue();
}
}
}
}
}
}
}
if (buildFunction != null) {
return (T) buildFunction.apply(object);
}
return object;
}
ObjectReader autoTypeReader = jsonReader.checkAutoType(this.objectClass, this.typeNameHash, this.features | features);
if (autoTypeReader != null && autoTypeReader.getObjectClass() != this.objectClass) {
return (T) autoTypeReader.readJSONBObject(jsonReader, fieldType, fieldName, features);
}
if (!jsonReader.nextIfMatch(BC_OBJECT)) {
throw new JSONException(jsonReader.info("expect object, but " + JSONB.typeName(jsonReader.getType())));
}
T object;
if (creator != null) {
object = creator.get();
} else if (((features | jsonReader.getContext().getFeatures()) & JSONReader.Feature.FieldBased.mask) != 0) {
try {
object = (T) UNSAFE.allocateInstance(objectClass);
} catch (InstantiationException e) {
throw new JSONException(jsonReader.info("create instance error"), e);
}
} else {
object = null;
}
if (object != null && hasDefaultValue) {
initDefaultValue(object);
}
while (!jsonReader.nextIfMatch(BC_OBJECT_END)) {
long hashCode = jsonReader.readFieldNameHashCode();
if (hashCode == 0) {
continue;
}
if (hashCode == hashCode0) {
fieldReader0.readFieldValue(jsonReader, object);
} else if (hashCode == hashCode1) {
fieldReader1.readFieldValue(jsonReader, object);
} else if (hashCode == hashCode2) {
fieldReader2.readFieldValue(jsonReader, object);
} else if (hashCode == hashCode3) {
fieldReader3.readFieldValue(jsonReader, object);
} else if (hashCode == hashCode4) {
fieldReader4.readFieldValue(jsonReader, object);
} else if (hashCode == hashCode5) {
fieldReader5.readFieldValue(jsonReader, object);
} else {
if (!jsonReader.isSupportSmartMatch(features | this.features)) {
processExtra(jsonReader, object);
continue;
}
long nameHashCodeLCase = jsonReader.getNameHashCodeLCase();
if (nameHashCodeLCase == hashCode0LCase) {
fieldReader0.readFieldValue(jsonReader, object);
} else if (nameHashCodeLCase == hashCode1LCase) {
fieldReader1.readFieldValue(jsonReader, object);
} else if (nameHashCodeLCase == hashCode2LCase) {
fieldReader2.readFieldValue(jsonReader, object);
} else if (nameHashCodeLCase == hashCode3LCase) {
fieldReader3.readFieldValue(jsonReader, object);
} else if (nameHashCodeLCase == hashCode4LCase) {
fieldReader4.readFieldValue(jsonReader, object);
} else if (nameHashCodeLCase == hashCode5LCase) {
fieldReader5.readFieldValue(jsonReader, object);
} else {
processExtra(jsonReader, object);
}
}
}
if (buildFunction != null) {
object = (T) buildFunction.apply(object);
}
if (schema != null) {
schema.assertValidate(object);
}
return object;
}
@Override
public T readObject(JSONReader jsonReader, Type fieldType, Object fieldName, long features) {
if (!serializable) {
jsonReader.errorOnNoneSerializable(objectClass);
}
if (jsonReader.jsonb) {
return readJSONBObject(jsonReader, fieldType, fieldName, features);
}
if (jsonReader.nextIfNull()) {
jsonReader.nextIfComma();
return null;
}
long featuresAll = jsonReader.features(this.features | features);
if (jsonReader.isArray()) {
if ((featuresAll & JSONReader.Feature.SupportArrayToBean.mask) != 0) {
jsonReader.nextIfArrayStart();
T object = creator.get();
if (hasDefaultValue) {
initDefaultValue(object);
}
fieldReader0.readFieldValue(jsonReader, object);
fieldReader1.readFieldValue(jsonReader, object);
fieldReader2.readFieldValue(jsonReader, object);
fieldReader3.readFieldValue(jsonReader, object);
fieldReader4.readFieldValue(jsonReader, object);
fieldReader5.readFieldValue(jsonReader, object);
if (!jsonReader.nextIfArrayEnd()) {
throw new JSONException(jsonReader.info("array to bean end error"));
}
jsonReader.nextIfComma();
if (buildFunction != null) {
return (T) buildFunction.apply(object);
}
return object;
}
return processObjectInputSingleItemArray(jsonReader, fieldType, fieldName, featuresAll);
}
jsonReader.nextIfObjectStart();
T object = creator.get();
if (hasDefaultValue) {
initDefaultValue(object);
}
if (object != null && (featuresAll & JSONReader.Feature.InitStringFieldAsEmpty.mask) != 0) {
initStringFieldAsEmpty(object);
}
for (int i = 0; ; ++i) {
if (jsonReader.nextIfObjectEnd()) {
// jsonReader.next();
break;
}
long hashCode = jsonReader.readFieldNameHashCode();
if (i == 0 && hashCode == HASH_TYPE) {
long typeHash = jsonReader.readTypeHashCode();
JSONReader.Context context = jsonReader.getContext();
ObjectReader autoTypeObjectReader = context.getObjectReaderAutoType(typeHash);
if (autoTypeObjectReader == null) {
String typeName = jsonReader.getString();
autoTypeObjectReader = context.getObjectReaderAutoType(typeName, objectClass);
if (autoTypeObjectReader == null) {
continue;
}
}
if (autoTypeObjectReader != this) {
object = (T) autoTypeObjectReader.readObject(jsonReader, fieldType, fieldName, features);
break;
} else {
continue;
}
}
if (hashCode == hashCode0) {
fieldReader0.readFieldValue(jsonReader, object);
} else if (hashCode == hashCode1) {
fieldReader1.readFieldValue(jsonReader, object);
} else if (hashCode == hashCode2) {
fieldReader2.readFieldValue(jsonReader, object);
} else if (hashCode == hashCode3) {
fieldReader3.readFieldValue(jsonReader, object);
} else if (hashCode == hashCode4) {
fieldReader4.readFieldValue(jsonReader, object);
} else if (hashCode == hashCode5) {
fieldReader5.readFieldValue(jsonReader, object);
} else {
if (!jsonReader.isSupportSmartMatch(features | this.features)) {
processExtra(jsonReader, object);
continue;
}
long nameHashCodeLCase = jsonReader.getNameHashCodeLCase();
if (nameHashCodeLCase == hashCode0LCase) {
fieldReader0.readFieldValue(jsonReader, object);
} else if (nameHashCodeLCase == hashCode1LCase) {
fieldReader1.readFieldValue(jsonReader, object);
} else if (nameHashCodeLCase == hashCode2LCase) {
fieldReader2.readFieldValue(jsonReader, object);
} else if (nameHashCodeLCase == hashCode3LCase) {
fieldReader3.readFieldValue(jsonReader, object);
} else if (nameHashCodeLCase == hashCode4LCase) {
fieldReader4.readFieldValue(jsonReader, object);
} else if (nameHashCodeLCase == hashCode5LCase) {
fieldReader5.readFieldValue(jsonReader, object);
} else {
processExtra(jsonReader, object);
}
}
}
jsonReader.nextIfComma();
if (buildFunction != null) {
object = (T) buildFunction.apply(object);
}
if (schema != null) {
schema.assertValidate(object);
}
return object;
}
@Override
public FieldReader getFieldReader(long hashCode) {
if (hashCode == hashCode0) {
return fieldReader0;
}
if (hashCode == hashCode1) {
return fieldReader1;
}
if (hashCode == hashCode2) {
return fieldReader2;
}
if (hashCode == hashCode3) {
return fieldReader3;
}
if (hashCode == hashCode4) {
return fieldReader4;
}
if (hashCode == hashCode5) {
return fieldReader5;
}
return null;
}
@Override
public FieldReader getFieldReaderLCase(long hashCode) {
if (hashCode == hashCode0LCase) {
return fieldReader0;
}
if (hashCode == hashCode1LCase) {
return fieldReader1;
}
if (hashCode == hashCode2LCase) {
return fieldReader2;
}
if (hashCode == hashCode3LCase) {
return fieldReader3;
}
if (hashCode == hashCode4LCase) {
return fieldReader4;
}
if (hashCode == hashCode5LCase) {
return fieldReader5;
}
return null;
}
}