Prohibit clone() for enum classes

#KT-8972 Fixed
This commit is contained in:
Alexander Udalov
2015-08-28 09:30:17 +03:00
parent 89f3cfc704
commit 29abf94327
6 changed files with 53 additions and 0 deletions
+7
View File
@@ -417,6 +417,7 @@ public final class DoubleRange : kotlin.Range<kotlin.Double>, kotlin.Progression
public abstract class Enum</*0*/ E : kotlin.Enum<E>> : kotlin.Comparable<E> {
/*primary*/ public constructor Enum</*0*/ E : kotlin.Enum<E>>(/*0*/ name: kotlin.String, /*1*/ ordinal: kotlin.Int)
protected final fun clone(): kotlin.Any
public final override /*1*/ fun compareTo(/*0*/ other: E): kotlin.Int
public final fun name(): kotlin.String
public final fun ordinal(): kotlin.Int
@@ -577,6 +578,7 @@ public interface Function</*0*/ out R> {
public final enum class InlineOption : kotlin.Enum<kotlin.InlineOption> {
public enum entry LOCAL_CONTINUE_AND_BREAK : kotlin.InlineOption {
/*primary*/ private constructor LOCAL_CONTINUE_AND_BREAK()
protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any
public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: kotlin.InlineOption): kotlin.Int
public final override /*1*/ /*fake_override*/ fun name(): kotlin.String
public final override /*1*/ /*fake_override*/ fun ordinal(): kotlin.Int
@@ -584,12 +586,14 @@ public final enum class InlineOption : kotlin.Enum<kotlin.InlineOption> {
public enum entry ONLY_LOCAL_RETURN : kotlin.InlineOption {
/*primary*/ private constructor ONLY_LOCAL_RETURN()
protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any
public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: kotlin.InlineOption): kotlin.Int
public final override /*1*/ /*fake_override*/ fun name(): kotlin.String
public final override /*1*/ /*fake_override*/ fun ordinal(): kotlin.Int
}
/*primary*/ private constructor InlineOption()
protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any
public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: kotlin.InlineOption): kotlin.Int
public final override /*1*/ /*fake_override*/ fun name(): kotlin.String
public final override /*1*/ /*fake_override*/ fun ordinal(): kotlin.Int
@@ -602,6 +606,7 @@ public final enum class InlineOption : kotlin.Enum<kotlin.InlineOption> {
public final enum class InlineStrategy : kotlin.Enum<kotlin.InlineStrategy> {
public enum entry AS_FUNCTION : kotlin.InlineStrategy {
/*primary*/ private constructor AS_FUNCTION()
protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any
public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: kotlin.InlineStrategy): kotlin.Int
public final override /*1*/ /*fake_override*/ fun name(): kotlin.String
public final override /*1*/ /*fake_override*/ fun ordinal(): kotlin.Int
@@ -609,12 +614,14 @@ public final enum class InlineStrategy : kotlin.Enum<kotlin.InlineStrategy> {
public enum entry IN_PLACE : kotlin.InlineStrategy {
/*primary*/ private constructor IN_PLACE()
protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any
public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: kotlin.InlineStrategy): kotlin.Int
public final override /*1*/ /*fake_override*/ fun name(): kotlin.String
public final override /*1*/ /*fake_override*/ fun ordinal(): kotlin.Int
}
/*primary*/ private constructor InlineStrategy()
protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any
public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: kotlin.InlineStrategy): kotlin.Int
public final override /*1*/ /*fake_override*/ fun name(): kotlin.String
public final override /*1*/ /*fake_override*/ fun ordinal(): kotlin.Int
@@ -0,0 +1,6 @@
enum class E : Cloneable {
A;
<!OVERRIDING_FINAL_MEMBER!>override<!> fun clone(): Any {
return <!AMBIGUOUS_SUPER!>super<!>.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>clone<!>()
}
}
@@ -0,0 +1,27 @@
package
internal final enum class E : kotlin.Enum<E>, kotlin.Cloneable {
public enum entry A : E {
private constructor A()
protected open override /*1*/ /*fake_override*/ fun clone(): kotlin.Any
public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: E): kotlin.Int
public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public final override /*1*/ /*fake_override*/ fun name(): kotlin.String
public final override /*1*/ /*fake_override*/ fun ordinal(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
private constructor E()
protected open override /*2*/ fun clone(): kotlin.Any
public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: E): kotlin.Int
public final override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
public final override /*1*/ /*fake_override*/ fun name(): kotlin.String
public final override /*1*/ /*fake_override*/ fun ordinal(): kotlin.Int
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
// Static members
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): E
public final /*synthesized*/ fun values(): kotlin.Array<E>
}
@@ -5298,6 +5298,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
doTest(fileName);
}
@TestMetadata("kt8972_cloneNotAllowed.kt")
public void testKt8972_cloneNotAllowed() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/enum/kt8972_cloneNotAllowed.kt");
doTest(fileName);
}
@TestMetadata("localEnums.kt")
public void testLocalEnums() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/enum/localEnums.kt");
+6
View File
@@ -37,6 +37,12 @@ public abstract class Enum<E : Enum<E>>(name: String, ordinal: Int): Comparable<
public override final fun compareTo(other: E): Int
/**
* Throws an exception since enum constants cannot be cloned.
* This method prevents enum classes from inheriting from [Cloneable].
*/
protected final fun clone(): Any
public override final fun equals(other: Any?): Boolean
public override final fun hashCode(): Int
public override fun toString(): String
@@ -1,5 +1,6 @@
-InheritedMembersOfEnum.kt
-Test
clone(): Any location=→Enum
compareTo(E): Int location=→Enum
equals(Any?): Boolean location=→Enum
FIRST