|
| 1 | +/* |
| 2 | + * Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors. |
| 3 | + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. |
| 4 | + */ |
| 5 | + |
| 6 | +package org.jetbrains.kotlin.jvm |
| 7 | + |
| 8 | +import junit.framework.TestCase |
| 9 | +import org.jetbrains.kotlin.builtins.jvm.JvmBuiltInsSignatures |
| 10 | +import org.jetbrains.kotlin.load.java.typeEnhancement.PREDEFINED_FUNCTION_ENHANCEMENT_INFO_BY_SIGNATURE |
| 11 | + |
| 12 | +class PredefinedNullabilityExhaustivenessTest : TestCase() { |
| 13 | + fun testNullabilityDefinedForAllVisibleMappedMembers() { |
| 14 | + (JvmBuiltInsSignatures.VISIBLE_METHOD_SIGNATURES + JvmBuiltInsSignatures.VISIBLE_CONSTRUCTOR_SIGNATURES).forEach { signature -> |
| 15 | + assertTrue( |
| 16 | + "Unknown nullability for signature: $signature", |
| 17 | + signature in PREDEFINED_FUNCTION_ENHANCEMENT_INFO_BY_SIGNATURE || signature in EXPECTED_TO_BE_EXCLUDED_FROM_PREDEFINED_NULLABILITY |
| 18 | + ) |
| 19 | + } |
| 20 | + } |
| 21 | + |
| 22 | + companion object { |
| 23 | + private val EXPECTED_TO_BE_EXCLUDED_FROM_PREDEFINED_NULLABILITY = setOf( |
| 24 | + "java/lang/CharSequence.codePoints()Ljava/util/stream/IntStream;", |
| 25 | + "java/lang/CharSequence.chars()Ljava/util/stream/IntStream;", |
| 26 | + "java/lang/Iterable.forEach(Ljava/util/function/Consumer;)V", |
| 27 | + "java/lang/Throwable.setStackTrace([Ljava/lang/StackTraceElement;)V", |
| 28 | + "java/lang/Throwable.fillInStackTrace()Ljava/lang/Throwable;", |
| 29 | + "java/lang/Throwable.getLocalizedMessage()Ljava/lang/String;", |
| 30 | + "java/lang/Throwable.printStackTrace()V", |
| 31 | + "java/lang/Throwable.printStackTrace(Ljava/io/PrintStream;)V", |
| 32 | + "java/lang/Throwable.printStackTrace(Ljava/io/PrintWriter;)V", |
| 33 | + "java/lang/Throwable.getStackTrace()[Ljava/lang/StackTraceElement;", |
| 34 | + "java/lang/Throwable.initCause(Ljava/lang/Throwable;)Ljava/lang/Throwable;", |
| 35 | + "java/lang/Throwable.getSuppressed()[Ljava/lang/Throwable;", |
| 36 | + "java/lang/Throwable.addSuppressed(Ljava/lang/Throwable;)V", |
| 37 | + "java/util/Collection.spliterator()Ljava/util/Spliterator;", |
| 38 | + // It's ok because we've got a Kotlin defined signature in built-in class declaration |
| 39 | + "java/util/Map.getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", |
| 40 | + "java/lang/Throwable.<init>(Ljava/lang/String;Ljava/lang/Throwable;ZZ)V" |
| 41 | + ) |
| 42 | + } |
| 43 | +} |
0 commit comments