Change throw AssertionError to error() that throws IllegalStateException
as ISE is more appropriate exception for validation. Improve SerializerClassLowering.runPluginSafe so precise IrClass where plugin have failed can be reported for non-fatal errors. #KT-55296 Fixed
This commit is contained in:
committed by
Space Team
parent
7ee877f9aa
commit
c011f0c374
+2
-2
@@ -87,7 +87,7 @@ abstract class BaseIrGenerator(private val currentClass: IrClass, final override
|
||||
{ serializerSymbol ->
|
||||
val kotlinType = (serializerSymbol.owner.superTypes.find(IrType::isKSerializer) as? IrSimpleType)?.arguments?.firstOrNull()?.typeOrNull
|
||||
val classSymbol = kotlinType?.classOrNull
|
||||
?: throw AssertionError("Argument for ${SerializationAnnotations.additionalSerializersFqName} does not implement KSerializer or does not provide serializer for concrete type")
|
||||
?: error("Argument for ${SerializationAnnotations.additionalSerializersFqName} does not implement KSerializer or does not provide serializer for concrete type")
|
||||
classSymbol to kotlinType.isNullable()
|
||||
},
|
||||
{ it }
|
||||
@@ -372,7 +372,7 @@ abstract class BaseIrGenerator(private val currentClass: IrClass, final override
|
||||
cacheableSerializers.firstOrNull { it != null } ?: return null
|
||||
|
||||
val kSerializerClass = compilerContext.kSerializerClass
|
||||
?: throw AssertionError("Serializer class '$KSERIALIZER_NAME_FQ' not found. Check that the kotlinx.serialization runtime is connected correctly")
|
||||
?: error("Serializer class '$KSERIALIZER_NAME_FQ' not found. Check that the kotlinx.serialization runtime is connected correctly")
|
||||
val kSerializerType = kSerializerClass.typeWith(compilerContext.irBuiltIns.anyType)
|
||||
val arrayType = compilerContext.irBuiltIns.arrayClass.typeWith(kSerializerType)
|
||||
|
||||
|
||||
+1
-1
@@ -170,7 +170,7 @@ interface IrBuilderWithPluginContext {
|
||||
val irBlockBody = irBlockBody(startOffset, endOffset, blockBuilder)
|
||||
irBlockBody.statements.dropLast(1).forEach { +it }
|
||||
return irBlockBody.statements.last() as? IrExpression
|
||||
?: throw AssertionError("Last statement in property initializer builder is not an a expression")
|
||||
?: error("Last statement in property initializer builder is not an a expression")
|
||||
}
|
||||
|
||||
fun IrBuilderWithScope.irInvoke(
|
||||
|
||||
+1
-1
@@ -122,7 +122,7 @@ fun IrClass.serialName(): String {
|
||||
|
||||
fun IrClass.findEnumValuesMethod() = this.functions.singleOrNull { f ->
|
||||
f.name == Name.identifier("values") && f.valueParameters.isEmpty() && f.extensionReceiverParameter == null && f.dispatchReceiverParameter == null
|
||||
} ?: throw AssertionError("Enum class does not have single .values() function")
|
||||
} ?: error("Enum class does not have single .values() function")
|
||||
|
||||
internal fun IrClass.enumEntries(): List<IrEnumEntry> {
|
||||
check(this.kind == ClassKind.ENUM_CLASS)
|
||||
|
||||
+1
-1
@@ -401,7 +401,7 @@ class SerializableIrGenerator(
|
||||
hasSerializableOrMetaAnnotationWithoutArgs() && !isInternalSerializable && !hasCompanionObjectAsSerializer && kind != ClassKind.ENUM_CLASS && !isSealedSerializableInterface
|
||||
}
|
||||
if (serializableAnnotationIsUseless)
|
||||
throw AssertionError(
|
||||
error(
|
||||
"@Serializable annotation on $irClass would be ignored because it is impossible to serialize it automatically. " +
|
||||
"Provide serializer manually via e.g. companion object"
|
||||
)
|
||||
|
||||
+13
-8
@@ -106,13 +106,16 @@ class SerializationPluginContext(baseContext: IrPluginContext, val metadataPlugi
|
||||
private inline fun IrClass.runPluginSafe(block: () -> Unit) {
|
||||
try {
|
||||
block()
|
||||
} catch (e: Exception) {
|
||||
throw CompilationException(
|
||||
"kotlinx.serialization compiler plugin internal error: unable to transform declaration, see cause",
|
||||
this.fileParent,
|
||||
this,
|
||||
e
|
||||
)
|
||||
} catch (e: Throwable) {
|
||||
throw when (e) {
|
||||
is VirtualMachineError, is ThreadDeath -> e
|
||||
else -> CompilationException(
|
||||
"kotlinx.serialization compiler plugin internal error: unable to transform declaration, see cause",
|
||||
this.fileParent,
|
||||
this,
|
||||
e
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -163,7 +166,9 @@ open class SerializationLoweringExtension @JvmOverloads constructor(
|
||||
|
||||
private var intrinsicsState = SerializationIntrinsicsState.NORMAL
|
||||
|
||||
constructor(metadataPlugin: SerializationDescriptorSerializerPlugin, intrinsicsState: SerializationIntrinsicsState) : this(metadataPlugin) {
|
||||
constructor(metadataPlugin: SerializationDescriptorSerializerPlugin, intrinsicsState: SerializationIntrinsicsState) : this(
|
||||
metadataPlugin
|
||||
) {
|
||||
this.intrinsicsState = intrinsicsState
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user