Browse Source

[java] get rid of `@:functionCode` in Type (part 1)

Simon Krajewski 10 years ago
parent
commit
0a21425566
1 changed files with 39 additions and 43 deletions
  1. 39 43
      std/java/_std/Type.hx

+ 39 - 43
std/java/_std/Type.hx

@@ -19,6 +19,11 @@
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  * DEALINGS IN THE SOFTWARE.
  * DEALINGS IN THE SOFTWARE.
  */
  */
+
+import java.internal.HxObject;
+
+using StringTools;
+
 @:keep enum ValueType {
 @:keep enum ValueType {
 	TNull;
 	TNull;
 	TInt;
 	TInt;
@@ -33,40 +38,33 @@
 
 
 @:keep @:coreApi class Type {
 @:keep @:coreApi class Type {
 
 
-	@:functionCode('
-		if (o == null || o instanceof haxe.lang.DynamicObject || o instanceof java.lang.Class)
-			return null;
-
-		return (java.lang.Class<T>) o.getClass();
-	')
-	public static function getClass<T>( o : T ) : Class<T> untyped
+	public static function getClass<T>( o : T ) : Class<T>
 	{
 	{
-		return null;
+		if (o == null || Std.is(o, DynamicObject) || Std.is(o, java.lang.Class)) {
+			return null;
+		}
+		return cast java.Lib.nativeType(o);
 	}
 	}
 
 
-	@:functionCode('
-		if (o instanceof java.lang.Enum || o instanceof haxe.lang.Enum)
-			return o.getClass();
-		return null;
-	')
-	public static function getEnum( o : EnumValue ) : Enum<Dynamic> untyped
+	public static function getEnum( o : EnumValue ) : Enum<Dynamic>
 	{
 	{
+		if (Std.is(o, java.lang.Enum) || Std.is(o, HxEnum)) {
+			return untyped o.getClass();
+		}
 		return null;
 		return null;
 	}
 	}
 
 
-	@:functionCode('
-		java.lang.Class cl = (c == null) ? null : c.getSuperclass();
-		if (cl != null && !cl.getName().equals("haxe.lang.HxObject") && !cl.getName().equals("java.lang.Object") )
-			return cl;
-		return null;
-	')
-	public static function getSuperClass( c : Class<Dynamic> ) : Class<Dynamic> untyped
+	public static function getSuperClass( c : Class<Dynamic> ) : Class<Dynamic>
 	{
 	{
+		var cl:java.lang.Class<Dynamic> = c == null ? null : untyped c.getSuperclass();
+		if (cl != null && cl.getName() != "haxe.lang.HxObject" && cl.getName() != "java.lang.Object") {
+			return cast cl;
+		}
 		return null;
 		return null;
 	}
 	}
 
 
-	public static function getClassName( c : Class<Dynamic> ) : String untyped {
-		var c : java.lang.Class<Dynamic> = c;
+	public static function getClassName( c : Class<Dynamic> ) : String {
+		var c : java.lang.Class<Dynamic> = cast c;
 		var name:String = c.getName();
 		var name:String = c.getName();
 		if (name.startsWith("haxe.root."))
 		if (name.startsWith("haxe.root."))
 			return name.substr(10);
 			return name.substr(10);
@@ -82,8 +80,8 @@
 		}
 		}
 	}
 	}
 
 
-	public static function getEnumName( e : Enum<Dynamic> ) : String untyped {
-		var c : java.lang.Class<Dynamic> = e;
+	public static function getEnumName( e : Enum<Dynamic> ) : String {
+		var c : java.lang.Class<Dynamic> = cast e;
 		var ret:String = c.getName();
 		var ret:String = c.getName();
 		if (ret.startsWith("haxe.root."))
 		if (ret.startsWith("haxe.root."))
 			return ret.substr(10);
 			return ret.substr(10);
@@ -93,26 +91,24 @@
 		return ret;
 		return ret;
 	}
 	}
 
 
-	@:functionCode('
+	public static function resolveClass( name : String ) : Class<Dynamic>
+	{
 		try {
 		try {
-			if (name.indexOf(".") == -1)
-				name = "haxe.root." + name;
-			return java.lang.Class.forName(name);
-		}
-		catch (java.lang.ClassNotFoundException e)
-		{
-			if (name.equals("haxe.root.Int")) return int.class;
-			else if (name.equals("haxe.root.Float")) return double.class;
-			else if (name.equals("haxe.root.String")) return java.lang.String.class;
-			else if (name.equals("haxe.root.Math")) return java.lang.Math.class;
-			else if (name.equals("haxe.root.Class")) return java.lang.Class.class;
-			else if (name.equals("haxe.root.Dynamic")) return java.lang.Object.class;
-			return null;
+			if (name.indexOf(".") == -1) {
+				name = "haxe.root." +name;
+			}
+			return cast java.lang.Class.forName(name);
+		} catch (e:java.lang.ClassNotFoundException) {
+			return untyped switch (name) {
+				case "haxe.root.Int": Int;
+				case "haxe.root.Float": Float;
+				case "haxe.root.String": String;
+				case "haxe.root.Math": java.lang.Math;
+				case "haxe.root.Class": java.lang.Class;
+				case "haxe.root.Dynamic": java.lang.Object;
+				case _: null;
+			}
 		}
 		}
-	')
-	public static function resolveClass( name : String ) : Class<Dynamic> untyped
-	{
-		return null;
 	}
 	}