Skip to content

Commit c55e14d

Browse files
authored
Merge pull request #1554 from aleksandy/replace-stack
replace Stack by Deque
2 parents 9e5c498 + 0119b26 commit c55e14d

File tree

2 files changed

+13
-12
lines changed

2 files changed

+13
-12
lines changed

framework/src/play/classloading/enhancers/LocalvariablesNamesEnhancer.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package play.classloading.enhancers;
22

33
import java.lang.reflect.Field;
4+
import java.util.ArrayDeque;
45
import java.util.ArrayList;
6+
import java.util.Deque;
57
import java.util.HashMap;
68
import java.util.List;
79
import java.util.Map;
8-
import java.util.Stack;
910

1011
import javassist.CtClass;
1112
import 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
}

framework/src/play/mvc/Controller.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
import java.lang.reflect.Method;
88
import java.lang.reflect.Modifier;
99
import java.lang.reflect.Type;
10+
import java.util.Deque;
1011
import java.util.HashMap;
1112
import java.util.List;
1213
import java.util.Map;
13-
import java.util.Stack;
1414
import java.util.concurrent.Future;
1515

1616
import org.apache.commons.javaflow.Continuation;
@@ -1122,7 +1122,7 @@ private static void storeOrRestoreDataStateForContinuations(Boolean isRestoring)
11221122
// we are restoring after suspend
11231123

11241124
// localVariablesState
1125-
Stack<Map<String, Object>> localVariablesState = (Stack<Map<String, Object>>) Http.Request.current().args
1125+
Deque<Map<String, Object>> localVariablesState = (Deque<Map<String, Object>>) Http.Request.current().args
11261126
.remove(ActionInvoker.CONTINUATIONS_STORE_LOCAL_VARIABLE_NAMES);
11271127
LocalvariablesNamesEnhancer.LocalVariablesNamesTracer.setLocalVariablesStateAfterAwait(localVariablesState);
11281128

0 commit comments

Comments
 (0)