Skip to content

Commit

Permalink
WELD-682
Browse files Browse the repository at this point in the history
* Remove TypeSafeResolver.Key and allow Resolvables to be compared
  directly
  • Loading branch information
stuartwdouglas authored and pmuir committed Sep 21, 2010
1 parent f9e4b05 commit 58a67a9
Show file tree
Hide file tree
Showing 8 changed files with 66 additions and 168 deletions.
Expand Up @@ -292,7 +292,7 @@ public EjbDescriptors getEjbDescriptors()
*/
public <X> Set<DisposalMethod<X, ?>> resolveDisposalBeans(Set<Type> types, Set<Annotation> qualifiers, AbstractClassBean<X> declaringBean)
{
Set<DisposalMethod<X, ?>> beans = (Set) disposalMethodResolver.resolve(new ResolvableBuilder().addTypes(types).addQualifiers(qualifiers).setDeclaringBean(declaringBean).createDisposerResolvable());
Set<DisposalMethod<X, ?>> beans = (Set) disposalMethodResolver.resolve(new ResolvableBuilder().addTypes(types).addQualifiers(qualifiers).setDeclaringBean(declaringBean).create());
resolvedDisposalBeans.addAll(beans);
return Collections.unmodifiableSet(beans);
}
Expand Down
Expand Up @@ -16,72 +16,16 @@
*/
package org.jboss.weld.resolution;

import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import java.util.Set;

import javax.enterprise.inject.spi.InterceptionType;

import org.jboss.weld.bean.AbstractClassBean;

public class ForwardingInterceptorResolvable implements InterceptorResolvable
public abstract class ForwardingInterceptorResolvable extends ForwardingResolvable implements InterceptorResolvable
{

public InterceptionType getInterceptionType()
{
// TODO Auto-generated method stub
return null;
}

public <A extends Annotation> A getAnnotation(Class<A> annotationType)
{
// TODO Auto-generated method stub
return null;
}
protected abstract InterceptorResolvable delegate();

public AbstractClassBean<?> getDeclaringBean()
{
// TODO Auto-generated method stub
return null;
}

public Class<?> getJavaClass()
{
// TODO Auto-generated method stub
return null;
}

public Set<Annotation> getQualifiers()
{
// TODO Auto-generated method stub
return null;
}

public Set<Type> getTypes()
{
// TODO Auto-generated method stub
return null;
}

public boolean isAnnotationPresent(Class<? extends Annotation> annotationType)
{
// TODO Auto-generated method stub
return false;
}

public boolean isAssignableTo(Class<?> clazz)
{
// TODO Auto-generated method stub
return false;
}

public int getHashCode()
public InterceptionType getInterceptionType()
{
return hashCode();
return delegate().getInterceptionType();
}

public boolean isEqualTo(Resolvable r)
{
return equals(r);
}
}
Expand Up @@ -79,14 +79,4 @@ public String toString()
{
return delegate().toString();
}

public int getHashCode()
{
return delegate().getHashCode();
}

public boolean isEqualTo(Resolvable r)
{
return delegate().isEqualTo(r);
}
}
Expand Up @@ -135,17 +135,22 @@ public InterceptionType getInterceptionType()
return interceptionType;
}

public int getHashCode()
public int hashCode()
{
return 31*super.getHashCode()
return 31 * super.hashCode()
+ this.getInterceptionType().hashCode();
}

public boolean isEqualTo(Resolvable r)
public boolean equals(Object o)
{
return super.isEqualTo(r)
if (o instanceof Resolvable)
{
Resolvable r = (Resolvable) o;
return super.equals(r)
&& r instanceof InterceptorResolvable
&& this.getInterceptionType().equals(((InterceptorResolvable)r).getInterceptionType());
}
return false;
}
}

Expand Down
14 changes: 0 additions & 14 deletions impl/src/main/java/org/jboss/weld/resolution/Resolvable.java
Expand Up @@ -87,18 +87,4 @@ public interface Resolvable
*/
public Bean<?> getDeclaringBean();

/**
* Force the Resolvable to implement its own comparison strategy
* (thus subclasses can be compared differently)
* @param r
* @return
*/
public boolean isEqualTo(Resolvable r);

/**
* Force the Resolvable to implement
* @return
*/
public int getHashCode();

}
Expand Up @@ -138,15 +138,6 @@ else if (Reflections.isAssignableFrom(Provider.class, types))
}
}

public Resolvable createDisposerResolvable()
{
if (qualifiers.size() == 0)
{
this.qualifiers.add(DefaultLiteral.INSTANCE);
}
return new DisposerResolvableImpl(rawType, types, qualifiers, mappedQualifiers, declaringBean);
}

private Resolvable createFacade(Class<?> rawType)
{
Set<Annotation> qualifiers = Collections.<Annotation> singleton(AnyLiteral.INSTANCE);
Expand Down Expand Up @@ -285,35 +276,20 @@ public String toString()
return "Types: " + getTypes() + "; Bindings: " + getQualifiers();
}

