fix: some number type will be consistent to String in GeneratorFactory

This commit is contained in:
2025-08-19 12:36:41 +08:00
parent 99a6e02d1d
commit ceccd2e2cf

View File

@@ -57,17 +57,21 @@ internal fun Any.parseTypedValue(isAutoConversion: Boolean): Pair<KClass<*>, Str
} else it.replace("\"", "\\\"") } else it.replace("\"", "\\\"")
} }
if (!isAutoConversion) return Pair(String::class, "\"$valueString\"") if (!isAutoConversion) return Pair(String::class, "\"$valueString\"")
val trimmed = valueString.trim()
val typeSpec = when { val typeSpec = when {
isStringType -> String::class isStringType || trimmed.any { !it.isDigit() && it != '.' && it != '-' } -> String::class
valueString.trim().toIntOrNull() != null -> Int::class trimmed.toIntOrNull() != null -> Int::class
valueString.trim().toLongOrNull() != null -> Long::class trimmed.toLongOrNull() != null -> Long::class
valueString.trim().toDoubleOrNull() != null -> Double::class trimmed.toDoubleOrNull() != null -> Double::class
valueString.trim().toFloatOrNull() != null -> Float::class trimmed.toFloatOrNull() != null -> Float::class
valueString.trim() == "true" || valueString.trim() == "false" -> Boolean::class trimmed == "true" || trimmed == "false" -> Boolean::class
else -> String::class else -> String::class
}; return Pair(typeSpec, if (typeSpec == String::class) "\"$valueString\"" else valueString.let { }
if (typeSpec == Long::class && !it.endsWith("L")) "${it}L" else it val finalValue = when (typeSpec) {
}) String::class -> "\"$valueString\""
Long::class -> if (trimmed.endsWith("L")) trimmed else "${trimmed}L"
else -> trimmed
}; return typeSpec to finalValue
} }
/** /**