Prohibit clone() for enum classes
#KT-8972 Fixed
This commit is contained in:
+7
@@ -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");
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user