openwebbeans-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From gerdo...@apache.org
Subject svn commit: r925421 - in /openwebbeans/trunk/webbeans-impl/src: main/java/org/apache/webbeans/intercept/ test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/ test/java/org/apache/webbeans/newtests/decorators/multiple/ test/java/org/apach...
Date Fri, 19 Mar 2010 21:11:19 GMT
Author: gerdogdu
Date: Fri Mar 19 21:11:18 2010
New Revision: 925421

URL: http://svn.apache.org/viewvc?rev=925421&view=rev
Log:
[OWB-331] Cache Interceptor & Decorator Stack oon Interceptor Handler, also renaming some
tests

Added:
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative1Test.java
      - copied, changed from r925397, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest1.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative2Test.java
      - copied, changed from r925397, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest2.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative3Test.java
      - copied, changed from r925397, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest3.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative4Test.java
      - copied, changed from r925397, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest4.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative5Test.java
      - copied, changed from r925397, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest5.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/decorator/Decorator1Test.java
      - copied, changed from r925397, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/decorator/DecoratorTest1.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/InjectedComponentWithMemberTest.java
      - copied, changed from r925397, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/InjectedComponentTestWithMember.java
Removed:
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest1.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest2.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest3.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest4.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest5.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/decorator/DecoratorTest1.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/InjectedComponentTestWithMember.java
Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/multiple/Decorator1.java
    openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/multiple/Decorator2.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java?rev=925421&r1=925420&r2=925421&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/InterceptorHandler.java
Fri Mar 19 21:11:18 2010
@@ -22,6 +22,8 @@ import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
+import java.util.WeakHashMap;
 
 import javassist.util.proxy.MethodHandler;
 import javassist.util.proxy.ProxyFactory;
@@ -145,6 +147,15 @@ public abstract class InterceptorHandler
     
     /**Proxied bean*/
     protected OwbBean<?> bean = null;
