[FE 1.0] Support loading rxjava3 nullability annotations on bounded wildcards
^KT-53041 Fixed
This commit is contained in:
committed by
teamcity
parent
9f72193d57
commit
cb2dbca0c3
+9
-2
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMapper
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||
import org.jetbrains.kotlin.types.TypeUsage
|
||||
import org.jetbrains.kotlin.load.java.extractNullabilityAnnotationOnBoundedWildcard
|
||||
import org.jetbrains.kotlin.types.TypeUsage.COMMON
|
||||
import org.jetbrains.kotlin.types.TypeUsage.SUPERTYPE
|
||||
import org.jetbrains.kotlin.load.java.lazy.LazyJavaAnnotations
|
||||
@@ -287,8 +287,15 @@ class JavaTypeResolver(
|
||||
if (bound == null || projectionKind.isConflictingArgumentFor(typeParameter))
|
||||
makeStarProjection(typeParameter, attr)
|
||||
else {
|
||||
val nullabilityAnnotationOnWildcard = extractNullabilityAnnotationOnBoundedWildcard(c, javaType)
|
||||
val transformedJavaType = transformJavaType(bound, COMMON.toAttributes()).let {
|
||||
if (nullabilityAnnotationOnWildcard != null) {
|
||||
it.replaceAnnotations(Annotations.create(it.annotations + nullabilityAnnotationOnWildcard))
|
||||
} else it
|
||||
}
|
||||
|
||||
createProjection(
|
||||
type = transformJavaType(bound, COMMON.toAttributes()),
|
||||
type = transformedJavaType,
|
||||
projectionKind = projectionKind,
|
||||
typeParameterDescriptor = typeParameter
|
||||
)
|
||||
|
||||
@@ -18,7 +18,11 @@ package org.jetbrains.kotlin.load.java
|
||||
|
||||
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||
import org.jetbrains.kotlin.load.java.descriptors.JavaMethodDescriptor
|
||||
import org.jetbrains.kotlin.load.java.lazy.LazyJavaAnnotations
|
||||
import org.jetbrains.kotlin.load.java.lazy.LazyJavaResolverContext
|
||||
import org.jetbrains.kotlin.load.java.structure.JavaWildcardType
|
||||
import org.jetbrains.kotlin.resolve.deprecation.DescriptorBasedDeprecationInfo
|
||||
import org.jetbrains.kotlin.resolve.deprecation.DeprecationLevelValue
|
||||
|
||||
@@ -36,3 +40,9 @@ fun isJspecifyEnabledInStrictMode(javaTypeEnhancementState: JavaTypeEnhancementS
|
||||
|
||||
fun hasErasedValueParameters(memberDescriptor: CallableMemberDescriptor) =
|
||||
memberDescriptor is FunctionDescriptor && memberDescriptor.getUserData(JavaMethodDescriptor.HAS_ERASED_VALUE_PARAMETERS) == true
|
||||
|
||||
// For now it's supported only for RxJava3 annotations, see KT-53041
|
||||
fun extractNullabilityAnnotationOnBoundedWildcard(c: LazyJavaResolverContext, wildcardType: JavaWildcardType): AnnotationDescriptor? {
|
||||
require(wildcardType.bound != null) { "Nullability annotations on unbounded wildcards aren't supported" }
|
||||
return LazyJavaAnnotations(c, wildcardType).find { annotation -> RXJAVA3_ANNOTATIONS.any { annotation.fqName == it } }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user