11package play .classloading .enhancers ;
22
33import java .lang .reflect .Field ;
4+ import java .util .ArrayDeque ;
45import java .util .ArrayList ;
6+ import java .util .Deque ;
57import java .util .HashMap ;
68import java .util .List ;
79import java .util .Map ;
8- import java .util .Stack ;
910
1011import javassist .CtClass ;
1112import javassist .CtMethod ;
@@ -172,7 +173,7 @@ public interface LocalVariablesSupport {
172173 */
173174 public static class LocalVariablesNamesTracer {
174175
175- static final ThreadLocal <Stack <Map <String , Object >>> localVariables = new ThreadLocal <>();
176+ static final ThreadLocal <Deque <Map <String , Object >>> localVariables = new ThreadLocal <>();
176177
177178 public static void checkEmpty () {
178179 if (localVariables .get () != null && !localVariables .get ().isEmpty ()) {
@@ -186,9 +187,9 @@ public static void clear() {
186187
187188 public static void enter () {
188189 if (localVariables .get () == null ) {
189- localVariables .set (new Stack < Map < String , Object > >());
190+ localVariables .set (new ArrayDeque < >());
190191 }
191- localVariables .get ().push (new HashMap <String , Object >());
192+ localVariables .get ().push (new HashMap <>());
192193 }
193194
194195 public static void exit () {
@@ -199,7 +200,7 @@ public static void exit() {
199200 }
200201
201202 public static Map <String , Object > locals () {
202- if (localVariables .get () != null && !localVariables .get ().empty ()) {
203+ if (localVariables .get () != null && !localVariables .get ().isEmpty ()) {
203204 return localVariables .get ().peek ();
204205 }
205206 return new HashMap <>();
@@ -262,17 +263,17 @@ public static Object getLocalVariable(String variable) {
262263 return getLocalVariables ().get (variable );
263264 }
264265
265- public static Stack <Map <String , Object >> getLocalVariablesStateBeforeAwait () {
266- Stack <Map <String , Object >> state = localVariables .get ();
266+ public static Deque <Map <String , Object >> getLocalVariablesStateBeforeAwait () {
267+ Deque <Map <String , Object >> state = localVariables .get ();
267268 // must clear the ThreadLocal to prevent destroying the state when exit() is called due to
268269 // continuations-suspend
269- localVariables .set (new Stack < Map < String , Object > >());
270+ localVariables .set (new ArrayDeque < >());
270271 return state ;
271272 }
272273
273- public static void setLocalVariablesStateAfterAwait (Stack <Map <String , Object >> state ) {
274+ public static void setLocalVariablesStateAfterAwait (Deque <Map <String , Object >> state ) {
274275 if (state == null ) {
275- state = new Stack <>();
276+ state = new ArrayDeque <>();
276277 }
277278 localVariables .set (state );
278279 }
0 commit comments