Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve some code, fix some bugs #3320

Merged
merged 13 commits into from
Jan 25, 2025
Original file line number Diff line number Diff line change
Expand Up @@ -168,9 +168,9 @@ private void findRelatedReferences() {
}

ExecutableElement getter = null, setter = null;
TypeMirror type = null;
String name = null;
if (parameters.size() == 0 && (methodName.startsWith("get") || methodName.startsWith("is"))) {
TypeMirror type;
String name;
if (parameters.isEmpty() && (methodName.startsWith("get") || methodName.startsWith("is"))) {
name = BeanUtils.getterName(methodName, null);
getter = method;
type = method.getReturnType();
Expand All @@ -188,8 +188,8 @@ private void findRelatedReferences() {
}

private List<TypeElement> getTypeHierarchy(TypeElement element) {
List<TypeElement> result = new ArrayList<TypeElement>();
getAllTypes(element, result, new HashSet<TypeElement>());
List<TypeElement> result = new ArrayList<>();
getAllTypes(element, result, new HashSet<>());
return result;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -495,7 +495,7 @@ public static void getFieldInfo(FieldInfo fieldInfo, JSONField jsonField, boolea
if (!jsonFieldFormat.isEmpty()) {
jsonFieldFormat = jsonFieldFormat.trim();
if (jsonFieldFormat.indexOf('T') != -1 && !jsonFieldFormat.contains("'T'")) {
jsonFieldFormat = jsonFieldFormat.replaceAll("T", "'T'");
jsonFieldFormat = jsonFieldFormat.replace("T", "'T'");
}

fieldInfo.format = jsonFieldFormat;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1410,7 +1410,7 @@ public void setCallback(JSONPath.Context context, BiFunction callback) {
action.accept(object);
}

protected boolean shouldRecursive() {
boolean shouldRecursive() {
return nameHashCode == HASH_STAR || nameHashCode == HASH_EMPTY;
}

Expand Down
2 changes: 1 addition & 1 deletion core/src/main/java/com/alibaba/fastjson2/JSONReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -2163,7 +2163,7 @@ public void read(Map object, long features) {
try {
jsonPath = JSONPath.of(reference);
} catch (Exception ignored) {
map.put(name, new JSONObject().fluentPut("$ref", reference));
map.put(name, JSONObject.of("$ref", reference));
continue;
}
addResolveTask(map, name, jsonPath);
Expand Down
36 changes: 18 additions & 18 deletions core/src/main/java/com/alibaba/fastjson2/JSONReaderJSONB.java
Original file line number Diff line number Diff line change
Expand Up @@ -81,27 +81,27 @@ final class JSONReaderJSONB
FIXED_TYPE_SIZE = bytes;
}

protected final byte[] bytes;
protected final int length;
protected final int end;
final byte[] bytes;
final int length;
final int end;

protected byte type;
protected int strlen;
protected byte strtype;
protected int strBegin;
byte type;
int strlen;
byte strtype;
int strBegin;

protected byte[] valueBytes;
protected char[] charBuf;
protected final CacheItem cacheItem;
byte[] valueBytes;
char[] charBuf;
final CacheItem cacheItem;

protected final SymbolTable symbolTable;
final SymbolTable symbolTable;

protected long symbol0Hash;
protected int symbol0Begin;
protected int symbol0Length;
protected byte symbol0StrType;
long symbol0Hash;
int symbol0Begin;
int symbol0Length;
byte symbol0StrType;

protected long[] symbols;
long[] symbols;

JSONReaderJSONB(Context ctx, InputStream is) {
super(ctx, true, false);
Expand Down Expand Up @@ -2285,7 +2285,7 @@ public long readValueHashCode() {
return hashCode;
}

protected long getNameHashCode() {
long getNameHashCode() {
int offset = strBegin;
long nameValue = 0;
for (int i = 0; i < strlen; offset++) {
Expand Down Expand Up @@ -3774,7 +3774,7 @@ public Long readInt64() {
return int64Value;
}

protected String readFixedAsciiString(int strlen) {
String readFixedAsciiString(int strlen) {
byte[] bytes = this.bytes;
int offset = this.offset;
String str;
Expand Down
8 changes: 4 additions & 4 deletions core/src/main/java/com/alibaba/fastjson2/JSONReaderUTF16.java
Original file line number Diff line number Diff line change
Expand Up @@ -2474,7 +2474,7 @@ public final int readInt32Value() {
}

if (comma = (ch == ',')) {
ch = offset == end ? EOI : (char) chars[offset++];
ch = offset == end ? EOI : chars[offset++];
while (ch <= ' ' && ((1L << ch) & SPACE) != 0) {
ch = offset == end ? EOI : chars[offset++];
}
Expand Down Expand Up @@ -2571,7 +2571,7 @@ public final long readInt64Value() {
}

if (comma = (ch == ',')) {
ch = offset == end ? EOI : (char) chars[offset++];
ch = offset == end ? EOI : chars[offset++];
while (ch <= ' ' && ((1L << ch) & SPACE) != 0) {
ch = offset == end ? EOI : chars[offset++];
}
Expand Down Expand Up @@ -5002,9 +5002,9 @@ public final boolean readBoolValue() {
wasNull = true;
offset += 3;
val = false;
} else if (ch == '"') {
} else if (ch == '"' || ch == '\'') {
if (offset + 1 < chars.length
&& chars[offset + 1] == '"'
&& chars[offset + 1] == ch
) {
char c0 = chars[offset];
offset += 2;
Expand Down
4 changes: 2 additions & 2 deletions core/src/main/java/com/alibaba/fastjson2/JSONReaderUTF8.java
Original file line number Diff line number Diff line change
Expand Up @@ -7152,9 +7152,9 @@ public final boolean readBoolValue() {
wasNull = true;
offset += 3;
val = false;
} else if (ch == '"') {
} else if (ch == '"' || ch == '\'') {
if (offset + 1 < bytes.length
&& bytes[offset + 1] == '"'
&& bytes[offset + 1] == ch
) {
byte c0 = bytes[offset];
offset += 2;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import com.alibaba.fastjson2.util.JDKUtils;

import static com.alibaba.fastjson2.JSONWriter.Feature.*;
import static com.alibaba.fastjson2.util.JDKUtils.UNSAFE;

public final class JSONWriterUTF16JDK8UF
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public DateTimeCodec(String format) {

public DateTimeCodec(String format, Locale locale) {
if (format != null) {
format = format.replaceAll("aa", "a");
format = format.replace("aa", "a");
}

this.format = format;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public class TypeCollector {
static final Map<String, String> PRIMITIVES;

static {
HashMap map = new HashMap();
HashMap<String, String> map = new HashMap<>();
map.put("int", "I");
map.put("boolean", "Z");
map.put("byte", "B");
Expand Down Expand Up @@ -75,21 +75,22 @@ protected MethodCollector visitMethod(int access, String name, String desc) {
// }

private boolean correctTypeName(Type type, String paramTypeName) {
String s = type.getClassName();
String typeName = type.getClassName();
// array notation needs cleanup.
StringBuilder braces = new StringBuilder();
while (s.endsWith("[]")) {
while (typeName.endsWith("[]")) {
braces.append('[');
s = s.substring(0, s.length() - 2);
typeName = typeName.substring(0, typeName.length() - 2);
}
if (braces.length() != 0) {
if (PRIMITIVES.containsKey(s)) {
s = braces.append(PRIMITIVES.get(s)).toString();
String symbol = PRIMITIVES.get(typeName);
if (symbol != null) {
typeName = braces.append(symbol).toString();
} else {
s = braces.append('L').append(s).append(';').toString();
typeName = braces.append('L').append(typeName).append(';').toString();
}
}
return s.equals(paramTypeName);
return typeName.equals(paramTypeName);
}

public String[] getParameterNamesForMethod() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,6 @@ public void accept(T object, Object value) {
return;
}

if (value == collection) {
return;
}

Collection values = (Collection) value;
for (Object item : values) {
if (item == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1122,7 +1122,7 @@ private void processJSONField1x(FieldInfo fieldInfo, Annotation annotation) {
format = format.trim();

if (format.indexOf('T') != -1 && !format.contains("'T'")) {
format = format.replaceAll("T", "'T'");
format = format.replace("T", "'T'");
}

fieldInfo.format = format;
Expand Down Expand Up @@ -1227,7 +1227,7 @@ private void getFieldInfo(FieldInfo fieldInfo, JSONField jsonField) {
if (!jsonFieldFormat.isEmpty()) {
jsonFieldFormat = jsonFieldFormat.trim();
if (jsonFieldFormat.indexOf('T') != -1 && !jsonFieldFormat.contains("'T'")) {
jsonFieldFormat = jsonFieldFormat.replaceAll("T", "'T'");
jsonFieldFormat = jsonFieldFormat.replace("T", "'T'");
}

fieldInfo.format = jsonFieldFormat;
Expand Down Expand Up @@ -1257,9 +1257,9 @@ private void getFieldInfo(FieldInfo fieldInfo, JSONField jsonField) {
if (fieldInfo.alternateNames == null) {
fieldInfo.alternateNames = alternateNames;
} else {
Set<String> nameSet = new LinkedHashSet<>();
nameSet.addAll(Arrays.asList(alternateNames));
nameSet.addAll(Arrays.asList(fieldInfo.alternateNames));
Set<String> nameSet = new LinkedHashSet<>(alternateNames.length + fieldInfo.alternateNames.length, 1F);
Collections.addAll(nameSet, alternateNames);
Collections.addAll(nameSet, fieldInfo.alternateNames);
fieldInfo.alternateNames = nameSet.toArray(new String[nameSet.size()]);
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -724,27 +724,26 @@ protected <T> ObjectReader<T> createObjectReaderWithCreator(

boolean[] flags = null;
int maskCount = 0;
if (setterFieldReaders != null) {
for (int i = 0; i < setterFieldReaders.length; i++) {
FieldReader setterFieldReader = setterFieldReaders[i];
if (fieldReaders.containsKey(setterFieldReader.fieldName)) {
if (flags == null) {
flags = new boolean[setterFieldReaders.length];
}
flags[i] = true;
maskCount++;
// setterFieldReaders is NOT null here, otherwise Arrays.sort() will throw NPE
for (int i = 0; i < setterFieldReaders.length; i++) {
FieldReader setterFieldReader = setterFieldReaders[i];
if (fieldReaders.containsKey(setterFieldReader.fieldName)) {
if (flags == null) {
flags = new boolean[setterFieldReaders.length];
}
flags[i] = true;
maskCount++;
}
if (maskCount > 0) {
FieldReader[] array = new FieldReader[setterFieldReaders.length - maskCount];
int index = 0;
for (int i = 0; i < setterFieldReaders.length; i++) {
if (!flags[i]) {
array[index++] = setterFieldReaders[i];
}
}
if (maskCount > 0) {
FieldReader[] array = new FieldReader[setterFieldReaders.length - maskCount];
int index = 0;
for (int i = 0; i < setterFieldReaders.length; i++) {
if (!flags[i]) {
array[index++] = setterFieldReaders[i];
}
setterFieldReaders = array;
}
setterFieldReaders = array;
}

return (ObjectReader<T>) new ObjectReaderNoneDefaultConstructor(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -336,10 +336,7 @@ public T readObject(JSONReader jsonReader, Type fieldType, Object fieldName, lon
}
for (FieldReader fieldReader : fieldReaders) {
if (fieldReader.defaultValue != null) {
Object fieldValue = valueMap.get(fieldReader.fieldNameHash);
if (fieldValue == null) {
valueMap.put(fieldReader.fieldNameHash, fieldReader.defaultValue);
}
valueMap.putIfAbsent(fieldReader.fieldNameHash, fieldReader.defaultValue);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@

public final class ObjectReaderRootName<T>
extends ObjectReaderAdapter<T> {
protected final String rootName;
protected final long rootNameHashCode;
final String rootName;
final long rootNameHashCode;

public ObjectReaderRootName(
Class objectClass,
Expand Down
13 changes: 1 addition & 12 deletions core/src/main/java/com/alibaba/fastjson2/schema/ArraySchema.java
Original file line number Diff line number Diff line change
Expand Up @@ -329,18 +329,7 @@ public JSONObject toJSONObject() {
object.put("uniqueItems", uniqueItems);
}

if (allOf != null) {
object.put("allOf", allOf);
}

if (anyOf != null) {
object.put("anyOf", anyOf);
}

if (oneOf != null) {
object.put("oneOf", oneOf);
}
return object;
return injectIfPresent(object, allOf, anyOf, oneOf);
}

@Override
Expand Down
Loading