Skip to content

Commit

Permalink
use EnabledClasses throughout Weld to simplify BeanManagerImpl
Browse files Browse the repository at this point in the history
  • Loading branch information
pmuir committed Jun 5, 2010
1 parent cf6be45 commit 0685ad5
Show file tree
Hide file tree
Showing 13 changed files with 153 additions and 166 deletions.
Expand Up @@ -71,9 +71,9 @@ public BeanDeployment(BeanDeploymentArchive beanDeploymentArchive, BeanManagerIm
services.addAll(deploymentServices.entrySet());
services.addAll(beanDeploymentArchive.getServices().entrySet());
this.beanManager = BeanManagerImpl.newManager(deploymentManager, beanDeploymentArchive.getId(), services, new BeansXmlParser(services.get(ResourceLoader.class), beanDeploymentArchive.getBeansXml()).parse());
log.debug(ENABLED_ALTERNATIVES, this.beanManager, beanManager.getEnabledAlternativeClasses(), beanManager.getEnabledAlternativeStereotypes());
log.debug(ENABLED_DECORATORS, this.beanManager, beanManager.getEnabledDecoratorClasses());
log.debug(ENABLED_INTERCEPTORS, this.beanManager, beanManager.getEnabledInterceptorClasses());
log.debug(ENABLED_ALTERNATIVES, this.beanManager, beanManager.getEnabledClasses().getAlternativeClasses(), beanManager.getEnabledClasses().getAlternativeStereotypes());
log.debug(ENABLED_DECORATORS, this.beanManager, beanManager.getEnabledClasses().getDecorators());
log.debug(ENABLED_INTERCEPTORS, this.beanManager, beanManager.getEnabledClasses().getInterceptors());
if (beanManager.getServices().contains(EjbServices.class))
{
// Must populate EJB cache first, as we need it to detect whether a
Expand Down
16 changes: 8 additions & 8 deletions impl/src/main/java/org/jboss/weld/bootstrap/Validator.java
Expand Up @@ -18,7 +18,6 @@

import static org.jboss.weld.logging.Category.BOOTSTRAP;
import static org.jboss.weld.logging.LoggerFactory.loggerFactory;
import static org.jboss.weld.logging.messages.ValidatorMessage.SCOPE_ANNOTATION_ON_INJECTION_POINT;
import static org.jboss.weld.logging.messages.ValidatorMessage.ALTERNATIVE_BEAN_CLASS_NOT_ANNOTATED;
import static org.jboss.weld.logging.messages.ValidatorMessage.ALTERNATIVE_BEAN_CLASS_SPECIFIED_MULTIPLE_TIMES;
import static org.jboss.weld.logging.messages.ValidatorMessage.ALTERNATIVE_STEREOTYPE_NOT_ANNOTATED;
Expand Down Expand Up @@ -52,6 +51,7 @@
import static org.jboss.weld.logging.messages.ValidatorMessage.NON_SERIALIZABLE_BEAN_INJECTED_INTO_PASSIVATING_BEAN;
import static org.jboss.weld.logging.messages.ValidatorMessage.PASSIVATING_BEAN_WITH_NONSERIALIZABLE_DECORATOR;
import static org.jboss.weld.logging.messages.ValidatorMessage.PASSIVATING_BEAN_WITH_NONSERIALIZABLE_INTERCEPTOR;
import static org.jboss.weld.logging.messages.ValidatorMessage.SCOPE_ANNOTATION_ON_INJECTION_POINT;

import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
Expand Down Expand Up @@ -471,9 +471,9 @@ private void validateEnabledInterceptorClasses(BeanManagerImpl beanManager)
{
interceptorBeanClasses.add(interceptor.getBeanClass());
}
for (Class<?> enabledInterceptorClass : beanManager.getEnabledInterceptorClasses())
for (Class<?> enabledInterceptorClass : beanManager.getEnabledClasses().getInterceptors())
{
if (beanManager.getEnabledInterceptorClasses().indexOf(enabledInterceptorClass) < beanManager.getEnabledInterceptorClasses().lastIndexOf(enabledInterceptorClass))
if (beanManager.getEnabledClasses().getInterceptors().indexOf(enabledInterceptorClass) < beanManager.getEnabledClasses().getInterceptors().lastIndexOf(enabledInterceptorClass))
{
throw new DeploymentException(INTERCEPTOR_SPECIFIED_TWICE, enabledInterceptorClass + " specified twice");
}
Expand All @@ -492,9 +492,9 @@ private void validateEnabledDecoratorClasses(BeanManagerImpl beanManager)
{
decoratorBeanClasses.add(bean.getBeanClass());
}
for (Class<?> clazz : beanManager.getEnabledDecoratorClasses())
for (Class<?> clazz : beanManager.getEnabledClasses().getDecorators())
{
if (beanManager.getEnabledDecoratorClasses().indexOf(clazz) < beanManager.getEnabledDecoratorClasses().lastIndexOf(clazz))
if (beanManager.getEnabledClasses().getDecorators().indexOf(clazz) < beanManager.getEnabledClasses().getDecorators().lastIndexOf(clazz))
{
throw new DeploymentException(DECORATOR_SPECIFIED_TWICE, clazz);
}
Expand All @@ -508,7 +508,7 @@ private void validateEnabledDecoratorClasses(BeanManagerImpl beanManager)
private void validateEnabledAlternatives(BeanManagerImpl beanManager)
{
List<Class<?>> seenAlternatives = new ArrayList<Class<?>>();
for (Class<? extends Annotation> stereotype : beanManager.getEnabledAlternativeStereotypes())
for (Class<? extends Annotation> stereotype : beanManager.getEnabledClasses().getAlternativeStereotypes())
{
if (!stereotype.isAnnotationPresent(Alternative.class))
{
Expand All @@ -520,7 +520,7 @@ private void validateEnabledAlternatives(BeanManagerImpl beanManager)
}
seenAlternatives.add(stereotype);
}
for (Class<?> clazz : beanManager.getEnabledAlternativeClasses())
for (Class<?> clazz : beanManager.getEnabledClasses().getAlternativeClasses())
{
if (!clazz.isAnnotationPresent(Alternative.class))
{
Expand Down Expand Up @@ -571,7 +571,7 @@ private static boolean isInjectionPointSatisfied(InjectionPoint ij, Set<?> resol
{
if (ij.getBean() instanceof Decorator<?>)
{
if (beanManager.getEnabledDecoratorClasses().contains(ij.getBean().getBeanClass()))
if (beanManager.getEnabledClasses().getDecorators().contains(ij.getBean().getBeanClass()))
{
return resolvedBeans.size() > 0;
}
Expand Down
Expand Up @@ -78,6 +78,7 @@
import org.jboss.weld.jsf.JsfApiAbstraction;
import org.jboss.weld.logging.messages.VersionMessage;
import org.jboss.weld.manager.BeanManagerImpl;
import org.jboss.weld.manager.EnabledClasses;
import org.jboss.weld.metadata.TypeStore;
import org.jboss.weld.metadata.cache.MetaAnnotationStore;
import org.jboss.weld.persistence.PersistenceApiAbstraction;
Expand All @@ -98,7 +99,6 @@
import org.jboss.weld.util.serviceProvider.DefaultServiceLoaderFactory;
import org.jboss.weld.util.serviceProvider.ServiceLoaderFactory;
import org.jboss.weld.ws.WSApiAbstraction;
import org.jboss.weld.xml.EnabledClasses;
import org.slf4j.cal10n.LocLogger;

/**
Expand Down
34 changes: 7 additions & 27 deletions impl/src/main/java/org/jboss/weld/manager/BeanManagerImpl.java
Expand Up @@ -116,7 +116,6 @@
import org.jboss.weld.util.collections.IterableToIteratorFunction;
import org.jboss.weld.util.reflection.HierarchyDiscovery;
import org.jboss.weld.util.reflection.Reflections;
import org.jboss.weld.xml.EnabledClasses;

import com.google.common.collect.Iterables;
import com.google.common.collect.Iterators;
Expand Down Expand Up @@ -466,41 +465,22 @@ public <T> Set<ObserverMethod<? super T>> resolveObserverMethods(Type eventType,
*/
public Collection<Class<?>> getEnabledAlternativeClasses()
{
return getEnabledClasses().getEnabledAlternativeClasses();
return getEnabledClasses().getAlternativeClasses();
}

/**
* @return the enabled alternative stereotypes
* Enabled Alternatives, Interceptors and Decorators
*
* @return
*/
public Collection<Class<? extends Annotation>> getEnabledAlternativeStereotypes()
{
return getEnabledClasses().getEnabledAlternativeStereotypes();
}

private EnabledClasses getEnabledClasses()
public EnabledClasses getEnabledClasses()
{
return enabledClasses;
}

public boolean isBeanEnabled(Bean<?> bean)
{
return Beans.isBeanEnabled(bean, getEnabledAlternativeClasses(), getEnabledAlternativeStereotypes());
}

/**
* @return the enabledDecoratorClasses
*/
public List<Class<?>> getEnabledDecoratorClasses()
{
return getEnabledClasses().getEnabledDecoratorClasses();
}

/**
* @return the enabledInterceptorClasses
*/
public List<Class<?>> getEnabledInterceptorClasses()
{
return getEnabledClasses().getEnabledInterceptorClasses();
return Beans.isBeanEnabled(bean, getEnabledClasses().getAlternativeClasses(), getEnabledClasses().getAlternativeStereotypes());
}

public Set<Bean<?>> getBeans(Type beanType, Annotation... qualifiers)
Expand Down Expand Up @@ -860,7 +840,7 @@ public String toString()
{
StringBuilder buffer = new StringBuilder();
buffer.append("Manager\n");
buffer.append("Enabled alternatives: " + getEnabledAlternativeClasses() + " " + getEnabledAlternativeStereotypes() + "\n");
buffer.append("Enabled alternatives: " + getEnabledClasses().getAlternativeClasses() + " " + getEnabledClasses().getAlternativeStereotypes() + "\n");
buffer.append("Registered contexts: " + contexts.keySet() + "\n");
buffer.append("Registered beans: " + getBeans().size() + "\n");
buffer.append("Specialized beans: " + specializedBeans.size() + "\n");
Expand Down
72 changes: 72 additions & 0 deletions impl/src/main/java/org/jboss/weld/manager/EnabledClasses.java
@@ -0,0 +1,72 @@
/*
* JBoss, Home of Professional Open Source
* Copyright 2008, Red Hat, Inc., and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jboss.weld.manager;

import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
*
* @author Nicklas Karlsson
*
*/
public class EnabledClasses
{

private final List<Class<? extends Annotation>> alternativeStereotypes;
private final List<Class<?>> alternativeClasses;
private final List<Class<?>> decorators;
private final List<Class<?>> interceptors;

public EnabledClasses()
{
this.alternativeClasses = Collections.emptyList();
this.alternativeStereotypes = Collections.emptyList();
this.decorators = Collections.emptyList();
this.interceptors = Collections.emptyList();
}

public EnabledClasses(List<Class<? extends Annotation>> alternativeStereotypes, List<Class<?>> alternativeClasses, List<Class<?>> decorators, List<Class<?>> interceptors)
{
this.alternativeStereotypes = new ArrayList<Class<? extends Annotation>>(alternativeStereotypes);
this.alternativeClasses = new ArrayList<Class<?>>(alternativeClasses);
this.decorators = new ArrayList<Class<?>>(decorators);
this.interceptors = new ArrayList<Class<?>>(interceptors);
}

public List<Class<? extends Annotation>> getAlternativeStereotypes()
{
return Collections.unmodifiableList(alternativeStereotypes);
}

public List<Class<?>> getAlternativeClasses()
{
return Collections.unmodifiableList(alternativeClasses);
}

public List<Class<?>> getDecorators()
{
return Collections.unmodifiableList(decorators);
}

public List<Class<?>> getInterceptors()
{
return Collections.unmodifiableList(interceptors);
}
}
Expand Up @@ -45,7 +45,7 @@ protected boolean matches(Resolvable resolvable, Decorator<?> bean)
{
return Reflections.matches(Collections.singleton(bean.getDelegateType()), resolvable.getTypes())
&& Beans.containsAllBindings(bean.getDelegateQualifiers(), resolvable.getQualifiers(), getBeanManager())
&& getBeanManager().getEnabledDecoratorClasses().contains(bean.getBeanClass());
&& getBeanManager().getEnabledClasses().getDecorators().contains(bean.getBeanClass());
}

@Override
Expand All @@ -56,7 +56,7 @@ protected Set<Decorator<?>> sortResult(Set<Decorator<?>> matchedDecorators)

public int compare(Decorator<?> o1, Decorator<?> o2)
{
List<Class<?>> enabledDecorators = getBeanManager().getEnabledDecoratorClasses();
List<Class<?>> enabledDecorators = getBeanManager().getEnabledClasses().getDecorators();
int p1 = enabledDecorators.indexOf(((Decorator<?>) o1).getBeanClass());
int p2 = enabledDecorators.indexOf(((Decorator<?>) o2).getBeanClass());
return p1 - p2;
Expand Down
Expand Up @@ -18,7 +18,6 @@
package org.jboss.weld.resolution;

import java.util.Comparator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

Expand All @@ -45,7 +44,7 @@ public TypeSafeInterceptorResolver(BeanManagerImpl manager, Iterable<Interceptor
@Override
protected boolean matches(InterceptorResolvable resolvable, Interceptor<?> bean)
{
return bean.intercepts(resolvable.getInterceptionType()) && bean.getInterceptorBindings().size() > 0 && Beans.containsAllInterceptionBindings(bean.getInterceptorBindings(), resolvable.getQualifiers(), getManager()) && getManager().getEnabledInterceptorClasses().contains(bean.getBeanClass());
return bean.intercepts(resolvable.getInterceptionType()) && bean.getInterceptorBindings().size() > 0 && Beans.containsAllInterceptionBindings(bean.getInterceptorBindings(), resolvable.getQualifiers(), getManager()) && getManager().getEnabledClasses().getInterceptors().contains(bean.getBeanClass());
}

@Override
Expand All @@ -56,9 +55,8 @@ protected Set<Interceptor<?>> sortResult(Set<Interceptor<?>> matchedInterceptors

public int compare(Interceptor<?> o1, Interceptor<?> o2)
{
List<Class<?>> enabledInterceptors = getManager().getEnabledInterceptorClasses();
int p1 = enabledInterceptors.indexOf(((InterceptorImpl<?>) o1).getType());
int p2 = enabledInterceptors.indexOf(((InterceptorImpl<?>) o2).getType());
int p1 = getManager().getEnabledClasses().getInterceptors().indexOf(((InterceptorImpl<?>) o1).getType());
int p2 = getManager().getEnabledClasses().getInterceptors().indexOf(((InterceptorImpl<?>) o2).getType());
return p1 - p2;
}

Expand Down
2 changes: 1 addition & 1 deletion impl/src/main/java/org/jboss/weld/util/Beans.java
Expand Up @@ -591,7 +591,7 @@ public static <T extends Bean<?>> Set<T> removeDisabledAndSpecializedBeans(Set<T
Set<T> result = new HashSet<T>();
for (T bean : beans)
{
if (isBeanEnabled(bean, beanManager.getEnabledAlternativeClasses(), beanManager.getEnabledAlternativeStereotypes()) && !isSpecialized(bean, beans, beanManager))
if (isBeanEnabled(bean, beanManager.getEnabledClasses().getAlternativeClasses(), beanManager.getEnabledClasses().getAlternativeStereotypes()) && !isSpecialized(bean, beans, beanManager))
{
result.add(bean);
}
Expand Down
32 changes: 31 additions & 1 deletion impl/src/main/java/org/jboss/weld/xml/BeansXmlParser.java
Expand Up @@ -22,12 +22,16 @@

import java.io.IOException;
import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.jboss.weld.manager.EnabledClasses;
import org.jboss.weld.resources.spi.ResourceLoader;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
Expand Down Expand Up @@ -73,7 +77,33 @@ public EnabledClasses parse()
}

}
return new EnabledClasses(resourceLoader, mergedElements);
List<Class<?>> enabledAlternativeClasses = new ArrayList<Class<?>>();
List<Class<? extends Annotation>> enabledAlternativeStereotypes = new ArrayList<Class<? extends Annotation>>();
List<Class<?>> enabledDecoratorClasses = new ArrayList<Class<?>>();
List<Class<?>> enabledInterceptorClasses = new ArrayList<Class<?>>();
for (BeansXmlElement element : mergedElements.getAlternativesElements())
{
for (Class<?> clazz : element.getClasses(resourceLoader))
{
if (clazz.isAnnotation())
{
enabledAlternativeStereotypes.add(clazz.asSubclass(Annotation.class));
}
else
{
enabledAlternativeClasses.add(clazz);
}
}
}
for (BeansXmlElement element : mergedElements.getDecoratorsElements())
{
enabledDecoratorClasses.addAll(element.getClasses(resourceLoader));
}
for (BeansXmlElement element : mergedElements.getInterceptorsElements())
{
enabledInterceptorClasses.addAll(element.getClasses(resourceLoader));
}
return new EnabledClasses(enabledAlternativeStereotypes, enabledAlternativeClasses, enabledDecoratorClasses, enabledInterceptorClasses);
}

private Document loadDocument(DocumentBuilder documentBuilder, URL beansXml)
Expand Down

0 comments on commit 0685ad5

Please sign in to comment.