Pārlūkot izejas kodu

[java] add java.NativeString to remove some `untyped` (#8163)

Simon Krajewski 6 gadi atpakaļ
vecāks
revīzija
999b318fa8

+ 4 - 4
std/StringTools.hx

@@ -201,7 +201,7 @@ class StringTools {
 	**/
 	public static #if (cs || java || python) inline #end function startsWith( s : String, start : String ) : Bool {
 		#if java
-		return untyped s.startsWith(start);
+		return (cast s : java.NativeString).startsWith(start);
 		#elseif cs
 		return untyped s.StartsWith(start);
 		#elseif cpp
@@ -231,7 +231,7 @@ class StringTools {
 	**/
 	public static #if (cs || java || python) inline #end function endsWith( s : String, end : String ) : Bool {
 		#if java
-		return untyped s.endsWith(end);
+		return (cast s : java.NativeString).endsWith(end);
 		#elseif cs
 		return untyped s.EndsWith(end);
 		#elseif cpp
@@ -403,7 +403,7 @@ class StringTools {
 		if (sub.length == 0)
 			return s.split(sub).join(by);
 		else
-			return untyped s.replace(sub, by);
+			return (cast s : java.NativeString).replace(sub, by);
 		#elseif cs
 		if (sub.length == 0)
 			return s.split(sub).join(by);
@@ -615,7 +615,7 @@ class StringTools {
 	}
 
 	#if java
-	private static inline function _charAt(str:String, idx:Int):java.StdTypes.Char16 return untyped str._charAt(idx);
+	private static inline function _charAt(str:String, idx:Int):java.StdTypes.Char16 return (cast str : java.NativeString).charAt(idx);
 	#end
 
 	#if neko

+ 24 - 0
std/java/NativeString.hx

@@ -0,0 +1,24 @@
+package java;
+
+import java.lang.CharSequence;
+
+@:native("java.lang.String")
+extern class NativeString {
+	function charAt(index:Int):java.types.Char16;
+	function codePointAt(index:Int):Int;
+	function compareTo(s:String):Int;
+	function concat(s:String):String;
+	function endsWith(suffix:String):Bool;
+	function equals(obj:Dynamic):Bool;
+	function hashCode():Int;
+
+	@:overload function indexOf(str:String):Int;
+	@:overload function indexOf(str:String, fromIndex:Int):Int;
+
+	function lastIndexOf(str:String, fromIndex:Int):Int;
+
+	function replace(target:CharSequence, replacement:CharSequence):String;
+	function startsWith(prefix:String):Bool;
+	@:overload function substring(beginIndex:Int):String;
+	@:overload function substring(beginIndex:Int, endIndex:Int):String;
+}

+ 3 - 3
std/java/_std/haxe/ds/ObjectMap.hx

@@ -90,7 +90,7 @@ import java.NativeArray;
 			} else {
 				//var inc = getInc(k, mask);
 				var last = i, flag;
-				while(! (isEmpty(flag = hashes[i]) || (flag == k && untyped keys[i].equals(key))) )
+				while(! (isEmpty(flag = hashes[i]) || (flag == k && (cast keys[i] : java.lang.Object).equals(key))) )
 				{
 					if (isDel(flag) && delKey == -1)
 						delKey = i;
@@ -149,7 +149,7 @@ import java.NativeArray;
 			var i = k & mask;
 			var last = i, flag;
 			//var inc = getInc(k, mask);
-			while (!isEmpty(flag = hashes[i]) && (isDel(flag) || flag != k || !(untyped keys[i].equals(key))))
+			while (!isEmpty(flag = hashes[i]) && (isDel(flag) || flag != k || !((cast keys[i] : java.lang.Object).equals(key))))
 			{
 				i = (i + ++nProbes) & mask;
 #if DEBUG_HASHTBL
@@ -450,7 +450,7 @@ import java.NativeArray;
 	//guarantee: Whatever this function is, it will never return 0 nor 1
 	extern private static inline function hash(s:Dynamic):HashType
 	{
-		var k:Int = untyped s.hashCode();
+		var k:Int = (cast s : java.lang.Object).hashCode();
 		//k *= 357913941;
 		//k ^= k << 24;
 		//k += ~357913941;

+ 1 - 1
std/java/_std/haxe/ds/StringMap.hx

@@ -454,7 +454,7 @@ import java.NativeArray;
 	//guarantee: Whatever this function is, it will never return 0 nor 1
 	extern private static inline function hash(s:String):HashType
 	{
-		var k:Int = untyped s.hashCode();
+		var k:Int = (cast s : java.NativeString).hashCode();
 		//k *= 357913941;
 		//k ^= k << 24;
 		//k += ~357913941;