[LL FIR] pull up custom logic for synthetic properties and accessors

We should process them independently as they can be not related to each
other

^KT-65563 Fixed
This commit is contained in:
Dmitrii Gridin
2024-02-06 17:33:53 +01:00
committed by Space Team
parent 403e9a3df8
commit c52b9032ce
8 changed files with 437 additions and 3 deletions
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.LLFirWholeEle
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.asResolveTarget
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.throwUnexpectedFirElementError
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.tryCollectDesignationWithFile
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.errorWithFirSpecificEntries
import org.jetbrains.kotlin.fir.FirElementWithResolveState
import org.jetbrains.kotlin.fir.FirFileAnnotationsContainer
import org.jetbrains.kotlin.fir.declarations.*
@@ -23,8 +24,7 @@ import org.jetbrains.kotlin.fir.isCopyCreatedInScope
internal object LLFirResolveMultiDesignationCollector {
fun getDesignationsToResolve(target: FirElementWithResolveState): List<LLFirResolveTarget> = when (target) {
is FirFile -> listOf(FirDesignation(target).asResolveTarget())
is FirSyntheticPropertyAccessor -> getDesignationsToResolve(target.delegate)
is FirSyntheticProperty -> getDesignationsToResolve(target.getter) + target.setter?.let(::getDesignationsToResolve).orEmpty()
is FirSyntheticPropertyAccessor, is FirSyntheticProperty -> errorWithFirSpecificEntries("Unsupported element", fir = target)
else -> listOfNotNull(getMainDesignationToResolve(target))
}
@@ -0,0 +1,27 @@
// SKIP_WHEN_OUT_OF_CONTENT_ROOT
// MODULE: lib
// MODULE_KIND: LibraryBinary
// FILE: BaseKotlin.kt
open class BaseKotlin : BaseJava() {
override fun getSomething(): String = "42"
}
// FILE: BaseJava.java
public class BaseJava {
public String getSomething() {
return "";
}
public void setSomething(String s) {
}
}
// MODULE: main(lib)
// MEMBER_NAME_FILTER: something
// FILE: main.kt
class Deri<caret>ved : BaseKotlin() {
override fun setSomething(s: String) {
}
}
@@ -0,0 +1,169 @@
STATUS:
TARGET: public open [<synthetic> STATUS] var something: R|kotlin/String|
public [<synthetic> ResolvedTo(BODY_RESOLVE)] get(): R|kotlin/String|
public [<synthetic> ResolvedTo(STATUS)] set([ResolvedTo(STATUS)] s: R|kotlin/String|): R|kotlin/Unit| { LAZY_BLOCK }
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun getSomething(): kotlin.String { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
LAZY_super<R|BaseKotlin|>
}
public open override [ResolvedTo(STATUS)] fun setSomething([ResolvedTo(STATUS)] s: R|kotlin/String|): R|kotlin/Unit| { LAZY_BLOCK }
}
EXPECT_ACTUAL_MATCHING:
TARGET: public open [<synthetic> EXPECT_ACTUAL_MATCHING] var something: R|kotlin/String|
public [<synthetic> ResolvedTo(BODY_RESOLVE)] get(): R|kotlin/String|
public [<synthetic> ResolvedTo(EXPECT_ACTUAL_MATCHING)] set([ResolvedTo(EXPECT_ACTUAL_MATCHING)] s: R|kotlin/String|): R|kotlin/Unit| { LAZY_BLOCK }
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun getSomething(): kotlin.String { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
LAZY_super<R|BaseKotlin|>
}
public open override [ResolvedTo(EXPECT_ACTUAL_MATCHING)] fun setSomething([ResolvedTo(EXPECT_ACTUAL_MATCHING)] s: R|kotlin/String|): R|kotlin/Unit| { LAZY_BLOCK }
}
CONTRACTS:
TARGET: public open [<synthetic> CONTRACTS] var something: R|kotlin/String|
public [<synthetic> ResolvedTo(BODY_RESOLVE)] get(): R|kotlin/String|
public [<synthetic> ResolvedTo(CONTRACTS)] set([ResolvedTo(CONTRACTS)] s: R|kotlin/String|): R|kotlin/Unit| {
}
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun getSomething(): kotlin.String { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
LAZY_super<R|BaseKotlin|>
}
public open override [ResolvedTo(CONTRACTS)] fun setSomething([ResolvedTo(CONTRACTS)] s: R|kotlin/String|): R|kotlin/Unit| {
}
}
IMPLICIT_TYPES_BODY_RESOLVE:
TARGET: public open [<synthetic> IMPLICIT_TYPES_BODY_RESOLVE] var something: R|kotlin/String|
public [<synthetic> ResolvedTo(BODY_RESOLVE)] get(): R|kotlin/String|
public [<synthetic> ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] set([ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] s: R|kotlin/String|): R|kotlin/Unit| {
}
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun getSomething(): kotlin.String { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
LAZY_super<R|BaseKotlin|>
}
public open override [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] fun setSomething([ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] s: R|kotlin/String|): R|kotlin/Unit| {
}
}
ANNOTATION_ARGUMENTS:
TARGET: public open [<synthetic> ANNOTATION_ARGUMENTS] var something: R|kotlin/String|
public [<synthetic> ResolvedTo(BODY_RESOLVE)] get(): R|kotlin/String|
public [<synthetic> ResolvedTo(ANNOTATION_ARGUMENTS)] set([ResolvedTo(ANNOTATION_ARGUMENTS)] s: R|kotlin/String|): R|kotlin/Unit| {
}
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun getSomething(): kotlin.String { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
LAZY_super<R|BaseKotlin|>
}
public open override [ResolvedTo(ANNOTATION_ARGUMENTS)] fun setSomething([ResolvedTo(ANNOTATION_ARGUMENTS)] s: R|kotlin/String|): R|kotlin/Unit| {
}
}
BODY_RESOLVE:
TARGET: public open [<synthetic> BODY_RESOLVE] var something: R|kotlin/String|
public [<synthetic> ResolvedTo(BODY_RESOLVE)] get(): R|kotlin/String|
public [<synthetic> ResolvedTo(BODY_RESOLVE)] set([ResolvedTo(BODY_RESOLVE)] s: R|kotlin/String|): R|kotlin/Unit| {
}
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun getSomething(): kotlin.String { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
LAZY_super<R|BaseKotlin|>
}
public open override [ResolvedTo(BODY_RESOLVE)] fun setSomething([ResolvedTo(BODY_RESOLVE)] s: R|kotlin/String|): R|kotlin/Unit| {
}
}
FILE RAW TO BODY:
FILE: [ResolvedTo(BODY_RESOLVE)] main.kt
public final [ResolvedTo(BODY_RESOLVE)] class Derived : R|BaseKotlin| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=Derived] constructor(): R|Derived| {
super<R|BaseKotlin|>()
}
public open override [ResolvedTo(BODY_RESOLVE)] fun setSomething([ResolvedTo(BODY_RESOLVE)] s: R|kotlin/String|): R|kotlin/Unit| {
}
}
@@ -0,0 +1,27 @@
// SKIP_WHEN_OUT_OF_CONTENT_ROOT
// MODULE: lib
// MODULE_KIND: LibraryBinary
// FILE: BaseKotlin.kt
open class BaseKotlin : BaseJava() {
override fun setSomething(s: String) {
}
}
// FILE: BaseJava.java
public class BaseJava {
public String getSomething() {
return "";
}
public void setSomething(String s) {
}
}
// MODULE: main(lib)
// MEMBER_NAME_FILTER: something
// FILE: main.kt
class Deri<caret>ved : BaseKotlin() {
override fun getSomething(): String = "42"
}
@@ -0,0 +1,178 @@
STATUS:
TARGET: public open override [<synthetic> STATUS] var something: R|kotlin/String|
public [<synthetic> ResolvedTo(STATUS)] get(): R|kotlin/String| { LAZY_BLOCK }
public [<synthetic> ResolvedTo(BODY_RESOLVE)] set([ResolvedTo(BODY_RESOLVE)] s: R|kotlin/String|): R|kotlin/Unit|
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun setSomething([ResolvedTo(RAW_FIR)] s: kotlin.String): kotlin.Unit { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
LAZY_super<R|BaseKotlin|>
}
public open override [ResolvedTo(STATUS)] fun getSomething(): R|kotlin/String| { LAZY_BLOCK }
}
EXPECT_ACTUAL_MATCHING:
TARGET: public open override [<synthetic> EXPECT_ACTUAL_MATCHING] var something: R|kotlin/String|
public [<synthetic> ResolvedTo(EXPECT_ACTUAL_MATCHING)] get(): R|kotlin/String| { LAZY_BLOCK }
public [<synthetic> ResolvedTo(BODY_RESOLVE)] set([ResolvedTo(BODY_RESOLVE)] s: R|kotlin/String|): R|kotlin/Unit|
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun setSomething([ResolvedTo(RAW_FIR)] s: kotlin.String): kotlin.Unit { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
LAZY_super<R|BaseKotlin|>
}
public open override [ResolvedTo(EXPECT_ACTUAL_MATCHING)] fun getSomething(): R|kotlin/String| { LAZY_BLOCK }
}
CONTRACTS:
TARGET: public open override [<synthetic> CONTRACTS] var something: R|kotlin/String|
public [<synthetic> ResolvedTo(CONTRACTS)] get(): R|kotlin/String| {
^getSomething String(42)
}
public [<synthetic> ResolvedTo(BODY_RESOLVE)] set([ResolvedTo(BODY_RESOLVE)] s: R|kotlin/String|): R|kotlin/Unit|
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun setSomething([ResolvedTo(RAW_FIR)] s: kotlin.String): kotlin.Unit { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
LAZY_super<R|BaseKotlin|>
}
public open override [ResolvedTo(CONTRACTS)] fun getSomething(): R|kotlin/String| {
^getSomething String(42)
}
}
IMPLICIT_TYPES_BODY_RESOLVE:
TARGET: public open override [<synthetic> IMPLICIT_TYPES_BODY_RESOLVE] var something: R|kotlin/String|
public [<synthetic> ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] get(): R|kotlin/String| {
^getSomething String(42)
}
public [<synthetic> ResolvedTo(BODY_RESOLVE)] set([ResolvedTo(BODY_RESOLVE)] s: R|kotlin/String|): R|kotlin/Unit|
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun setSomething([ResolvedTo(RAW_FIR)] s: kotlin.String): kotlin.Unit { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
LAZY_super<R|BaseKotlin|>
}
public open override [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] fun getSomething(): R|kotlin/String| {
^getSomething String(42)
}
}
ANNOTATION_ARGUMENTS:
TARGET: public open override [<synthetic> ANNOTATION_ARGUMENTS] var something: R|kotlin/String|
public [<synthetic> ResolvedTo(ANNOTATION_ARGUMENTS)] get(): R|kotlin/String| {
^getSomething String(42)
}
public [<synthetic> ResolvedTo(BODY_RESOLVE)] set([ResolvedTo(BODY_RESOLVE)] s: R|kotlin/String|): R|kotlin/Unit|
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun setSomething([ResolvedTo(RAW_FIR)] s: kotlin.String): kotlin.Unit { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
LAZY_super<R|BaseKotlin|>
}
public open override [ResolvedTo(ANNOTATION_ARGUMENTS)] fun getSomething(): R|kotlin/String| {
^getSomething String(42)
}
}
BODY_RESOLVE:
TARGET: public open override [<synthetic> BODY_RESOLVE] var something: R|kotlin/String|
public [<synthetic> ResolvedTo(BODY_RESOLVE)] get(): R|kotlin/String| {
^getSomething String(42)
}
public [<synthetic> ResolvedTo(BODY_RESOLVE)] set([ResolvedTo(BODY_RESOLVE)] s: R|kotlin/String|): R|kotlin/Unit|
FILE: [ResolvedTo(RAW_FIR)] BaseKotlin.class
public open [ResolvedTo(RAW_FIR)] class BaseKotlin : BaseJava {
public [ResolvedTo(RAW_FIR)] [ContainingClassKey=BaseKotlin] constructor(): R|BaseKotlin| {
LAZY_super<<implicit>>
}
public open [ResolvedTo(RAW_FIR)] fun setSomething([ResolvedTo(RAW_FIR)] s: kotlin.String): kotlin.Unit { LAZY_BLOCK }
}
FILE: [ResolvedTo(IMPORTS)] main.kt
public final [ResolvedTo(STATUS)] class Derived : R|BaseKotlin| {
public [ResolvedTo(STATUS)] [ContainingClassKey=Derived] constructor(): R|Derived| {
LAZY_super<R|BaseKotlin|>
}
public open override [ResolvedTo(BODY_RESOLVE)] fun getSomething(): R|kotlin/String| {
^getSomething String(42)
}
}
FILE RAW TO BODY:
FILE: [ResolvedTo(BODY_RESOLVE)] main.kt
public final [ResolvedTo(BODY_RESOLVE)] class Derived : R|BaseKotlin| {
public [ResolvedTo(BODY_RESOLVE)] [ContainingClassKey=Derived] constructor(): R|Derived| {
super<R|BaseKotlin|>()
}
public open override [ResolvedTo(BODY_RESOLVE)] fun getSomething(): R|kotlin/String| {
^getSomething String(42)
}
}
@@ -1203,6 +1203,12 @@ public class FirOutOfContentRootLazyDeclarationResolveTestGenerated extends Abst
runTest("analysis/low-level-api-fir/testData/lazyResolve/syntheticProperties/explicitReturnTypeAndAnnotations.kt");
}
@Test
@TestMetadata("getterFromLibraryAndSetterFromSources.kt")
public void testGetterFromLibraryAndSetterFromSources() throws Exception {
runTest("analysis/low-level-api-fir/testData/lazyResolve/syntheticProperties/getterFromLibraryAndSetterFromSources.kt");
}
@Test
@TestMetadata("implicitReturnType.kt")
public void testImplicitReturnType() throws Exception {
@@ -1250,6 +1256,12 @@ public class FirOutOfContentRootLazyDeclarationResolveTestGenerated extends Abst
public void testSetterAndExplicitReturnTypeAndAnnotationsAsSetter() throws Exception {
runTest("analysis/low-level-api-fir/testData/lazyResolve/syntheticProperties/setterAndExplicitReturnTypeAndAnnotationsAsSetter.kt");
}
@Test
@TestMetadata("setterFromLibraryAndGetterFromSources.kt")
public void testSetterFromLibraryAndGetterFromSources() throws Exception {
runTest("analysis/low-level-api-fir/testData/lazyResolve/syntheticProperties/setterFromLibraryAndGetterFromSources.kt");
}
}
@Nested
@@ -1203,6 +1203,12 @@ public class FirSourceLazyDeclarationResolveTestGenerated extends AbstractFirSou
runTest("analysis/low-level-api-fir/testData/lazyResolve/syntheticProperties/explicitReturnTypeAndAnnotations.kt");
}
@Test
@TestMetadata("getterFromLibraryAndSetterFromSources.kt")
public void testGetterFromLibraryAndSetterFromSources() throws Exception {
runTest("analysis/low-level-api-fir/testData/lazyResolve/syntheticProperties/getterFromLibraryAndSetterFromSources.kt");
}
@Test
@TestMetadata("implicitReturnType.kt")
public void testImplicitReturnType() throws Exception {
@@ -1250,6 +1256,12 @@ public class FirSourceLazyDeclarationResolveTestGenerated extends AbstractFirSou
public void testSetterAndExplicitReturnTypeAndAnnotationsAsSetter() throws Exception {
runTest("analysis/low-level-api-fir/testData/lazyResolve/syntheticProperties/setterAndExplicitReturnTypeAndAnnotationsAsSetter.kt");
}
@Test
@TestMetadata("setterFromLibraryAndGetterFromSources.kt")
public void testSetterFromLibraryAndGetterFromSources() throws Exception {
runTest("analysis/low-level-api-fir/testData/lazyResolve/syntheticProperties/setterFromLibraryAndGetterFromSources.kt");
}
}
@Nested
@@ -10,6 +10,8 @@ import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.FirSessionComponent
import org.jetbrains.kotlin.fir.declarations.FirClass
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAccessor
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
/**
@@ -95,7 +97,14 @@ fun FirBasedSymbol<*>.lazyResolveToPhase(toPhase: FirResolvePhase) {
* @see lazyResolveToPhase
*/
fun FirElementWithResolveState.lazyResolveToPhase(toPhase: FirResolvePhase) {
lazyDeclarationResolver.lazyResolveToPhase(this, toPhase)
when (this) {
is FirSyntheticPropertyAccessor -> delegate.lazyResolveToPhase(toPhase)
is FirSyntheticProperty -> {
getter.lazyResolveToPhase(toPhase)
setter?.lazyResolveToPhase(toPhase)
}
else -> lazyDeclarationResolver.lazyResolveToPhase(this, toPhase)
}
}
/**