Kapt: Use correct type mapping mode while mapping super types (KT-27126)
This commit is contained in:
+1
-1
@@ -137,7 +137,7 @@ class ErrorTypeCorrector(
|
||||
//TODO figure out if the containing method is an annotation method
|
||||
RETURN_TYPE -> TypeMappingMode.getOptimalModeForReturnType(kotlinType, false)
|
||||
METHOD_PARAMETER_TYPE -> TypeMappingMode.getOptimalModeForValueParameter(kotlinType)
|
||||
SUPER_TYPE -> TypeMappingMode.getOptimalModeForValueParameter(kotlinType)
|
||||
SUPER_TYPE -> TypeMappingMode.SUPER_TYPE
|
||||
}.updateArgumentModeFromAnnotations(kotlinType)
|
||||
|
||||
val typeParameters = (target as? ClassifierDescriptor)?.typeConstructor?.parameters
|
||||
|
||||
+10
@@ -109,6 +109,11 @@ public class ClassFileToSourceStubConverterTestGenerated extends AbstractClassFi
|
||||
runTest("plugins/kapt3/kapt3-compiler/testData/converter/functions.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("genericParameters.kt")
|
||||
public void testGenericParameters() throws Exception {
|
||||
runTest("plugins/kapt3/kapt3-compiler/testData/converter/genericParameters.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("genericRawSignatures.kt")
|
||||
public void testGenericRawSignatures() throws Exception {
|
||||
runTest("plugins/kapt3/kapt3-compiler/testData/converter/genericRawSignatures.kt");
|
||||
@@ -239,6 +244,11 @@ public class ClassFileToSourceStubConverterTestGenerated extends AbstractClassFi
|
||||
runTest("plugins/kapt3/kapt3-compiler/testData/converter/kt25071.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("kt27126.kt")
|
||||
public void testKt27126() throws Exception {
|
||||
runTest("plugins/kapt3/kapt3-compiler/testData/converter/kt27126.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("leadingDollars.kt")
|
||||
public void testLeadingDollars() throws Exception {
|
||||
runTest("plugins/kapt3/kapt3-compiler/testData/converter/leadingDollars.kt");
|
||||
|
||||
+5
-1
@@ -48,4 +48,8 @@ class Generics3 : Foo<Bar, Baz, Boo<Baz, List<*>>, String>
|
||||
class MappedList<R>() : AbstractList<R>(), List<R> {
|
||||
override fun get(index: Int) = throw RuntimeException()
|
||||
override val size get() = 0
|
||||
}
|
||||
}
|
||||
|
||||
interface Parent<A : CharSequence?, B>
|
||||
|
||||
class Child : AbstractList<String>(), Parent<String, Int>, List<String>
|
||||
+55
-1
@@ -2,6 +2,50 @@ package test;
|
||||
|
||||
import java.lang.System;
|
||||
|
||||
@kotlin.Metadata()
|
||||
public final class Child extends kotlin.collections.AbstractList<java.lang.String> implements test.Parent<java.lang.String, java.lang.Integer>, java.util.List<java.lang.String> {
|
||||
|
||||
public Child() {
|
||||
super();
|
||||
}
|
||||
|
||||
@java.lang.Override()
|
||||
public boolean contains(java.lang.String p0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@java.lang.Override()
|
||||
public final boolean contains(java.lang.Object p0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@java.lang.Override()
|
||||
public int indexOf(java.lang.String p0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@java.lang.Override()
|
||||
public final int indexOf(java.lang.Object p0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@java.lang.Override()
|
||||
public int lastIndexOf(java.lang.String p0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@java.lang.Override()
|
||||
public final int lastIndexOf(java.lang.Object p0) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////
|
||||
|
||||
package test;
|
||||
|
||||
import java.lang.System;
|
||||
|
||||
@kotlin.Metadata()
|
||||
public class Cl {
|
||||
|
||||
@@ -69,7 +113,7 @@ package test;
|
||||
import java.lang.System;
|
||||
|
||||
@kotlin.Metadata()
|
||||
public final class MappedList<R extends java.lang.Object> extends kotlin.collections.AbstractList<R> implements java.util.List<? extends R> {
|
||||
public final class MappedList<R extends java.lang.Object> extends kotlin.collections.AbstractList<R> implements java.util.List<R> {
|
||||
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
@java.lang.Override()
|
||||
@@ -93,6 +137,16 @@ package test;
|
||||
|
||||
import java.lang.System;
|
||||
|
||||
@kotlin.Metadata()
|
||||
public abstract interface Parent<A extends java.lang.CharSequence, B extends java.lang.Object> {
|
||||
}
|
||||
|
||||
////////////////////
|
||||
|
||||
package test;
|
||||
|
||||
import java.lang.System;
|
||||
|
||||
@kotlin.Metadata()
|
||||
public final class TBarBazCl extends test.Cl implements Bar, Baz {
|
||||
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
// CORRECT_ERROR_TYPES
|
||||
// WITH_RUNTIME
|
||||
|
||||
class MappedList<out T, R>(val list: List<T>, private val function: (T) -> R) : AbstractList<R>(), List<R> {
|
||||
override fun get(index: Int) = function(list[index])
|
||||
override val size get() = list.size
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
import java.lang.System;
|
||||
|
||||
@kotlin.Metadata()
|
||||
public final class MappedList<T extends java.lang.Object, R extends java.lang.Object> extends kotlin.collections.AbstractList<R> implements java.util.List<R> {
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
private final java.util.List<T> list = null;
|
||||
private final kotlin.jvm.functions.Function1<T, R> function = null;
|
||||
|
||||
@java.lang.Override()
|
||||
public R get(int index) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@java.lang.Override()
|
||||
public int getSize() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public final java.util.List<T> getList() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public MappedList(@org.jetbrains.annotations.NotNull()
|
||||
java.util.List<? extends T> list, @org.jetbrains.annotations.NotNull()
|
||||
kotlin.jvm.functions.Function1<? super T, ? extends R> function) {
|
||||
super();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
// WITH_RUNTIME
|
||||
|
||||
@file:Suppress("NOTHING_TO_INLINE")
|
||||
package test
|
||||
|
||||
import kotlin.properties.ReadWriteProperty
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
inline fun charSequence(key: String? = null) = object : BundleProperty<CharSequence>(key) {
|
||||
override fun getValue(bundle: Any, key: String): CharSequence? = TODO()
|
||||
override fun setValue(bundle: Any, key: String, value: CharSequence) {}
|
||||
}
|
||||
|
||||
abstract class NullableBundleProperty<EE>(private val key: String?) : ReadWriteProperty<Any, EE?> {
|
||||
private inline fun KProperty<*>.toKey(): String {
|
||||
return toString()
|
||||
}
|
||||
|
||||
override fun getValue(thisRef: Any, property: KProperty<*>): EE? = getValue(thisRef, key ?: property.toKey())
|
||||
override fun setValue(thisRef: Any, property: KProperty<*>, value: EE?) {
|
||||
setNullableValue(thisRef, key ?: property.toKey(), value)
|
||||
}
|
||||
|
||||
abstract fun getValue(bundle: Any, key: String): EE?
|
||||
abstract fun setNullableValue(bundle: Any, key: String, value: EE?)
|
||||
}
|
||||
|
||||
abstract class BundleProperty<AA>(key: String?) : NullableBundleProperty<AA>(key) {
|
||||
|
||||
final override fun setValue(thisRef: Any, property: KProperty<*>, value: AA?) {
|
||||
super.setValue(thisRef, property, value)
|
||||
}
|
||||
|
||||
final override fun getValue(thisRef: Any, property: KProperty<*>): AA = super.getValue(thisRef, property)!!
|
||||
final override fun setNullableValue(bundle: Any, key: String, value: AA?) {
|
||||
setValue(bundle, key, value!!)
|
||||
}
|
||||
|
||||
abstract fun setValue(bundle: Any, key: String, value: AA)
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
package test;
|
||||
|
||||
import java.lang.System;
|
||||
|
||||
@kotlin.Metadata()
|
||||
public abstract class BundleProperty<AA extends java.lang.Object> extends test.NullableBundleProperty<AA> {
|
||||
|
||||
@java.lang.Override()
|
||||
public final void setValue(@org.jetbrains.annotations.NotNull()
|
||||
java.lang.Object thisRef, @org.jetbrains.annotations.NotNull()
|
||||
kotlin.reflect.KProperty<?> property, @org.jetbrains.annotations.Nullable()
|
||||
AA value) {
|
||||
}
|
||||
|
||||
@java.lang.Override()
|
||||
public final AA getValue(@org.jetbrains.annotations.NotNull()
|
||||
java.lang.Object thisRef, @org.jetbrains.annotations.NotNull()
|
||||
kotlin.reflect.KProperty<?> property) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@java.lang.Override()
|
||||
public final void setNullableValue(@org.jetbrains.annotations.NotNull()
|
||||
java.lang.Object bundle, @org.jetbrains.annotations.NotNull()
|
||||
java.lang.String key, @org.jetbrains.annotations.Nullable()
|
||||
AA value) {
|
||||
}
|
||||
|
||||
public abstract void setValue(@org.jetbrains.annotations.NotNull()
|
||||
java.lang.Object bundle, @org.jetbrains.annotations.NotNull()
|
||||
java.lang.String key, AA value);
|
||||
|
||||
public BundleProperty(@org.jetbrains.annotations.Nullable()
|
||||
java.lang.String key) {
|
||||
super(null);
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////
|
||||
|
||||
package test;
|
||||
|
||||
import java.lang.System;
|
||||
|
||||
@kotlin.Suppress(names = {"NOTHING_TO_INLINE"})
|
||||
@kotlin.Metadata()
|
||||
public final class Kt27126Kt {
|
||||
|
||||
public Kt27126Kt() {
|
||||
super();
|
||||
}
|
||||
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final test.BundleProperty<java.lang.CharSequence> charSequence(@org.jetbrains.annotations.Nullable()
|
||||
java.lang.String key) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////
|
||||
|
||||
package test;
|
||||
|
||||
import java.lang.System;
|
||||
|
||||
@kotlin.Metadata()
|
||||
public abstract class NullableBundleProperty<EE extends java.lang.Object> implements kotlin.properties.ReadWriteProperty<java.lang.Object, EE> {
|
||||
private final java.lang.String key = null;
|
||||
|
||||
private final java.lang.String toKey(@org.jetbrains.annotations.NotNull()
|
||||
kotlin.reflect.KProperty<?> $receiver) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@org.jetbrains.annotations.Nullable()
|
||||
@java.lang.Override()
|
||||
public EE getValue(@org.jetbrains.annotations.NotNull()
|
||||
java.lang.Object thisRef, @org.jetbrains.annotations.NotNull()
|
||||
kotlin.reflect.KProperty<?> property) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@java.lang.Override()
|
||||
public void setValue(@org.jetbrains.annotations.NotNull()
|
||||
java.lang.Object thisRef, @org.jetbrains.annotations.NotNull()
|
||||
kotlin.reflect.KProperty<?> property, @org.jetbrains.annotations.Nullable()
|
||||
EE value) {
|
||||
}
|
||||
|
||||
@org.jetbrains.annotations.Nullable()
|
||||
public abstract EE getValue(@org.jetbrains.annotations.NotNull()
|
||||
java.lang.Object bundle, @org.jetbrains.annotations.NotNull()
|
||||
java.lang.String key);
|
||||
|
||||
public abstract void setNullableValue(@org.jetbrains.annotations.NotNull()
|
||||
java.lang.Object bundle, @org.jetbrains.annotations.NotNull()
|
||||
java.lang.String key, @org.jetbrains.annotations.Nullable()
|
||||
EE value);
|
||||
|
||||
public NullableBundleProperty(@org.jetbrains.annotations.Nullable()
|
||||
java.lang.String key) {
|
||||
super();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user