24
24
import java .math .BigInteger ;
25
25
import java .net .URI ;
26
26
import java .net .URL ;
27
+ import java .nio .ByteBuffer ;
27
28
import java .nio .charset .Charset ;
28
29
import java .security .CodeSource ;
29
30
import java .security .Key ;
@@ -109,6 +110,10 @@ public class JVMMethodProvider extends MethodProvider {
109
110
put ("java/nio/charset/Charset" , new HashMap <String , Function3 <JavaValue , List <JavaValue >, Context , Object >>() {{
110
111
put ("availableCharsets()Ljava/util/SortedMap;" , (targetObject , args , context ) -> Charset .availableCharsets ());
111
112
}});
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
+ }});
112
117
put ("java/util/SortedMap" , new HashMap <String , Function3 <JavaValue , List <JavaValue >, Context , Object >>() {{
113
118
put ("keySet()Ljava/util/Set;" , (targetObject , args , context ) -> targetObject .as (SortedMap .class ).keySet ());
114
119
}});
@@ -241,6 +246,11 @@ public class JVMMethodProvider extends MethodProvider {
241
246
targetObject .initialize (new String (args .get (0 ).as (byte [].class ), args .get (1 ).intValue ()));
242
247
return null ;
243
248
});
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
+ });
244
254
put ("<init>([BLjava/lang/String;)V" , (targetObject , args , context ) -> {
245
255
expect (targetObject , "java/lang/String" );
246
256
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 {
636
646
put ("getMethodName()Ljava/lang/String;" , (targetObject , args , context ) -> targetObject .as (StackTraceElement .class ).getMethodName ());
637
647
put ("getFileName()Ljava/lang/String;" , (targetObject , args , context ) -> targetObject .as (StackTraceElement .class ).getFileName ());
638
648
}});
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
+ }});
639
657
put ("java/lang/Long" , new HashMap <String , Function3 <JavaValue , List <JavaValue >, Context , Object >>() {{
640
658
put ("<init>(J)V" , (targetObject , args , context ) -> {
641
659
expect (targetObject , "java/lang/Long" );
@@ -672,6 +690,14 @@ public class JVMMethodProvider extends MethodProvider {
672
690
put ("java/util/regex/Pattern" , new HashMap <String , Function3 <JavaValue , List <JavaValue >, Context , Object >>() {{
673
691
put ("compile(Ljava/lang/String;)Ljava/util/regex/Pattern;" , (targetObject , args , context ) -> Pattern .compile (args .get (0 ).as (String .class )));
674
692
}});
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
+ }});
675
701
put ("java/lang/BootstrapMethodError" , new HashMap <String , Function3 <JavaValue , List <JavaValue >, Context , Object >>() {{
676
702
put ("<init>()V" , (targetObject , args , context ) -> {
677
703
expect (targetObject , "java/lang/BootstrapMethodError" );
@@ -697,7 +723,7 @@ public class JVMMethodProvider extends MethodProvider {
697
723
targetObject .initialize (new HashMap <>(args .get (0 ).intValue ()));
698
724
return null ;
699
725
});
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 ( )));
701
727
put ("get(Ljava/lang/Object;)Ljava/lang/Object;" , (targetObject , args , context ) -> targetObject .as (HashMap .class ).get (args .get (0 ).value ()));
702
728
put ("containsKey(Ljava/lang/Object;)Z" , (targetObject , args , context ) -> targetObject .as (HashMap .class ).containsKey (args .get (0 ).value ()));
703
729
put ("isEmpty()Z" , (targetObject , args , context ) -> targetObject .as (HashMap .class ).isEmpty ());
@@ -746,6 +772,7 @@ public class JVMMethodProvider extends MethodProvider {
746
772
}});
747
773
put ("java/lang/Math" , new HashMap <String , Function3 <JavaValue , List <JavaValue >, Context , Object >>() {{
748
774
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 ()));
749
776
}});
750
777
put ("java/math/BigInteger" , new HashMap <String , Function3 <JavaValue , List <JavaValue >, Context , Object >>() {{
751
778
put ("<init>(Ljava/lang/String;I)V" , (targetObject , args , context ) -> {
0 commit comments