[FIR] Optimize FirInterfaceDefaultMethodCallChecker

Reduce calls of getClassLikeSymbolByClassId
This commit is contained in:
Ivan Kochurkin
2021-10-26 16:32:16 +03:00
committed by teamcity
parent bb390dca16
commit 6fd4c67bbb
@@ -27,19 +27,21 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs
object FirInterfaceDefaultMethodCallChecker : FirQualifiedAccessExpressionChecker() { object FirInterfaceDefaultMethodCallChecker : FirQualifiedAccessExpressionChecker() {
override fun check(expression: FirQualifiedAccessExpression, context: CheckerContext, reporter: DiagnosticReporter) { override fun check(expression: FirQualifiedAccessExpression, context: CheckerContext, reporter: DiagnosticReporter) {
val supportsDefaults = !context.isJvm6()
val symbol = expression.calleeReference.toResolvedCallableSymbol() val symbol = expression.calleeReference.toResolvedCallableSymbol()
val classId = symbol?.callableId?.classId ?: return val classId = symbol?.callableId?.classId ?: return
if (classId.isLocal) return if (classId.isLocal) return
val typeSymbol = context.session.symbolProvider.getClassLikeSymbolByClassId(classId) as? FirRegularClassSymbol ?: return
if (!supportsDefaults && fun getTypeSymbol(): FirRegularClassSymbol? {
symbol.isStatic && return context.session.symbolProvider.getClassLikeSymbolByClassId(classId) as? FirRegularClassSymbol
typeSymbol.isInterface && }
typeSymbol.origin == FirDeclarationOrigin.Java
) { val supportsDefaults = !context.isJvm6()
reporter.reportOn(expression.source, FirJvmErrors.INTERFACE_STATIC_METHOD_CALL_FROM_JAVA6_TARGET, context) var typeSymbol: FirRegularClassSymbol? = null
if (!supportsDefaults && symbol.isStatic) {
typeSymbol = getTypeSymbol() ?: return
if (typeSymbol.isInterface && typeSymbol.origin == FirDeclarationOrigin.Java) {
reporter.reportOn(expression.source, FirJvmErrors.INTERFACE_STATIC_METHOD_CALL_FROM_JAVA6_TARGET, context)
}
} }
if (expression.explicitReceiver.safeAs<FirQualifiedAccessExpression>() if (expression.explicitReceiver.safeAs<FirQualifiedAccessExpression>()
@@ -50,6 +52,8 @@ object FirInterfaceDefaultMethodCallChecker : FirQualifiedAccessExpressionChecke
val containingDeclaration = context.findClosest<FirRegularClass>() ?: return val containingDeclaration = context.findClosest<FirRegularClass>() ?: return
if (typeSymbol == null) typeSymbol = getTypeSymbol() ?: return
val jvmDefaultMode = context.session.jvmDefaultModeState val jvmDefaultMode = context.session.jvmDefaultModeState
if (typeSymbol.isInterface && (typeSymbol.origin == FirDeclarationOrigin.Java || symbol.isCompiledToJvmDefault(jvmDefaultMode))) { if (typeSymbol.isInterface && (typeSymbol.origin == FirDeclarationOrigin.Java || symbol.isCompiledToJvmDefault(jvmDefaultMode))) {
if (containingDeclaration.isInterface) { if (containingDeclaration.isInterface) {