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> {
|
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)
|
/*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 override /*1*/ fun compareTo(/*0*/ other: E): kotlin.Int
|
||||||
public final fun name(): kotlin.String
|
public final fun name(): kotlin.String
|
||||||
public final fun ordinal(): kotlin.Int
|
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 final enum class InlineOption : kotlin.Enum<kotlin.InlineOption> {
|
||||||
public enum entry LOCAL_CONTINUE_AND_BREAK : kotlin.InlineOption {
|
public enum entry LOCAL_CONTINUE_AND_BREAK : kotlin.InlineOption {
|
||||||
/*primary*/ private constructor LOCAL_CONTINUE_AND_BREAK()
|
/*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 compareTo(/*0*/ other: kotlin.InlineOption): kotlin.Int
|
||||||
public final override /*1*/ /*fake_override*/ fun name(): kotlin.String
|
public final override /*1*/ /*fake_override*/ fun name(): kotlin.String
|
||||||
public final override /*1*/ /*fake_override*/ fun ordinal(): kotlin.Int
|
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 {
|
public enum entry ONLY_LOCAL_RETURN : kotlin.InlineOption {
|
||||||
/*primary*/ private constructor ONLY_LOCAL_RETURN()
|
/*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 compareTo(/*0*/ other: kotlin.InlineOption): kotlin.Int
|
||||||
public final override /*1*/ /*fake_override*/ fun name(): kotlin.String
|
public final override /*1*/ /*fake_override*/ fun name(): kotlin.String
|
||||||
public final override /*1*/ /*fake_override*/ fun ordinal(): kotlin.Int
|
public final override /*1*/ /*fake_override*/ fun ordinal(): kotlin.Int
|
||||||
}
|
}
|
||||||
|
|
||||||
/*primary*/ private constructor InlineOption()
|
/*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 compareTo(/*0*/ other: kotlin.InlineOption): kotlin.Int
|
||||||
public final override /*1*/ /*fake_override*/ fun name(): kotlin.String
|
public final override /*1*/ /*fake_override*/ fun name(): kotlin.String
|
||||||
public final override /*1*/ /*fake_override*/ fun ordinal(): kotlin.Int
|
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 final enum class InlineStrategy : kotlin.Enum<kotlin.InlineStrategy> {
|
||||||
public enum entry AS_FUNCTION : kotlin.InlineStrategy {
|
public enum entry AS_FUNCTION : kotlin.InlineStrategy {
|
||||||
/*primary*/ private constructor AS_FUNCTION()
|
/*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 compareTo(/*0*/ other: kotlin.InlineStrategy): kotlin.Int
|
||||||
public final override /*1*/ /*fake_override*/ fun name(): kotlin.String
|
public final override /*1*/ /*fake_override*/ fun name(): kotlin.String
|
||||||
public final override /*1*/ /*fake_override*/ fun ordinal(): kotlin.Int
|
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 {
|
public enum entry IN_PLACE : kotlin.InlineStrategy {
|
||||||
/*primary*/ private constructor IN_PLACE()
|
/*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 compareTo(/*0*/ other: kotlin.InlineStrategy): kotlin.Int
|
||||||
public final override /*1*/ /*fake_override*/ fun name(): kotlin.String
|
public final override /*1*/ /*fake_override*/ fun name(): kotlin.String
|
||||||
public final override /*1*/ /*fake_override*/ fun ordinal(): kotlin.Int
|
public final override /*1*/ /*fake_override*/ fun ordinal(): kotlin.Int
|
||||||
}
|
}
|
||||||
|
|
||||||
/*primary*/ private constructor InlineStrategy()
|
/*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 compareTo(/*0*/ other: kotlin.InlineStrategy): kotlin.Int
|
||||||
public final override /*1*/ /*fake_override*/ fun name(): kotlin.String
|
public final override /*1*/ /*fake_override*/ fun name(): kotlin.String
|
||||||
public final override /*1*/ /*fake_override*/ fun ordinal(): kotlin.Int
|
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);
|
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")
|
@TestMetadata("localEnums.kt")
|
||||||
public void testLocalEnums() throws Exception {
|
public void testLocalEnums() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/enum/localEnums.kt");
|
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
|
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 equals(other: Any?): Boolean
|
||||||
public override final fun hashCode(): Int
|
public override final fun hashCode(): Int
|
||||||
public override fun toString(): String
|
public override fun toString(): String
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
-InheritedMembersOfEnum.kt
|
-InheritedMembersOfEnum.kt
|
||||||
-Test
|
-Test
|
||||||
|
clone(): Any location=→Enum
|
||||||
compareTo(E): Int location=→Enum
|
compareTo(E): Int location=→Enum
|
||||||
equals(Any?): Boolean location=→Enum
|
equals(Any?): Boolean location=→Enum
|
||||||
FIRST
|
FIRST
|
||||||
|
|||||||
Reference in New Issue
Block a user