Add some new String methods in JDK 11 to built-ins mapping blacklist
These three methods are conflicting with existing extensions, thus the behavior might be changed when switching to JDK 11 Probably, it's worth revisiting our strategy here, e.g. by blacklisting all new methods in #KT-24974 Fixed
This commit is contained in:
@@ -744,6 +744,9 @@ public final class String : kotlin.Comparable<kotlin.String>, kotlin.CharSequenc
|
||||
public open override /*1*/ fun compareTo(/*0*/ other: kotlin.String): kotlin.Int
|
||||
public open override /*1*/ fun get(/*0*/ index: kotlin.Int): kotlin.Char
|
||||
public final operator fun plus(/*0*/ other: kotlin.Any?): kotlin.String
|
||||
@kotlin.Deprecated(level = DeprecationLevel.WARNING, message = "This member is not fully supported by Kotlin compiler, so it may be absent or have different signature in next major version", replaceWith = kotlin.ReplaceWith(expression = "", imports = {})) public open fun strip(): kotlin.String!
|
||||
@kotlin.Deprecated(level = DeprecationLevel.WARNING, message = "This member is not fully supported by Kotlin compiler, so it may be absent or have different signature in next major version", replaceWith = kotlin.ReplaceWith(expression = "", imports = {})) public open fun stripLeading(): kotlin.String!
|
||||
@kotlin.Deprecated(level = DeprecationLevel.WARNING, message = "This member is not fully supported by Kotlin compiler, so it may be absent or have different signature in next major version", replaceWith = kotlin.ReplaceWith(expression = "", imports = {})) public open fun stripTrailing(): kotlin.String!
|
||||
public open override /*1*/ fun subSequence(/*0*/ startIndex: kotlin.Int, /*1*/ endIndex: kotlin.Int): kotlin.CharSequence
|
||||
|
||||
public companion object Companion {
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
// !CHECK_TYPE
|
||||
// SKIP_TXT
|
||||
|
||||
fun foo(s: String) {
|
||||
s.isBlank()
|
||||
s.lines().checkType { _<List<String>>() }
|
||||
s.repeat(1)
|
||||
|
||||
// We don't have `strip` extension, so leave it for a while in gray list
|
||||
s.<!DEPRECATION!>strip<!>()
|
||||
}
|
||||
BIN
Binary file not shown.
@@ -20,6 +20,7 @@ public enum TestJdkKind {
|
||||
MOCK_JDK,
|
||||
// Differs from common mock JDK only by one additional 'nonExistingMethod' in Collection and constructor from Double in Throwable
|
||||
// It's needed to test the way we load additional built-ins members that neither in black nor white lists
|
||||
// Also, now it contains new methods in java.lang.String introduced in JDK 11
|
||||
MODIFIED_MOCK_JDK,
|
||||
// JDK found at $JDK_16
|
||||
FULL_JDK_6,
|
||||
|
||||
+9
@@ -57,8 +57,13 @@ class AdditionalBuiltInsMembersSignatureListsTest : KotlinTestWithEnvironment()
|
||||
|
||||
val scope = classDescriptor.unsubstitutedMemberScope
|
||||
|
||||
val lateJdkSignatures = LATE_JDK_SIGNATURES[internalName] ?: emptySet()
|
||||
|
||||
jvmDescriptors.forEach {
|
||||
jvmDescriptor ->
|
||||
|
||||
if (jvmDescriptor in lateJdkSignatures) return@forEach
|
||||
|
||||
val stringName = jvmDescriptor.split("(")[0]
|
||||
val functions =
|
||||
if (stringName == "<init>")
|
||||
@@ -72,4 +77,8 @@ class AdditionalBuiltInsMembersSignatureListsTest : KotlinTestWithEnvironment()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val LATE_JDK_SIGNATURES = mapOf(
|
||||
"java/lang/String" to setOf("isBlank()Z", "lines()Ljava/util/stream/Stream;", "repeat(I)Ljava/lang/String;")
|
||||
)
|
||||
}
|
||||
|
||||
+5
@@ -29,6 +29,11 @@ public class DiagnosticsWithModifiedMockJdkTestGenerated extends AbstractDiagnos
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/testWithModifiedMockJdk"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true);
|
||||
}
|
||||
|
||||
@TestMetadata("newStringMethods.kt")
|
||||
public void testNewStringMethods() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/testWithModifiedMockJdk/newStringMethods.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("notConsideredMethod.kt")
|
||||
public void testNotConsideredMethod() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/testWithModifiedMockJdk/notConsideredMethod.kt");
|
||||
|
||||
@@ -371,7 +371,8 @@ open class JvmBuiltInsSettings(
|
||||
"startsWith(Ljava/lang/String;I)Z", "startsWith(Ljava/lang/String;)Z", "substring(II)Ljava/lang/String;",
|
||||
"substring(I)Ljava/lang/String;", "toCharArray()[C", "toLowerCase()Ljava/lang/String;",
|
||||
"toLowerCase(Ljava/util/Locale;)Ljava/lang/String;", "toUpperCase()Ljava/lang/String;",
|
||||
"toUpperCase(Ljava/util/Locale;)Ljava/lang/String;", "trim()Ljava/lang/String;"
|
||||
"toUpperCase(Ljava/util/Locale;)Ljava/lang/String;", "trim()Ljava/lang/String;",
|
||||
"isBlank()Z", "lines()Ljava/util/stream/Stream;", "repeat(I)Ljava/lang/String;"
|
||||
) +
|
||||
|
||||
inJavaLang("Double", "isInfinite()Z", "isNaN()Z") +
|
||||
|
||||
Reference in New Issue
Block a user