[JVM IR] Do not add nullability annotation for functions that return
platform types.
This behavior matches the non-IR backend, which was added in
f16dcdd8a9.
This commit is contained in:
committed by
Dmitry Petrov
parent
0c984c5e62
commit
06b6477d04
+8
-4
@@ -32,10 +32,8 @@ import org.jetbrains.kotlin.descriptors.annotations.KotlinRetention
|
||||
import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.types.classifierOrNull
|
||||
import org.jetbrains.kotlin.ir.types.isMarkedNullable
|
||||
import org.jetbrains.kotlin.ir.types.isNullable
|
||||
import org.jetbrains.kotlin.ir.types.*
|
||||
import org.jetbrains.kotlin.ir.types.impl.originalKotlinType
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.load.kotlin.FileBasedKotlinClass
|
||||
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinarySourceElement
|
||||
@@ -45,6 +43,7 @@ import org.jetbrains.kotlin.resolve.checkers.ExpectedActualDeclarationChecker
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedClassDescriptor
|
||||
import org.jetbrains.kotlin.synthetic.isVisibleOutside
|
||||
import org.jetbrains.kotlin.types.TypeSystemCommonBackendContext
|
||||
import org.jetbrains.kotlin.types.isNullabilityFlexible
|
||||
import org.jetbrains.kotlin.types.model.KotlinTypeMarker
|
||||
import org.jetbrains.org.objectweb.asm.*
|
||||
import java.lang.annotation.RetentionPolicy
|
||||
@@ -153,6 +152,11 @@ abstract class AnnotationCodegen(
|
||||
return
|
||||
}
|
||||
|
||||
// A flexible type whose lower bound in not-null and upper bound is nullable, should not be annotated
|
||||
if (type.toKotlinType().isNullabilityFlexible()) {
|
||||
return
|
||||
}
|
||||
|
||||
val annotationClass = if (type.isNullable()) Nullable::class.java else NotNull::class.java
|
||||
|
||||
generateAnnotationIfNotPresent(annotationDescriptorsAlreadyPresent, annotationClass)
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
// WITH_RUNTIME
|
||||
import java.util.Collections
|
||||
|
||||
class PlatformTypes {
|
||||
fun simplyPlatform() = Collections.singletonList("")[0]
|
||||
fun bothNullable() = Collections.emptyList<String>() ?: null
|
||||
fun bothNotNull() = Collections.emptyList<String>()!!
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
@kotlin.Metadata
|
||||
public final class PlatformTypes {
|
||||
public method <init>(): void
|
||||
public final @org.jetbrains.annotations.NotNull method bothNotNull(): java.util.List
|
||||
public final @org.jetbrains.annotations.Nullable method bothNullable(): java.util.List
|
||||
public final method simplyPlatform(): java.lang.String
|
||||
}
|
||||
+5
@@ -94,6 +94,11 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest {
|
||||
runTest("compiler/testData/codegen/bytecodeListing/noToArrayInJava.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("platformTypes.kt")
|
||||
public void testPlatformTypes() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeListing/platformTypes.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("privateDefaultSetter.kt")
|
||||
public void testPrivateDefaultSetter() throws Exception {
|
||||
runTest("compiler/testData/codegen/bytecodeListing/privateDefaultSetter.kt");
|
||||
|
||||
Reference in New Issue
Block a user