diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/BridgeLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/BridgeLowering.kt index 1151aee5360..0a8cc10cf95 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/BridgeLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/BridgeLowering.kt @@ -539,10 +539,11 @@ internal class BridgeLowering(val context: JvmBackendContext) : FileLoweringPass } // After the checks, insert the original method body. - if (body is IrExpressionBody) { - +irReturn((body as IrExpressionBody).expression) - } else { - (body as IrBlockBody).statements.forEach { +it } + when (val body = body) { + is IrExpressionBody -> +irReturn(body.expression) + is IrBlockBody -> body.statements.forEach { +it } + null -> {} + else -> error("Unsupported method body kind: ${body.render()}") } } } diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/delegateToList.ir.txt b/plugins/kapt3/kapt3-compiler/testData/converter/delegateToList.ir.txt new file mode 100644 index 00000000000..693e925a260 --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/delegateToList.ir.txt @@ -0,0 +1,134 @@ +@kotlin.Metadata() +public final class MyList implements java.util.List, kotlin.jvm.internal.markers.KMappedMarker { + @org.jetbrains.annotations.NotNull() + private final java.util.List wrappedList = null; + + public MyList(@org.jetbrains.annotations.NotNull() + java.util.List wrappedList) { + super(); + } + + @java.lang.Override() + public void add(int index, T element) { + } + + @java.lang.Override() + public boolean add(T element) { + return false; + } + + @java.lang.Override() + public boolean addAll(int index, java.util.Collection elements) { + return false; + } + + @java.lang.Override() + public boolean addAll(java.util.Collection elements) { + return false; + } + + @java.lang.Override() + public void clear() { + } + + @java.lang.Override() + public boolean contains(@org.jetbrains.annotations.Nullable() + java.lang.Object element) { + return false; + } + + @java.lang.Override() + public boolean containsAll(@org.jetbrains.annotations.NotNull() + java.util.Collection elements) { + return false; + } + + @java.lang.Override() + @org.jetbrains.annotations.NotNull() + public T get(int index) { + return null; + } + + @java.lang.Override() + public int getSize() { + return 0; + } + + @java.lang.Override() + public int indexOf(@org.jetbrains.annotations.Nullable() + java.lang.Object element) { + return 0; + } + + @java.lang.Override() + public boolean isEmpty() { + return false; + } + + @java.lang.Override() + @org.jetbrains.annotations.NotNull() + public java.util.Iterator iterator() { + return null; + } + + @java.lang.Override() + public int lastIndexOf(@org.jetbrains.annotations.Nullable() + java.lang.Object element) { + return 0; + } + + @java.lang.Override() + @org.jetbrains.annotations.NotNull() + public java.util.ListIterator listIterator() { + return null; + } + + @java.lang.Override() + @org.jetbrains.annotations.NotNull() + public java.util.ListIterator listIterator(int index) { + return null; + } + + public T remove(int index) { + return null; + } + + @java.lang.Override() + public boolean remove(java.lang.Object element) { + return false; + } + + @java.lang.Override() + public boolean removeAll(java.util.Collection elements) { + return false; + } + + @java.lang.Override() + public boolean retainAll(java.util.Collection elements) { + return false; + } + + @java.lang.Override() + public T set(int index, T element) { + return null; + } + + @java.lang.Override() + public final int size() { + return 0; + } + + @java.lang.Override() + @org.jetbrains.annotations.NotNull() + public java.util.List subList(int fromIndex, int toIndex) { + return null; + } + + public java.lang.Object[] toArray() { + return null; + } + + public T[] toArray(T[] array) { + return null; + } +} diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/delegateToList.kt b/plugins/kapt3/kapt3-compiler/testData/converter/delegateToList.kt new file mode 100644 index 00000000000..5777a0c6245 --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/delegateToList.kt @@ -0,0 +1,3 @@ +class MyList( + private val wrappedList: List, +) : List by wrappedList diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/delegateToList.txt b/plugins/kapt3/kapt3-compiler/testData/converter/delegateToList.txt new file mode 100644 index 00000000000..6dd20b21f25 --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/delegateToList.txt @@ -0,0 +1,78 @@ +@kotlin.Metadata() +public final class MyList implements java.util.List, kotlin.jvm.internal.markers.KMappedMarker { + private final java.util.List wrappedList = null; + + public MyList(@org.jetbrains.annotations.NotNull() + java.util.List wrappedList) { + super(); + } + + @java.lang.Override() + public boolean contains(@org.jetbrains.annotations.NotNull() + java.lang.Object element) { + return false; + } + + @java.lang.Override() + public boolean containsAll(@org.jetbrains.annotations.NotNull() + java.util.Collection elements) { + return false; + } + + @java.lang.Override() + @org.jetbrains.annotations.NotNull() + public T get(int index) { + return null; + } + + @java.lang.Override() + public int getSize() { + return 0; + } + + @java.lang.Override() + public int indexOf(@org.jetbrains.annotations.NotNull() + java.lang.Object element) { + return 0; + } + + @java.lang.Override() + public boolean isEmpty() { + return false; + } + + @java.lang.Override() + @org.jetbrains.annotations.NotNull() + public java.util.Iterator iterator() { + return null; + } + + @java.lang.Override() + public int lastIndexOf(@org.jetbrains.annotations.NotNull() + java.lang.Object element) { + return 0; + } + + @java.lang.Override() + @org.jetbrains.annotations.NotNull() + public java.util.ListIterator listIterator() { + return null; + } + + @java.lang.Override() + @org.jetbrains.annotations.NotNull() + public java.util.ListIterator listIterator(int index) { + return null; + } + + @java.lang.Override() + public final int size() { + return 0; + } + + @java.lang.Override() + @org.jetbrains.annotations.NotNull() + public java.util.List subList(int fromIndex, int toIndex) { + return null; + } +} diff --git a/plugins/kapt3/kapt3-compiler/tests-gen/org/jetbrains/kotlin/kapt3/test/runners/ClassFileToSourceStubConverterTestGenerated.java b/plugins/kapt3/kapt3-compiler/tests-gen/org/jetbrains/kotlin/kapt3/test/runners/ClassFileToSourceStubConverterTestGenerated.java index ff7c6c836ac..a726219e170 100644 --- a/plugins/kapt3/kapt3-compiler/tests-gen/org/jetbrains/kotlin/kapt3/test/runners/ClassFileToSourceStubConverterTestGenerated.java +++ b/plugins/kapt3/kapt3-compiler/tests-gen/org/jetbrains/kotlin/kapt3/test/runners/ClassFileToSourceStubConverterTestGenerated.java @@ -151,6 +151,12 @@ public class ClassFileToSourceStubConverterTestGenerated extends AbstractClassFi runTest("plugins/kapt3/kapt3-compiler/testData/converter/delegateCorrectErrorTypes.kt"); } + @Test + @TestMetadata("delegateToList.kt") + public void testDelegateToList() throws Exception { + runTest("plugins/kapt3/kapt3-compiler/testData/converter/delegateToList.kt"); + } + @Test @TestMetadata("delegatedProperties.kt") public void testDelegatedProperties() throws Exception { diff --git a/plugins/kapt3/kapt3-compiler/tests-gen/org/jetbrains/kotlin/kapt3/test/runners/IrClassFileToSourceStubConverterTestGenerated.java b/plugins/kapt3/kapt3-compiler/tests-gen/org/jetbrains/kotlin/kapt3/test/runners/IrClassFileToSourceStubConverterTestGenerated.java index 6830082106f..8e5ac939d83 100644 --- a/plugins/kapt3/kapt3-compiler/tests-gen/org/jetbrains/kotlin/kapt3/test/runners/IrClassFileToSourceStubConverterTestGenerated.java +++ b/plugins/kapt3/kapt3-compiler/tests-gen/org/jetbrains/kotlin/kapt3/test/runners/IrClassFileToSourceStubConverterTestGenerated.java @@ -151,6 +151,12 @@ public class IrClassFileToSourceStubConverterTestGenerated extends AbstractIrCla runTest("plugins/kapt3/kapt3-compiler/testData/converter/delegateCorrectErrorTypes.kt"); } + @Test + @TestMetadata("delegateToList.kt") + public void testDelegateToList() throws Exception { + runTest("plugins/kapt3/kapt3-compiler/testData/converter/delegateToList.kt"); + } + @Test @TestMetadata("delegatedProperties.kt") public void testDelegatedProperties() throws Exception {