K2/Java: add private enum constructor for MPP matching
#KT-62961 Fixed
This commit is contained in:
committed by
Space Team
parent
563c878f20
commit
2cea2b9098
@@ -361,11 +361,22 @@ abstract class FirJavaFacade(
|
|||||||
)
|
)
|
||||||
generateValueOfFunction(moduleData, classId.packageFqName, classId.relativeClassName)
|
generateValueOfFunction(moduleData, classId.packageFqName, classId.relativeClassName)
|
||||||
generateEntriesGetter(moduleData, classId.packageFqName, classId.relativeClassName)
|
generateEntriesGetter(moduleData, classId.packageFqName, classId.relativeClassName)
|
||||||
|
if (javaClassDeclaredConstructors.isEmpty()) {
|
||||||
|
declarations += buildSyntheticConstructorForJavaClass(
|
||||||
|
javaClass,
|
||||||
|
classKind,
|
||||||
|
constructorId = constructorId,
|
||||||
|
ownerClassBuilder = this,
|
||||||
|
valueParametersForAnnotationConstructor = null,
|
||||||
|
moduleData = moduleData,
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (classIsAnnotation) {
|
if (classIsAnnotation) {
|
||||||
declarations +=
|
declarations +=
|
||||||
buildConstructorForAnnotationClass(
|
buildSyntheticConstructorForJavaClass(
|
||||||
javaClass,
|
javaClass,
|
||||||
|
classKind,
|
||||||
constructorId = constructorId,
|
constructorId = constructorId,
|
||||||
ownerClassBuilder = this,
|
ownerClassBuilder = this,
|
||||||
valueParametersForAnnotationConstructor = valueParametersForAnnotationConstructor,
|
valueParametersForAnnotationConstructor = valueParametersForAnnotationConstructor,
|
||||||
@@ -674,11 +685,12 @@ abstract class FirJavaFacade(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun buildConstructorForAnnotationClass(
|
private fun buildSyntheticConstructorForJavaClass(
|
||||||
javaClass: JavaClass,
|
javaClass: JavaClass,
|
||||||
|
classKind: ClassKind,
|
||||||
constructorId: CallableId,
|
constructorId: CallableId,
|
||||||
ownerClassBuilder: FirJavaClassBuilder,
|
ownerClassBuilder: FirJavaClassBuilder,
|
||||||
valueParametersForAnnotationConstructor: ValueParametersForAnnotationConstructor,
|
valueParametersForAnnotationConstructor: ValueParametersForAnnotationConstructor?,
|
||||||
moduleData: FirModuleData,
|
moduleData: FirModuleData,
|
||||||
): FirJavaConstructor {
|
): FirJavaConstructor {
|
||||||
return buildJavaConstructor {
|
return buildJavaConstructor {
|
||||||
@@ -690,8 +702,8 @@ abstract class FirJavaFacade(
|
|||||||
returnTypeRef = buildResolvedTypeRef {
|
returnTypeRef = buildResolvedTypeRef {
|
||||||
type = ownerClassBuilder.buildSelfTypeRef()
|
type = ownerClassBuilder.buildSelfTypeRef()
|
||||||
}
|
}
|
||||||
valueParametersForAnnotationConstructor.forEach { _, firValueParameter -> valueParameters += firValueParameter }
|
valueParametersForAnnotationConstructor?.forEach { _, firValueParameter -> valueParameters += firValueParameter }
|
||||||
visibility = Visibilities.Public
|
visibility = if (classKind == ClassKind.ENUM_CLASS) Visibilities.Private else Visibilities.Public
|
||||||
isInner = false
|
isInner = false
|
||||||
isPrimary = true
|
isPrimary = true
|
||||||
annotationBuilder = { emptyList() }
|
annotationBuilder = { emptyList() }
|
||||||
|
|||||||
@@ -10,4 +10,4 @@ enum class MyEnum2() {}
|
|||||||
|
|
||||||
class MyClass(): <!FINAL_SUPERTYPE, INVISIBLE_REFERENCE!>MyEnum2<!>() {}
|
class MyClass(): <!FINAL_SUPERTYPE, INVISIBLE_REFERENCE!>MyEnum2<!>() {}
|
||||||
|
|
||||||
class MyClass2(): <!FINAL_SUPERTYPE, UNRESOLVED_REFERENCE!>MyJavaEnum<!>() {}
|
class MyClass2(): <!FINAL_SUPERTYPE!>MyJavaEnum<!>() {}
|
||||||
|
|||||||
+3
-3
@@ -3,16 +3,16 @@
|
|||||||
// MODULE: m1-common
|
// MODULE: m1-common
|
||||||
// FILE: common.kt
|
// FILE: common.kt
|
||||||
|
|
||||||
<!EXPECT_ACTUAL_INCOMPATIBILITY{JVM}, NO_ACTUAL_FOR_EXPECT{JVM}!>expect enum class Mode {
|
expect enum class Mode {
|
||||||
Throughput, AverageTime
|
Throughput, AverageTime
|
||||||
}<!>
|
}
|
||||||
|
|
||||||
expect annotation class BenchmarkMode(vararg val value: Mode)
|
expect annotation class BenchmarkMode(vararg val value: Mode)
|
||||||
|
|
||||||
// MODULE: m1-jvm()()(m1-common)
|
// MODULE: m1-jvm()()(m1-common)
|
||||||
// FILE: jvm.kt
|
// FILE: jvm.kt
|
||||||
|
|
||||||
actual typealias <!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS("actual typealias Mode = Mode; expect constructor(): Mode")!>Mode<!> = mypackage.Mode
|
actual typealias Mode = mypackage.Mode
|
||||||
|
|
||||||
|
|
||||||
actual typealias BenchmarkMode = mypackage.BenchmarkMode
|
actual typealias BenchmarkMode = mypackage.BenchmarkMode
|
||||||
|
|||||||
-35
@@ -1,35 +0,0 @@
|
|||||||
// ISSUES: KT-61100, KT-59561
|
|
||||||
// WITH_STDLIB
|
|
||||||
// MODULE: m1-common
|
|
||||||
// FILE: common.kt
|
|
||||||
|
|
||||||
expect enum class Mode {
|
|
||||||
Throughput, AverageTime
|
|
||||||
}
|
|
||||||
|
|
||||||
expect annotation class BenchmarkMode(vararg val value: Mode)
|
|
||||||
|
|
||||||
// MODULE: m1-jvm()()(m1-common)
|
|
||||||
// FILE: jvm.kt
|
|
||||||
|
|
||||||
actual typealias <!NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS("actual typealias Mode = Mode; expect constructor(): Mode")!>Mode<!> = mypackage.Mode
|
|
||||||
|
|
||||||
|
|
||||||
actual typealias BenchmarkMode = mypackage.BenchmarkMode
|
|
||||||
|
|
||||||
// FILE: mypackage/Mode.java
|
|
||||||
|
|
||||||
package mypackage;
|
|
||||||
|
|
||||||
public enum Mode {
|
|
||||||
Throughput, AverageTime
|
|
||||||
}
|
|
||||||
|
|
||||||
// FILE: mypackage/BenchmarkMode.java
|
|
||||||
|
|
||||||
package mypackage;
|
|
||||||
|
|
||||||
public @interface BenchmarkMode {
|
|
||||||
|
|
||||||
Mode[] value();
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
CLASS IR_EXTERNAL_JAVA_DECLARATION_STUB ENUM_CLASS name:JEnum modality:FINAL visibility:public superTypes:[kotlin.Enum<@[FlexibleNullability] <root>.JEnum?>]
|
CLASS IR_EXTERNAL_JAVA_DECLARATION_STUB ENUM_CLASS name:JEnum modality:FINAL visibility:public superTypes:[kotlin.Enum<@[FlexibleNullability] <root>.JEnum?>]
|
||||||
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.JEnum
|
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.JEnum
|
||||||
|
CONSTRUCTOR IR_EXTERNAL_JAVA_DECLARATION_STUB visibility:public <> () returnType:<root>.JEnum [primary]
|
||||||
ENUM_ENTRY IR_EXTERNAL_JAVA_DECLARATION_STUB name:ONE
|
ENUM_ENTRY IR_EXTERNAL_JAVA_DECLARATION_STUB name:ONE
|
||||||
ENUM_ENTRY IR_EXTERNAL_JAVA_DECLARATION_STUB name:TWO
|
ENUM_ENTRY IR_EXTERNAL_JAVA_DECLARATION_STUB name:TWO
|
||||||
ENUM_ENTRY IR_EXTERNAL_JAVA_DECLARATION_STUB name:THREE
|
ENUM_ENTRY IR_EXTERNAL_JAVA_DECLARATION_STUB name:THREE
|
||||||
|
|||||||
+2
@@ -11,6 +11,8 @@ public final enum class AnnotatedEnumEntry : R|kotlin/Enum<test/AnnotatedEnumEnt
|
|||||||
public final static val entries: R|kotlin/enums/EnumEntries<test/AnnotatedEnumEntry>|
|
public final static val entries: R|kotlin/enums/EnumEntries<test/AnnotatedEnumEntry>|
|
||||||
public get(): R|kotlin/enums/EnumEntries<test/AnnotatedEnumEntry>|
|
public get(): R|kotlin/enums/EnumEntries<test/AnnotatedEnumEntry>|
|
||||||
|
|
||||||
|
public constructor(): R|test/AnnotatedEnumEntry|
|
||||||
|
|
||||||
public final annotation class Anno : R|kotlin/Annotation| {
|
public final annotation class Anno : R|kotlin/Annotation| {
|
||||||
public constructor(value: R|kotlin/String|): R|test/AnnotatedEnumEntry.Anno|
|
public constructor(value: R|kotlin/String|): R|test/AnnotatedEnumEntry.Anno|
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ public abstract interface CustomAnnotation : R|kotlin/Any| {
|
|||||||
public final static val entries: R|kotlin/enums/EnumEntries<test/CustomAnnotation.MyEnum>|
|
public final static val entries: R|kotlin/enums/EnumEntries<test/CustomAnnotation.MyEnum>|
|
||||||
public get(): R|kotlin/enums/EnumEntries<test/CustomAnnotation.MyEnum>|
|
public get(): R|kotlin/enums/EnumEntries<test/CustomAnnotation.MyEnum>|
|
||||||
|
|
||||||
|
public constructor(): R|test/CustomAnnotation.MyEnum|
|
||||||
|
|
||||||
}
|
}
|
||||||
@R|test/CustomAnnotation.MyAnnotation|(value = R|test/CustomAnnotation.MyEnum.ONE|) public open class MyTest : R|kotlin/Any| {
|
@R|test/CustomAnnotation.MyAnnotation|(value = R|test/CustomAnnotation.MyEnum.ONE|) public open class MyTest : R|kotlin/Any| {
|
||||||
public constructor(): R|test/CustomAnnotation.MyTest|
|
public constructor(): R|test/CustomAnnotation.MyTest|
|
||||||
|
|||||||
+2
@@ -14,6 +14,8 @@ public open class EnumArgumentWithCustomToString : R|kotlin/Any| {
|
|||||||
public final static val entries: R|kotlin/enums/EnumEntries<test/EnumArgumentWithCustomToString.E>|
|
public final static val entries: R|kotlin/enums/EnumEntries<test/EnumArgumentWithCustomToString.E>|
|
||||||
public get(): R|kotlin/enums/EnumEntries<test/EnumArgumentWithCustomToString.E>|
|
public get(): R|kotlin/enums/EnumEntries<test/EnumArgumentWithCustomToString.E>|
|
||||||
|
|
||||||
|
public constructor(): R|test/EnumArgumentWithCustomToString.E|
|
||||||
|
|
||||||
}
|
}
|
||||||
public final annotation class EnumAnno : R|kotlin/Annotation| {
|
public final annotation class EnumAnno : R|kotlin/Annotation| {
|
||||||
public constructor(value: R|test/EnumArgumentWithCustomToString.E|): R|test/EnumArgumentWithCustomToString.EnumAnno|
|
public constructor(value: R|test/EnumArgumentWithCustomToString.E|): R|test/EnumArgumentWithCustomToString.EnumAnno|
|
||||||
|
|||||||
+2
@@ -18,5 +18,7 @@ public open class NestedEnumArgument : R|kotlin/Any| {
|
|||||||
public final static val entries: R|kotlin/enums/EnumEntries<test/NestedEnumArgument.E>|
|
public final static val entries: R|kotlin/enums/EnumEntries<test/NestedEnumArgument.E>|
|
||||||
public get(): R|kotlin/enums/EnumEntries<test/NestedEnumArgument.E>|
|
public get(): R|kotlin/enums/EnumEntries<test/NestedEnumArgument.E>|
|
||||||
|
|
||||||
|
public constructor(): R|test/NestedEnumArgument.E|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
@@ -13,6 +13,8 @@ public final annotation class Api : R|kotlin/Annotation| {
|
|||||||
public final static val entries: R|kotlin/enums/EnumEntries<test/Api.Status>|
|
public final static val entries: R|kotlin/enums/EnumEntries<test/Api.Status>|
|
||||||
public get(): R|kotlin/enums/EnumEntries<test/Api.Status>|
|
public get(): R|kotlin/enums/EnumEntries<test/Api.Status>|
|
||||||
|
|
||||||
|
public constructor(): R|test/Api.Status|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@R|test/Api|(status = R|test/Api.Status.Ok|) public open class NestedEnumInAnnotation : R|kotlin/Any| {
|
@R|test/Api|(status = R|test/Api.Status.Ok|) public open class NestedEnumInAnnotation : R|kotlin/Any| {
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ public final enum class EnumWithSpecializedEntry : R|kotlin/Enum<test/EnumWithSp
|
|||||||
public final static val entries: R|kotlin/enums/EnumEntries<test/EnumWithSpecializedEntry>|
|
public final static val entries: R|kotlin/enums/EnumEntries<test/EnumWithSpecializedEntry>|
|
||||||
public get(): R|kotlin/enums/EnumEntries<test/EnumWithSpecializedEntry>|
|
public get(): R|kotlin/enums/EnumEntries<test/EnumWithSpecializedEntry>|
|
||||||
|
|
||||||
|
public constructor(): R|test/EnumWithSpecializedEntry|
|
||||||
|
|
||||||
public/*package*/ open class Nested : R|kotlin/Any| {
|
public/*package*/ open class Nested : R|kotlin/Any| {
|
||||||
public/*package*/ constructor(): R|test/EnumWithSpecializedEntry.Nested|
|
public/*package*/ constructor(): R|test/EnumWithSpecializedEntry.Nested|
|
||||||
|
|
||||||
|
|||||||
@@ -10,4 +10,6 @@ public final enum class JavaEnum : R|kotlin/Enum<test/JavaEnum!>| {
|
|||||||
public final static val entries: R|kotlin/enums/EnumEntries<test/JavaEnum>|
|
public final static val entries: R|kotlin/enums/EnumEntries<test/JavaEnum>|
|
||||||
public get(): R|kotlin/enums/EnumEntries<test/JavaEnum>|
|
public get(): R|kotlin/enums/EnumEntries<test/JavaEnum>|
|
||||||
|
|
||||||
|
public constructor(): R|test/JavaEnum|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,8 @@ public final enum class Enum : R|kotlin/Enum<test/Enum!>| {
|
|||||||
public final static val entries: R|kotlin/enums/EnumEntries<test/Enum>|
|
public final static val entries: R|kotlin/enums/EnumEntries<test/Enum>|
|
||||||
public get(): R|kotlin/enums/EnumEntries<test/Enum>|
|
public get(): R|kotlin/enums/EnumEntries<test/Enum>|
|
||||||
|
|
||||||
|
public constructor(): R|test/Enum|
|
||||||
|
|
||||||
public open inner class Inner : R|kotlin/Any| {
|
public open inner class Inner : R|kotlin/Any| {
|
||||||
public/*package*/ open fun bar(): R|kotlin/Unit|
|
public/*package*/ open fun bar(): R|kotlin/Unit|
|
||||||
|
|
||||||
|
|||||||
@@ -19,4 +19,6 @@ public final enum class StaticMembersInEnum : R|kotlin/Enum<test/StaticMembersIn
|
|||||||
public final static val entries: R|kotlin/enums/EnumEntries<test/StaticMembersInEnum>|
|
public final static val entries: R|kotlin/enums/EnumEntries<test/StaticMembersInEnum>|
|
||||||
public get(): R|kotlin/enums/EnumEntries<test/StaticMembersInEnum>|
|
public get(): R|kotlin/enums/EnumEntries<test/StaticMembersInEnum>|
|
||||||
|
|
||||||
|
public constructor(): R|test/StaticMembersInEnum|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user