JVM: do not assume that methods have body in BridgeLowering

They don't have bodies in the kapt stub generation mode.

 #KT-58787 Fixed
This commit is contained in:
Alexander Udalov
2023-05-24 15:26:13 +02:00
committed by Space Team
parent b2230327df
commit d32268c5cb
6 changed files with 232 additions and 4 deletions
@@ -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()}")
}
}
}
@@ -0,0 +1,134 @@
@kotlin.Metadata()
public final class MyList<T extends java.lang.Object> implements java.util.List<T>, kotlin.jvm.internal.markers.KMappedMarker {
@org.jetbrains.annotations.NotNull()
private final java.util.List<T> wrappedList = null;
public MyList(@org.jetbrains.annotations.NotNull()
java.util.List<? extends T> 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<? extends T> elements) {
return false;
}
@java.lang.Override()
public boolean addAll(java.util.Collection<? extends T> 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<? extends java.lang.Object> 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<T> 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<T> listIterator() {
return null;
}
@java.lang.Override()
@org.jetbrains.annotations.NotNull()
public java.util.ListIterator<T> 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<? extends java.lang.Object> elements) {
return false;
}
@java.lang.Override()
public boolean retainAll(java.util.Collection<? extends java.lang.Object> 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<T> subList(int fromIndex, int toIndex) {
return null;
}
public java.lang.Object[] toArray() {
return null;
}
public <T extends java.lang.Object>T[] toArray(T[] array) {
return null;
}
}
@@ -0,0 +1,3 @@
class MyList<out T : Any>(
private val wrappedList: List<T>,
) : List<T> by wrappedList
@@ -0,0 +1,78 @@
@kotlin.Metadata()
public final class MyList<T extends java.lang.Object> implements java.util.List<T>, kotlin.jvm.internal.markers.KMappedMarker {
private final java.util.List<T> wrappedList = null;
public MyList(@org.jetbrains.annotations.NotNull()
java.util.List<? extends T> 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<? extends java.lang.Object> 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<T> 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<T> listIterator() {
return null;
}
@java.lang.Override()
@org.jetbrains.annotations.NotNull()
public java.util.ListIterator<T> 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<T> subList(int fromIndex, int toIndex) {
return null;
}
}
@@ -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 {
@@ -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 {