diff --git a/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt b/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt index 9678c66c742..b4ddd8a8689 100644 --- a/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt +++ b/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ClassFileToSourceStubConverter.kt @@ -762,7 +762,8 @@ class ClassFileToSourceStubConverter(val kaptContext: KaptContextForStubGenerati } else if (descriptor is FunctionDescriptor && valueParametersFromDescriptor.size == parameters.size) { getNonErrorType(valueParametersFromDescriptor[index].type, METHOD_PARAMETER_TYPE, ktTypeProvider = { - (kaptContext.origins[method]?.element as? KtFunction)?.valueParameters?.get(index)?.typeReference + val sourceElement = kaptContext.origins[method]?.element as? KtFunction + sourceElement?.valueParameters?.getOrNull(index)?.typeReference }, ifNonError = { lazyType() }) } else { diff --git a/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/ClassFileToSourceStubConverterTestGenerated.java b/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/ClassFileToSourceStubConverterTestGenerated.java index ea9aab5d8d1..a95f8e556bd 100644 --- a/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/ClassFileToSourceStubConverterTestGenerated.java +++ b/plugins/kapt3/kapt3-compiler/test/org/jetbrains/kotlin/kapt3/test/ClassFileToSourceStubConverterTestGenerated.java @@ -374,6 +374,11 @@ public class ClassFileToSourceStubConverterTestGenerated extends AbstractClassFi runTest("plugins/kapt3/kapt3-compiler/testData/converter/strangeNames.kt"); } + @TestMetadata("suspendErrorTypes.kt") + public void testSuspendErrorTypes() throws Exception { + runTest("plugins/kapt3/kapt3-compiler/testData/converter/suspendErrorTypes.kt"); + } + @TestMetadata("topLevel.kt") public void testTopLevel() throws Exception { runTest("plugins/kapt3/kapt3-compiler/testData/converter/topLevel.kt"); diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/suspendErrorTypes.kt b/plugins/kapt3/kapt3-compiler/testData/converter/suspendErrorTypes.kt new file mode 100644 index 00000000000..e0663b4c5b2 --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/suspendErrorTypes.kt @@ -0,0 +1,9 @@ +// CORRECT_ERROR_TYPES +// WITH_RUNTIME + +@file:Suppress("UNRESOLVED_REFERENCE") +class Foo { + suspend fun a(): ABC = TODO() + + suspend fun b(): Result = TODO() +} \ No newline at end of file diff --git a/plugins/kapt3/kapt3-compiler/testData/converter/suspendErrorTypes.txt b/plugins/kapt3/kapt3-compiler/testData/converter/suspendErrorTypes.txt new file mode 100644 index 00000000000..611e55b92cb --- /dev/null +++ b/plugins/kapt3/kapt3-compiler/testData/converter/suspendErrorTypes.txt @@ -0,0 +1,21 @@ +import java.lang.System; + +@kotlin.Metadata() +public final class Foo { + + @org.jetbrains.annotations.Nullable() + public final java.lang.Object a(@org.jetbrains.annotations.NotNull() + kotlin.coroutines.Continuation p0) { + return null; + } + + @org.jetbrains.annotations.Nullable() + public final java.lang.Object b(@org.jetbrains.annotations.NotNull() + kotlin.coroutines.Continuation> p0) { + return null; + } + + public Foo() { + super(); + } +}