diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractCallableMember.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractCallableMember.kt index bf2d717d07c..27db4eb4060 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractCallableMember.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractCallableMember.kt @@ -31,10 +31,9 @@ abstract class FirAbstractCallableMember( ) : FirAbstractMemberDeclaration(session, psi, name, visibility, modality, platformStatus), FirCallableMember { override fun transformChildren(transformer: FirTransformer, data: D): FirElement { - annotations.transformInplace(transformer, data) receiverType = receiverType?.transformSingle(transformer, data) returnType = returnType.transformSingle(transformer, data) - return this + return super.transformChildren(transformer, data) } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractMemberDeclaration.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractMemberDeclaration.kt index 0044441c1d9..82126dd9d56 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractMemberDeclaration.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirAbstractMemberDeclaration.kt @@ -8,10 +8,14 @@ package org.jetbrains.kotlin.fir.declarations.impl import com.intellij.psi.PsiElement import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration import org.jetbrains.kotlin.fir.declarations.FirMemberPlatformStatus import org.jetbrains.kotlin.fir.declarations.FirTypeParameter +import org.jetbrains.kotlin.fir.transformInplace +import org.jetbrains.kotlin.fir.transformSingle +import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.name.Name abstract class FirAbstractMemberDeclaration( @@ -23,4 +27,11 @@ abstract class FirAbstractMemberDeclaration( override val platformStatus: FirMemberPlatformStatus ) : FirAbstractNamedAnnotatedDeclaration(session, psi, name), FirMemberDeclaration { final override val typeParameters = mutableListOf() + + override fun transformChildren(transformer: FirTransformer, data: D): FirElement { + annotations.transformInplace(transformer, data) + typeParameters.transformInplace(transformer, data) + + return this + } } \ No newline at end of file diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirClassImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirClassImpl.kt index 6ca0ebb9bc9..8fc9a16b848 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirClassImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirClassImpl.kt @@ -47,11 +47,9 @@ open class FirClassImpl( override fun transformChildren(transformer: FirTransformer, data: D): FirClass { - annotations.transformInplace(transformer, data) - typeParameters.transformInplace(transformer, data) superTypes.transformInplace(transformer, data) declarations.transformInplace(transformer, data) - return this + return super.transformChildren(transformer, data) as FirClass } } \ No newline at end of file diff --git a/compiler/testData/fir/resolve/derivedClass.kt b/compiler/testData/fir/resolve/derivedClass.kt new file mode 100644 index 00000000000..90379bd28e7 --- /dev/null +++ b/compiler/testData/fir/resolve/derivedClass.kt @@ -0,0 +1,5 @@ +open class Base(val x: T) + +class Derived(x: T) : Base(x) + +fun create(x: T): Derived = Derived(x) \ No newline at end of file diff --git a/compiler/testData/fir/resolve/derivedClass.txt b/compiler/testData/fir/resolve/derivedClass.txt new file mode 100644 index 00000000000..98915a346f1 --- /dev/null +++ b/compiler/testData/fir/resolve/derivedClass.txt @@ -0,0 +1,12 @@ +FILE: derivedClass.kt + public? open class Base { + public? constructor(x: R|T|) + + } + public? final class Derived : R|Base| { + public? constructor(x: R|T|): super(STUB) + + } + public? final? function create(x: R|T|): R|Derived| { + STUB + } diff --git a/compiler/testData/fir/resolve/genericFunctions.txt b/compiler/testData/fir/resolve/genericFunctions.txt index 5f491d55778..d3ef088da65 100644 --- a/compiler/testData/fir/resolve/genericFunctions.txt +++ b/compiler/testData/fir/resolve/genericFunctions.txt @@ -1,7 +1,7 @@ FILE: genericFunctions.kt public? abstract interface Any { } - public? final? inline function safeAs R|Any|.(): R|T| { + public? final? inline function safeAs R|Any|.(): R|T| { STUB } public? abstract class Summator { diff --git a/compiler/testData/fir/resolve/nestedClass.kt b/compiler/testData/fir/resolve/nestedClass.kt new file mode 100644 index 00000000000..a85711506cb --- /dev/null +++ b/compiler/testData/fir/resolve/nestedClass.kt @@ -0,0 +1,7 @@ +abstract class Base(val s: String) + +class Outer { + class Derived(s: String) : Base(s) + + object Obj : Base("") +} diff --git a/compiler/testData/fir/resolve/nestedClass.txt b/compiler/testData/fir/resolve/nestedClass.txt new file mode 100644 index 00000000000..55a30f3941f --- /dev/null +++ b/compiler/testData/fir/resolve/nestedClass.txt @@ -0,0 +1,15 @@ +FILE: nestedClass.kt + public? abstract class Base { + public? constructor(s: R|kotlin/String|) + + } + public? final class Outer { + public? final class Derived : R|Base| { + public? constructor(s: R|kotlin/String|): super(STUB) + + } + + public? final object Obj : R|Base| { + } + + } diff --git a/compiler/tests/org/jetbrains/kotlin/fir/FirResolveTestCaseGenerated.java b/compiler/tests/org/jetbrains/kotlin/fir/FirResolveTestCaseGenerated.java index bfc7f7a299c..b13b9518296 100644 --- a/compiler/tests/org/jetbrains/kotlin/fir/FirResolveTestCaseGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/fir/FirResolveTestCaseGenerated.java @@ -29,6 +29,12 @@ public class FirResolveTestCaseGenerated extends AbstractFirResolveTestCase { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/fir/resolve"), Pattern.compile("^([^.]+)\\.kt$"), TargetBackend.ANY, true); } + @TestMetadata("derivedClass.kt") + public void testDerivedClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/resolve/derivedClass.kt"); + doTest(fileName); + } + @TestMetadata("enum.kt") public void testEnum() throws Exception { runTest("compiler/testData/fir/resolve/enum.kt"); @@ -54,6 +60,12 @@ public class FirResolveTestCaseGenerated extends AbstractFirResolveTestCase { runTest("compiler/testData/fir/resolve/genericFunctions.kt"); } + @TestMetadata("nestedClass.kt") + public void testNestedClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/fir/resolve/nestedClass.kt"); + doTest(fileName); + } + @TestMetadata("NestedOfAliasedType.kt") public void testNestedOfAliasedType() throws Exception { runTest("compiler/testData/fir/resolve/NestedOfAliasedType.kt");