Skip to content

Commit

Permalink
Move where PAT is fired, workaround Java generics oddity
Browse files Browse the repository at this point in the history
git-svn-id: http://anonsvn.jboss.org/repos/weld/ri/trunk@3559 1c488680-804c-0410-94cd-c6b725194a0e
  • Loading branch information
pmuir committed Aug 19, 2009
1 parent bcbe3b6 commit ce4592c
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 48 deletions.
14 changes: 7 additions & 7 deletions impl/src/main/java/org/jboss/webbeans/BeanManagerImpl.java
Expand Up @@ -584,13 +584,13 @@ else if (resolvedType instanceof ParameterizedType)
{
throw new IllegalArgumentException("Event type " + resolvedType + " is not allowed");
}
// for (Type type : types)
// {
// if (type instanceof TypeVariable)
// {
// throw new IllegalArgumentException("Cannot provide an event type parameterized with a type parameter " + resolvedType);
// }
// }
for (Type type : types)
{
if (type instanceof TypeVariable)
{
throw new IllegalArgumentException("Cannot provide an event type parameterized with a type parameter " + resolvedType);
}
}
}

/**
Expand Down
33 changes: 21 additions & 12 deletions impl/src/main/java/org/jboss/webbeans/bootstrap/BeanDeployer.java
Expand Up @@ -16,7 +16,6 @@
*/
package org.jboss.webbeans.bootstrap;

import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

Expand Down Expand Up @@ -53,18 +52,34 @@ public AbstractBeanDeployer addClass(Class<?> clazz)
ClassTransformer classTransformer = getManager().getServices().get(ClassTransformer.class);
if (!clazz.isAnnotation() && !clazz.isEnum())
{
classes.add(classTransformer.loadClass(clazz));
ProcessAnnotatedTypeImpl<?> event = createProcessAnnotatedTypeEvent(clazz, classTransformer);
getManager().fireEvent(event);
if (!event.isVeto())
{
if (event.getAnnotatedType() instanceof WBClass<?>)
{
classes.add((WBClass<?>) event.getAnnotatedType());
}
else
{
classes.add(classTransformer.loadClass(event.getAnnotatedType()));
}
}
}
return this;
}

private <X> ProcessAnnotatedTypeImpl<X> createProcessAnnotatedTypeEvent(Class<X> clazz, ClassTransformer classTransformer)
{
WBClass<X> annotatedType = classTransformer.loadClass(clazz);
return new ProcessAnnotatedTypeImpl<X>(annotatedType) {};
}

// TODO Do we need to fire PAT for annotated types added via BBD? Probably not PLM.
public AbstractBeanDeployer addClass(AnnotatedType<?> clazz)
{
ClassTransformer classTransformer = getManager().getServices().get(ClassTransformer.class);
if (!clazz.getJavaClass().isAnnotation() && !clazz.getJavaClass().isEnum())
{
classes.add(classTransformer.loadClass(clazz));
}
classes.add(classTransformer.loadClass(clazz));
return this;
}

Expand All @@ -77,12 +92,6 @@ public AbstractBeanDeployer addClasses(Iterable<Class<?>> classes)
return this;
}

public AbstractBeanDeployer addClasses(Collection<WBClass<?>> classes)
{
this.classes.addAll(classes);
return this;
}

public AbstractBeanDeployer createBeans()
{
for (WBClass<?> clazz : classes)
Expand Down
Expand Up @@ -19,9 +19,7 @@
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;

import javax.enterprise.inject.spi.AnnotatedType;
import javax.enterprise.inject.spi.BeforeShutdown;
import javax.enterprise.inject.spi.Extension;

Expand Down Expand Up @@ -271,7 +269,7 @@ public Bootstrap deployBeans()
{
synchronized (this)
{
beanDeployer.addClasses(fireProcessAnnotatedTypeEvents(deploymentVisitor.getBeanClasses()));
beanDeployer.addClasses(deploymentVisitor.getBeanClasses());
beanDeployer.getEnvironment().addBean(new ManagerBean(manager));
beanDeployer.getEnvironment().addBean(new InjectionPointBean(manager));
beanDeployer.getEnvironment().addBean(new EventBean(manager));
Expand Down Expand Up @@ -413,32 +411,6 @@ private void fireAfterDeploymentValidationEvent()
throw new DeploymentException(event.getDeploymentProblems().get(0));
}
}

private Collection<WBClass<?>> fireProcessAnnotatedTypeEvents(Iterable<Class<?>> classes)
{
ClassTransformer classTransformer = getManager().getServices().get(ClassTransformer.class);
HashSet<WBClass<?>> finalClassSet = new HashSet<WBClass<?>>();
for (Class<?> clazz : classes)
{
WBClass<?> annotatedType = classTransformer.loadClass(clazz);
ProcessAnnotatedTypeImpl<?> event = createProcessAnnotatedTypeEvent(annotatedType);
getManager().fireEvent(event);
if (!event.isVeto())
{
if (event.isAnnotatedTypeReplaced())
{
//TODO Create another WBClass<?> that uses this annotated type
}
finalClassSet.add(annotatedType);
}
}
return finalClassSet;
}

private <X> ProcessAnnotatedTypeImpl<X> createProcessAnnotatedTypeEvent(AnnotatedType<X> annotatedType)
{
return new ProcessAnnotatedTypeImpl<X>(annotatedType);
}

/**
* Gets version information
Expand Down

0 comments on commit ce4592c

Please sign in to comment.