diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/AbstractFirReflectionApiCallChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/AbstractFirReflectionApiCallChecker.kt index 6ee5f100399..9888913a5fe 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/AbstractFirReflectionApiCallChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/AbstractFirReflectionApiCallChecker.kt @@ -10,6 +10,7 @@ import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.config.AnalysisFlags import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext +import org.jetbrains.kotlin.fir.analysis.checkers.fullyExpandedClassId import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.FirStatement import org.jetbrains.kotlin.fir.expressions.calleeReference @@ -42,7 +43,7 @@ abstract class AbstractFirReflectionApiCallChecker : FirBasicExpressionChecker() val resolvedReference = expression.calleeReference?.resolved ?: return val referencedSymbol = resolvedReference.resolvedSymbol as? FirCallableSymbol ?: return - val containingClassId = (expression as? FirQualifiedAccessExpression)?.dispatchReceiver?.resolvedType?.classId + val containingClassId = (expression as? FirQualifiedAccessExpression)?.dispatchReceiver?.resolvedType?.fullyExpandedClassId(context.session) if (containingClassId == null || containingClassId.packageFqName != StandardNames.KOTLIN_REFLECT_FQ_NAME) return if (!isAllowedReflectionApi(referencedSymbol.name, containingClassId, context)) { diff --git a/compiler/testData/diagnostics/testsWithStdLib/reflection/noReflectionInClassPath.kt b/compiler/testData/diagnostics/testsWithStdLib/reflection/noReflectionInClassPath.kt index 66ba4ddaf2f..9707d2f0f7a 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/reflection/noReflectionInClassPath.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/reflection/noReflectionInClassPath.kt @@ -49,6 +49,34 @@ fun kclass(k: KClass<*>, kt: KClass) { k.toString() } +typealias TA = KClass + +fun kclassTa(k: TA<*>, kt: TA) { + k.simpleName + k.qualifiedName + k.members + k.constructors + k.nestedClasses + k.objectInstance + k.typeParameters + k.supertypes + k.visibility + k.isFinal + k.isOpen + k.isAbstract + k.isSealed + k.isData + k.isInner + k.isCompanion + + k.annotations + k.isInstance(42) + + k == kt + k.hashCode() + k.toString() +} + fun ktype(t: KType, t2: KType) { t.classifier t.arguments diff --git a/compiler/testData/diagnostics/testsWithStdLib/reflection/noReflectionInClassPath.txt b/compiler/testData/diagnostics/testsWithStdLib/reflection/noReflectionInClassPath.txt deleted file mode 100644 index 2d7e50efb0e..00000000000 --- a/compiler/testData/diagnostics/testsWithStdLib/reflection/noReflectionInClassPath.txt +++ /dev/null @@ -1,29 +0,0 @@ -package - -public fun kclass(/*0*/ k: kotlin.reflect.KClass<*>, /*1*/ kt: kotlin.reflect.KClass): kotlin.Unit -public fun ktype(/*0*/ t: kotlin.reflect.KType, /*1*/ t2: kotlin.reflect.KType): kotlin.Unit -public fun n01(): kotlin.reflect.KProperty1 -public fun n02(): kotlin.reflect.KFunction1 -public fun n03(): kotlin.reflect.KClass -public fun n04(/*0*/ p: kotlin.reflect.KProperty0): kotlin.Int -public fun n05(/*0*/ p: kotlin.reflect.KMutableProperty0): kotlin.Unit -public fun n07(/*0*/ p: kotlin.reflect.KFunction): kotlin.String -public fun n08(/*0*/ p: kotlin.reflect.KProperty1): kotlin.Int -public fun n09(/*0*/ p: kotlin.reflect.KProperty2): kotlin.Int -public fun n10(): kotlin.Unit -public fun n11(): kotlin.Unit -public fun y01(): kotlin.reflect.KProperty1.Getter -public fun y02(): kotlin.collections.Collection> -public fun y03(): kotlin.String? -public fun y04(): [Error type: Return type for function cannot be resolved] -public fun y05(): kotlin.Any - -public final class Foo { - public constructor Foo(/*0*/ prop: kotlin.Any) - public final val prop: kotlin.Any - public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean - public final fun func(): kotlin.Unit - public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int - public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String -} -