[FIR2IR] Fix adapted callable reference to nested class constructor
^KT-56829 Fixed
This commit is contained in:
committed by
Space Team
parent
e0baeb53db
commit
c4255cdb0f
+9
-5
@@ -8,10 +8,8 @@ package org.jetbrains.kotlin.fir.backend.generators
|
||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.fir.backend.*
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFunction
|
||||
import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirTypeParameterRefsOwner
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.containingClassLookupTag
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||
import org.jetbrains.kotlin.fir.expressions.*
|
||||
import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression
|
||||
@@ -24,6 +22,7 @@ import org.jetbrains.kotlin.fir.resolve.calls.getExpectedType
|
||||
import org.jetbrains.kotlin.fir.resolve.calls.isFunctional
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.AbstractConeSubstitutor
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||
import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorForFullBodyResolve
|
||||
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
|
||||
@@ -324,7 +323,12 @@ internal class AdapterGenerator(
|
||||
)
|
||||
if (boundDispatchReceiver != null) irCall.dispatchReceiver = receiverValue
|
||||
else irCall.extensionReceiver = receiverValue
|
||||
} else if (callableReferenceAccess.explicitReceiver is FirResolvedQualifier && ((firAdaptee as? FirMemberDeclaration)?.isStatic != true)) {
|
||||
} else if (
|
||||
callableReferenceAccess.explicitReceiver is FirResolvedQualifier &&
|
||||
(firAdaptee !is FirConstructor ||
|
||||
firAdaptee.containingClassLookupTag()?.toFirRegularClassSymbol(session)?.isInner == true) &&
|
||||
((firAdaptee as? FirMemberDeclaration)?.isStatic != true)
|
||||
) {
|
||||
// Unbound callable reference 'A::foo'
|
||||
val adaptedReceiverParameter = adapterFunction.valueParameters[0]
|
||||
val adaptedReceiverValue = IrGetValueImpl(
|
||||
|
||||
+6
@@ -3402,6 +3402,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/manyDefaultsAndVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nestedClassConstructorWithDefault.kt")
|
||||
public void testNestedClassConstructorWithDefault() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/nestedClassConstructorWithDefault.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noAdaptedReferencesIfNoOptimizedReferencesEnabled.kt")
|
||||
public void testNoAdaptedReferencesIfNoOptimizedReferencesEnabled() throws Exception {
|
||||
|
||||
+6
@@ -3402,6 +3402,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/manyDefaultsAndVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nestedClassConstructorWithDefault.kt")
|
||||
public void testNestedClassConstructorWithDefault() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/nestedClassConstructorWithDefault.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noAdaptedReferencesIfNoOptimizedReferencesEnabled.kt")
|
||||
public void testNoAdaptedReferencesIfNoOptimizedReferencesEnabled() throws Exception {
|
||||
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
class Command {
|
||||
class Add(val arg: String? = "OK")
|
||||
inner class InnerAdd(val arg: String? = "OK")
|
||||
}
|
||||
|
||||
fun execute(func: () -> Command.Add) = func()
|
||||
fun execute(c: Command, func: (Command) -> Command.InnerAdd) = func(c)
|
||||
|
||||
fun box(): String {
|
||||
if (execute(Command::Add).arg != "OK") return "FAIL 1"
|
||||
if (execute(Command(), Command::InnerAdd).arg != "OK") return "FAIL 2"
|
||||
return "OK"
|
||||
}
|
||||
+6
@@ -3258,6 +3258,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/manyDefaultsAndVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nestedClassConstructorWithDefault.kt")
|
||||
public void testNestedClassConstructorWithDefault() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/nestedClassConstructorWithDefault.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noAdaptedReferencesIfNoOptimizedReferencesEnabled.kt")
|
||||
public void testNoAdaptedReferencesIfNoOptimizedReferencesEnabled() throws Exception {
|
||||
|
||||
+6
@@ -3402,6 +3402,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/manyDefaultsAndVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nestedClassConstructorWithDefault.kt")
|
||||
public void testNestedClassConstructorWithDefault() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/nestedClassConstructorWithDefault.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noAdaptedReferencesIfNoOptimizedReferencesEnabled.kt")
|
||||
public void testNoAdaptedReferencesIfNoOptimizedReferencesEnabled() throws Exception {
|
||||
|
||||
+5
@@ -2850,6 +2850,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/manyDefaultsAndVararg.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("nestedClassConstructorWithDefault.kt")
|
||||
public void testNestedClassConstructorWithDefault() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/nestedClassConstructorWithDefault.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("noAdaptedReferencesIfNoOptimizedReferencesEnabled.kt")
|
||||
public void testNoAdaptedReferencesIfNoOptimizedReferencesEnabled() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/noAdaptedReferencesIfNoOptimizedReferencesEnabled.kt");
|
||||
|
||||
+6
@@ -2124,6 +2124,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/manyDefaultsAndVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nestedClassConstructorWithDefault.kt")
|
||||
public void testNestedClassConstructorWithDefault() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/nestedClassConstructorWithDefault.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noNameClashForReferencesToSameFunction.kt")
|
||||
public void testNoNameClashForReferencesToSameFunction() throws Exception {
|
||||
|
||||
+6
@@ -2178,6 +2178,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/manyDefaultsAndVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nestedClassConstructorWithDefault.kt")
|
||||
public void testNestedClassConstructorWithDefault() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/nestedClassConstructorWithDefault.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noNameClashForReferencesToSameFunction.kt")
|
||||
public void testNoNameClashForReferencesToSameFunction() throws Exception {
|
||||
|
||||
+6
@@ -2178,6 +2178,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/manyDefaultsAndVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nestedClassConstructorWithDefault.kt")
|
||||
public void testNestedClassConstructorWithDefault() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/nestedClassConstructorWithDefault.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noNameClashForReferencesToSameFunction.kt")
|
||||
public void testNoNameClashForReferencesToSameFunction() throws Exception {
|
||||
|
||||
+6
@@ -2178,6 +2178,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/manyDefaultsAndVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nestedClassConstructorWithDefault.kt")
|
||||
public void testNestedClassConstructorWithDefault() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/nestedClassConstructorWithDefault.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noNameClashForReferencesToSameFunction.kt")
|
||||
public void testNoNameClashForReferencesToSameFunction() throws Exception {
|
||||
|
||||
+6
@@ -2261,6 +2261,12 @@ public class K2NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTes
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/manyDefaultsAndVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nestedClassConstructorWithDefault.kt")
|
||||
public void testNestedClassConstructorWithDefault() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/nestedClassConstructorWithDefault.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noNameClashForReferencesToSameFunction.kt")
|
||||
public void testNoNameClashForReferencesToSameFunction() throws Exception {
|
||||
|
||||
+6
@@ -2232,6 +2232,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/manyDefaultsAndVararg.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("nestedClassConstructorWithDefault.kt")
|
||||
public void testNestedClassConstructorWithDefault() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/nestedClassConstructorWithDefault.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("noNameClashForReferencesToSameFunction.kt")
|
||||
public void testNoNameClashForReferencesToSameFunction() throws Exception {
|
||||
|
||||
Generated
+5
@@ -1940,6 +1940,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/manyDefaultsAndVararg.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("nestedClassConstructorWithDefault.kt")
|
||||
public void testNestedClassConstructorWithDefault() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/nestedClassConstructorWithDefault.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("noNameClashForReferencesToSameFunction.kt")
|
||||
public void testNoNameClashForReferencesToSameFunction() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/noNameClashForReferencesToSameFunction.kt");
|
||||
|
||||
Reference in New Issue
Block a user