From 7327c202006cf8ea2f6556e1ed9fb98cb0209037 Mon Sep 17 00:00:00 2001 From: pyos Date: Tue, 17 Nov 2020 14:02:35 +0100 Subject: [PATCH] FIR: add a resolution mode for property delegates Like function arguments, they are context-dependent, but unlike function arguments, callable references should be resolved eagerly as if they are explicit receivers. --- .../generators/CallAndReferenceGenerator.kt | 20 +++++++------- .../ir/FirBlackBoxCodegenTestGenerated.java | 5 ++++ .../kotlin/fir/builder/ConversionUtils.kt | 27 ++++++++++--------- .../kotlin/fir/resolve/ResolutionMode.kt | 1 + .../FirDeclarationsResolveTransformer.kt | 8 +++--- .../FirExpressionsResolveTransformer.kt | 3 +-- .../delegatedProperty/delegateToAnother.kt | 9 +++++++ ...eDelegateOnFunctionalTypeWithThis.fir.fail | 2 -- ...ideDelegateOnFunctionalTypeWithThis.fir.kt | 2 +- .../codegen/BlackBoxCodegenTestGenerated.java | 5 ++++ .../LightAnalysisModeTestGenerated.java | 5 ++++ .../ir/IrBlackBoxCodegenTestGenerated.java | 5 ++++ .../IrJsCodegenBoxES6TestGenerated.java | 5 ++++ .../IrJsCodegenBoxTestGenerated.java | 5 ++++ .../semantics/JsCodegenBoxTestGenerated.java | 5 ++++ 15 files changed, 75 insertions(+), 32 deletions(-) create mode 100644 compiler/testData/codegen/box/delegatedProperty/delegateToAnother.kt delete mode 100644 compiler/testData/diagnostics/tests/delegatedProperty/provideDelegate/provideDelegateOnFunctionalTypeWithThis.fir.fail diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt index e647039c01f..67f3a8d6c0e 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt @@ -6,12 +6,12 @@ package org.jetbrains.kotlin.fir.backend.generators import org.jetbrains.kotlin.descriptors.Visibilities +import org.jetbrains.kotlin.fir.FirFakeSourceElementKind import org.jetbrains.kotlin.fir.backend.* import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.dispatchReceiverClassOrNull import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression -import org.jetbrains.kotlin.fir.psi import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference @@ -35,7 +35,6 @@ import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.util.* -import org.jetbrains.kotlin.psi.KtPropertyDelegate import org.jetbrains.kotlin.psi2ir.generators.hasNoSideEffects import org.jetbrains.kotlin.types.AbstractTypeApproximator @@ -59,11 +58,12 @@ class CallAndReferenceGenerator( val symbol = callableReferenceAccess.calleeReference.toSymbolForCall(session, classifierStorage, declarationStorage, conversionScope) val type = callableReferenceAccess.typeRef.toIrType() - fun propertyOrigin(): IrStatementOrigin? = - when (callableReferenceAccess.source?.psi?.parent) { - is KtPropertyDelegate -> IrStatementOrigin.PROPERTY_REFERENCE_FOR_DELEGATE - else -> null - } + // val x by y -> + // val `x$delegate` = y + // val x get() = `x$delegate`.getValue(this, ::x) + // The reference here (like the rest of the accessor) has DefaultAccessor source kind. + val isForDelegate = callableReferenceAccess.source?.kind == FirFakeSourceElementKind.DefaultAccessor + val origin = if (isForDelegate) IrStatementOrigin.PROPERTY_REFERENCE_FOR_DELEGATE else null return callableReferenceAccess.convertWithOffsets { startOffset, endOffset -> when (symbol) { is IrPropertySymbol -> { @@ -82,7 +82,7 @@ class CallAndReferenceGenerator( field = backingFieldSymbol, getter = referencedPropertyGetter?.symbol, setter = referencedPropertySetterSymbol, - propertyOrigin() + origin = origin ) } is IrLocalDelegatedPropertySymbol -> { @@ -91,7 +91,7 @@ class CallAndReferenceGenerator( delegate = symbol.owner.delegate.symbol, getter = symbol.owner.getter.symbol, setter = symbol.owner.setter?.symbol, - IrStatementOrigin.PROPERTY_REFERENCE_FOR_DELEGATE + origin = origin ) } is IrFieldSymbol -> { @@ -111,7 +111,7 @@ class CallAndReferenceGenerator( field = symbol, getter = if (referencedField.isStatic) null else propertySymbol.owner.getter?.symbol, setter = if (referencedField.isStatic) null else propertySymbol.owner.setter?.symbol, - propertyOrigin() + origin ) } is IrConstructorSymbol -> { diff --git a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index 12fe003c7d0..500f8d943e2 100644 --- a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -10028,6 +10028,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/delegatedProperty/delegateForExtPropertyInClass.kt"); } + @TestMetadata("delegateToAnother.kt") + public void testDelegateToAnother() throws Exception { + runTest("compiler/testData/codegen/box/delegatedProperty/delegateToAnother.kt"); + } + @TestMetadata("delegateWithPrivateSet.kt") public void testDelegateWithPrivateSet() throws Exception { runTest("compiler/testData/codegen/box/delegatedProperty/delegateWithPrivateSet.kt"); diff --git a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt index 962a5e4afa1..ea464e31fd5 100644 --- a/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt +++ b/compiler/fir/raw-fir/raw-fir.common/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt @@ -292,6 +292,7 @@ fun FirPropertyBuilder.generateAccessorsByDelegate( else -> null } val isMember = ownerSymbol != null + val fakeSource = delegateBuilder.source?.fakeElement(FirFakeSourceElementKind.DefaultAccessor) /* * If we have delegation with provide delegate then we generate call like @@ -310,7 +311,7 @@ fun FirPropertyBuilder.generateAccessorsByDelegate( fun thisRef(isForDelegateProviderCall: Boolean = false): FirExpression = when { ownerSymbol != null -> buildThisReceiverExpression { - source = delegateBuilder.source + source = fakeSource calleeReference = buildImplicitThisReference { boundSymbol = ownerSymbol } @@ -320,7 +321,7 @@ fun FirPropertyBuilder.generateAccessorsByDelegate( } } isExtension && !isForDelegateProviderCall -> buildThisReceiverExpression { - source = delegateBuilder.source + source = fakeSource calleeReference = buildImplicitThisReference { boundSymbol = this@generateAccessorsByDelegate.symbol } @@ -329,7 +330,7 @@ fun FirPropertyBuilder.generateAccessorsByDelegate( } fun delegateAccess() = buildQualifiedAccessExpression { - source = delegateBuilder.source + source = fakeSource calleeReference = buildDelegateFieldReference { resolvedSymbol = delegateFieldSymbol } @@ -340,9 +341,9 @@ fun FirPropertyBuilder.generateAccessorsByDelegate( val isVar = this@generateAccessorsByDelegate.isVar fun propertyRef() = buildCallableReferenceAccess { - source = delegateBuilder.source + source = fakeSource calleeReference = buildResolvedNamedReference { - source = delegateBuilder.source + source = fakeSource name = this@generateAccessorsByDelegate.name resolvedSymbol = this@generateAccessorsByDelegate.symbol } @@ -368,7 +369,7 @@ fun FirPropertyBuilder.generateAccessorsByDelegate( delegateBuilder.delegateProvider = if (stubMode) buildExpressionStub() else buildFunctionCall { explicitReceiver = receiver calleeReference = buildSimpleNamedReference { - source = delegateBuilder.source + source = fakeSource name = PROVIDE_DELEGATE } argumentList = buildBinaryArgumentList(thisRef(isForDelegateProviderCall = true), propertyRef()) @@ -379,7 +380,7 @@ fun FirPropertyBuilder.generateAccessorsByDelegate( val annotations = getter?.annotations val returnTarget = FirFunctionTarget(null, isLambda = false) getter = buildPropertyAccessor { - this.source = delegateBuilder.source + this.source = fakeSource this.session = session origin = FirDeclarationOrigin.Source returnTypeRef = buildImplicitTypeRef() @@ -390,10 +391,10 @@ fun FirPropertyBuilder.generateAccessorsByDelegate( body = FirSingleExpressionBlock( buildReturnExpression { result = buildFunctionCall { - source = delegateBuilder.source + source = fakeSource explicitReceiver = delegateAccess() calleeReference = buildSimpleNamedReference { - source = delegateBuilder.source + source = fakeSource name = GET_VALUE } argumentList = buildBinaryArgumentList(thisRef(), propertyRef()) @@ -411,14 +412,14 @@ fun FirPropertyBuilder.generateAccessorsByDelegate( if (isVar && (setter == null || setter is FirDefaultPropertyAccessor)) { val annotations = setter?.annotations setter = buildPropertyAccessor { - this.source = delegateBuilder.source + this.source = fakeSource this.session = session origin = FirDeclarationOrigin.Source returnTypeRef = session.builtinTypes.unitType isGetter = false status = FirDeclarationStatusImpl(Visibilities.Unknown, Modality.FINAL) val parameter = buildValueParameter { - source = delegateBuilder.source + source = fakeSource this.session = session origin = FirDeclarationOrigin.Source returnTypeRef = buildImplicitTypeRef() @@ -432,7 +433,7 @@ fun FirPropertyBuilder.generateAccessorsByDelegate( symbol = FirPropertyAccessorSymbol() body = FirSingleExpressionBlock( buildFunctionCall { - source = delegateBuilder.source + source = fakeSource explicitReceiver = delegateAccess() calleeReference = buildSimpleNamedReference { name = SET_VALUE @@ -442,7 +443,7 @@ fun FirPropertyBuilder.generateAccessorsByDelegate( arguments += propertyRef() arguments += buildQualifiedAccessExpression { calleeReference = buildResolvedNamedReference { - source = delegateBuilder.source + source = fakeSource name = DELEGATED_SETTER_PARAM resolvedSymbol = parameter.symbol } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolutionMode.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolutionMode.kt index b3622423aad..44d33bb116f 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolutionMode.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolutionMode.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef sealed class ResolutionMode { object ContextDependent : ResolutionMode() + object ContextDependentDelegate : ResolutionMode() object ContextIndependent : ResolutionMode() // TODO: it's better not to use WithExpectedType(FirImplicitTypeRef) class WithExpectedType(val expectedTypeRef: FirTypeRef) : ResolutionMode() diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt index 9b35691af73..2772a559120 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt @@ -192,7 +192,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor } private fun transformPropertyWithDelegate(property: FirProperty) { - property.transformDelegate(transformer, ResolutionMode.ContextDependent) + property.transformDelegate(transformer, ResolutionMode.ContextDependentDelegate) val delegateExpression = property.delegate!! @@ -230,7 +230,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor ): CompositeTransformResult { dataFlowAnalyzer.enterDelegateExpression() try { - val delegateProvider = wrappedDelegateExpression.delegateProvider.transformSingle(transformer, ResolutionMode.ContextDependent) + val delegateProvider = wrappedDelegateExpression.delegateProvider.transformSingle(transformer, data) when (val calleeReference = (delegateProvider as FirResolvable).calleeReference) { is FirResolvedNamedReference -> return delegateProvider.compose() is FirNamedReferenceWithCandidate -> { @@ -243,7 +243,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor (delegateProvider as? FirFunctionCall)?.let { dataFlowAnalyzer.dropSubgraphFromCall(it) } return wrappedDelegateExpression.expression - .transformSingle(transformer, ResolutionMode.ContextDependent) + .transformSingle(transformer, data) .approximateIfIsIntegerConst() .compose() } finally { @@ -669,7 +669,7 @@ open class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransfor context.saveContextForAnonymousFunction(anonymousFunction) } return when (data) { - ResolutionMode.ContextDependent -> { + is ResolutionMode.ContextDependent, is ResolutionMode.ContextDependentDelegate -> { dataFlowAnalyzer.visitPostponedAnonymousFunction(anonymousFunction) anonymousFunction.addReturn().compose() } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt index 82218152e9e..340b9122ad8 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt @@ -33,7 +33,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.builder.* import org.jetbrains.kotlin.fir.visitors.* -import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.calls.tower.CandidateApplicability import org.jetbrains.kotlin.types.TypeApproximatorConfiguration @@ -612,7 +611,7 @@ open class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransform else callableReferenceAccess - if (data !is ResolutionMode.ContextDependent) { + if (data !is ResolutionMode.ContextDependent /* ContextDependentDelegate is Ok here */) { val resolvedReference = components.syntheticCallGenerator.resolveCallableReferenceWithSyntheticOuterCall( callableReferenceAccess, data.expectedType, resolutionContext, diff --git a/compiler/testData/codegen/box/delegatedProperty/delegateToAnother.kt b/compiler/testData/codegen/box/delegatedProperty/delegateToAnother.kt new file mode 100644 index 00000000000..12365e86222 --- /dev/null +++ b/compiler/testData/codegen/box/delegatedProperty/delegateToAnother.kt @@ -0,0 +1,9 @@ +// WITH_REFLECT +// WITH_RUNTIME +class C(val x: String) + +val x = "O" +val y by ::x +val z by C("K")::x + +fun box(): String = y + z diff --git a/compiler/testData/diagnostics/tests/delegatedProperty/provideDelegate/provideDelegateOnFunctionalTypeWithThis.fir.fail b/compiler/testData/diagnostics/tests/delegatedProperty/provideDelegate/provideDelegateOnFunctionalTypeWithThis.fir.fail deleted file mode 100644 index 54d7f40e102..00000000000 --- a/compiler/testData/diagnostics/tests/delegatedProperty/provideDelegate/provideDelegateOnFunctionalTypeWithThis.fir.fail +++ /dev/null @@ -1,2 +0,0 @@ -Failures detected in FirBodyResolveTransformerAdapter, file: /provideDelegateOnFunctionalTypeWithThis.fir.kt -Cause: java.lang.ClassCastException: org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl cannot be cast to org.jetbrains.kotlin.fir.types.FirResolvedTypeRef diff --git a/compiler/testData/diagnostics/tests/delegatedProperty/provideDelegate/provideDelegateOnFunctionalTypeWithThis.fir.kt b/compiler/testData/diagnostics/tests/delegatedProperty/provideDelegate/provideDelegateOnFunctionalTypeWithThis.fir.kt index 9a645ad5a63..9b80648ff3b 100644 --- a/compiler/testData/diagnostics/tests/delegatedProperty/provideDelegate/provideDelegateOnFunctionalTypeWithThis.fir.kt +++ b/compiler/testData/diagnostics/tests/delegatedProperty/provideDelegate/provideDelegateOnFunctionalTypeWithThis.fir.kt @@ -13,7 +13,7 @@ fun wrong(arg: Wrong) {} class Wrong class Right { - val prop: () -> Unit by ::wrong + val prop: () -> Unit by ::wrong } fun box(): String { diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 6fbd66a341d..0f2bb3db218 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -11428,6 +11428,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/delegatedProperty/delegateForExtPropertyInClass.kt"); } + @TestMetadata("delegateToAnother.kt") + public void testDelegateToAnother() throws Exception { + runTest("compiler/testData/codegen/box/delegatedProperty/delegateToAnother.kt"); + } + @TestMetadata("delegateWithPrivateSet.kt") public void testDelegateWithPrivateSet() throws Exception { runTest("compiler/testData/codegen/box/delegatedProperty/delegateWithPrivateSet.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 430a827ede8..133cec36ca8 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -11433,6 +11433,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/delegatedProperty/delegateForExtPropertyInClass.kt"); } + @TestMetadata("delegateToAnother.kt") + public void testDelegateToAnother() throws Exception { + runTest("compiler/testData/codegen/box/delegatedProperty/delegateToAnother.kt"); + } + @TestMetadata("delegateWithPrivateSet.kt") public void testDelegateWithPrivateSet() throws Exception { runTest("compiler/testData/codegen/box/delegatedProperty/delegateWithPrivateSet.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 43df8c8d995..44178290ef3 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -10028,6 +10028,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/delegatedProperty/delegateForExtPropertyInClass.kt"); } + @TestMetadata("delegateToAnother.kt") + public void testDelegateToAnother() throws Exception { + runTest("compiler/testData/codegen/box/delegatedProperty/delegateToAnother.kt"); + } + @TestMetadata("delegateWithPrivateSet.kt") public void testDelegateWithPrivateSet() throws Exception { runTest("compiler/testData/codegen/box/delegatedProperty/delegateWithPrivateSet.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java index fe9e7de73fb..532559db1f0 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java @@ -8543,6 +8543,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/delegatedProperty/delegateForExtPropertyInClass.kt"); } + @TestMetadata("delegateToAnother.kt") + public void testDelegateToAnother() throws Exception { + runTest("compiler/testData/codegen/box/delegatedProperty/delegateToAnother.kt"); + } + @TestMetadata("delegateWithPrivateSet.kt") public void testDelegateWithPrivateSet() throws Exception { runTest("compiler/testData/codegen/box/delegatedProperty/delegateWithPrivateSet.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index 20fbfa79448..05738d7f7ab 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -8543,6 +8543,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/delegatedProperty/delegateForExtPropertyInClass.kt"); } + @TestMetadata("delegateToAnother.kt") + public void testDelegateToAnother() throws Exception { + runTest("compiler/testData/codegen/box/delegatedProperty/delegateToAnother.kt"); + } + @TestMetadata("delegateWithPrivateSet.kt") public void testDelegateWithPrivateSet() throws Exception { runTest("compiler/testData/codegen/box/delegatedProperty/delegateWithPrivateSet.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 8729285c012..aac27644c42 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -8543,6 +8543,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/delegatedProperty/delegateForExtPropertyInClass.kt"); } + @TestMetadata("delegateToAnother.kt") + public void testDelegateToAnother() throws Exception { + runTest("compiler/testData/codegen/box/delegatedProperty/delegateToAnother.kt"); + } + @TestMetadata("delegateWithPrivateSet.kt") public void testDelegateWithPrivateSet() throws Exception { runTest("compiler/testData/codegen/box/delegatedProperty/delegateWithPrivateSet.kt");