[LL FIR] fix lazy resolve of status for the members of the nested class
^KTIJ-23932 fixed
This commit is contained in:
committed by
Space Team
parent
82a3ac830e
commit
cd83fec078
+3
@@ -43,6 +43,9 @@ open class FirDesignation(
|
||||
val path: List<FirDeclaration>,
|
||||
val target: FirElementWithResolvePhase,
|
||||
) {
|
||||
val firstNonFileDeclaration: FirElementWithResolvePhase
|
||||
get() = path.firstOrNull() ?: target
|
||||
|
||||
fun toSequence(includeTarget: Boolean): Sequence<FirElementWithResolvePhase> = sequence {
|
||||
yieldAll(path)
|
||||
if (includeTarget) yield(target)
|
||||
|
||||
+62
-16
@@ -5,18 +5,20 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.low.level.api.fir.transformers
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirStatusResolveTransformer
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.StatusComputationSession
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirPhaseRunner
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirDesignationWithFile
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.transformers.LLFirLazyTransformer.Companion.updatePhaseDeep
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkDeclarationStatusIsResolved
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkPhase
|
||||
import org.jetbrains.kotlin.fir.FirElementWithResolvePhase
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirStatusResolveTransformer
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.StatusComputationSession
|
||||
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
|
||||
import org.jetbrains.kotlin.fir.visitors.transformSingle
|
||||
|
||||
/**
|
||||
* Transform designation into STATUS phase. Affects only for designation, target declaration, it's children and dependents
|
||||
@@ -26,27 +28,71 @@ internal class LLFirDesignatedStatusResolveTransformer(
|
||||
private val session: FirSession,
|
||||
private val scopeSession: ScopeSession,
|
||||
) : LLFirLazyTransformer {
|
||||
private inner class FirDesignatedStatusResolveTransformerForIDE :
|
||||
FirStatusResolveTransformer(session, scopeSession, StatusComputationSession()) {
|
||||
private inner class FirDesignatedStatusResolveTransformerForIDE(
|
||||
private val designationIterator: Iterator<FirElementWithResolvePhase>
|
||||
) : FirStatusResolveTransformer(session, scopeSession, StatusComputationSession()) {
|
||||
|
||||
val designationTransformer = LLFirDeclarationTransformer(designation)
|
||||
private var isInsideTargetDeclaration = false
|
||||
|
||||
override fun transformDeclarationContent(declaration: FirDeclaration, data: FirResolvedDeclarationStatus?): FirDeclaration =
|
||||
designationTransformer.transformDeclarationContent(this, declaration, data) {
|
||||
super.transformDeclarationContent(declaration, data)
|
||||
|
||||
override fun transformClass(klass: FirClass, data: FirResolvedDeclarationStatus?): FirStatement {
|
||||
return storeClass(klass) {
|
||||
resolveClassTypeParameters(klass)
|
||||
if (isInsideTargetDeclaration) {
|
||||
transformDeclarationContent(klass, data)
|
||||
} else {
|
||||
resolveCallableMembers(klass, data)
|
||||
moveNextDeclaration()
|
||||
}
|
||||
klass
|
||||
} as FirStatement
|
||||
}
|
||||
|
||||
private fun resolveClassTypeParameters(klass: FirClass) {
|
||||
klass.typeParameters.forEach { it.transformSingle(this, data = null) }
|
||||
}
|
||||
|
||||
private fun resolveCallableMembers(
|
||||
klass: FirClass,
|
||||
data: FirResolvedDeclarationStatus?
|
||||
) {
|
||||
for (member in klass.declarations) {
|
||||
if (member is FirClassLikeDeclaration) continue
|
||||
// we need the types to be resolved here to compute visibility
|
||||
// implicit types will not be handled (see bug in the compiler KT-55446)
|
||||
member.lazyResolveToPhase(FirResolvePhase.TYPES)
|
||||
member.transformSingle(this, data)
|
||||
}
|
||||
}
|
||||
|
||||
fun moveNextDeclaration() {
|
||||
if (!designationIterator.hasNext()) {
|
||||
isInsideTargetDeclaration = true
|
||||
designation.target.transform<FirDeclaration, _>(this, data = null)
|
||||
return
|
||||
}
|
||||
when (val nextElement = designationIterator.next()) {
|
||||
is FirClass -> {
|
||||
transformClassContent(nextElement, data = null)
|
||||
}
|
||||
else -> {
|
||||
error("Unexpected declaration in designation: ${nextElement::class.qualifiedName}")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
override fun transformDeclaration(phaseRunner: LLFirPhaseRunner) {
|
||||
if (designation.target.resolvePhase >= FirResolvePhase.STATUS) return
|
||||
designation.target.checkPhase(FirResolvePhase.TYPES)
|
||||
|
||||
val transformer = FirDesignatedStatusResolveTransformerForIDE()
|
||||
val designationIterator = designation.toSequence(includeTarget = false).iterator()
|
||||
val transformer = FirDesignatedStatusResolveTransformerForIDE(designationIterator)
|
||||
phaseRunner.runPhaseWithCustomResolve(FirResolvePhase.STATUS) {
|
||||
designation.firFile.transform<FirElement, FirResolvedDeclarationStatus?>(transformer, null)
|
||||
transformer.moveNextDeclaration()
|
||||
}
|
||||
|
||||
transformer.designationTransformer.ensureDesignationPassed()
|
||||
|
||||
updatePhaseDeep(designation.target, FirResolvePhase.STATUS)
|
||||
checkIsResolved(designation.target)
|
||||
}
|
||||
|
||||
@@ -255,13 +255,13 @@ FILE: annotationParameters.kt
|
||||
|
||||
}
|
||||
public final [SUPER_TYPES] class B : R|kotlin/Any| {
|
||||
public? [SUPER_TYPES] [ContainingClassKey=B] constructor(): R|B| {
|
||||
public [TYPES] [ContainingClassKey=B] constructor(): R|B| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
@R|Anno|(X#.A#) public final [STATUS] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK }
|
||||
|
||||
@Anno(X#.A#) public? final? [SUPER_TYPES] fun foo(): R|kotlin/Unit| { LAZY_BLOCK }
|
||||
@R|Anno|(X#.A#) public final [TYPES] fun foo(): R|kotlin/Unit| { LAZY_BLOCK }
|
||||
|
||||
}
|
||||
|
||||
@@ -404,8 +404,8 @@ FILE: annotationParameters.kt
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
public? final? [SUPER_TYPES] [IsFromPrimaryConstructor=true] val args: A.X = R|<local>/args|
|
||||
public? [SUPER_TYPES] [ContainingClassKey=Anno] get(): A.X
|
||||
public final [TYPES] [IsFromPrimaryConstructor=true] val args: <ERROR TYPE REF: Symbol not found for A.X> = R|<local>/args|
|
||||
public [TYPES] [ContainingClassKey=Anno] get(): <ERROR TYPE REF: Symbol not found for A.X>
|
||||
|
||||
}
|
||||
public final [STATUS] class B : R|kotlin/Any| {
|
||||
@@ -443,8 +443,8 @@ FILE: annotationParameters.kt
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
public? final? [SUPER_TYPES] [IsFromPrimaryConstructor=true] val args: A.X = R|<local>/args|
|
||||
public? [SUPER_TYPES] [ContainingClassKey=Anno] get(): A.X
|
||||
public final [TYPES] [IsFromPrimaryConstructor=true] val args: <ERROR TYPE REF: Symbol not found for A.X> = R|<local>/args|
|
||||
public [TYPES] [ContainingClassKey=Anno] get(): <ERROR TYPE REF: Symbol not found for A.X>
|
||||
|
||||
}
|
||||
public final [STATUS] class B : R|kotlin/Any| {
|
||||
@@ -482,8 +482,8 @@ FILE: annotationParameters.kt
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
public? final? [SUPER_TYPES] [IsFromPrimaryConstructor=true] val args: A.X = R|<local>/args|
|
||||
public? [SUPER_TYPES] [ContainingClassKey=Anno] get(): A.X
|
||||
public final [TYPES] [IsFromPrimaryConstructor=true] val args: <ERROR TYPE REF: Symbol not found for A.X> = R|<local>/args|
|
||||
public [TYPES] [ContainingClassKey=Anno] get(): <ERROR TYPE REF: Symbol not found for A.X>
|
||||
|
||||
}
|
||||
public final [STATUS] class B : R|kotlin/Any| {
|
||||
|
||||
@@ -110,18 +110,18 @@ FILE: classMembers.kt
|
||||
STATUS:
|
||||
FILE: classMembers.kt
|
||||
public final [SUPER_TYPES] class A : R|kotlin/Any| {
|
||||
public? [SUPER_TYPES] [ContainingClassKey=A] constructor(): R|A| {
|
||||
public [TYPES] [ContainingClassKey=A] constructor(): R|A| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final [STATUS] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK }
|
||||
|
||||
public? final? [SUPER_TYPES] val x: Int = LAZY_EXPRESSION
|
||||
public? [SUPER_TYPES] [ContainingClassKey=A] get(): Int { LAZY_BLOCK }
|
||||
public final [TYPES] val x: R|kotlin/Int| = LAZY_EXPRESSION
|
||||
public [TYPES] [ContainingClassKey=A] get(): R|kotlin/Int| { LAZY_BLOCK }
|
||||
|
||||
public? final? [SUPER_TYPES] fun receive([SUPER_TYPES] value: String): R|kotlin/Unit| { LAZY_BLOCK }
|
||||
public final [TYPES] fun receive([TYPES] value: R|kotlin/String|): R|kotlin/Unit| { LAZY_BLOCK }
|
||||
|
||||
public? final? [SUPER_TYPES] fun functionWithLazyBody(): String { LAZY_BLOCK }
|
||||
public final [TYPES] fun functionWithLazyBody(): R|kotlin/String| { LAZY_BLOCK }
|
||||
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -86,12 +86,12 @@ FILE: functionInValueClass.kt
|
||||
STATUS:
|
||||
FILE: functionInValueClass.kt
|
||||
@R|kotlin/jvm/JvmInline|() public final inline [SUPER_TYPES] [FirValueClassRepresentationKey=InlineClassRepresentation(underlyingPropertyName=value, underlyingType=kotlin/Int)] class Value : R|kotlin/Any| {
|
||||
public? [TYPES] [ContainingClassKey=Value] constructor([TYPES] [CorrespondingProperty=/Value.value] value: R|kotlin/Int|): R|Value| {
|
||||
public [TYPES] [ContainingClassKey=Value] constructor([TYPES] [CorrespondingProperty=/Value.value] value: R|kotlin/Int|): R|Value| {
|
||||
LAZY_super<R|kotlin/Any|>
|
||||
}
|
||||
|
||||
public? final? [SUPER_TYPES] [IsFromPrimaryConstructor=true] val value: Int = R|<local>/value|
|
||||
public? [SUPER_TYPES] [ContainingClassKey=Value] get(): Int
|
||||
public final [TYPES] [IsFromPrimaryConstructor=true] val value: R|kotlin/Int| = R|<local>/value|
|
||||
public [TYPES] [ContainingClassKey=Value] get(): R|kotlin/Int|
|
||||
|
||||
public final [STATUS] fun resolveMe(): R|kotlin/Unit| { LAZY_BLOCK }
|
||||
|
||||
|
||||
Vendored
+11
@@ -0,0 +1,11 @@
|
||||
|
||||
interface OV {
|
||||
val originalExpressions: A
|
||||
|
||||
class ResolveMe: OV {
|
||||
override val originalExpressions: A
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class A
|
||||
Vendored
+336
@@ -0,0 +1,336 @@
|
||||
|
||||
RAW_FIR:
|
||||
FILE: nestedClassWithPropertiesOverrides.kt
|
||||
public? final? [RAW_FIR] interface OV : R|kotlin/Any| {
|
||||
public? final? [RAW_FIR] val originalExpressions: A
|
||||
public? [RAW_FIR] [ContainingClassKey=OV] get(): A
|
||||
|
||||
public? final? [RAW_FIR] class ResolveMe : OV {
|
||||
public? [RAW_FIR] [ContainingClassKey=ResolveMe] constructor(): R|OV.ResolveMe| {
|
||||
super<<implicit>>()
|
||||
}
|
||||
|
||||
public? open? override [RAW_FIR] val originalExpressions: A
|
||||
public? [RAW_FIR] [ContainingClassKey=ResolveMe] get(): A
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public? final? [RAW_FIR] class A : R|kotlin/Any| {
|
||||
public? [RAW_FIR] [ContainingClassKey=A] constructor(): R|A| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
IMPORTS:
|
||||
FILE: nestedClassWithPropertiesOverrides.kt
|
||||
public? final? [RAW_FIR] interface OV : R|kotlin/Any| {
|
||||
public? final? [RAW_FIR] val originalExpressions: A
|
||||
public? [RAW_FIR] [ContainingClassKey=OV] get(): A
|
||||
|
||||
public? final? [RAW_FIR] class ResolveMe : OV {
|
||||
public? [RAW_FIR] [ContainingClassKey=ResolveMe] constructor(): R|OV.ResolveMe| {
|
||||
super<<implicit>>()
|
||||
}
|
||||
|
||||
public? open? override [RAW_FIR] val originalExpressions: A
|
||||
public? [RAW_FIR] [ContainingClassKey=ResolveMe] get(): A
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public? final? [RAW_FIR] class A : R|kotlin/Any| {
|
||||
public? [RAW_FIR] [ContainingClassKey=A] constructor(): R|A| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
COMPILER_REQUIRED_ANNOTATIONS:
|
||||
FILE: nestedClassWithPropertiesOverrides.kt
|
||||
public? final? [RAW_FIR] interface OV : R|kotlin/Any| {
|
||||
public? final? [RAW_FIR] val originalExpressions: A
|
||||
public? [RAW_FIR] [ContainingClassKey=OV] get(): A
|
||||
|
||||
public? final? [COMPILER_REQUIRED_ANNOTATIONS] class ResolveMe : OV {
|
||||
public? [COMPILER_REQUIRED_ANNOTATIONS] [ContainingClassKey=ResolveMe] constructor(): R|OV.ResolveMe| {
|
||||
super<<implicit>>()
|
||||
}
|
||||
|
||||
public? open? override [COMPILER_REQUIRED_ANNOTATIONS] val originalExpressions: A
|
||||
public? [COMPILER_REQUIRED_ANNOTATIONS] [ContainingClassKey=ResolveMe] get(): A
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public? final? [RAW_FIR] class A : R|kotlin/Any| {
|
||||
public? [RAW_FIR] [ContainingClassKey=A] constructor(): R|A| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
COMPANION_GENERATION:
|
||||
FILE: nestedClassWithPropertiesOverrides.kt
|
||||
public? final? [RAW_FIR] interface OV : R|kotlin/Any| {
|
||||
public? final? [RAW_FIR] val originalExpressions: A
|
||||
public? [RAW_FIR] [ContainingClassKey=OV] get(): A
|
||||
|
||||
public? final? [COMPANION_GENERATION] class ResolveMe : OV {
|
||||
public? [COMPANION_GENERATION] [ContainingClassKey=ResolveMe] constructor(): R|OV.ResolveMe| {
|
||||
super<<implicit>>()
|
||||
}
|
||||
|
||||
public? open? override [COMPANION_GENERATION] val originalExpressions: A
|
||||
public? [COMPANION_GENERATION] [ContainingClassKey=ResolveMe] get(): A
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public? final? [RAW_FIR] class A : R|kotlin/Any| {
|
||||
public? [RAW_FIR] [ContainingClassKey=A] constructor(): R|A| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
SUPER_TYPES:
|
||||
FILE: nestedClassWithPropertiesOverrides.kt
|
||||
public? final? [COMPILER_REQUIRED_ANNOTATIONS] interface OV : R|kotlin/Any| {
|
||||
public? final? [COMPILER_REQUIRED_ANNOTATIONS] val originalExpressions: A
|
||||
public? [COMPILER_REQUIRED_ANNOTATIONS] [ContainingClassKey=OV] get(): A
|
||||
|
||||
public? final? [SUPER_TYPES] class ResolveMe : R|OV| {
|
||||
public? [SUPER_TYPES] [ContainingClassKey=ResolveMe] constructor(): R|OV.ResolveMe| {
|
||||
super<<implicit>>()
|
||||
}
|
||||
|
||||
public? open? override [SUPER_TYPES] val originalExpressions: A
|
||||
public? [SUPER_TYPES] [ContainingClassKey=ResolveMe] get(): A
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public? final? [RAW_FIR] class A : R|kotlin/Any| {
|
||||
public? [RAW_FIR] [ContainingClassKey=A] constructor(): R|A| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
TYPES:
|
||||
FILE: nestedClassWithPropertiesOverrides.kt
|
||||
public? final? [SUPER_TYPES] interface OV : R|kotlin/Any| {
|
||||
public? final? [SUPER_TYPES] val originalExpressions: A
|
||||
public? [SUPER_TYPES] [ContainingClassKey=OV] get(): A
|
||||
|
||||
public? final? [TYPES] class ResolveMe : R|OV| {
|
||||
public? [TYPES] [ContainingClassKey=ResolveMe] constructor(): R|OV.ResolveMe| {
|
||||
super<<implicit>>()
|
||||
}
|
||||
|
||||
public? open? override [TYPES] val originalExpressions: R|A|
|
||||
public? [TYPES] [ContainingClassKey=ResolveMe] get(): R|A|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public? final? [COMPILER_REQUIRED_ANNOTATIONS] class A : R|kotlin/Any| {
|
||||
public? [COMPILER_REQUIRED_ANNOTATIONS] [ContainingClassKey=A] constructor(): R|A| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
STATUS:
|
||||
FILE: nestedClassWithPropertiesOverrides.kt
|
||||
public abstract [SUPER_TYPES] interface OV : R|kotlin/Any| {
|
||||
public abstract [TYPES] val originalExpressions: R|A|
|
||||
public [TYPES] [ContainingClassKey=OV] get(): R|A|
|
||||
|
||||
public final [STATUS] class ResolveMe : R|OV| {
|
||||
public [STATUS] [ContainingClassKey=ResolveMe] constructor(): R|OV.ResolveMe| {
|
||||
super<<implicit>>()
|
||||
}
|
||||
|
||||
public final override [STATUS] val originalExpressions: R|A|
|
||||
public [STATUS] [ContainingClassKey=ResolveMe] get(): R|A|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public? final? [COMPILER_REQUIRED_ANNOTATIONS] class A : R|kotlin/Any| {
|
||||
public? [COMPILER_REQUIRED_ANNOTATIONS] [ContainingClassKey=A] constructor(): R|A| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ARGUMENTS_OF_ANNOTATIONS:
|
||||
FILE: nestedClassWithPropertiesOverrides.kt
|
||||
public abstract [STATUS] interface OV : R|kotlin/Any| {
|
||||
public abstract [STATUS] val originalExpressions: R|A|
|
||||
public [STATUS] [ContainingClassKey=OV] get(): R|A|
|
||||
|
||||
public final [ARGUMENTS_OF_ANNOTATIONS] class ResolveMe : R|OV| {
|
||||
public [ARGUMENTS_OF_ANNOTATIONS] [ContainingClassKey=ResolveMe] constructor(): R|OV.ResolveMe| {
|
||||
super<<implicit>>()
|
||||
}
|
||||
|
||||
public final override [ARGUMENTS_OF_ANNOTATIONS] val originalExpressions: R|A|
|
||||
public [ARGUMENTS_OF_ANNOTATIONS] [ContainingClassKey=ResolveMe] get(): R|A|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public? final? [COMPILER_REQUIRED_ANNOTATIONS] class A : R|kotlin/Any| {
|
||||
public? [COMPILER_REQUIRED_ANNOTATIONS] [ContainingClassKey=A] constructor(): R|A| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
CONTRACTS:
|
||||
FILE: nestedClassWithPropertiesOverrides.kt
|
||||
public abstract [STATUS] interface OV : R|kotlin/Any| {
|
||||
public abstract [STATUS] val originalExpressions: R|A|
|
||||
public [STATUS] [ContainingClassKey=OV] get(): R|A|
|
||||
|
||||
public final [CONTRACTS] class ResolveMe : R|OV| {
|
||||
public [CONTRACTS] [ContainingClassKey=ResolveMe] constructor(): R|OV.ResolveMe| {
|
||||
super<<implicit>>()
|
||||
}
|
||||
|
||||
public final override [CONTRACTS] val originalExpressions: R|A|
|
||||
public [CONTRACTS] [ContainingClassKey=ResolveMe] get(): R|A|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public? final? [COMPILER_REQUIRED_ANNOTATIONS] class A : R|kotlin/Any| {
|
||||
public? [COMPILER_REQUIRED_ANNOTATIONS] [ContainingClassKey=A] constructor(): R|A| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
IMPLICIT_TYPES_BODY_RESOLVE:
|
||||
FILE: nestedClassWithPropertiesOverrides.kt
|
||||
public abstract [STATUS] interface OV : R|kotlin/Any| {
|
||||
public abstract [STATUS] val originalExpressions: R|A|
|
||||
public [STATUS] [ContainingClassKey=OV] get(): R|A|
|
||||
|
||||
public final [IMPLICIT_TYPES_BODY_RESOLVE] class ResolveMe : R|OV| {
|
||||
public [IMPLICIT_TYPES_BODY_RESOLVE] [ContainingClassKey=ResolveMe] constructor(): R|OV.ResolveMe| {
|
||||
super<<implicit>>()
|
||||
}
|
||||
|
||||
public final override [IMPLICIT_TYPES_BODY_RESOLVE] val originalExpressions: R|A|
|
||||
public [IMPLICIT_TYPES_BODY_RESOLVE] [ContainingClassKey=ResolveMe] get(): R|A|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public? final? [COMPILER_REQUIRED_ANNOTATIONS] class A : R|kotlin/Any| {
|
||||
public? [COMPILER_REQUIRED_ANNOTATIONS] [ContainingClassKey=A] constructor(): R|A| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ANNOTATIONS_ARGUMENTS_MAPPING:
|
||||
FILE: nestedClassWithPropertiesOverrides.kt
|
||||
public abstract [STATUS] interface OV : R|kotlin/Any| {
|
||||
public abstract [STATUS] val originalExpressions: R|A|
|
||||
public [STATUS] [ContainingClassKey=OV] get(): R|A|
|
||||
|
||||
public final [ANNOTATIONS_ARGUMENTS_MAPPING] class ResolveMe : R|OV| {
|
||||
public [ANNOTATIONS_ARGUMENTS_MAPPING] [ContainingClassKey=ResolveMe] constructor(): R|OV.ResolveMe| {
|
||||
super<<implicit>>()
|
||||
}
|
||||
|
||||
public final override [ANNOTATIONS_ARGUMENTS_MAPPING] val originalExpressions: R|A|
|
||||
public [ANNOTATIONS_ARGUMENTS_MAPPING] [ContainingClassKey=ResolveMe] get(): R|A|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public? final? [COMPILER_REQUIRED_ANNOTATIONS] class A : R|kotlin/Any| {
|
||||
public? [COMPILER_REQUIRED_ANNOTATIONS] [ContainingClassKey=A] constructor(): R|A| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
EXPECT_ACTUAL_MATCHING:
|
||||
FILE: nestedClassWithPropertiesOverrides.kt
|
||||
public abstract [STATUS] interface OV : R|kotlin/Any| {
|
||||
public abstract [STATUS] val originalExpressions: R|A|
|
||||
public [STATUS] [ContainingClassKey=OV] get(): R|A|
|
||||
|
||||
public final [EXPECT_ACTUAL_MATCHING] class ResolveMe : R|OV| {
|
||||
public [EXPECT_ACTUAL_MATCHING] [ContainingClassKey=ResolveMe] constructor(): R|OV.ResolveMe| {
|
||||
super<<implicit>>()
|
||||
}
|
||||
|
||||
public final override [EXPECT_ACTUAL_MATCHING] val originalExpressions: R|A|
|
||||
public [EXPECT_ACTUAL_MATCHING] [ContainingClassKey=ResolveMe] get(): R|A|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public? final? [COMPILER_REQUIRED_ANNOTATIONS] class A : R|kotlin/Any| {
|
||||
public? [COMPILER_REQUIRED_ANNOTATIONS] [ContainingClassKey=A] constructor(): R|A| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
BODY_RESOLVE:
|
||||
FILE: nestedClassWithPropertiesOverrides.kt
|
||||
public abstract [STATUS] interface OV : R|kotlin/Any| {
|
||||
public abstract [STATUS] val originalExpressions: R|A|
|
||||
public [STATUS] [ContainingClassKey=OV] get(): R|A|
|
||||
|
||||
public final [BODY_RESOLVE] class ResolveMe : R|OV| {
|
||||
public [BODY_RESOLVE] [ContainingClassKey=ResolveMe] constructor(): R|OV.ResolveMe| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final override [BODY_RESOLVE] val originalExpressions: R|A|
|
||||
public [BODY_RESOLVE] [ContainingClassKey=ResolveMe] get(): R|A|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public? final? [COMPILER_REQUIRED_ANNOTATIONS] class A : R|kotlin/Any| {
|
||||
public? [COMPILER_REQUIRED_ANNOTATIONS] [ContainingClassKey=A] constructor(): R|A| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
FILE RAW TO BODY:
|
||||
FILE: nestedClassWithPropertiesOverrides.kt
|
||||
public abstract [BODY_RESOLVE] interface OV : R|kotlin/Any| {
|
||||
public abstract [BODY_RESOLVE] val originalExpressions: R|A|
|
||||
public [BODY_RESOLVE] [ContainingClassKey=OV] get(): R|A|
|
||||
|
||||
public final [BODY_RESOLVE] class ResolveMe : R|OV| {
|
||||
public [BODY_RESOLVE] [ContainingClassKey=ResolveMe] constructor(): R|OV.ResolveMe| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
public final override [BODY_RESOLVE] val originalExpressions: R|A|
|
||||
public [BODY_RESOLVE] [ContainingClassKey=ResolveMe] get(): R|A|
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
public final [BODY_RESOLVE] class A : R|kotlin/Any| {
|
||||
public [BODY_RESOLVE] [ContainingClassKey=A] constructor(): R|A| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
|
||||
RAW_FIR:
|
||||
FILE: enumEntry.kt
|
||||
public? final? [RAW_FIR] annotation class Anno : R|kotlin/Annotation| {
|
||||
@@ -157,19 +158,19 @@ FILE: enumEntry.kt
|
||||
|
||||
}
|
||||
public final [SUPER_TYPES] enum class Foo : R|kotlin/Enum<Foo>| {
|
||||
private [SUPER_TYPES] [ContainingClassKey=Foo] constructor(): R|Foo| {
|
||||
private [TYPES] [ContainingClassKey=Foo] constructor(): R|Foo| {
|
||||
super<R|kotlin/Enum<Foo>|>()
|
||||
}
|
||||
|
||||
@R|Anno|() public final static [STATUS] [ContainingClassKey=Foo] enum entry ResolveMe: R|Foo| = LAZY_EXPRESSION
|
||||
public final static [SUPER_TYPES] [ContainingClassKey=Foo] fun values(): R|kotlin/Array<Foo>| {
|
||||
public final static [TYPES] [ContainingClassKey=Foo] fun values(): R|kotlin/Array<Foo>| {
|
||||
}
|
||||
|
||||
public final static [SUPER_TYPES] [ContainingClassKey=Foo] fun valueOf([SUPER_TYPES] value: R|kotlin/String|): R|Foo| {
|
||||
public final static [TYPES] [ContainingClassKey=Foo] fun valueOf([TYPES] value: R|kotlin/String|): R|Foo| {
|
||||
}
|
||||
|
||||
public final static [SUPER_TYPES] [ContainingClassKey=Foo] val entries: R|kotlin/enums/EnumEntries<Foo>|
|
||||
public [SUPER_TYPES] get(): R|kotlin/enums/EnumEntries<Foo>|
|
||||
public final static [TYPES] [ContainingClassKey=Foo] val entries: R|kotlin/enums/EnumEntries<Foo>|
|
||||
public [TYPES] get(): R|kotlin/enums/EnumEntries<Foo>|
|
||||
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -80,7 +80,7 @@ FILE: parameterOfNonLocalSetter.kt
|
||||
STATUS:
|
||||
FILE: parameterOfNonLocalSetter.kt
|
||||
public final [SUPER_TYPES] class X : R|kotlin/Any| {
|
||||
public? [SUPER_TYPES] [ContainingClassKey=X] constructor(): R|X| {
|
||||
public [TYPES] [ContainingClassKey=X] constructor(): R|X| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -68,7 +68,7 @@ FILE: typeParameterOfNonLocalFunction.kt
|
||||
STATUS:
|
||||
FILE: typeParameterOfNonLocalFunction.kt
|
||||
public final [SUPER_TYPES] class X : R|kotlin/Any| {
|
||||
public? [SUPER_TYPES] [ContainingClassKey=X] constructor(): R|X| {
|
||||
public [TYPES] [ContainingClassKey=X] constructor(): R|X| {
|
||||
super<R|kotlin/Any|>()
|
||||
}
|
||||
|
||||
|
||||
+6
@@ -164,6 +164,12 @@ public class FirLazyDeclarationResolveTestGenerated extends AbstractFirLazyDecla
|
||||
public void testFunctionInValueClass() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/lazyResolve/classes/functionInValueClass.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nestedClassWithPropertiesOverrides.kt")
|
||||
public void testNestedClassWithPropertiesOverrides() throws Exception {
|
||||
runTest("analysis/low-level-api-fir/testdata/lazyResolve/classes/nestedClassWithPropertiesOverrides.kt");
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
|
||||
+1
-1
@@ -225,7 +225,7 @@ abstract class AbstractFirStatusResolveTransformer(
|
||||
return (data ?: declarationStatus)
|
||||
}
|
||||
|
||||
private inline fun storeClass(
|
||||
protected inline fun storeClass(
|
||||
klass: FirClass,
|
||||
computeResult: () -> FirDeclaration
|
||||
): FirDeclaration {
|
||||
|
||||
Reference in New Issue
Block a user