FIR: use Kotlin String constructors instead of java.lang ones

#KT-38437 fixed
This commit is contained in:
Ilya Kirillov
2020-04-21 22:03:58 +03:00
parent 9b943e3a5a
commit fdfb544730
4 changed files with 64 additions and 7 deletions
@@ -0,0 +1,22 @@
// FULL_JDK
fun consumeString(s: String) {}
fun foo(
byteArray: ByteArray,
charArray: CharArray,
intArray: IntArray,
charset: java.nio.charset.Charset,
stringBuilder: java.lang.StringBuilder,
stringBuffer: java.lang.StringBuffer
) {
consumeString(String())
consumeString(String(byteArray, 0, 1, charset))
consumeString(String(byteArray, charset))
consumeString(String(byteArray))
consumeString(String(charArray))
consumeString(String(charArray, 0, 1))
consumeString(String(intArray, 0, 1))
consumeString(String(stringBuffer))
consumeString(String(stringBuilder))
}
@@ -0,0 +1,14 @@
FILE: stringConstructors.kt
public final fun consumeString(s: R|kotlin/String|): R|kotlin/Unit| {
}
public final fun foo(byteArray: R|kotlin/ByteArray|, charArray: R|kotlin/CharArray|, intArray: R|kotlin/IntArray|, charset: R|java/nio/charset/Charset|, stringBuilder: R|java/lang/StringBuilder|, stringBuffer: R|java/lang/StringBuffer|): R|kotlin/Unit| {
R|/consumeString|(R|kotlin/String.String|())
R|/consumeString|(R|kotlin/text/String|(R|<local>/byteArray|, Int(0), Int(1), R|<local>/charset|))
R|/consumeString|(R|kotlin/text/String|(R|<local>/byteArray|, R|<local>/charset|))
R|/consumeString|(R|kotlin/text/String|(R|<local>/byteArray|))
R|/consumeString|(R|kotlin/text/String|(R|<local>/charArray|))
R|/consumeString|(R|kotlin/text/String|(R|<local>/charArray|, Int(0), Int(1)))
R|/consumeString|(R|kotlin/text/String|(R|<local>/intArray|, Int(0), Int(1)))
R|/consumeString|(R|kotlin/text/String|(R|<local>/stringBuffer|))
R|/consumeString|(R|kotlin/text/String|(R|<local>/stringBuilder|))
}
@@ -233,6 +233,11 @@ public class FirDiagnosticsWithStdlibTestGenerated extends AbstractFirDiagnostic
runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/simpleLazy.kt");
}
@TestMetadata("stringConstructors.kt")
public void testStringConstructors() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/stringConstructors.kt");
}
@TestMetadata("toSortedMapWithComparator.kt")
public void testToSortedMapWithComparator() throws Exception {
runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/toSortedMapWithComparator.kt");
@@ -71,13 +71,29 @@ class JvmMappedScope(
}
// NOTE: No-arg constructors
private val additionalConstructorBlackList = setOf(
"java/lang/String.<init>()V",
"java/lang/Throwable.<init>()V",
"java/lang/Throwable.<init>(Ljava/lang/String;Ljava/lang/Throwable;)V",
"java/lang/Throwable.<init>(Ljava/lang/Throwable;)V",
"java/lang/Throwable.<init>(Ljava/lang/String;)V"
)
@OptIn(ExperimentalStdlibApi::class)
private val additionalConstructorBlackList = buildSet<String> {
// kotlin.text.String pseudo-constructors should be used instead of java.lang.String constructors
listOf(
"",
"Lkotlin/ByteArray;IILjava/nio/charset/Charset;",
"Lkotlin/ByteArray;Ljava/nio/charset/Charset;",
"Lkotlin/ByteArray;II",
"Lkotlin/ByteArray;",
"Lkotlin/CharArray;",
"Lkotlin/CharArray;II",
"Lkotlin/IntArray;II",
"Ljava/lang/StringBuffer;",
"Ljava/lang/StringBuilder;",
).mapTo(this) { arguments -> "java/lang/String.<init>($arguments)V" }
listOf(
"",
"Ljava/lang/String;Ljava/lang/Throwable;",
"Ljava/lang/Throwable;",
"Ljava/lang/String;"
).mapTo(this) { arguments -> "java/lang/Throwable.<init>($arguments)V" }
}
fun prepareSignatures(klass: FirRegularClass): Signatures {