diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaElementFinder.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaElementFinder.kt index 6dd50d0bb11..9bba2fb5bca 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaElementFinder.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/FirJavaElementFinder.kt @@ -39,9 +39,11 @@ import org.jetbrains.kotlin.fir.resolve.transformers.FirSupertypeResolverVisitor import org.jetbrains.kotlin.fir.resolve.transformers.SupertypeComputationSession import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.types.* +import org.jetbrains.kotlin.fir.utils.exceptions.withConeTypeEntry import org.jetbrains.kotlin.name.* import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType import org.jetbrains.kotlin.resolve.jvm.KotlinFinderMarker +import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment class FirJavaElementFinder( private val session: FirSession, @@ -267,7 +269,9 @@ private fun ConeKotlinType.mapToCanonicalString(session: FirSession): String { is ConeClassLikeType -> mapToCanonicalString(session) is ConeTypeVariableType, is ConeFlexibleType, is ConeCapturedType, is ConeDefinitelyNotNullType, is ConeIntersectionType, is ConeStubType, is ConeIntegerLiteralType -> - error("Unexpected type: $this [${this::class}]") + errorWithAttachment("Unexpected type: ${this::class.java}") { + withConeTypeEntry("type", this@mapToCanonicalString) + } is ConeLookupTagBasedType -> lookupTag.name.asString() } } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaTypeConversion.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaTypeConversion.kt index 14b0b63fce6..55699efb0b9 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaTypeConversion.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaTypeConversion.kt @@ -16,11 +16,13 @@ import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef import org.jetbrains.kotlin.fir.types.jvm.buildJavaTypeRef +import org.jetbrains.kotlin.fir.utils.exceptions.withConeTypeEntry import org.jetbrains.kotlin.load.java.structure.* import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.types.Variance +import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment private fun ClassId.toConeFlexibleType( typeArguments: Array, @@ -158,7 +160,9 @@ private fun JavaType?.toConeTypeProjection( } null -> ConeStarProjection - else -> error("Strange JavaType: ${this::class.java}") + else -> errorWithAttachment("Strange JavaType: ${this::class.java}") { + withEntry("type", this@toConeTypeProjection) { it.toString() } + } } } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt index 77307bffcd5..81d876f7300 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/SignatureEnhancement.kt @@ -41,6 +41,8 @@ import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef +import org.jetbrains.kotlin.fir.utils.exceptions.withConeTypeEntry +import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry import org.jetbrains.kotlin.load.java.AnnotationQualifierApplicabilityType import org.jetbrains.kotlin.load.java.FakePureImplementationsProvider import org.jetbrains.kotlin.load.java.JavaTypeQualifiersByElementType @@ -52,6 +54,7 @@ import org.jetbrains.kotlin.types.AbstractTypeChecker import org.jetbrains.kotlin.types.model.KotlinTypeMarker import org.jetbrains.kotlin.types.model.TypeParameterMarker import org.jetbrains.kotlin.types.model.TypeSystemContext +import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment import org.jetbrains.kotlin.util.PrivateForInline class FirSignatureEnhancement( @@ -182,7 +185,9 @@ class FirSignatureEnhancement( } else -> { if (original is FirPropertySymbol) return original - error("Can't make enhancement for $original: `${firElement.render()}`") + errorWithAttachment("Can't make enhancement for ${original::class.java}") { + withFirEntry("firElement", firElement) + } } } } @@ -353,7 +358,9 @@ class FirSignatureEnhancement( attributes = firMethod.attributes.copy() } } - else -> throw AssertionError("Unknown Java method to enhance: ${firMethod.render()}") + else -> errorWithAttachment("Unknown Java method to enhance: ${firMethod::class.java}") { + withFirEntry("firMethod", firMethod) + } }.apply { val newValueParameters = firMethod.valueParameters.zip(enhancedValueParameterTypes) { valueParameter, enhancedReturnType -> valueParameter.defaultValue?.replaceTypeRef(enhancedReturnType) diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/resolve/calls/jvm/ConeEquivalentCallConflictResolver.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/resolve/calls/jvm/ConeEquivalentCallConflictResolver.kt index f9be90c5740..1aee96a72eb 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/resolve/calls/jvm/ConeEquivalentCallConflictResolver.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/resolve/calls/jvm/ConeEquivalentCallConflictResolver.kt @@ -13,8 +13,10 @@ import org.jetbrains.kotlin.fir.resolve.calls.AbstractConeCallConflictResolver import org.jetbrains.kotlin.fir.resolve.calls.Candidate import org.jetbrains.kotlin.fir.resolve.inference.InferenceComponents import org.jetbrains.kotlin.fir.types.coneType +import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry import org.jetbrains.kotlin.resolve.calls.results.FlatSignature import org.jetbrains.kotlin.resolve.calls.results.TypeSpecificityComparator +import org.jetbrains.kotlin.utils.exceptions.errorWithAttachment // This conflict resolver filters JVM equivalent top-level functions // like emptyArray() from intrinsics and built-ins @@ -103,7 +105,9 @@ class ConeEquivalentCallConflictResolver( is FirSimpleFunction -> createFlatSignature(call, declaration) is FirConstructor -> createFlatSignature(call, declaration) is FirVariable -> createFlatSignature(call, declaration) - else -> error("Not supported: $declaration") + else -> errorWithAttachment("Not supported: ${this::class}") { + withFirEntry("declaration", declaration) + } } } }