[FIR] remove user code leaks from compiler.fir.java module, add more information to some errors

This commit is contained in:
Ilya Kirillov
2023-07-04 17:20:32 +02:00
committed by Space Team
parent e6c8bf6644
commit 743662ec7f
4 changed files with 24 additions and 5 deletions
@@ -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()
}
}
@@ -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<out ConeTypeProjection>,
@@ -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() }
}
}
}
@@ -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)
@@ -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)
}
}
}
}