2424import java .math .BigInteger ;
2525import java .net .URI ;
2626import java .net .URL ;
27+ import java .nio .ByteBuffer ;
2728import java .nio .charset .Charset ;
2829import java .security .CodeSource ;
2930import java .security .Key ;
@@ -109,6 +110,10 @@ public class JVMMethodProvider extends MethodProvider {
109110 put ("java/nio/charset/Charset" , new HashMap <String , Function3 <JavaValue , List <JavaValue >, Context , Object >>() {{
110111 put ("availableCharsets()Ljava/util/SortedMap;" , (targetObject , args , context ) -> Charset .availableCharsets ());
111112 }});
113+ put ("java/nio/ByteBuffer" , new HashMap <String , Function3 <JavaValue , List <JavaValue >, Context , Object >>() {{
114+ put ("wrap([B)Ljava/nio/ByteBuffer;" , (targetObject , args , context ) -> ByteBuffer .wrap (args .get (0 ).as (byte [].class )));
115+ put ("getDouble()D" , (targetObject , args , context ) -> targetObject .as (ByteBuffer .class ).getDouble ());
116+ }});
112117 put ("java/util/SortedMap" , new HashMap <String , Function3 <JavaValue , List <JavaValue >, Context , Object >>() {{
113118 put ("keySet()Ljava/util/Set;" , (targetObject , args , context ) -> targetObject .as (SortedMap .class ).keySet ());
114119 }});
@@ -241,6 +246,11 @@ public class JVMMethodProvider extends MethodProvider {
241246 targetObject .initialize (new String (args .get (0 ).as (byte [].class ), args .get (1 ).intValue ()));
242247 return null ;
243248 });
249+ put ("<init>([BII)V" , (targetObject , args , context ) -> {
250+ expect (targetObject , "java/lang/String" );
251+ targetObject .initialize (new String (args .get (0 ).as (byte [].class ), args .get (1 ).intValue (), args .get (2 ).intValue ()));
252+ return null ;
253+ });
244254 put ("<init>([BLjava/lang/String;)V" , (targetObject , args , context ) -> {
245255 expect (targetObject , "java/lang/String" );
246256 targetObject .initialize (new String (args .get (0 ).as (byte [].class ), args .get (1 ).as (String .class )));
@@ -636,6 +646,14 @@ public class JVMMethodProvider extends MethodProvider {
636646 put ("getMethodName()Ljava/lang/String;" , (targetObject , args , context ) -> targetObject .as (StackTraceElement .class ).getMethodName ());
637647 put ("getFileName()Ljava/lang/String;" , (targetObject , args , context ) -> targetObject .as (StackTraceElement .class ).getFileName ());
638648 }});
649+ put ("java/lang/Float" , new HashMap <String , Function3 <JavaValue , List <JavaValue >, Context , Object >>() {{
650+ put ("intBitsToFloat(I)F" , (targetObject , args , context ) -> Float .intBitsToFloat (args .get (0 ).intValue ()));
651+ put ("valueOf(F)Ljava/lang/Float;" , (targetObject , args , context ) -> Float .valueOf (args .get (0 ).floatValue ()));
652+ }});
653+ put ("java/lang/Double" , new HashMap <String , Function3 <JavaValue , List <JavaValue >, Context , Object >>() {{
654+ put ("longBitsToDouble(J)D" , (targetObject , args , context ) -> Double .longBitsToDouble (args .get (0 ).longValue ()));
655+ put ("valueOf(D)Ljava/lang/Double;" , (targetObject , args , context ) -> Double .valueOf (args .get (0 ).doubleValue ()));
656+ }});
639657 put ("java/lang/Long" , new HashMap <String , Function3 <JavaValue , List <JavaValue >, Context , Object >>() {{
640658 put ("<init>(J)V" , (targetObject , args , context ) -> {
641659 expect (targetObject , "java/lang/Long" );
@@ -672,6 +690,14 @@ public class JVMMethodProvider extends MethodProvider {
672690 put ("java/util/regex/Pattern" , new HashMap <String , Function3 <JavaValue , List <JavaValue >, Context , Object >>() {{
673691 put ("compile(Ljava/lang/String;)Ljava/util/regex/Pattern;" , (targetObject , args , context ) -> Pattern .compile (args .get (0 ).as (String .class )));
674692 }});
693+ put ("java/util/Random" , new HashMap <String , Function3 <JavaValue , List <JavaValue >, Context , Object >>() {{
694+ put ("<init>(J)V" , (targetObject , args , context ) -> {
695+ expect (targetObject , "java/util/Random" );
696+ targetObject .initialize (new Random (args .get (0 ).longValue ()));
697+ return null ;
698+ });
699+ put ("nextDouble()D" , (targetObject , args , context ) -> targetObject .as (Random .class ).nextDouble ());
700+ }});
675701 put ("java/lang/BootstrapMethodError" , new HashMap <String , Function3 <JavaValue , List <JavaValue >, Context , Object >>() {{
676702 put ("<init>()V" , (targetObject , args , context ) -> {
677703 expect (targetObject , "java/lang/BootstrapMethodError" );
@@ -697,7 +723,7 @@ public class JVMMethodProvider extends MethodProvider {
697723 targetObject .initialize (new HashMap <>(args .get (0 ).intValue ()));
698724 return null ;
699725 });
700- put ("put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" , (targetObject , args , context ) -> targetObject .as (HashMap .class ).put (args .get (0 ), args .get (1 )));
726+ put ("put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;" , (targetObject , args , context ) -> targetObject .as (HashMap .class ).put (args .get (0 ). value () , args .get (1 ). value ( )));
701727 put ("get(Ljava/lang/Object;)Ljava/lang/Object;" , (targetObject , args , context ) -> targetObject .as (HashMap .class ).get (args .get (0 ).value ()));
702728 put ("containsKey(Ljava/lang/Object;)Z" , (targetObject , args , context ) -> targetObject .as (HashMap .class ).containsKey (args .get (0 ).value ()));
703729 put ("isEmpty()Z" , (targetObject , args , context ) -> targetObject .as (HashMap .class ).isEmpty ());
@@ -746,6 +772,7 @@ public class JVMMethodProvider extends MethodProvider {
746772 }});
747773 put ("java/lang/Math" , new HashMap <String , Function3 <JavaValue , List <JavaValue >, Context , Object >>() {{
748774 put ("abs(J)J" , (targetObject , args , context ) -> Math .abs (args .get (0 ).longValue ()));
775+ put ("round(D)J" , (targetObject , args , context ) -> Math .round (args .get (0 ).doubleValue ()));
749776 }});
750777 put ("java/math/BigInteger" , new HashMap <String , Function3 <JavaValue , List <JavaValue >, Context , Object >>() {{
751778 put ("<init>(Ljava/lang/String;I)V" , (targetObject , args , context ) -> {
0 commit comments