From c5aed2b09488046ae6608b7603ac2df5bfb068d8 Mon Sep 17 00:00:00 2001 From: Vladimir Sukharev Date: Sun, 12 Nov 2023 19:45:04 +0100 Subject: [PATCH] [K/N] Implement FirNativeObjCOutletChecker and FirNativeObjCActionChecker ^KT-61564 --- .../diagnostics/FirNativeDiagnosticsList.kt | 15 ++++ .../checkers/checkers.native/build.gradle.kts | 1 + .../diagnostics/native/FirNativeErrors.kt | 5 ++ .../native/FirNativeErrorsDefaultMessages.kt | 23 +++++- .../checkers/FirNativeObjCActionChecker.kt | 72 +++++++++++++++++++ .../checkers/FirNativeObjCOutletChecker.kt | 70 ++++++++++++++++++ .../checkers/NativeDeclarationCheckers.kt | 4 +- .../FirNonSuppressibleErrorNames.kt | 5 ++ .../backend/native/interop/FirObjCInterop.kt | 13 ++-- .../specialBackendChecks/objCInterop/t26.kt | 2 +- .../specialBackendChecks/objCInterop/t27.kt | 2 +- .../specialBackendChecks/objCInterop/t28.kt | 4 +- .../specialBackendChecks/objCInterop/t29.kt | 4 +- .../specialBackendChecks/objCInterop/t30.kt | 2 +- .../specialBackendChecks/objCInterop/t31.kt | 2 +- .../specialBackendChecks/objCInterop/t34.kt | 4 +- .../fir/TestFirNativeSessionFactory.kt | 4 +- 17 files changed, 213 insertions(+), 19 deletions(-) create mode 100644 compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCActionChecker.kt create mode 100644 compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCOutletChecker.kt diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirNativeDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirNativeDiagnosticsList.kt index 6ea06aba104..30b87c37b20 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirNativeDiagnosticsList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirNativeDiagnosticsList.kt @@ -79,5 +79,20 @@ object NATIVE_DIAGNOSTICS_LIST : DiagnosticList("FirNativeErrors") { val FORWARD_DECLARATION_AS_CLASS_LITERAL by error { parameter("type") } + val TWO_OR_LESS_PARAMETERS_ARE_SUPPORTED_HERE by error() + val PROPERTY_MUST_BE_VAR by error() { + parameter("annotationName") + } + val MUST_NOT_HAVE_EXTENSION_RECEIVER by error { + parameter("annotationKind") + } + val MUST_BE_OBJC_OBJECT_TYPE by error() { + parameter("annotationName") + parameter("unexpectedType") + } + val MUST_BE_UNIT_TYPE by error() { + parameter("annotationKind") + parameter("unexpectedType") + } } } diff --git a/compiler/fir/checkers/checkers.native/build.gradle.kts b/compiler/fir/checkers/checkers.native/build.gradle.kts index 7009cfd96f8..198911ad2ab 100644 --- a/compiler/fir/checkers/checkers.native/build.gradle.kts +++ b/compiler/fir/checkers/checkers.native/build.gradle.kts @@ -14,6 +14,7 @@ dependencies { */ implementation(project(":compiler:frontend")) implementation(project(":compiler:psi")) + implementation(project(":compiler:fir:native")) compileOnly(project(":core:compiler.common.native")) compileOnly(commonDependency("org.jetbrains.kotlin:kotlin-reflect")) { isTransitive = false } diff --git a/compiler/fir/checkers/checkers.native/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/native/FirNativeErrors.kt b/compiler/fir/checkers/checkers.native/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/native/FirNativeErrors.kt index 139d6f3c5bc..200a9292ac4 100644 --- a/compiler/fir/checkers/checkers.native/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/native/FirNativeErrors.kt +++ b/compiler/fir/checkers/checkers.native/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/native/FirNativeErrors.kt @@ -54,6 +54,11 @@ object FirNativeErrors { val UNCHECKED_CAST_TO_FORWARD_DECLARATION: KtDiagnosticFactory2 by warning2() val FORWARD_DECLARATION_AS_REIFIED_TYPE_ARGUMENT: KtDiagnosticFactory1 by error1() val FORWARD_DECLARATION_AS_CLASS_LITERAL: KtDiagnosticFactory1 by error1() + val TWO_OR_LESS_PARAMETERS_ARE_SUPPORTED_HERE: KtDiagnosticFactory0 by error0() + val PROPERTY_MUST_BE_VAR: KtDiagnosticFactory1 by error1() + val MUST_NOT_HAVE_EXTENSION_RECEIVER: KtDiagnosticFactory1 by error1() + val MUST_BE_OBJC_OBJECT_TYPE: KtDiagnosticFactory2 by error2() + val MUST_BE_UNIT_TYPE: KtDiagnosticFactory2 by error2() init { RootDiagnosticRendererFactory.registerFactory(FirNativeErrorsDefaultMessages) diff --git a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/diagnostics/native/FirNativeErrorsDefaultMessages.kt b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/diagnostics/native/FirNativeErrorsDefaultMessages.kt index 34a3e010d5a..d95e14bd3d1 100644 --- a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/diagnostics/native/FirNativeErrorsDefaultMessages.kt +++ b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/diagnostics/native/FirNativeErrorsDefaultMessages.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.analysis.diagnostics.native import org.jetbrains.kotlin.diagnostics.KtDiagnosticFactoryToRendererMap import org.jetbrains.kotlin.diagnostics.KtDiagnosticRenderers.TO_STRING import org.jetbrains.kotlin.diagnostics.rendering.BaseDiagnosticRendererFactory -import org.jetbrains.kotlin.diagnostics.rendering.Renderers import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.SYMBOL import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticRenderers.SYMBOLS @@ -34,10 +33,15 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.INVA import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.INVALID_REFINES_IN_SWIFT_TARGETS import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.MISSING_EXACT_OBJC_NAME import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.MISSING_EXCEPTION_IN_THROWS_ON_SUSPEND -import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.REDUNDANT_SWIFT_REFINEMENT +import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.MUST_BE_OBJC_OBJECT_TYPE +import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.MUST_BE_UNIT_TYPE +import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.MUST_NOT_HAVE_EXTENSION_RECEIVER import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.NON_LITERAL_OBJC_NAME_ARG +import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.PROPERTY_MUST_BE_VAR +import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.REDUNDANT_SWIFT_REFINEMENT import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.SUBTYPE_OF_HIDDEN_FROM_OBJC import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.THROWS_LIST_EMPTY +import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.TWO_OR_LESS_PARAMETERS_ARE_SUPPORTED_HERE import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.UNCHECKED_CAST_TO_FORWARD_DECLARATION object FirNativeErrorsDefaultMessages : BaseDiagnosticRendererFactory() { @@ -108,5 +112,20 @@ object FirNativeErrorsDefaultMessages : BaseDiagnosticRendererFactory() { "Cannot refer to forward declaration ''{0}'' from class literal.", FirDiagnosticRenderers.RENDER_TYPE ) + map.put(TWO_OR_LESS_PARAMETERS_ARE_SUPPORTED_HERE, "Only 0, 1 or 2 parameters are supported here") + map.put(PROPERTY_MUST_BE_VAR, "@{0} property must be var", TO_STRING) + map.put(MUST_NOT_HAVE_EXTENSION_RECEIVER, "{0} must not have extension receiver", TO_STRING) + map.put( + MUST_BE_OBJC_OBJECT_TYPE, + "Unexpected {0}: {1}\nOnly Objective-C object types are supported here", + TO_STRING, + FirDiagnosticRenderers.RENDER_TYPE + ) + map.put( + MUST_BE_UNIT_TYPE, + "Unexpected {0}: {1}\nOnly \"Unit\" is supported here", + TO_STRING, + FirDiagnosticRenderers.RENDER_TYPE + ) } } diff --git a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCActionChecker.kt b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCActionChecker.kt new file mode 100644 index 00000000000..bf989a61e20 --- /dev/null +++ b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCActionChecker.kt @@ -0,0 +1,72 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.analysis.native.checkers + +import org.jetbrains.kotlin.diagnostics.DiagnosticReporter +import org.jetbrains.kotlin.diagnostics.reportOn +import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext +import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirClassChecker +import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors +import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.MUST_BE_OBJC_OBJECT_TYPE +import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.MUST_BE_UNIT_TYPE +import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors.MUST_NOT_HAVE_EXTENSION_RECEIVER +import org.jetbrains.kotlin.fir.backend.native.interop.isKotlinObjCClass +import org.jetbrains.kotlin.fir.backend.native.interop.isObjCObjectType +import org.jetbrains.kotlin.fir.declarations.FirClass +import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction +import org.jetbrains.kotlin.fir.declarations.hasAnnotation +import org.jetbrains.kotlin.fir.declarations.utils.isExpect +import org.jetbrains.kotlin.fir.types.UnexpandedTypeCheck +import org.jetbrains.kotlin.fir.types.coneType +import org.jetbrains.kotlin.fir.types.isUnit +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.FqName + +object FirNativeObjCActionChecker : FirClassChecker() { + // Copy/pasted from InteropFqNames.objCAction, since module `kotlin-native:backend.native` cannot be imported here for now. + val objCActionFqName = FqName("kotlinx.cinterop.ObjCAction") + + @OptIn(UnexpandedTypeCheck::class) + override fun check(declaration: FirClass, context: CheckerContext, reporter: DiagnosticReporter) { + val session = context.session + + fun checkCanGenerateFunctionImp(function: FirSimpleFunction) { + if (function.valueParameters.size > 2) + reporter.reportOn(function.source, FirNativeErrors.TWO_OR_LESS_PARAMETERS_ARE_SUPPORTED_HERE, context) + } + + fun checkCanGenerateActionImp(function: FirSimpleFunction) { + val action = "@$objCActionFqName" + + function.receiverParameter?.let { + reporter.reportOn(it.source, MUST_NOT_HAVE_EXTENSION_RECEIVER, "$action method", context) + } + + function.valueParameters.forEach { + val kotlinType = it.returnTypeRef + if (!kotlinType.isObjCObjectType(session)) + reporter.reportOn(it.source, MUST_BE_OBJC_OBJECT_TYPE, "$action method parameter type", kotlinType.coneType, context) + } + + val returnType = function.returnTypeRef + if (!returnType.isUnit) + reporter.reportOn(function.source, MUST_BE_UNIT_TYPE, "$action method return type", returnType.coneType, context) + + checkCanGenerateFunctionImp(function) + } + + fun checkKotlinObjCClass(firClass: FirClass) { + for (decl in firClass.declarations) { + if (decl is FirSimpleFunction && decl.annotations.hasAnnotation(ClassId.topLevel(objCActionFqName), session)) + checkCanGenerateActionImp(decl) + } + } + + if (!declaration.isExpect && declaration.symbol.isKotlinObjCClass(context.session)) { + checkKotlinObjCClass(declaration) + } + } +} diff --git a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCOutletChecker.kt b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCOutletChecker.kt new file mode 100644 index 00000000000..9613c5a37dd --- /dev/null +++ b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/FirNativeObjCOutletChecker.kt @@ -0,0 +1,70 @@ +/* + * Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.analysis.native.checkers + +import org.jetbrains.kotlin.diagnostics.DiagnosticReporter +import org.jetbrains.kotlin.diagnostics.reportOn +import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext +import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirClassChecker +import org.jetbrains.kotlin.fir.analysis.diagnostics.native.FirNativeErrors +import org.jetbrains.kotlin.fir.backend.native.interop.isKotlinObjCClass +import org.jetbrains.kotlin.fir.backend.native.interop.isObjCObjectType +import org.jetbrains.kotlin.fir.declarations.FirClass +import org.jetbrains.kotlin.fir.declarations.FirProperty +import org.jetbrains.kotlin.fir.declarations.FirPropertyAccessor +import org.jetbrains.kotlin.fir.declarations.hasAnnotation +import org.jetbrains.kotlin.fir.declarations.utils.isExpect +import org.jetbrains.kotlin.fir.types.coneType +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.FqName + +object FirNativeObjCOutletChecker : FirClassChecker() { + // Copy/pasted from InteropFqNames.objCOutlet, since module `kotlin-native:backend.native` cannot be imported here for now. + val objCOutletFqName = FqName("kotlinx.cinterop.ObjCOutlet") + + override fun check(declaration: FirClass, context: CheckerContext, reporter: DiagnosticReporter) { + val session = context.session + + fun checkCanGenerateFunctionImp(setter: FirPropertyAccessor) { + if (setter.valueParameters.size > 2) + reporter.reportOn(setter.source, FirNativeErrors.TWO_OR_LESS_PARAMETERS_ARE_SUPPORTED_HERE, context) + } + + fun checkCanGenerateOutletSetterImp(property: FirProperty) { + if (!property.isVar) { + reporter.reportOn(property.source, FirNativeErrors.PROPERTY_MUST_BE_VAR, objCOutletFqName, context) + return + } + + property.receiverParameter?.let { + reporter.reportOn(it.source, FirNativeErrors.MUST_NOT_HAVE_EXTENSION_RECEIVER, "@$objCOutletFqName", context) + } + + val type = property.returnTypeRef + if (!type.isObjCObjectType(session)) + reporter.reportOn( + property.returnTypeRef.source, + FirNativeErrors.MUST_BE_OBJC_OBJECT_TYPE, + "@$objCOutletFqName type", + type.coneType, + context + ) + + checkCanGenerateFunctionImp(property.setter!!) + } + + fun checkKotlinObjCClass(firClass: FirClass) { + for (decl in firClass.declarations) { + if (decl is FirProperty && decl.annotations.hasAnnotation(ClassId.topLevel(objCOutletFqName), session)) + checkCanGenerateOutletSetterImp(decl) + } + } + + if (!declaration.isExpect && declaration.symbol.isKotlinObjCClass(context.session)) { + checkKotlinObjCClass(declaration) + } + } +} diff --git a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/NativeDeclarationCheckers.kt b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/NativeDeclarationCheckers.kt index dabb1caf5f8..3d66c35eee2 100644 --- a/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/NativeDeclarationCheckers.kt +++ b/compiler/fir/checkers/checkers.native/src/org/jetbrains/kotlin/fir/analysis/native/checkers/NativeDeclarationCheckers.kt @@ -25,7 +25,9 @@ object NativeDeclarationCheckers : DeclarationCheckers() { override val classCheckers: Set get() = setOf( FirNativeObjCRefinementOverridesChecker, - FirNativeObjCNameOverridesChecker + FirNativeObjCNameOverridesChecker, + FirNativeObjCOutletChecker, + FirNativeObjCActionChecker, ) override val regularClassCheckers: Set diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt index e185c4e132b..477c214b693 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt @@ -667,6 +667,11 @@ val FIR_NON_SUPPRESSIBLE_ERROR_NAMES: Set = setOf( "CANNOT_CHECK_FOR_FORWARD_DECLARATION", "FORWARD_DECLARATION_AS_REIFIED_TYPE_ARGUMENT", "FORWARD_DECLARATION_AS_CLASS_LITERAL", + "TWO_OR_LESS_PARAMETERS_ARE_SUPPORTED_HERE", + "PROPERTY_MUST_BE_VAR", + "MUST_NOT_HAVE_EXTENSION_RECEIVER", + "MUST_BE_OBJC_OBJECT_TYPE", + "MUST_BE_UNIT_TYPE", "NESTED_EXTERNAL_DECLARATION", "WRONG_EXTERNAL_DECLARATION", "NESTED_CLASS_IN_EXTERNAL_INTERFACE", diff --git a/compiler/fir/native/src/org/jetbrains/kotlin/fir/backend/native/interop/FirObjCInterop.kt b/compiler/fir/native/src/org/jetbrains/kotlin/fir/backend/native/interop/FirObjCInterop.kt index 47986a95554..e1a164a0b82 100644 --- a/compiler/fir/native/src/org/jetbrains/kotlin/fir/backend/native/interop/FirObjCInterop.kt +++ b/compiler/fir/native/src/org/jetbrains/kotlin/fir/backend/native/interop/FirObjCInterop.kt @@ -10,12 +10,9 @@ import org.jetbrains.kotlin.fir.containingClassLookupTag import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirConstExpression -import org.jetbrains.kotlin.fir.resolve.ScopeSession -import org.jetbrains.kotlin.fir.resolve.getContainingClass -import org.jetbrains.kotlin.fir.resolve.getContainingDeclaration +import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.providers.toSymbol import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor -import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenFunctions import org.jetbrains.kotlin.fir.scopes.processAllFunctions import org.jetbrains.kotlin.fir.scopes.scopeForClass @@ -24,6 +21,7 @@ import org.jetbrains.kotlin.fir.symbols.SymbolInternals import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol +import org.jetbrains.kotlin.fir.types.FirTypeRef import org.jetbrains.kotlin.fir.types.classId import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.NativeStandardInteropNames @@ -154,3 +152,10 @@ internal fun FirClassSymbol<*>.isExternalObjCClass(session: FirSession): Boolean fun FirClassSymbol<*>.parentsWithSelf(session: FirSession): Sequence { return generateSequence(fir) { it.getContainingDeclaration(session) } } + +fun FirClassSymbol<*>.isKotlinObjCClass(session: FirSession): Boolean = isObjCClass(session) && !isExternalObjCClass(session) + +fun FirTypeRef.isObjCObjectType(session: FirSession): Boolean { + val symbol = firClassLike(session)?.symbol + return symbol is FirClassSymbol && symbol.isObjCClass(session) +} diff --git a/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t26.kt b/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t26.kt index ed624bd3cd6..2c83107cd97 100644 --- a/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t26.kt +++ b/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t26.kt @@ -8,5 +8,5 @@ import platform.Foundation.* class Zzz : NSAssertionHandler() { @OptIn(kotlinx.cinterop.BetaInteropApi::class) @ObjCAction - fun String.foo() = println(this) + fun String.foo() = println(this) } diff --git a/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t27.kt b/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t27.kt index f44251df25b..2a3e1c27d98 100644 --- a/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t27.kt +++ b/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t27.kt @@ -8,5 +8,5 @@ import platform.Foundation.* class Zzz : NSAssertionHandler() { @OptIn(kotlinx.cinterop.BetaInteropApi::class) @ObjCAction - fun foo(x: String) = println(x) + fun foo(x: String) = println(x) } diff --git a/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t28.kt b/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t28.kt index abcff49ae8f..f9a76498fec 100644 --- a/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t28.kt +++ b/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t28.kt @@ -5,7 +5,7 @@ import platform.darwin.* import platform.Foundation.* class Zzz : NSAssertionHandler() { - @OptIn(kotlinx.cinterop.BetaInteropApi::class) + @OptIn(kotlinx.cinterop.BetaInteropApi::class) @ObjCAction - fun foo() = 42 + fun foo() = 42 } diff --git a/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t29.kt b/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t29.kt index 121a26658e4..73ac63f6780 100644 --- a/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t29.kt +++ b/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t29.kt @@ -6,7 +6,7 @@ import platform.Foundation.* @OptIn(kotlinx.cinterop.ExperimentalForeignApi::class) class Zzz : NSAssertionHandler() { - @OptIn(kotlinx.cinterop.BetaInteropApi::class) + @OptIn(kotlinx.cinterop.BetaInteropApi::class) @ObjCOutlet - val x: NSObject get() = this + val x: NSObject get() = this } diff --git a/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t30.kt b/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t30.kt index 49744ebe5fb..d5535250a78 100644 --- a/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t30.kt +++ b/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t30.kt @@ -7,7 +7,7 @@ import platform.Foundation.* class Zzz : NSAssertionHandler() { @OptIn(kotlinx.cinterop.BetaInteropApi::class) @ObjCOutlet - var NSObject.x: NSObject + var NSObject.x: NSObject get() = this set(value: NSObject) { } } diff --git a/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t31.kt b/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t31.kt index 09a8cb9cdf2..e957fd80db7 100644 --- a/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t31.kt +++ b/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t31.kt @@ -7,7 +7,7 @@ import platform.Foundation.* class Zzz : NSAssertionHandler() { @OptIn(kotlinx.cinterop.BetaInteropApi::class) @ObjCOutlet - var x: String + var x: String get() = "zzz" set(value: String) { } } diff --git a/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t34.kt b/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t34.kt index 0259910c63c..917903b47cd 100644 --- a/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t34.kt +++ b/compiler/testData/diagnostics/nativeTests/specialBackendChecks/objCInterop/t34.kt @@ -5,7 +5,7 @@ import platform.darwin.* import platform.Foundation.* class Zzz : NSAssertionHandler() { - @OptIn(kotlinx.cinterop.BetaInteropApi::class) + @OptIn(kotlinx.cinterop.BetaInteropApi::class) @ObjCAction - fun foo(x: NSObject, y: NSObject, z: NSObject) { } + fun foo(x: NSObject, y: NSObject, z: NSObject) { } } diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/TestFirNativeSessionFactory.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/TestFirNativeSessionFactory.kt index 9d182ffb786..c94e0f6faa7 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/TestFirNativeSessionFactory.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/TestFirNativeSessionFactory.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.test.frontend.fir import org.jetbrains.kotlin.backend.common.CommonKLibResolver +import org.jetbrains.kotlin.cli.common.messages.getLogger import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.fir.FirSession @@ -13,7 +14,6 @@ import org.jetbrains.kotlin.fir.deserialization.ModuleDataProvider import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider import org.jetbrains.kotlin.fir.session.FirNativeSessionFactory -import org.jetbrains.kotlin.ir.backend.js.resolverLogger import org.jetbrains.kotlin.test.services.configuration.NativeEnvironmentConfigurator import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.test.model.TestModule @@ -33,7 +33,7 @@ object TestFirNativeSessionFactory { ): FirSession { val resolvedLibraries = CommonKLibResolver.resolve( getAllNativeDependenciesPaths(module, testServices), - configuration.resolverLogger, + configuration.getLogger(treatWarningsAsErrors = true), knownIrProviders = listOf("kotlin.native.cinterop"), // FIXME use KonanLibraryProperResolver instead, as in production. ).getFullResolvedList()