Add some tests on corner cases for @JvmRecord
This commit is contained in:
@@ -0,0 +1,15 @@
|
|||||||
|
// !API_VERSION: 1.5
|
||||||
|
// !LANGUAGE: +JvmRecordSupport
|
||||||
|
// JVM_TARGET: 15
|
||||||
|
// ENABLE_JVM_PREVIEW
|
||||||
|
// WITH_RUNTIME
|
||||||
|
// JDK_15
|
||||||
|
// IGNORE_DEXING
|
||||||
|
|
||||||
|
interface KI<T> {
|
||||||
|
val x: String get() = ""
|
||||||
|
val y: T
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmRecord
|
||||||
|
data class MyRec<R>(override val x: String, override val y: R) : KI<R>
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
@kotlin.Metadata
|
||||||
|
public final class KI$DefaultImpls {
|
||||||
|
// source: 'jvmRecordStructure.kt'
|
||||||
|
public static @org.jetbrains.annotations.NotNull method getX(@org.jetbrains.annotations.NotNull p0: KI): java.lang.String
|
||||||
|
public final inner class KI$DefaultImpls
|
||||||
|
}
|
||||||
|
|
||||||
|
@kotlin.Metadata
|
||||||
|
public interface KI {
|
||||||
|
// source: 'jvmRecordStructure.kt'
|
||||||
|
public abstract @org.jetbrains.annotations.NotNull method getX(): java.lang.String
|
||||||
|
public abstract method getY(): java.lang.Object
|
||||||
|
public final inner class KI$DefaultImpls
|
||||||
|
}
|
||||||
|
|
||||||
|
@kotlin.Metadata
|
||||||
|
public final class MyRec {
|
||||||
|
// source: 'jvmRecordStructure.kt'
|
||||||
|
private final @org.jetbrains.annotations.NotNull field x: java.lang.String
|
||||||
|
private final field y: java.lang.Object
|
||||||
|
public method <init>(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: java.lang.Object): void
|
||||||
|
public final @org.jetbrains.annotations.NotNull method component1(): java.lang.String
|
||||||
|
public final method component2(): java.lang.Object
|
||||||
|
public synthetic static method copy$default(p0: MyRec, p1: java.lang.String, p2: java.lang.Object, p3: int, p4: java.lang.Object): MyRec
|
||||||
|
public final @org.jetbrains.annotations.NotNull method copy(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: java.lang.Object): MyRec
|
||||||
|
public method equals(@org.jetbrains.annotations.Nullable p0: java.lang.Object): boolean
|
||||||
|
public synthetic bridge method getX(): java.lang.String
|
||||||
|
public synthetic bridge method getY(): java.lang.Object
|
||||||
|
public method hashCode(): int
|
||||||
|
public @org.jetbrains.annotations.NotNull method toString(): java.lang.String
|
||||||
|
public @org.jetbrains.annotations.NotNull method x(): java.lang.String
|
||||||
|
public method y(): java.lang.Object
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
// !API_VERSION: 1.5
|
||||||
|
// !LANGUAGE: +JvmRecordSupport
|
||||||
|
// JVM_TARGET: 15
|
||||||
|
// ENABLE_JVM_PREVIEW
|
||||||
|
|
||||||
|
@JvmRecord
|
||||||
|
data class MyRec(override val size: Int) : Collection<String> {
|
||||||
|
override fun contains(element: String): Boolean {
|
||||||
|
TODO("Not yet implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun containsAll(elements: Collection<String>): Boolean {
|
||||||
|
TODO("Not yet implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun isEmpty(): Boolean {
|
||||||
|
TODO("Not yet implemented")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun iterator(): Iterator<String> {
|
||||||
|
TODO("Not yet implemented")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box(m: MyRec, c: Collection<*>): String {
|
||||||
|
val c: Collection<*> = m
|
||||||
|
if (m.size != 56) return "fail 1"
|
||||||
|
if (c.size != 56) return "fail 2"
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
val m = MyRec(56)
|
||||||
|
return box(m, m)
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
// !API_VERSION: 1.5
|
||||||
|
// !LANGUAGE: +JvmRecordSupport
|
||||||
|
// JVM_TARGET: 15
|
||||||
|
// ENABLE_JVM_PREVIEW
|
||||||
|
|
||||||
|
// FILE: JavaClass.java
|
||||||
|
public class JavaClass {
|
||||||
|
public static String box() {
|
||||||
|
MyRec m = new MyRec<String>("O", "K");
|
||||||
|
KI<String> ki = m;
|
||||||
|
return m.x() + m.y() + ki.getX() + ki.getY();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// FILE: main.kt
|
||||||
|
|
||||||
|
interface KI<T> {
|
||||||
|
val x: String get() = ""
|
||||||
|
val y: T
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmRecord
|
||||||
|
data class MyRec<R>(override val x: String, override val y: R) : KI<R>
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
val res = JavaClass.box()
|
||||||
|
if (res != "OKOK") return "fail 1: $res"
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
Vendored
+29
@@ -0,0 +1,29 @@
|
|||||||
|
// !API_VERSION: 1.5
|
||||||
|
// !LANGUAGE: +JvmRecordSupport
|
||||||
|
// JVM_TARGET: 15
|
||||||
|
// ENABLE_JVM_PREVIEW
|
||||||
|
// !JVM_DEFAULT_MODE: all-compatibility
|
||||||
|
|
||||||
|
// FILE: JavaClass.java
|
||||||
|
public class JavaClass {
|
||||||
|
public static String box() {
|
||||||
|
MyRec m = new MyRec<String>("O", "K");
|
||||||
|
KI<String> ki = m;
|
||||||
|
return m.x() + m.y() + ki.getX() + ki.getY();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// FILE: main.kt
|
||||||
|
|
||||||
|
interface KI<T> {
|
||||||
|
val x: String get() = ""
|
||||||
|
val y: T
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmRecord
|
||||||
|
data class MyRec<R>(override val x: String, override val y: R) : KI<R>
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
val res = JavaClass.box()
|
||||||
|
if (res != "OKOK") return "fail 1: $res"
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
+29
@@ -0,0 +1,29 @@
|
|||||||
|
// !API_VERSION: 1.5
|
||||||
|
// !LANGUAGE: +JvmRecordSupport
|
||||||
|
// JVM_TARGET: 15
|
||||||
|
// ENABLE_JVM_PREVIEW
|
||||||
|
// !JVM_DEFAULT_MODE: enable
|
||||||
|
|
||||||
|
// FILE: JavaClass.java
|
||||||
|
public class JavaClass {
|
||||||
|
public static String box() {
|
||||||
|
MyRec m = new MyRec<String>("O", "K");
|
||||||
|
KI<String> ki = m;
|
||||||
|
return m.x() + m.y() + ki.getX() + ki.getY();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// FILE: main.kt
|
||||||
|
|
||||||
|
interface KI<T> {
|
||||||
|
val x: String get() = ""
|
||||||
|
val y: T
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmRecord
|
||||||
|
data class MyRec<R>(override val x: String, override val y: R) : KI<R>
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
val res = JavaClass.box()
|
||||||
|
if (res != "OKOK") return "fail 1: $res"
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
@@ -60,6 +60,8 @@ abstract class KotlinBaseTest<F : KotlinBaseTest.TestFile> : KtUsefulTestCase()
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected open fun getTestJdkKind(files: List<F>): TestJdkKind {
|
protected open fun getTestJdkKind(files: List<F>): TestJdkKind {
|
||||||
|
if (files.any { file -> InTextDirectivesUtils.isDirectiveDefined(file.content, "JDK_15") }) return TestJdkKind.FULL_JDK_15
|
||||||
|
|
||||||
for (file in files) {
|
for (file in files) {
|
||||||
if (InTextDirectivesUtils.isDirectiveDefined(file.content, "FULL_JDK")) {
|
if (InTextDirectivesUtils.isDirectiveDefined(file.content, "FULL_JDK")) {
|
||||||
return TestJdkKind.FULL_JDK
|
return TestJdkKind.FULL_JDK
|
||||||
|
|||||||
+5
@@ -104,6 +104,11 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest {
|
|||||||
runTest("compiler/testData/codegen/bytecodeListing/jvmOverloadsExternal.kt");
|
runTest("compiler/testData/codegen/bytecodeListing/jvmOverloadsExternal.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("jvmRecordStructure.kt")
|
||||||
|
public void testJvmRecordStructure() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/bytecodeListing/jvmRecordStructure.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("jvmStaticExternal.kt")
|
@TestMetadata("jvmStaticExternal.kt")
|
||||||
public void testJvmStaticExternal() throws Exception {
|
public void testJvmStaticExternal() throws Exception {
|
||||||
runTest("compiler/testData/codegen/bytecodeListing/jvmStaticExternal.kt");
|
runTest("compiler/testData/codegen/bytecodeListing/jvmStaticExternal.kt");
|
||||||
|
|||||||
+20
@@ -45,11 +45,31 @@ public class Jdk15BlackBoxCodegenTestGenerated extends AbstractJdk15BlackBoxCode
|
|||||||
runTest("compiler/testData/codegen/java15/box/records/bytecodeShapeForJava.kt");
|
runTest("compiler/testData/codegen/java15/box/records/bytecodeShapeForJava.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("collectionSizeOverrides.kt")
|
||||||
|
public void testCollectionSizeOverrides() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/java15/box/records/collectionSizeOverrides.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("dataJvmRecord.kt")
|
@TestMetadata("dataJvmRecord.kt")
|
||||||
public void testDataJvmRecord() throws Exception {
|
public void testDataJvmRecord() throws Exception {
|
||||||
runTest("compiler/testData/codegen/java15/box/records/dataJvmRecord.kt");
|
runTest("compiler/testData/codegen/java15/box/records/dataJvmRecord.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("propertiesOverrides.kt")
|
||||||
|
public void testPropertiesOverrides() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/java15/box/records/propertiesOverrides.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("propertiesOverridesAllCompatibilityJvmDefault.kt")
|
||||||
|
public void testPropertiesOverridesAllCompatibilityJvmDefault() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/java15/box/records/propertiesOverridesAllCompatibilityJvmDefault.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("propertiesOverridesEnableJvmDefault.kt")
|
||||||
|
public void testPropertiesOverridesEnableJvmDefault() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/java15/box/records/propertiesOverridesEnableJvmDefault.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("recordDifferentPropertyOverride.kt")
|
@TestMetadata("recordDifferentPropertyOverride.kt")
|
||||||
public void testRecordDifferentPropertyOverride() throws Exception {
|
public void testRecordDifferentPropertyOverride() throws Exception {
|
||||||
runTest("compiler/testData/codegen/java15/box/records/recordDifferentPropertyOverride.kt");
|
runTest("compiler/testData/codegen/java15/box/records/recordDifferentPropertyOverride.kt");
|
||||||
|
|||||||
+20
@@ -45,11 +45,31 @@ public class Jdk15IrBlackBoxCodegenTestGenerated extends AbstractJdk15IrBlackBox
|
|||||||
runTest("compiler/testData/codegen/java15/box/records/bytecodeShapeForJava.kt");
|
runTest("compiler/testData/codegen/java15/box/records/bytecodeShapeForJava.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("collectionSizeOverrides.kt")
|
||||||
|
public void testCollectionSizeOverrides() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/java15/box/records/collectionSizeOverrides.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("dataJvmRecord.kt")
|
@TestMetadata("dataJvmRecord.kt")
|
||||||
public void testDataJvmRecord() throws Exception {
|
public void testDataJvmRecord() throws Exception {
|
||||||
runTest("compiler/testData/codegen/java15/box/records/dataJvmRecord.kt");
|
runTest("compiler/testData/codegen/java15/box/records/dataJvmRecord.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("propertiesOverrides.kt")
|
||||||
|
public void testPropertiesOverrides() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/java15/box/records/propertiesOverrides.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("propertiesOverridesAllCompatibilityJvmDefault.kt")
|
||||||
|
public void testPropertiesOverridesAllCompatibilityJvmDefault() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/java15/box/records/propertiesOverridesAllCompatibilityJvmDefault.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("propertiesOverridesEnableJvmDefault.kt")
|
||||||
|
public void testPropertiesOverridesEnableJvmDefault() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/java15/box/records/propertiesOverridesEnableJvmDefault.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("recordDifferentPropertyOverride.kt")
|
@TestMetadata("recordDifferentPropertyOverride.kt")
|
||||||
public void testRecordDifferentPropertyOverride() throws Exception {
|
public void testRecordDifferentPropertyOverride() throws Exception {
|
||||||
runTest("compiler/testData/codegen/java15/box/records/recordDifferentPropertyOverride.kt");
|
runTest("compiler/testData/codegen/java15/box/records/recordDifferentPropertyOverride.kt");
|
||||||
|
|||||||
+5
@@ -104,6 +104,11 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes
|
|||||||
runTest("compiler/testData/codegen/bytecodeListing/jvmOverloadsExternal.kt");
|
runTest("compiler/testData/codegen/bytecodeListing/jvmOverloadsExternal.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("jvmRecordStructure.kt")
|
||||||
|
public void testJvmRecordStructure() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/bytecodeListing/jvmRecordStructure.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("jvmStaticExternal.kt")
|
@TestMetadata("jvmStaticExternal.kt")
|
||||||
public void testJvmStaticExternal() throws Exception {
|
public void testJvmStaticExternal() throws Exception {
|
||||||
runTest("compiler/testData/codegen/bytecodeListing/jvmStaticExternal.kt");
|
runTest("compiler/testData/codegen/bytecodeListing/jvmStaticExternal.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user