public int getHashCode()
public int hashCode()
{
int result = 17;
result = 31 * result + this.getTypes().hashCode();
result = 31 * result + this.getQualifiers().hashCode();
return result;
}

public boolean isEqualTo(Resolvable r)
{
return this.getTypes().equals(r.getTypes())
&& this.getQualifiers().equals(r.getQualifiers());

}
}

protected static class DisposerResolvableImpl extends ResolvableImpl
{
public DisposerResolvableImpl(Class<?> rawType, Set<Type> typeClosure, Set<Annotation> qualifiers, Map<Class<? extends Annotation>, Annotation> mappedQualifiers, Bean<?> declaringBean)
{
super(rawType, typeClosure, qualifiers, mappedQualifiers, declaringBean);
}

@Override
public boolean isEqualTo(Resolvable r)
public boolean equals(Object o)
{
if (super.isEqualTo(r))
if (o instanceof ResolvableImpl)
{
return r.getDeclaringBean().equals(getDeclaringBean());
Resolvable r = (Resolvable) o;
return this.getTypes().equals(r.getTypes()) && this.getQualifiers().equals(r.getQualifiers());
}
return false;
}
Expand Down
Expand Up @@ -44,6 +44,40 @@ protected boolean matches(Resolvable resolvable, DisposalMethod<?, ?> disposer)
return resolvable.getDeclaringBean().equals(disposer.getDeclaringBean()) && Reflections.isAssignableFrom(disposer.getType(), resolvable.getTypes()) && Beans.containsAllQualifiers(disposer.getQualifiers(), resolvable.getQualifiers(), manager);
}

@Override
protected Resolvable wrap(final Resolvable resolvable)
{
return new ForwardingResolvable()
{

@Override
protected Resolvable delegate()
{
return resolvable;
}

@Override
public boolean equals(Object o)
{
if (o instanceof Resolvable)
{
if (super.equals(o))
{
Resolvable r = (Resolvable) o;
return r.getDeclaringBean().equals(getDeclaringBean());
}
}
return false;
}

@Override
public int hashCode()
{
return 31 * super.hashCode() + getDeclaringBean().hashCode();
}
};
}

/**
* @return the manager
*/
Expand Down
63 changes: 13 additions & 50 deletions impl/src/main/java/org/jboss/weld/resolution/TypeSafeResolver.java
Expand Up @@ -33,53 +33,8 @@
public abstract class TypeSafeResolver<R extends Resolvable, T>
{

private static class Key<R extends Resolvable>
private static class ResolvableToBeanSet<R extends Resolvable, T> implements Function<R, Set<T>>
{

private final R resolvable;

private Key(R resolvable)
{
this.resolvable = resolvable;
}

public R getResolvable()
{
return resolvable;
}

@Override
public boolean equals(Object obj)
{
if (obj instanceof Key)
{
Key that = (Key) obj;
return that.getResolvable().getClass().equals(this.getResolvable().getClass())
&& that.getResolvable().isEqualTo(this.getResolvable());
}
else
{
return false;
}
}

@Override
public int hashCode()
{
return this.getResolvable().getHashCode();
}

@Override
public String toString()
{
return getResolvable().toString();
}

}

private static class ResolvableToBeanSet<R extends Resolvable, T> implements Function<Key<R>, Set<T>>
{


private final TypeSafeResolver<R, T> resolver;

Expand All @@ -88,15 +43,15 @@ private ResolvableToBeanSet(TypeSafeResolver<R, T> resolver)
this.resolver = resolver;
}

public Set<T> apply(Key<R> from)
public Set<T> apply(R from)
{
return resolver.sortResult(resolver.filterResult(resolver.findMatching(from.getResolvable())));
return resolver.sortResult(resolver.filterResult(resolver.findMatching(from)));
}

}

// The resolved injection points
private final ConcurrentMap<Key<R>, Set<T>> resolved;
private final ConcurrentMap<R, Set<T>> resolved;
// The beans to search
private final Iterable<? extends T> allBeans;

Expand Down Expand Up @@ -128,7 +83,7 @@ public void clear()
*/
public Set<T> resolve(R resolvable)
{
return Collections.unmodifiableSet(resolved.get(new Key<R>(resolvable)));
return Collections.unmodifiableSet(resolved.get(wrap(resolvable)));
}

/**
Expand Down Expand Up @@ -158,6 +113,14 @@ private Set<T> findMatching(R resolvable)

protected abstract boolean matches(R resolvable, T t);

/**
* allows subclasses to wrap a resolvable before it is resolved
*/
protected R wrap(R resolvable)
{
return resolvable;
}

/**
* Gets a string representation
*
Expand Down

0 comments on commit 58a67a9

Please sign in to comment.