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:
Denis Zharkov
2018-08-30 14:33:54 +03:00
parent 00aa6158c8
commit 3bdfd811e8
7 changed files with 31 additions and 1 deletions
@@ -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<!>()
}
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,
@@ -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;")
)
}
@@ -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") +