Generate metadata and annotations for hidden constructor

Reflection expects to see a callable method for a hidden constructor,
thus, it should be a synthetic accessor.
JVM method signature in metadata should point to the synthetic accessor.
Annotations for hidden constructor should be written on the synthetic
accessor.
This commit is contained in:
Dmitry Petrov
2018-09-11 18:08:22 +03:00
parent 3e3ffd14a9
commit 792c5f8b3f
16 changed files with 219 additions and 12 deletions
@@ -112,6 +112,7 @@ private class ClassClsStubBuilder(
relevantFlags.add(INNER)
relevantFlags.add(DATA)
relevantFlags.add(MODALITY)
relevantFlags.add(INLINE_CLASS)
}
val additionalModifiers = when (classKind) {
ProtoBuf.Class.Kind.ENUM_CLASS -> listOf(KtTokens.ENUM_KEYWORD)
@@ -61,6 +61,7 @@ val EXTERNAL_FUN = createBooleanFlagToModifier(Flags.IS_EXTERNAL_FUNCTION, KtTok
val EXTERNAL_PROPERTY = createBooleanFlagToModifier(Flags.IS_EXTERNAL_PROPERTY, KtTokens.EXTERNAL_KEYWORD)
val EXTERNAL_CLASS = createBooleanFlagToModifier(Flags.IS_EXTERNAL_CLASS, KtTokens.EXTERNAL_KEYWORD)
val INLINE = createBooleanFlagToModifier(Flags.IS_INLINE, KtTokens.INLINE_KEYWORD)
val INLINE_CLASS = createBooleanFlagToModifier(Flags.IS_INLINE_CLASS, KtTokens.INLINE_KEYWORD)
val TAILREC = createBooleanFlagToModifier(Flags.IS_TAILREC, KtTokens.TAILREC_KEYWORD)
val SUSPEND = createBooleanFlagToModifier(Flags.IS_SUSPEND, KtTokens.SUSPEND_KEYWORD)
@@ -133,6 +133,11 @@ public class LoadJavaClsStubTestGenerated extends AbstractLoadJavaClsStubTest {
runTest("compiler/testData/loadJava/compiledKotlin/annotations/classMembers/Getter.kt");
}
@TestMetadata("HiddenConstructorWithInlineClassParameters.kt")
public void testHiddenConstructorWithInlineClassParameters() throws Exception {
runTest("compiler/testData/loadJava/compiledKotlin/annotations/classMembers/HiddenConstructorWithInlineClassParameters.kt");
}
@TestMetadata("PropertyField.kt")
public void testPropertyField() throws Exception {
runTest("compiler/testData/loadJava/compiledKotlin/annotations/classMembers/PropertyField.kt");
@@ -133,6 +133,11 @@ public class ResolveByStubTestGenerated extends AbstractResolveByStubTest {
runTest("compiler/testData/loadJava/compiledKotlin/annotations/classMembers/Getter.kt");
}
@TestMetadata("HiddenConstructorWithInlineClassParameters.kt")
public void testHiddenConstructorWithInlineClassParameters() throws Exception {
runTest("compiler/testData/loadJava/compiledKotlin/annotations/classMembers/HiddenConstructorWithInlineClassParameters.kt");
}
@TestMetadata("PropertyField.kt")
public void testPropertyField() throws Exception {
runTest("compiler/testData/loadJava/compiledKotlin/annotations/classMembers/PropertyField.kt");