+    
+    /**Intercepted methods*/
+    protected transient Map<Method, List<InterceptorData>> interceptedMethodMap
= new WeakHashMap<Method, List<InterceptorData>>();
+    
+    /**Bean decorator objects*/
+    protected transient List<Object> decorators = null;
+    
+    /**Delegate handler*/
+    protected transient DelegateHandler delegateHandler;
 
     /**
      * Creates a new handler.
@@ -181,10 +192,9 @@ public abstract class InterceptorHandler
                     && InterceptorUtil.isWebBeansBusinessMethod(method))
                 {
 
-                    DelegateHandler delegateHandler = null;
                     List<Object> decorators = null;
 
-                    if (injectionTarget.getDecoratorStack().size() > 0)
+                    if (injectionTarget.getDecoratorStack().size() > 0 && this.decorators
== null)
                     {
                         Class<?> proxyClass = JavassistProxyFactory.getInterceptorProxyClasses().get(bean);
                         if (proxyClass == null)
@@ -194,47 +204,55 @@ public abstract class InterceptorHandler
                             JavassistProxyFactory.getInterceptorProxyClasses().put(bean,
proxyClass);
                         }
                         Object delegate = proxyClass.newInstance();
-                        delegateHandler = new DelegateHandler();
-                        ((ProxyObject)delegate).setHandler(delegateHandler);
+                        this.delegateHandler = new DelegateHandler();
+                        ((ProxyObject)delegate).setHandler(this.delegateHandler);
 
                         // Gets component decorator stack
                         decorators = WebBeansDecoratorConfig.getDecoratorStack(injectionTarget,
instance, delegate, ownerCreationalContext);                        
                         //Sets decorator stack of delegate
-                        delegateHandler.setDecorators(decorators);
+                        this.delegateHandler.setDecorators(decorators);
+                        
+                        this.decorators = decorators;
                     }
 
                     // Run around invoke chain
                     List<InterceptorData> interceptorStack = injectionTarget.getInterceptorStack();
                     if (interceptorStack.size() > 0)
                     {
-                        //Holds filtered interceptor stack
-                        List<InterceptorData> filteredInterceptorStack = new ArrayList<InterceptorData>(interceptorStack);
-    
-                        // Filter both EJB and WebBeans interceptors
-                        filterCommonInterceptorStackList(filteredInterceptorStack, method,
ownerCreationalContext);
-    
-                        // If there are both interceptors and decorators, add hook
-                        // point to the end of the interceptor stack.
-                        if (decorators != null && filteredInterceptorStack.size()
> 0)
+                        if(this.interceptedMethodMap.get(method) == null)
                         {
-                            WebBeansDecoratorInterceptor lastInterceptor = new WebBeansDecoratorInterceptor(delegateHandler,
instance);
-                            InterceptorDataImpl data = new InterceptorDataImpl(true,lastInterceptor);
-                            data.setDefinedInInterceptorClass(true);
-                            data.setAroundInvoke(lastInterceptor.getClass().getDeclaredMethods()[0]);
-                            //Add to last
-                            filteredInterceptorStack.add(data);
-                        }
-    
+                            //Holds filtered interceptor stack
+                            List<InterceptorData> filteredInterceptorStack = new ArrayList<InterceptorData>(interceptorStack);
+        
+                            // Filter both EJB and WebBeans interceptors
+                            filterCommonInterceptorStackList(filteredInterceptorStack, method,
ownerCreationalContext);
+        
+                            // If there are both interceptors and decorators, add hook
+                            // point to the end of the interceptor stack.
+                            if (decorators != null && filteredInterceptorStack.size()
> 0)
+                            {
+                                WebBeansDecoratorInterceptor lastInterceptor = new WebBeansDecoratorInterceptor(delegateHandler,
instance);
+                                InterceptorDataImpl data = new InterceptorDataImpl(true,lastInterceptor);
+                                data.setDefinedInInterceptorClass(true);
+                                data.setAroundInvoke(lastInterceptor.getClass().getDeclaredMethods()[0]);
+                                //Add to last
+                                filteredInterceptorStack.add(data);
+                            }
+                            
+                            this.interceptedMethodMap.put(method, filteredInterceptorStack);
+                        }    
+                        
                         // Call Around Invokes
-                        if (WebBeansUtil.isContainsInterceptorMethod(filteredInterceptorStack,
InterceptorType.AROUND_INVOKE))
+                        if (WebBeansUtil.isContainsInterceptorMethod(this.interceptedMethodMap.get(method),
InterceptorType.AROUND_INVOKE))
                         {
-                            return callAroundInvokes(method, arguments, WebBeansUtil.getInterceptorMethods(filteredInterceptorStack,
InterceptorType.AROUND_INVOKE));
+                            return callAroundInvokes(method, arguments, WebBeansUtil.getInterceptorMethods(this.interceptedMethodMap.get(method),
InterceptorType.AROUND_INVOKE));
                         }
+                        
                     }
                     
                     // If there are Decorators, allow the delegate handler to
                     // manage the stack
-                    if (decorators != null)
+                    if (this.decorators != null)
                     {
                         return delegateHandler.invoke(instance, method, proceed, arguments);
                     }

Copied: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative1Test.java
(from r925397, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest1.java)
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative1Test.java?p2=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative1Test.java&p1=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest1.java&r1=925397&r2=925421&rev=925421&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest1.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative1Test.java
Fri Mar 19 21:11:18 2010
@@ -37,7 +37,7 @@ import org.apache.webbeans.newtests.conc
 import org.apache.webbeans.newtests.concepts.alternatives.common.QualifierProducerBased;
 import org.junit.Test;
 
-public class AlternativeTest1  extends AbstractUnitTest {
+public class Alternative1Test  extends AbstractUnitTest {
 	
     @Test
     @SuppressWarnings("unchecked")

Copied: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative2Test.java
(from r925397, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest2.java)
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative2Test.java?p2=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative2Test.java&p1=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest2.java&r1=925397&r2=925421&rev=925421&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest2.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative2Test.java
Fri Mar 19 21:11:18 2010
@@ -37,7 +37,7 @@ import org.apache.webbeans.newtests.conc
 import org.apache.webbeans.newtests.concepts.alternatives.common.QualifierProducerBased;
 import org.junit.Test;
 
-public class AlternativeTest2  extends AbstractUnitTest {
+public class Alternative2Test  extends AbstractUnitTest {
 	
     @Test
     @SuppressWarnings("unchecked")

Copied: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative3Test.java
(from r925397, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest3.java)
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative3Test.java?p2=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative3Test.java&p1=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest3.java&r1=925397&r2=925421&rev=925421&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest3.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative3Test.java
Fri Mar 19 21:11:18 2010
@@ -37,7 +37,7 @@ import org.apache.webbeans.newtests.conc
 import org.apache.webbeans.newtests.concepts.alternatives.common.QualifierProducerBased;
 import org.junit.Test;
 
-public class AlternativeTest3  extends AbstractUnitTest {
+public class Alternative3Test  extends AbstractUnitTest {
 	
     @Test
     @SuppressWarnings("unchecked")

Copied: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative4Test.java
(from r925397, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest4.java)
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative4Test.java?p2=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative4Test.java&p1=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest4.java&r1=925397&r2=925421&rev=925421&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest4.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative4Test.java
Fri Mar 19 21:11:18 2010
@@ -38,7 +38,7 @@ import org.apache.webbeans.newtests.conc
 import org.apache.webbeans.newtests.concepts.alternatives.common.QualifierProducerBased;
 import org.junit.Test;
 
-public class AlternativeTest4  extends AbstractUnitTest {
+public class Alternative4Test  extends AbstractUnitTest {
 	
     @Test
     @SuppressWarnings("unchecked")

Copied: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative5Test.java
(from r925397, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest5.java)
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative5Test.java?p2=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative5Test.java&p1=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest5.java&r1=925397&r2=925421&rev=925421&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/AlternativeTest5.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/concepts/alternatives/tests/Alternative5Test.java
Fri Mar 19 21:11:18 2010
@@ -38,9 +38,9 @@ import org.apache.webbeans.newtests.conc
 import org.apache.webbeans.newtests.concepts.alternatives.common.QualifierProducerBased;
 import org.junit.Test;
 
-public class AlternativeTest5 extends AbstractUnitTest  {
+public class Alternative5Test extends AbstractUnitTest  {
 	
-    private static final String PACKAGE_NAME = AlternativeTest5.class.getPackage().getName();
+    private static final String PACKAGE_NAME = Alternative5Test.class.getPackage().getName();
     
     @Test
     @SuppressWarnings("unchecked")

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/multiple/Decorator1.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/multiple/Decorator1.java?rev=925421&r1=925420&r2=925421&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/multiple/Decorator1.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/multiple/Decorator1.java
Fri Mar 19 21:11:18 2010
@@ -22,12 +22,9 @@ import javax.inject.Inject;
 public class Decorator1 implements IOutputProvider
 {
 
-    @Inject
-    @Delegate
-    @Any
-    IOutputProvider op;
-    @Inject
-    RequestStringBuilder rsb;
+    @Inject @Delegate @Any IOutputProvider op;
+    
+    @Inject RequestStringBuilder rsb;
 
     public String getOutput()
     {

Modified: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/multiple/Decorator2.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/multiple/Decorator2.java?rev=925421&r1=925420&r2=925421&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/multiple/Decorator2.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/newtests/decorators/multiple/Decorator2.java
Fri Mar 19 21:11:18 2010
@@ -23,16 +23,8 @@ import javax.inject.Named;
 @Decorator
 public class Decorator2 implements IOutputProvider
 {
-
-    @Inject
-    @Delegate
-    @Default
-    @Any
-    @Named
-    IOutputProvider op;
-    @Inject
-    @Default
-    RequestStringBuilder rsb;
+    @Inject @Delegate @Default @Any @Named IOutputProvider op;
+    @Inject @Default RequestStringBuilder rsb;
 
     public String getOutput()
     {

Copied: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/decorator/Decorator1Test.java
(from r925397, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/decorator/DecoratorTest1.java)
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/decorator/Decorator1Test.java?p2=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/decorator/Decorator1Test.java&p1=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/decorator/DecoratorTest1.java&r1=925397&r2=925421&rev=925421&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/decorator/DecoratorTest1.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/decorator/Decorator1Test.java
Fri Mar 19 21:11:18 2010
@@ -39,12 +39,12 @@ import org.apache.webbeans.test.componen
 import org.junit.Before;
 import org.junit.Test;
 
-public class DecoratorTest1 extends TestContext
+public class Decorator1Test extends TestContext
 {
 
-    public DecoratorTest1()
+    public Decorator1Test()
     {
-        super(DecoratorTest1.class.getName());
+        super(Decorator1Test.class.getName());
     }
 
     @Before

Copied: openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/InjectedComponentWithMemberTest.java
(from r925397, openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/InjectedComponentTestWithMember.java)
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/InjectedComponentWithMemberTest.java?p2=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/InjectedComponentWithMemberTest.java&p1=openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/InjectedComponentTestWithMember.java&r1=925397&r2=925421&rev=925421&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/InjectedComponentTestWithMember.java
(original)
+++ openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/inject/InjectedComponentWithMemberTest.java
Fri Mar 19 21:11:18 2010
@@ -28,13 +28,13 @@ import org.apache.webbeans.test.componen
 import org.junit.Before;
 import org.junit.Test;
 
-public class InjectedComponentTestWithMember extends TestContext
+public class InjectedComponentWithMemberTest extends TestContext
 {
     BeanManager container = null;
 
-    public InjectedComponentTestWithMember()
+    public InjectedComponentWithMemberTest()
     {
-        super(InjectedComponentTestWithMember.class.getSimpleName());
+        super(InjectedComponentWithMemberTest.class.getSimpleName());
     }
 
     @Before



Mime
View raw message