J2K: Special conversion for java.lang.String methods.

#KT-7732
This commit is contained in:
Ilya Gorbunov
2015-10-02 23:39:13 +03:00
parent 4b92bd100c
commit d7da8b7bd3
7 changed files with 392 additions and 10 deletions
@@ -0,0 +1,117 @@
import java.nio.charset.Charset;
import java.util.*;
class A {
void constructors() throws Exception {
new String();
// TODO: new String("original");
new String(new char[] {'a', 'b', 'c'});
new String(new char[] {'b', 'd'}, 1, 1);
new String(new int[] { 32, 65, 127 }, 0, 3);
byte[] bytes = new byte[] { 32, 65, 100, 81 };
Charset charset = Charset.forName("utf-8");
new String(bytes);
new String(bytes, charset);
new String(bytes, 0, 2);
new String(bytes, "utf-8");
new String(bytes, 0, 2, "utf-8");
new String(bytes, 0, 2, charset);
new String(new StringBuilder("content"));
new String(new StringBuffer("content"));
}
void normalMethods() {
String s = "test string";
s.length();
s.isEmpty();
s.charAt(1);
s.codePointAt(2);
s.codePointBefore(2);
s.codePointCount(0, s.length());
s.offsetByCodePoints(0, 4);
s.compareTo("test 2");
s.concat(" another");
s.contains("seq");
s.contentEquals(new StringBuilder(s));
s.contentEquals(new StringBuffer(s));
s.endsWith("ng");
s.startsWith("te");
s.startsWith("st", 2);
s.indexOf("st");
s.indexOf("st", 5);
s.substring(1);
s.substring(0, 4);
s.subSequence(0, 4);
s.replace('e', 'i');
s.replace("est", "oast");
s.intern();
s.toLowerCase();
s.toLowerCase(Locale.FRENCH);
s.toUpperCase();
s.toUpperCase(Locale.FRENCH);
s.toString();
s.toCharArray();
char[] chars = new char[10];
s.getChars(1, 11, chars, 0);
}
void specialMethods() throws Exception {
String s = "test string";
s.equals("test");
s.equalsIgnoreCase("tesT");
s.compareToIgnoreCase("Test");
s.regionMatches(true, 0, "TE", 0, 2);
s.regionMatches(0, "st", 1, 2);
s.matches("\\w+");
s.replaceAll("\\w+", "---");
s.replaceFirst("([s-t])", "A$1");
useSplit(s.split("\\s+"));
useSplit(s.split("\\s+", 0));
useSplit(s.split("\\s+", -1));
useSplit(s.split("\\s+", 2));
int limit = 5;
useSplit(s.split("\\s+", limit));
s.trim();
s.getBytes();
s.getBytes(Charset.forName("utf-8"));
s.getBytes("utf-8");
}
void staticMethods() {
String.valueOf(1);
String.valueOf(1L);
String.valueOf('a');
String.valueOf(true);
String.valueOf(1.11F);
String.valueOf(3.14);
String.valueOf(new Object());
String.format(Locale.FRENCH, "Je ne mange pas %d jours", 6);
String.format("Operation completed with %s", "success");
char[] chars = {'a', 'b', 'c'};
String.valueOf(chars);
String.valueOf(chars, 1, 2);
String.copyValueOf(chars);
String.copyValueOf(chars, 1, 2);
Comparator<String> order = String.CASE_INSENSITIVE_ORDER;
}
void unsupportedMethods() {
String s = "test string";
/* TODO:
s.indexOf(32);
s.indexOf(32, 2);
s.lastIndexOf(32);
s.lastIndexOf(32, 2);
*/
}
void useSplit(String[] result) {}
}
@@ -0,0 +1,127 @@
// ERROR: Overload resolution ambiguity: public fun kotlin.String.split(regex: [ERROR : java.util.regex.Pattern], limit: kotlin.Int = ...): kotlin.List<kotlin.String> defined in kotlin public fun kotlin.String.split(pattern: kotlin.text.Regex, limit: kotlin.Int = ...): kotlin.List<kotlin.String> defined in kotlin
// ERROR: Unresolved reference: it
// ERROR: Overload resolution ambiguity: public fun kotlin.String.split(regex: [ERROR : java.util.regex.Pattern], limit: kotlin.Int = ...): kotlin.List<kotlin.String> defined in kotlin public fun kotlin.String.split(pattern: kotlin.text.Regex, limit: kotlin.Int = ...): kotlin.List<kotlin.String> defined in kotlin
// ERROR: Unresolved reference: it
// ERROR: Overload resolution ambiguity: public fun kotlin.String.split(regex: [ERROR : java.util.regex.Pattern], limit: kotlin.Int = ...): kotlin.List<kotlin.String> defined in kotlin public fun kotlin.String.split(pattern: kotlin.text.Regex, limit: kotlin.Int = ...): kotlin.List<kotlin.String> defined in kotlin
// ERROR: Overload resolution ambiguity: public fun kotlin.String.split(regex: [ERROR : java.util.regex.Pattern], limit: kotlin.Int = ...): kotlin.List<kotlin.String> defined in kotlin public fun kotlin.String.split(pattern: kotlin.text.Regex, limit: kotlin.Int = ...): kotlin.List<kotlin.String> defined in kotlin
// ERROR: Overload resolution ambiguity: public fun kotlin.String.split(regex: [ERROR : java.util.regex.Pattern], limit: kotlin.Int = ...): kotlin.List<kotlin.String> defined in kotlin public fun kotlin.String.split(pattern: kotlin.text.Regex, limit: kotlin.Int = ...): kotlin.List<kotlin.String> defined in kotlin
import java.nio.charset.Charset
import java.util.*
internal class A {
@Throws(Exception::class)
fun constructors() {
String()
// TODO: new String("original");
String(charArrayOf('a', 'b', 'c'))
String(charArrayOf('b', 'd'), 1, 1)
String(intArrayOf(32, 65, 127), 0, 3)
val bytes = byteArrayOf(32, 65, 100, 81)
val charset = Charset.forName("utf-8")
String(bytes)
String(bytes, charset)
String(bytes, 0, 2)
String(bytes, "utf-8")
String(bytes, 0, 2, "utf-8")
String(bytes, 0, 2, charset)
String(StringBuilder("content"))
String(StringBuffer("content"))
}
fun normalMethods() {
val s = "test string"
s.length()
s.isEmpty()
s.charAt(1)
s.codePointAt(2)
s.codePointBefore(2)
s.codePointCount(0, s.length())
s.offsetByCodePoints(0, 4)
s.compareTo("test 2")
s.concat(" another")
s.contains("seq")
s.contentEquals(StringBuilder(s))
s.contentEquals(StringBuffer(s))
s.endsWith("ng")
s.startsWith("te")
s.startsWith("st", 2)
s.indexOf("st")
s.indexOf("st", 5)
s.substring(1)
s.substring(0, 4)
s.subSequence(0, 4)
s.replace('e', 'i')
s.replace("est", "oast")
s.intern()
s.toLowerCase()
s.toLowerCase(Locale.FRENCH)
s.toUpperCase()
s.toUpperCase(Locale.FRENCH)
s.toString()
s.toCharArray()
val chars = CharArray(10)
s.getChars(1, 11, chars, 0)
}
@Throws(Exception::class)
fun specialMethods() {
val s = "test string"
s == "test"
s.equals("tesT", ignoreCase = true)
s.compareTo("Test", ignoreCase = true)
s.regionMatches(0, "TE", 0, 2, ignoreCase = true)
s.regionMatches(0, "st", 1, 2)
s.matches("\\w+".toRegex())
s.replace("\\w+".toRegex(), "---")
s.replaceFirst("([s-t])".toRegex(), "A$1")
useSplit(s.split("\\s+".toRegex()).dropLastWhile({ it.isEmpty() }).toTypedArray())
useSplit(s.split("\\s+".toRegex()).dropLastWhile({ it.isEmpty() }).toTypedArray())
useSplit(s.split("\\s+".toRegex()).toTypedArray())
useSplit(s.split("\\s+".toRegex(), 2).toTypedArray())
val limit = 5
useSplit(s.split("\\s+".toRegex(), limit.coerceAtLeast(0)).toTypedArray())
s.trim { it <= ' ' }
s.toByteArray()
s.toByteArray(Charset.forName("utf-8"))
s.toByteArray("utf-8")
}
fun staticMethods() {
1.toString()
1L.toString()
'a'.toString()
true.toString()
1.11f.toString()
3.14.toString()
Object().toString()
"Je ne mange pas %d jours".format(Locale.FRENCH, 6)
"Operation completed with %s".format("success")
val chars = charArrayOf('a', 'b', 'c')
String(chars)
String(chars, 1, 2)
String(chars)
String(chars, 1, 2)
val order = String.CASE_INSENSITIVE_ORDER
}
fun unsupportedMethods() {
val s = "test string"
/* TODO:
s.indexOf(32);
s.indexOf(32, 2);
s.lastIndexOf(32);
s.lastIndexOf(32, 2);
*/
}
fun useSplit(result: Array<String>) {
}
}