[FIR] Add forgotten resolution of annotations on get class calls

This commit is contained in:
Dmitriy Novozhilov
2022-06-23 12:19:58 +03:00
committed by teamcity
parent c16955ff3f
commit fcc5b804a8
7 changed files with 45 additions and 0 deletions
@@ -32,6 +32,12 @@ public class DiagnosisCompilerFirTestdataTestGenerated extends AbstractDiagnosis
runTest("compiler/fir/analysis-tests/testData/resolve/annotationOnDeclarationWithDifferentArguments.kt");
}
@Test
@TestMetadata("annotationOnGetClassCall.kt")
public void testAnnotationOnGetClassCall() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/annotationOnGetClassCall.kt");
}
@Test
@TestMetadata("annotationUsedAsAnnotationArgument.kt")
public void testAnnotationUsedAsAnnotationArgument() throws Exception {
@@ -34,6 +34,11 @@ public class LazyBodyIsNotTouchedTilContractsPhaseTestGenerated extends Abstract
runTest("compiler/fir/analysis-tests/testData/resolve/annotationOnDeclarationWithDifferentArguments.kt");
}
@TestMetadata("annotationOnGetClassCall.kt")
public void testAnnotationOnGetClassCall() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/annotationOnGetClassCall.kt");
}
@TestMetadata("annotationUsedAsAnnotationArgument.kt")
public void testAnnotationUsedAsAnnotationArgument() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/annotationUsedAsAnnotationArgument.kt");
@@ -0,0 +1,16 @@
FILE: annotationOnGetClassCall.kt
public final annotation class Ann : R|kotlin/Annotation| {
public constructor(x: R|kotlin/Long|, s: R|kotlin/String|): R|Ann| {
super<R|kotlin/Any|>()
}
public final val x: R|kotlin/Long| = R|<local>/x|
public get(): R|kotlin/Long|
public final val s: R|kotlin/String| = R|<local>/s|
public get(): R|kotlin/String|
}
public final fun test(): R|kotlin/Unit| {
@R|Ann|(s = String(hello), x = Long(1)) <getClass>(Q|kotlin/String|)
}
@@ -0,0 +1,5 @@
annotation class Ann(val x: Long, val s: String)
fun test() {
<!WRONG_ANNOTATION_TARGET!>@Ann(s = "hello", x = 1)<!> String::class
}
@@ -32,6 +32,12 @@ public class FirDiagnosticTestGenerated extends AbstractFirDiagnosticTest {
runTest("compiler/fir/analysis-tests/testData/resolve/annotationOnDeclarationWithDifferentArguments.kt");
}
@Test
@TestMetadata("annotationOnGetClassCall.kt")
public void testAnnotationOnGetClassCall() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/annotationOnGetClassCall.kt");
}
@Test
@TestMetadata("annotationUsedAsAnnotationArgument.kt")
public void testAnnotationUsedAsAnnotationArgument() throws Exception {
@@ -32,6 +32,12 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos
runTest("compiler/fir/analysis-tests/testData/resolve/annotationOnDeclarationWithDifferentArguments.kt");
}
@Test
@TestMetadata("annotationOnGetClassCall.kt")
public void testAnnotationOnGetClassCall() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/annotationOnGetClassCall.kt");
}
@Test
@TestMetadata("annotationUsedAsAnnotationArgument.kt")
public void testAnnotationUsedAsAnnotationArgument() throws Exception {
@@ -895,6 +895,7 @@ open class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransform
}
override fun transformGetClassCall(getClassCall: FirGetClassCall, data: ResolutionMode): FirStatement {
getClassCall.transformAnnotations(transformer, ResolutionMode.ContextIndependent)
val arg = getClassCall.argument
val dataForLhs = if (arg is FirConstExpression<*>) {
withExpectedType(arg.typeRef.resolvedTypeFromPrototype(arg.kind.expectedConeType(session)))