1*a03ca8b9SKrzysztof Kosiński# Tests invoke-custom added in DEX version 38. 2*a03ca8b9SKrzysztof Kosiński 3*a03ca8b9SKrzysztof Kosiński# Compile using smali: https://github.com/JesusFreke/smali 4*a03ca8b9SKrzysztof Kosiński# java -jar smali.jar assemble invoke-custom-min.smali --api 28 5*a03ca8b9SKrzysztof Kosiński 6*a03ca8b9SKrzysztof Kosiński.class public LFoo; 7*a03ca8b9SKrzysztof Kosiński.super Ljava/lang/Object; 8*a03ca8b9SKrzysztof Kosiński 9*a03ca8b9SKrzysztof Kosiński.method public la1(Ljava/util/ArrayList;)V 10*a03ca8b9SKrzysztof Kosiński .registers 5 11*a03ca8b9SKrzysztof Kosiński .annotation system Ldalvik/annotation/Signature; 12*a03ca8b9SKrzysztof Kosiński value = { 13*a03ca8b9SKrzysztof Kosiński "(", 14*a03ca8b9SKrzysztof Kosiński "Ljava/util/ArrayList", 15*a03ca8b9SKrzysztof Kosiński "<", 16*a03ca8b9SKrzysztof Kosiński "Ljava/lang/String;", 17*a03ca8b9SKrzysztof Kosiński ">;)V" 18*a03ca8b9SKrzysztof Kosiński } 19*a03ca8b9SKrzysztof Kosiński .end annotation 20*a03ca8b9SKrzysztof Kosiński 21*a03ca8b9SKrzysztof Kosiński .prologue 22*a03ca8b9SKrzysztof Kosiński .line 42 23*a03ca8b9SKrzysztof Kosiński invoke-virtual {p1}, Ljava/util/ArrayList;->stream()Ljava/util/stream/Stream; 24*a03ca8b9SKrzysztof Kosiński 25*a03ca8b9SKrzysztof Kosiński move-result-object v0 26*a03ca8b9SKrzysztof Kosiński 27*a03ca8b9SKrzysztof Kosiński invoke-custom {}, call_site_1("bar", ()Ljava/util/function/Predicate;, (Ljava/lang/Object;)Z, invoke-static@LFoo;->lambda$la1$1(I)Z, (I)Z)@Ljava/lang/invoke/LambdaMetafactory;->metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; 28*a03ca8b9SKrzysztof Kosiński 29*a03ca8b9SKrzysztof Kosiński move-result-object v1 30*a03ca8b9SKrzysztof Kosiński 31*a03ca8b9SKrzysztof Kosiński invoke-custom {}, call_site_2("test", ()Ljava/util/function/Predicate;, (Ljava/lang/Object;)Z, invoke-static@LFoo;->lambda$la1$1(Ljava/lang/String;)Z, (Ljava/lang/String;)Z)@Ljava/lang/invoke/LambdaMetafactory;->metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; 32*a03ca8b9SKrzysztof Kosiński 33*a03ca8b9SKrzysztof Kosiński move-result-object v2 34*a03ca8b9SKrzysztof Kosiński 35*a03ca8b9SKrzysztof Kosiński invoke-interface {v0, v1, v2}, Ljava/util/stream/Stream;->filter(Ljava/util/function/Predicate;)Ljava/util/stream/Stream; 36*a03ca8b9SKrzysztof Kosiński 37*a03ca8b9SKrzysztof Kosiński .line 50 38*a03ca8b9SKrzysztof Kosiński return-void 39*a03ca8b9SKrzysztof Kosiński.end method 40