Skip to content

Commit

Permalink
WELD-1016 Weld creates multiple interceptor instances per target inst…
Browse files Browse the repository at this point in the history
…ance
  • Loading branch information
luksa authored and stuartwdouglas committed Apr 3, 2012
1 parent ac95c22 commit 0cc6910
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 4 deletions.
15 changes: 14 additions & 1 deletion impl/src/main/java/org/jboss/weld/bean/AbstractClassBean.java
Expand Up @@ -73,8 +73,10 @@
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import static org.jboss.weld.logging.Category.BEAN;
Expand Down Expand Up @@ -466,6 +468,8 @@ private ContextualStore getContextualStore() {

private class InterceptionModelInitializer {

private Map<Interceptor<?>, InterceptorMetadata<SerializableContextual<Interceptor<?>, ?>>> interceptorMetadatas = new HashMap<Interceptor<?>, InterceptorMetadata<SerializableContextual<Interceptor<?>, ?>>>();

private List<WeldMethod<?,?>> businessMethods;
private InterceptionModelBuilder<ClassMetadata<?>,?> builder;

Expand Down Expand Up @@ -627,11 +631,20 @@ private Class<?>[] getMethodDeclaredInterceptors(WeldMethod<?, ?> method) {
private InterceptorMetadata<SerializableContextual<?, ?>>[] toSerializableContextualArray(List<Interceptor<?>> interceptors) {
List<InterceptorMetadata<SerializableContextual<Interceptor<?>, ?>>> serializableContextuals = new ArrayList<InterceptorMetadata<SerializableContextual<Interceptor<?>, ?>>>();
for (Interceptor<?> interceptor : interceptors) {
serializableContextuals.add(getInterceptorMetadata(interceptor));
serializableContextuals.add(getCachedInterceptorMetadata(interceptor));
}
return serializableContextuals.toArray(AbstractClassBean.<SerializableContextual<?, ?>>emptyInterceptorMetadataArray());
}

private InterceptorMetadata<SerializableContextual<Interceptor<?>, ?>> getCachedInterceptorMetadata(Interceptor<?> interceptor) {
InterceptorMetadata<SerializableContextual<Interceptor<?>, ?>> interceptorMetadata = interceptorMetadatas.get(interceptor);
if (interceptorMetadata == null) {
interceptorMetadata = getInterceptorMetadata(interceptor);
interceptorMetadatas.put(interceptor, interceptorMetadata);
}
return interceptorMetadata;
}

private InterceptorMetadata<SerializableContextual<Interceptor<?>, ?>> getInterceptorMetadata(Interceptor<?> interceptor) {
SerializableContextualImpl<Interceptor<?>, ?> contextual = new SerializableContextualImpl(interceptor, getContextualStore());
if (interceptor instanceof InterceptorImpl) {
Expand Down
Expand Up @@ -30,7 +30,6 @@
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.BeanArchive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;

Expand Down Expand Up @@ -65,7 +64,6 @@ public void testSingleInterceptorInstanceUsedForSubsequentInvocation() {
}

@Test
@Ignore("WELD-1016")
public void testSingleInterceptorInstanceUsedForDifferentMethodsWithCdiBinding() {
assertEquals(tiger.foo(), tiger.bar());
assertEquals(lion.foo(), lion.bar());
Expand All @@ -83,7 +81,6 @@ public void testSingleInterceptorInstanceUsedForMethodAndLifecycleCallbackWithCd
}

@Test
@Ignore("WELD-1016")
public void testSingleInterceptorInstanceUsedForMethodAndLifecycleCallback() {
assertEquals(lion.getPostConstructInterceptor(), lion.foo());
}
Expand Down

0 comments on commit 0cc6910

Please sign in to comment.