[FIR] Properly create class scopes while resolving of annotations arguments

This commit is contained in:
Dmitriy Novozhilov
2021-08-04 16:02:22 +03:00
committed by teamcityserver
parent 4c58954967
commit 60195114c1
7 changed files with 67 additions and 5 deletions
@@ -621,6 +621,11 @@ public class LazyBodyIsNotTouchedTilContractsPhaseTestGenerated extends Abstract
runTest("compiler/fir/analysis-tests/testData/resolve/arguments/namedArrayInAnnotation.kt");
}
@TestMetadata("nestedClassInAnnotationArgument.kt")
public void testNestedClassInAnnotationArgument() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/arguments/nestedClassInAnnotationArgument.kt");
}
@TestMetadata("noParameterForName.kt")
public void testNoParameterForName() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/arguments/noParameterForName.kt");
@@ -0,0 +1,26 @@
FILE: nestedClassInAnnotationArgument.kt
public final annotation class Ann : R|kotlin/Annotation| {
public constructor(kClass: R|kotlin/reflect/KClass<*>|): R|Ann| {
super<R|kotlin/Any|>()
}
public final val kClass: R|kotlin/reflect/KClass<*>| = R|<local>/kClass|
public get(): R|kotlin/reflect/KClass<*>|
}
public final class A : R|kotlin/Any| {
public constructor(): R|A| {
super<R|kotlin/Any|>()
}
@R|Ann|(<getClass>(Q|A.EmptyList|)) public final fun foo(): R|kotlin/Unit| {
}
public final object EmptyList : R|kotlin/Any| {
private constructor(): R|A.EmptyList| {
super<R|kotlin/Any|>()
}
}
}
@@ -0,0 +1,11 @@
// WITH_STDLIB
import kotlin.reflect.KClass
annotation class Ann(val kClass: KClass<*>)
class A {
@Ann(EmptyList::class)
fun foo() {}
object EmptyList
}
@@ -731,6 +731,12 @@ public class FirDiagnosticTestGenerated extends AbstractFirDiagnosticTest {
runTest("compiler/fir/analysis-tests/testData/resolve/arguments/namedArrayInAnnotation.kt");
}
@Test
@TestMetadata("nestedClassInAnnotationArgument.kt")
public void testNestedClassInAnnotationArgument() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/arguments/nestedClassInAnnotationArgument.kt");
}
@Test
@TestMetadata("noParameterForName.kt")
public void testNoParameterForName() throws Exception {
@@ -731,6 +731,12 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos
runTest("compiler/fir/analysis-tests/testData/resolve/arguments/namedArrayInAnnotation.kt");
}
@Test
@TestMetadata("nestedClassInAnnotationArgument.kt")
public void testNestedClassInAnnotationArgument() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/arguments/nestedClassInAnnotationArgument.kt");
}
@Test
@TestMetadata("noParameterForName.kt")
public void testNoParameterForName() throws Exception {
@@ -38,11 +38,13 @@ private class FirDeclarationsResolveTransformerForArgumentAnnotations(
override fun transformRegularClass(regularClass: FirRegularClass, data: ResolutionMode): FirStatement {
regularClass.transformAnnotations(this, data)
context.withContainingClass(regularClass) {
regularClass
.transformTypeParameters(transformer, data)
.transformSuperTypeRefs(transformer, data)
.transformDeclarations(transformer, data)
.transformCompanionObject(transformer, data)
context.withRegularClass(regularClass, components) {
regularClass
.transformTypeParameters(transformer, data)
.transformSuperTypeRefs(transformer, data)
.transformDeclarations(transformer, data)
.transformCompanionObject(transformer, data)
}
}
return regularClass
}
@@ -731,6 +731,12 @@ public class DiagnosisCompilerFirTestdataTestGenerated extends AbstractDiagnosis
runTest("compiler/fir/analysis-tests/testData/resolve/arguments/namedArrayInAnnotation.kt");
}
@Test
@TestMetadata("nestedClassInAnnotationArgument.kt")
public void testNestedClassInAnnotationArgument() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolve/arguments/nestedClassInAnnotationArgument.kt");
}
@Test
@TestMetadata("noParameterForName.kt")
public void testNoParameterForName() throws Exception {