[FIR] Optimize FirInterfaceDefaultMethodCallChecker
Reduce calls of getClassLikeSymbolByClassId
This commit is contained in:
+13
-9
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user