KAPT: Fix an ISE when processing unresolved generic types

Error types that are generic could sometimes throw an ISE when
generating the stub.

This fixes KT-43786
This commit is contained in:
Nicklas Ansman Giertz
2022-09-16 11:54:52 -04:00
committed by Alexander Udalov
parent 21fe0e80ff
commit 115bc6ac89
6 changed files with 90 additions and 1 deletions
@@ -19,6 +19,10 @@ package org.jetbrains.kotlin.types
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.descriptors.annotations.FilteredAnnotations
import org.jetbrains.kotlin.types.checker.SimpleClassicTypeSystemContext.replaceArguments
import org.jetbrains.kotlin.types.error.ErrorType
import org.jetbrains.kotlin.types.error.ErrorUtils
import org.jetbrains.kotlin.types.model.typeConstructor
abstract class TypeSubstitution {
companion object {
@@ -171,6 +175,10 @@ fun SimpleType.replace(
return replaceAttributes(newAttributes)
}
if (this is ErrorType) {
return replaceArguments(newArguments)
}
return KotlinTypeFactory.simpleType(
newAttributes,
constructor,
@@ -24,8 +24,11 @@ class ErrorType @JvmOverloads internal constructor(
override fun replaceAttributes(newAttributes: TypeAttributes): SimpleType = this
fun replaceArguments(newArguments: List<TypeProjection>): ErrorType =
ErrorType(constructor, memberScope, kind, newArguments, isMarkedNullable, *formatParams)
override fun makeNullableAsSpecified(newNullability: Boolean): SimpleType =
ErrorType(constructor, memberScope, kind, arguments, newNullability, *formatParams)
ErrorType(constructor, memberScope, kind, arguments, newNullability, *formatParams)
@TypeRefinement
override fun refine(kotlinTypeRefiner: KotlinTypeRefiner) = this
@@ -0,0 +1,14 @@
// CORRECT_ERROR_TYPES
@Suppress("UNRESOLVED_REFERENCE")
class Application {
lateinit var _preferencesDataStore: DataStore<Preferences>
companion object {
@JvmStatic
fun get(): Application = error()
@JvmStatic
fun getPreferencesDataStore() = get()._preferencesDataStore
}
}
@@ -0,0 +1,52 @@
@kotlin.Metadata()
@kotlin.Suppress(names = {"UNRESOLVED_REFERENCE"})
public final class Application {
public DataStore<Preferences> _preferencesDataStore;
@org.jetbrains.annotations.NotNull()
public static final Application.Companion Companion = null;
public Application() {
super();
}
@org.jetbrains.annotations.NotNull()
public final DataStore<Preferences> get_preferencesDataStore() {
return null;
}
public final void set_preferencesDataStore(@org.jetbrains.annotations.NotNull()
DataStore<Preferences> p0) {
}
@kotlin.jvm.JvmStatic()
@org.jetbrains.annotations.NotNull()
public static final Application get() {
return null;
}
@kotlin.jvm.JvmStatic()
@org.jetbrains.annotations.NotNull()
public static final java.lang.Object getPreferencesDataStore() {
return null;
}
@kotlin.Metadata()
public static final class Companion {
private Companion() {
super();
}
@kotlin.jvm.JvmStatic()
@org.jetbrains.annotations.NotNull()
public final Application get() {
return null;
}
@kotlin.jvm.JvmStatic()
@org.jetbrains.annotations.NotNull()
public final java.lang.Object getPreferencesDataStore() {
return null;
}
}
}
@@ -451,6 +451,12 @@ public class ClassFileToSourceStubConverterTestGenerated extends AbstractClassFi
runTest("plugins/kapt3/kapt3-compiler/testData/converter/kt34569.kt");
}
@Test
@TestMetadata("kt43786.kt")
public void testKt43786() throws Exception {
runTest("plugins/kapt3/kapt3-compiler/testData/converter/kt43786.kt");
}
@Test
@TestMetadata("lazyProperty.kt")
public void testLazyProperty() throws Exception {
@@ -451,6 +451,12 @@ public class IrClassFileToSourceStubConverterTestGenerated extends AbstractIrCla
runTest("plugins/kapt3/kapt3-compiler/testData/converter/kt34569.kt");
}
@Test
@TestMetadata("kt43786.kt")
public void testKt43786() throws Exception {
runTest("plugins/kapt3/kapt3-compiler/testData/converter/kt43786.kt");
}
@Test
@TestMetadata("lazyProperty.kt")
public void testLazyProperty() throws Exception {