Author: jcarman Date: Tue Jul 30 04:07:11 2013 New Revision: 1508296 URL: http://svn.apache.org/r1508296 Log: Removing member variable from Behavior class.
Modified: commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/Behavior.java commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/StubInterceptorBuilder.java commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/TrainingContext.java Modified: commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/Behavior.java URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/Behavior.java?rev=1508296&r1=1508295&r2=1508296&view=diff ============================================================================== --- commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/Behavior.java (original) +++ commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/Behavior.java Tue Jul 30 04:07:11 2013 @@ -27,12 +27,6 @@ import org.apache.commons.proxy2.interce public abstract class Behavior<T> { //---------------------------------------------------------------------------------------------------------------------- -// Fields -//---------------------------------------------------------------------------------------------------------------------- - - private TrainingContext trainingContext; - -//---------------------------------------------------------------------------------------------------------------------- // Abstract Methods //---------------------------------------------------------------------------------------------------------------------- @@ -50,7 +44,7 @@ public abstract class Behavior<T> private void record(ArgumentMatcher matcher) { - trainingContext.addArgumentMatcher(matcher); + trainingContext().addArgumentMatcher(matcher); } protected <R> R eq(R value) @@ -65,12 +59,6 @@ public abstract class Behavior<T> return ProxyUtils.nullValue(type); } - void train(TrainingContext context, T stub) - { - this.trainingContext = context; - train(stub); - } - protected <R> WhenObject<R> when(R expression) { return new WhenObject<R>(); @@ -129,28 +117,33 @@ public abstract class Behavior<T> { protected Behavior<T> thenThrow(Exception e) { - trainingContext.setInterceptor(InterceptorUtils.throwing(e)); + trainingContext().setInterceptor(InterceptorUtils.throwing(e)); return Behavior.this; } protected Behavior<T> thenThrow(ObjectProvider<? extends Exception> provider) { - trainingContext.setInterceptor(InterceptorUtils.throwing(provider)); + trainingContext().setInterceptor(InterceptorUtils.throwing(provider)); return Behavior.this; } protected <R> Behavior<T> thenAnswer(ObjectProvider<? extends R> provider) { - trainingContext.setInterceptor(InterceptorUtils.provider(provider)); + trainingContext().setInterceptor(InterceptorUtils.provider(provider)); return Behavior.this; } } + private TrainingContext trainingContext() + { + return TrainingContext.getTrainingContext(); + } + protected class WhenBooleanArray extends BaseWhen<boolean[]> { protected Behavior<T> thenReturn(boolean... values) { - trainingContext.setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values))); + trainingContext().setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values))); return Behavior.this; } } @@ -159,7 +152,7 @@ public abstract class Behavior<T> { protected Behavior<T> thenReturn(byte... values) { - trainingContext.setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values))); + trainingContext().setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values))); return Behavior.this; } } @@ -168,7 +161,7 @@ public abstract class Behavior<T> { protected Behavior<T> thenReturn(char... values) { - trainingContext.setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values))); + trainingContext().setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values))); return Behavior.this; } } @@ -177,7 +170,7 @@ public abstract class Behavior<T> { protected Behavior<T> thenReturn(double... values) { - trainingContext.setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values))); + trainingContext().setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values))); return Behavior.this; } } @@ -186,7 +179,7 @@ public abstract class Behavior<T> { protected Behavior<T> thenReturn(float... values) { - trainingContext.setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values))); + trainingContext().setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values))); return Behavior.this; } } @@ -195,7 +188,7 @@ public abstract class Behavior<T> { protected Behavior<T> thenReturn(int... values) { - trainingContext.setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values))); + trainingContext().setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values))); return Behavior.this; } } @@ -204,7 +197,7 @@ public abstract class Behavior<T> { protected Behavior<T> thenReturn(long... values) { - trainingContext.setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values))); + trainingContext().setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values))); return Behavior.this; } } @@ -213,7 +206,7 @@ public abstract class Behavior<T> { protected Behavior<T> thenReturn(R value) { - trainingContext.setInterceptor(InterceptorUtils.constant(value)); + trainingContext().setInterceptor(InterceptorUtils.constant(value)); return Behavior.this; } } @@ -222,7 +215,7 @@ public abstract class Behavior<T> { protected Behavior<T> thenReturn(R... values) { - trainingContext.setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values))); + trainingContext().setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values))); return Behavior.this; } } @@ -231,7 +224,7 @@ public abstract class Behavior<T> { protected Behavior<T> thenReturn(short... values) { - trainingContext.setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values))); + trainingContext().setInterceptor(InterceptorUtils.constant(ArrayUtils.clone(values))); return Behavior.this; } } Modified: commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/StubInterceptorBuilder.java URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/StubInterceptorBuilder.java?rev=1508296&r1=1508295&r2=1508296&view=diff ============================================================================== --- commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/StubInterceptorBuilder.java (original) +++ commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/StubInterceptorBuilder.java Tue Jul 30 04:07:11 2013 @@ -54,9 +54,16 @@ public class StubInterceptorBuilder public <T> StubInterceptorBuilder configure(Class<T> type, Behavior<T> behavior) { - final TrainingContext context = new TrainingContext(interceptor); - T stub = proxyFactory.createInvokerProxy(new TrainingContextInvoker(context), type); - behavior.train(context, stub); + try + { + TrainingContext.set(interceptor); + T stub = proxyFactory.createInvokerProxy(new TrainingContextInvoker(), type); + behavior.train(stub); + } + finally + { + TrainingContext.clear(); + } return this; } @@ -66,17 +73,10 @@ public class StubInterceptorBuilder private static final class TrainingContextInvoker implements Invoker { - private final TrainingContext trainingContext; - - private TrainingContextInvoker(TrainingContext trainingContext) - { - this.trainingContext = trainingContext; - } - @Override public Object invoke(Object proxy, Method method, Object[] arguments) throws Throwable { - trainingContext.stubMethodInvoked(method, arguments); + TrainingContext.getTrainingContext().stubMethodInvoked(method, arguments); return ProxyUtils.nullValue(method.getReturnType()); } } Modified: commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/TrainingContext.java URL: http://svn.apache.org/viewvc/commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/TrainingContext.java?rev=1508296&r1=1508295&r2=1508296&view=diff ============================================================================== --- commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/TrainingContext.java (original) +++ commons/proper/proxy/branches/version-2.0-work/stub/src/main/java/org/apache/commons/proxy2/stub/TrainingContext.java Tue Jul 30 04:07:11 2013 @@ -36,16 +36,36 @@ public class TrainingContext // Fields //---------------------------------------------------------------------------------------------------------------------- + private static final ThreadLocal<TrainingContext> TRAINING_CONTEXT = new ThreadLocal<TrainingContext>(); private List<ArgumentMatcher> argumentMatchers = new LinkedList<ArgumentMatcher>(); private InvocationMatcher matcher; private Interceptor interceptor; private final SwitchInterceptor switchInterceptor; //---------------------------------------------------------------------------------------------------------------------- +// Static Methods +//---------------------------------------------------------------------------------------------------------------------- + + public static void clear() + { + TRAINING_CONTEXT.remove(); + } + + public static TrainingContext getTrainingContext() + { + return TRAINING_CONTEXT.get(); + } + + public static void set(SwitchInterceptor interceptor) + { + TRAINING_CONTEXT.set(new TrainingContext(interceptor)); + } + +//---------------------------------------------------------------------------------------------------------------------- // Constructors //---------------------------------------------------------------------------------------------------------------------- - public TrainingContext(SwitchInterceptor switchInterceptor) + private TrainingContext(SwitchInterceptor switchInterceptor) { this.switchInterceptor = switchInterceptor; }