Kapt3: Do not check type for star projection, it causes the infinite recursion. Also limit recursion depth to 10. (KT-15841)
This commit is contained in:
@@ -107,8 +107,13 @@ private fun convertFunctionType(type: KtFunctionType, converter: ClassFileToSour
|
|||||||
return treeMaker.TypeApply(treeMaker.SimpleName("Function" + (parameterTypes.size - 1)), parameterTypes)
|
return treeMaker.TypeApply(treeMaker.SimpleName("Function" + (parameterTypes.size - 1)), parameterTypes)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun KotlinType.containsErrorTypes(): Boolean {
|
fun KotlinType.containsErrorTypes(allowedDepth: Int = 10): Boolean {
|
||||||
|
// Need to limit recursion depth in case of complex recursive generics
|
||||||
|
if (allowedDepth <= 0) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
if (this.isError) return true
|
if (this.isError) return true
|
||||||
if (this.arguments.any { it.type.containsErrorTypes() }) return true
|
if (this.arguments.any { !it.isStarProjection && it.type.containsErrorTypes(allowedDepth - 1) }) return true
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -20,6 +20,9 @@ class Test {
|
|||||||
val m = ABC()
|
val m = ABC()
|
||||||
val n = "".toString()
|
val n = "".toString()
|
||||||
|
|
||||||
|
lateinit var o11: List<List<List<List<List<List<List<List<List<List<ABC>>>>>>>>>>
|
||||||
|
lateinit var o10: List<List<List<List<List<List<List<List<List<ABC>>>>>>>>>
|
||||||
|
|
||||||
fun f1(a: ABC): BCD? {
|
fun f1(a: ABC): BCD? {
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
@@ -31,4 +34,8 @@ class Test {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun f4() = ABC()
|
fun f4() = ABC()
|
||||||
}
|
|
||||||
|
fun <T> MyType<T>.f5(): java.lang.Class<Enum<*>>? = null
|
||||||
|
}
|
||||||
|
|
||||||
|
class MyType<T>
|
||||||
@@ -1,3 +1,13 @@
|
|||||||
|
public final class MyType<T extends java.lang.Object> {
|
||||||
|
|
||||||
|
public MyType() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////
|
||||||
|
|
||||||
|
|
||||||
@kotlin.Suppress(names = {"UNRESOLVED_REFERENCE"})
|
@kotlin.Suppress(names = {"UNRESOLVED_REFERENCE"})
|
||||||
public final class Test {
|
public final class Test {
|
||||||
public ABC a;
|
public ABC a;
|
||||||
@@ -14,6 +24,8 @@ public final class Test {
|
|||||||
public ABC.BCD.EFG l;
|
public ABC.BCD.EFG l;
|
||||||
private final error.NonExistentClass m = null;
|
private final error.NonExistentClass m = null;
|
||||||
private final java.lang.String n = "";
|
private final java.lang.String n = "";
|
||||||
|
public java.util.List<? extends java.util.List<? extends java.util.List<? extends java.util.List<? extends java.util.List<? extends java.util.List<? extends java.util.List<? extends java.util.List<? extends java.util.List<? extends java.util.List<? extends error.NonExistentClass>>>>>>>>>> o11;
|
||||||
|
public List<List<List<List<List<List<List<List<List<ABC>>>>>>>>> o10;
|
||||||
|
|
||||||
public final ABC getA() {
|
public final ABC getA() {
|
||||||
return null;
|
return null;
|
||||||
@@ -98,6 +110,20 @@ public final class Test {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final java.util.List<java.util.List<java.util.List<java.util.List<java.util.List<java.util.List<java.util.List<java.util.List<java.util.List<java.util.List<error.NonExistentClass>>>>>>>>>> getO11() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final void setO11(java.util.List<? extends java.util.List<? extends java.util.List<? extends java.util.List<? extends java.util.List<? extends java.util.List<? extends java.util.List<? extends java.util.List<? extends java.util.List<? extends java.util.List<? extends error.NonExistentClass>>>>>>>>>> p0) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public final List<List<List<List<List<List<List<List<List<ABC>>>>>>>>> getO10() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final void setO10(List<List<List<List<List<List<List<List<List<ABC>>>>>>>>> p0) {
|
||||||
|
}
|
||||||
|
|
||||||
public final BCD f1(ABC a) {
|
public final BCD f1(ABC a) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -113,6 +139,10 @@ public final class Test {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final <T extends java.lang.Object>java.lang.Class<java.lang.Enum<?>> f5(MyType<T> $receiver) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public Test() {
|
public Test() {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user