Skip to content

Commit c85df7b

Browse files
dzharkovSpace Team
authored and
Space Team
committed
Add test checking nullability info presence for all mapped JDK members
That should prevent issues like KT-67804 and KT-68193
1 parent 19fb5b1 commit c85df7b

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
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

Comments
 (0)