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
|
//TODO figure out if the containing method is an annotation method
|
||||||
RETURN_TYPE -> TypeMappingMode.getOptimalModeForReturnType(kotlinType, false)
|
RETURN_TYPE -> TypeMappingMode.getOptimalModeForReturnType(kotlinType, false)
|
||||||
METHOD_PARAMETER_TYPE -> TypeMappingMode.getOptimalModeForValueParameter(kotlinType)
|
METHOD_PARAMETER_TYPE -> TypeMappingMode.getOptimalModeForValueParameter(kotlinType)
|
||||||
SUPER_TYPE -> TypeMappingMode.getOptimalModeForValueParameter(kotlinType)
|
SUPER_TYPE -> TypeMappingMode.SUPER_TYPE
|
||||||
}.updateArgumentModeFromAnnotations(kotlinType)
|
}.updateArgumentModeFromAnnotations(kotlinType)
|
||||||
|
|
||||||
val typeParameters = (target as? ClassifierDescriptor)?.typeConstructor?.parameters
|
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");
|
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")
|
@TestMetadata("genericRawSignatures.kt")
|
||||||
public void testGenericRawSignatures() throws Exception {
|
public void testGenericRawSignatures() throws Exception {
|
||||||
runTest("plugins/kapt3/kapt3-compiler/testData/converter/genericRawSignatures.kt");
|
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");
|
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")
|
@TestMetadata("leadingDollars.kt")
|
||||||
public void testLeadingDollars() throws Exception {
|
public void testLeadingDollars() throws Exception {
|
||||||
runTest("plugins/kapt3/kapt3-compiler/testData/converter/leadingDollars.kt");
|
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> {
|
class MappedList<R>() : AbstractList<R>(), List<R> {
|
||||||
override fun get(index: Int) = throw RuntimeException()
|
override fun get(index: Int) = throw RuntimeException()
|
||||||
override val size get() = 0
|
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;
|
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()
|
@kotlin.Metadata()
|
||||||
public class Cl {
|
public class Cl {
|
||||||
|
|
||||||
@@ -69,7 +113,7 @@ package test;
|
|||||||
import java.lang.System;
|
import java.lang.System;
|
||||||
|
|
||||||
@kotlin.Metadata()
|
@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()
|
@org.jetbrains.annotations.NotNull()
|
||||||
@java.lang.Override()
|
@java.lang.Override()
|
||||||
@@ -93,6 +137,16 @@ package test;
|
|||||||
|
|
||||||
import java.lang.System;
|
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()
|
@kotlin.Metadata()
|
||||||
public final class TBarBazCl extends test.Cl implements Bar, Baz {
|
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