JVM IR: script is a valid container for local delegated properties
When serializing metadata for local delegated properties, we need to
find a valid container class where to put it, and where kotlin-reflect
will be able to find that metadata at runtime. Taking just the closest
class lexically doesn't work, because in the attached test, it is a
class for a lambda which does not have metadata and thus does not have a
way to store any extra information.
So, in 1663619606 we started to look for the closest "non-synthetic"
class to store this metadata. But apparently it was missed that script
is a valid container class. In the test, this meant that no
non-synthetic container classes were found to store the metadata, so we
falled back to using the closest class anyway (see `?: this` in
`rememberLocalProperty`), which turned out to be the lambda.
After this change, metadata for local delegated property in a lambda
will be stored in the script class, just like it's stored in the file
class in the non-script case.
#KT-55065 Fixed
This commit is contained in:
+5
@@ -90,6 +90,11 @@ public class ScriptCodegenTestGenerated extends AbstractScriptCodegenTest {
|
||||
runTest("compiler/testData/codegen/script/localDelegatedProperty.kts");
|
||||
}
|
||||
|
||||
@TestMetadata("localDelegatedPropertyInLambda.kts")
|
||||
public void testLocalDelegatedPropertyInLambda() throws Exception {
|
||||
runTest("compiler/testData/codegen/script/localDelegatedPropertyInLambda.kts");
|
||||
}
|
||||
|
||||
@TestMetadata("localDelegatedPropertyNoExplicitType.kts")
|
||||
public void testLocalDelegatedPropertyNoExplicitType() throws Exception {
|
||||
runTest("compiler/testData/codegen/script/localDelegatedPropertyNoExplicitType.kts");
|
||||
|
||||
Reference in New Issue
Block a user