Optimize/simplify FirSealedClassConstructorCallChecker
This commit is contained in:
+4
-18
@@ -13,13 +13,11 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter
|
|||||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
import org.jetbrains.kotlin.fir.declarations.FirConstructor
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.classId
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||||
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||||
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
object FirSealedClassConstructorCallChecker : FirQualifiedAccessChecker() {
|
object FirSealedClassConstructorCallChecker : FirQualifiedAccessChecker() {
|
||||||
@@ -29,13 +27,10 @@ object FirSealedClassConstructorCallChecker : FirQualifiedAccessChecker() {
|
|||||||
?.fir.safeAs<FirConstructor>()
|
?.fir.safeAs<FirConstructor>()
|
||||||
?: return
|
?: return
|
||||||
|
|
||||||
val typeClassId = constructorFir.returnTypeRef.safeAs<FirResolvedTypeRef>()
|
val typeFir = constructorFir.returnTypeRef.safeAs<FirResolvedTypeRef>()
|
||||||
?.type.safeAs<ConeClassLikeType>()
|
?.type.safeAs<ConeClassLikeType>()
|
||||||
?.lookupTag
|
?.lookupTag?.toSymbol(context.session)
|
||||||
?.classId
|
?.fir as? FirRegularClass
|
||||||
?: return
|
|
||||||
|
|
||||||
val typeFir = typeClassId.toRegularClass(context)
|
|
||||||
?: return
|
?: return
|
||||||
|
|
||||||
if (typeFir.status.modality == Modality.SEALED) {
|
if (typeFir.status.modality == Modality.SEALED) {
|
||||||
@@ -43,15 +38,6 @@ object FirSealedClassConstructorCallChecker : FirQualifiedAccessChecker() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ClassId.toRegularClass(context: CheckerContext): FirRegularClass? = if (!isLocal) {
|
|
||||||
context.session.firSymbolProvider.getClassLikeSymbolByFqName(this)
|
|
||||||
?.fir.safeAs()
|
|
||||||
} else {
|
|
||||||
context.containingDeclarations
|
|
||||||
.lastOrNull { it.safeAs<FirRegularClass>()?.classId == this }
|
|
||||||
.safeAs()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun DiagnosticReporter.report(source: FirSourceElement?) {
|
private fun DiagnosticReporter.report(source: FirSourceElement?) {
|
||||||
source?.let { report(FirErrors.SEALED_CLASS_CONSTRUCTOR_CALL.on(it)) }
|
source?.let { report(FirErrors.SEALED_CLASS_CONSTRUCTOR_CALL.on(it)) }
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user