@@ -19,6 +19,7 @@ public class LambdaReifier {
19
19
// be an error if these collections contain more than one element.
20
20
private static final BlockingDeque <Handle > currentLambdaImplMethod = new LinkedBlockingDeque <>(1 );
21
21
private static final BlockingDeque <Handle > currentLambdaBridgeMethod = new LinkedBlockingDeque <>(1 );
22
+ private static final BlockingDeque <Class <?>> currentInvoker = new LinkedBlockingDeque <>(1 );
22
23
private static final BlockingDeque <Type > currentInvokedType = new LinkedBlockingDeque <>(1 );
23
24
private static final BlockingDeque <String > currentLambdaClass = new LinkedBlockingDeque <>(1 );
24
25
@@ -27,6 +28,7 @@ public static LambdaFactoryMethod reifyLambdaClass(Handle lambdaImplMethod, Hand
27
28
try {
28
29
setLambdaImplMethod (lambdaImplMethod );
29
30
setLambdaBridgeMethod (lambdaBridgeMethod );
31
+ setInvoker (invoker );
30
32
setInvokedType (invokedType );
31
33
32
34
// Causes the lambda class to be loaded. Retrolambda's Java agent
@@ -51,6 +53,10 @@ private static void setLambdaBridgeMethod(Handle lambdaBridgeMethod) {
51
53
currentLambdaBridgeMethod .push (lambdaBridgeMethod );
52
54
}
53
55
56
+ private static void setInvoker (Class <?> lambdaInvoker ) {
57
+ currentInvoker .push (lambdaInvoker );
58
+ }
59
+
54
60
private static void setInvokedType (Type invokedType ) {
55
61
currentInvokedType .push (invokedType );
56
62
}
@@ -59,6 +65,13 @@ public static void setLambdaClass(String lambdaClass) {
59
65
currentLambdaClass .push (lambdaClass );
60
66
}
61
67
68
+ public static boolean isLambdaClassToReify (String className ) {
69
+ Class <?> invoker = currentInvoker .peekFirst ();
70
+ return invoker != null
71
+ && className .startsWith (Type .getInternalName (invoker ))
72
+ && LambdaNaming .LAMBDA_CLASS .matcher (className ).matches ();
73
+ }
74
+
62
75
public static Handle getLambdaImplMethod () {
63
76
return currentLambdaImplMethod .getFirst ();
64
77
}
@@ -76,6 +89,7 @@ public static LambdaFactoryMethod getLambdaFactoryMethod() {
76
89
private static void resetGlobals () {
77
90
currentLambdaImplMethod .clear ();
78
91
currentLambdaBridgeMethod .clear ();
92
+ currentInvoker .clear ();
79
93
currentInvokedType .clear ();
80
94
currentLambdaClass .clear ();
81
95
}
0 commit comments