From 42b590d07cabed8616d9ff3487d6fa9b0d66eec5 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 7 Dec 2020 11:30:54 +0300 Subject: [PATCH] Optimize/simplify FirSealedClassConstructorCallChecker --- .../FirSealedClassConstructorCallChecker.kt | 22 ++++--------------- 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirSealedClassConstructorCallChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirSealedClassConstructorCallChecker.kt index d6610c355e0..1a014103fec 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirSealedClassConstructorCallChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirSealedClassConstructorCallChecker.kt @@ -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.declarations.FirConstructor 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.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.FirResolvedTypeRef -import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.utils.addToStdlib.safeAs object FirSealedClassConstructorCallChecker : FirQualifiedAccessChecker() { @@ -29,13 +27,10 @@ object FirSealedClassConstructorCallChecker : FirQualifiedAccessChecker() { ?.fir.safeAs() ?: return - val typeClassId = constructorFir.returnTypeRef.safeAs() + val typeFir = constructorFir.returnTypeRef.safeAs() ?.type.safeAs() - ?.lookupTag - ?.classId - ?: return - - val typeFir = typeClassId.toRegularClass(context) + ?.lookupTag?.toSymbol(context.session) + ?.fir as? FirRegularClass ?: return 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()?.classId == this } - .safeAs() - } - private fun DiagnosticReporter.report(source: FirSourceElement?) { source?.let { report(FirErrors.SEALED_CLASS_CONSTRUCTOR_CALL.on(it)) } }