diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index b8a13a5840f..67159f5bd61 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -378,6 +378,14 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { "()" + componentType.getDescriptor(), null, null); + JetMethodAnnotationWriter aw = JetMethodAnnotationWriter.visitAnnotation(mv); + BitSet kotlinFlags = getFlagsForVisibility(function.getVisibility()); + aw.writeFlags(kotlinFlags); + aw.writeNullableReturnType(returnType.isNullable()); + JvmMethodSignature jvmMethodSignature = typeMapper.mapToCallableMethod(function, false, kind).getSignature(); + aw.writeReturnType(jvmMethodSignature.getKotlinReturnType()); + aw.visitEnd(); + mv.visitCode(); InstructionAdapter iv = new InstructionAdapter(mv); if (!componentType.equals(Type.VOID_TYPE)) { diff --git a/compiler/testData/loadKotlin/dataClass/MixedComponents.kt b/compiler/testData/loadKotlin/dataClass/MixedComponents.kt new file mode 100644 index 00000000000..fd0740fb400 --- /dev/null +++ b/compiler/testData/loadKotlin/dataClass/MixedComponents.kt @@ -0,0 +1,3 @@ +package test + +data class DataClass(var x: String, y: Int, val z: Double) diff --git a/compiler/testData/loadKotlin/dataClass/MixedComponents.txt b/compiler/testData/loadKotlin/dataClass/MixedComponents.txt new file mode 100644 index 00000000000..8ab64e33963 --- /dev/null +++ b/compiler/testData/loadKotlin/dataClass/MixedComponents.txt @@ -0,0 +1,9 @@ +namespace test + +jet.data() internal final class test.DataClass : jet.Any { + public final /*constructor*/ fun (/*0*/ x: jet.String, /*1*/ y: jet.Int, /*2*/ z: jet.Double): test.DataClass + internal final fun component1(): jet.String + internal final fun component2(): jet.Double + internal final var x: jet.String + internal final val z: jet.Double +} diff --git a/compiler/testData/loadKotlin/dataClass/NoComponents.kt b/compiler/testData/loadKotlin/dataClass/NoComponents.kt new file mode 100644 index 00000000000..59b85ff72fd --- /dev/null +++ b/compiler/testData/loadKotlin/dataClass/NoComponents.kt @@ -0,0 +1,3 @@ +package test + +data class DataClass diff --git a/compiler/testData/loadKotlin/dataClass/NoComponents.txt b/compiler/testData/loadKotlin/dataClass/NoComponents.txt new file mode 100644 index 00000000000..b6e477bc21e --- /dev/null +++ b/compiler/testData/loadKotlin/dataClass/NoComponents.txt @@ -0,0 +1,5 @@ +namespace test + +jet.data() internal final class test.DataClass : jet.Any { + public final /*constructor*/ fun (): test.DataClass +} diff --git a/compiler/testData/loadKotlin/dataClass/OneVal.kt b/compiler/testData/loadKotlin/dataClass/OneVal.kt new file mode 100644 index 00000000000..24d08d2a899 --- /dev/null +++ b/compiler/testData/loadKotlin/dataClass/OneVal.kt @@ -0,0 +1,3 @@ +package test + +data class DataClass(val x: String) diff --git a/compiler/testData/loadKotlin/dataClass/OneVal.txt b/compiler/testData/loadKotlin/dataClass/OneVal.txt new file mode 100644 index 00000000000..c21aa7510cc --- /dev/null +++ b/compiler/testData/loadKotlin/dataClass/OneVal.txt @@ -0,0 +1,7 @@ +namespace test + +jet.data() internal final class test.DataClass : jet.Any { + public final /*constructor*/ fun (/*0*/ x: jet.String): test.DataClass + internal final fun component1(): jet.String + internal final val x: jet.String +} diff --git a/compiler/testData/loadKotlin/dataClass/OpenDataClass.kt b/compiler/testData/loadKotlin/dataClass/OpenDataClass.kt new file mode 100644 index 00000000000..f9e2e02e012 --- /dev/null +++ b/compiler/testData/loadKotlin/dataClass/OpenDataClass.kt @@ -0,0 +1,3 @@ +package test + +open data class DataClass(val x: String) diff --git a/compiler/testData/loadKotlin/dataClass/OpenDataClass.txt b/compiler/testData/loadKotlin/dataClass/OpenDataClass.txt new file mode 100644 index 00000000000..c1c8a2d7f29 --- /dev/null +++ b/compiler/testData/loadKotlin/dataClass/OpenDataClass.txt @@ -0,0 +1,7 @@ +namespace test + +jet.data() internal open class test.DataClass : jet.Any { + public final /*constructor*/ fun (/*0*/ x: jet.String): test.DataClass + internal final fun component1(): jet.String + internal final val x: jet.String +} diff --git a/compiler/testData/loadKotlin/dataClass/OpenPropertyFinalComponent.kt b/compiler/testData/loadKotlin/dataClass/OpenPropertyFinalComponent.kt new file mode 100644 index 00000000000..a4647228449 --- /dev/null +++ b/compiler/testData/loadKotlin/dataClass/OpenPropertyFinalComponent.kt @@ -0,0 +1,3 @@ +package test + +open data class DataClass(open val x: String) diff --git a/compiler/testData/loadKotlin/dataClass/OpenPropertyFinalComponent.txt b/compiler/testData/loadKotlin/dataClass/OpenPropertyFinalComponent.txt new file mode 100644 index 00000000000..cd7297da5ff --- /dev/null +++ b/compiler/testData/loadKotlin/dataClass/OpenPropertyFinalComponent.txt @@ -0,0 +1,7 @@ +namespace test + +jet.data() internal open class test.DataClass : jet.Any { + public final /*constructor*/ fun (/*0*/ x: jet.String): test.DataClass + internal final fun component1(): jet.String + internal open val x: jet.String +} diff --git a/compiler/testData/loadKotlin/dataClass/TwoVals.kt b/compiler/testData/loadKotlin/dataClass/TwoVals.kt new file mode 100644 index 00000000000..eb738140f99 --- /dev/null +++ b/compiler/testData/loadKotlin/dataClass/TwoVals.kt @@ -0,0 +1,3 @@ +package test + +data class DataClass(val x: String, val y: Int) diff --git a/compiler/testData/loadKotlin/dataClass/TwoVals.txt b/compiler/testData/loadKotlin/dataClass/TwoVals.txt new file mode 100644 index 00000000000..61f7da6e041 --- /dev/null +++ b/compiler/testData/loadKotlin/dataClass/TwoVals.txt @@ -0,0 +1,9 @@ +namespace test + +jet.data() internal final class test.DataClass : jet.Any { + public final /*constructor*/ fun (/*0*/ x: jet.String, /*1*/ y: jet.Int): test.DataClass + internal final fun component1(): jet.String + internal final fun component2(): jet.Int + internal final val x: jet.String + internal final val y: jet.Int +} diff --git a/compiler/testData/loadKotlin/dataClass/TwoVars.kt b/compiler/testData/loadKotlin/dataClass/TwoVars.kt new file mode 100644 index 00000000000..bd9a9b9156e --- /dev/null +++ b/compiler/testData/loadKotlin/dataClass/TwoVars.kt @@ -0,0 +1,3 @@ +package test + +data class DataClass(var x: String, var y: Int) diff --git a/compiler/testData/loadKotlin/dataClass/TwoVars.txt b/compiler/testData/loadKotlin/dataClass/TwoVars.txt new file mode 100644 index 00000000000..141c30e2c57 --- /dev/null +++ b/compiler/testData/loadKotlin/dataClass/TwoVars.txt @@ -0,0 +1,9 @@ +namespace test + +jet.data() internal final class test.DataClass : jet.Any { + public final /*constructor*/ fun (/*0*/ x: jet.String, /*1*/ y: jet.Int): test.DataClass + internal final fun component1(): jet.String + internal final fun component2(): jet.Int + internal final var x: jet.String + internal final var y: jet.Int +}