Generate private constructors for Enums

#KT-2680 Fixed
  #KT-16867 Fixed
This commit is contained in:
Mikhael Bogdanov
2018-09-12 15:51:46 +02:00
parent 941e5ae1b2
commit 81435c98fa
5 changed files with 16 additions and 12 deletions
@@ -546,16 +546,8 @@ public class AsmUtil {
return NO_FLAG_PACKAGE_PRIVATE;
}
// the following code is only for PRIVATE visibility of member
if (memberDescriptor instanceof ConstructorDescriptor) {
if (isEnumEntry(containingDeclaration)) {
return NO_FLAG_PACKAGE_PRIVATE;
}
if (isEnumClass(containingDeclaration)) {
//TODO: should be ACC_PRIVATE
// see http://youtrack.jetbrains.com/issue/KT-2680
return ACC_PROTECTED;
}
if (memberDescriptor instanceof ConstructorDescriptor && isEnumEntry(containingDeclaration)) {
return NO_FLAG_PACKAGE_PRIVATE;
}
return null;
@@ -9,5 +9,5 @@ public enum E {
@kotlin.Deprecated(message = "b")
Entry3;
protected E() { /* compiled code */ }
private E() { /* compiled code */ }
}
@@ -26,7 +26,7 @@ public final enum class TestEnum {
public final static field ANSWER: TestEnum
private final field z: int
static method <clinit>(): void
protected method <init>(p0: java.lang.String, p1: int, p2: int): void
private method <init>(p0: java.lang.String, p1: int, p2: int): void
public final method getZ(): int
public static method valueOf(p0: java.lang.String): TestEnum
public static method values(): TestEnum[]
@@ -0,0 +1,7 @@
enum class Foo {
A, B, C
}
// TESTED_OBJECT_KIND: function
// TESTED_OBJECTS: Foo, <init>
// FLAGS: ACC_PRIVATE
@@ -444,6 +444,11 @@ public class WriteFlagsTestGenerated extends AbstractWriteFlagsTest {
runTest("compiler/testData/writeFlags/function/constructors/classObject.kt");
}
@TestMetadata("enum.kt")
public void testEnum() throws Exception {
runTest("compiler/testData/writeFlags/function/constructors/enum.kt");
}
@TestMetadata("objectInClass.kt")
public void testObjectInClass() throws Exception {
runTest("compiler/testData/writeFlags/function/constructors/objectInClass.kt");