import java.util.Arrays;
+import org.wamblee.reflection.ReflectionUtils;
+
public class DefaultRequiredInterface implements RequiredInterface {
- private String _name;
- private boolean _optional;
- private Class[] _required;
- private ProvidedInterface _provider;
+ private String name;
+ private boolean optional;
+ private Class[] required;
+ private ProvidedInterface provider;
public DefaultRequiredInterface(String aName, Class aInterface) {
this(aName, new Class[] { aInterface });
public DefaultRequiredInterface(String aName, Class[] aInterfaces, boolean aIsOptional) {
- _name = aName;
- _optional = aIsOptional;
- _required = aInterfaces;
+ name = aName;
+ optional = aIsOptional;
+ required = aInterfaces;
}
@Override
public String getName() {
- return _name;
+ return name;
}
@Override
public boolean isOptional() {
- return _optional;
+ return optional;
}
@Override
public boolean implementedBy(ProvidedInterface aDescriptor) {
Class[] provided = aDescriptor.getInterfaceTypes();
- for (Class required : _required) {
- if ( !serviceProvided(required, provided)) {
+ for (Class requiredIntf : required) {
+ if ( !serviceProvided(requiredIntf, provided)) {
return false;
}
}
private boolean serviceProvided(Class aRequired, Class[] aProvided) {
for (Class provided: aProvided) {
try {
+ provided = ReflectionUtils.wrapIfNeeded(provided);
+ aRequired = ReflectionUtils.wrapIfNeeded(aRequired);
provided.asSubclass(aRequired);
return true;
} catch (ClassCastException e) {
@Override
public ProvidedInterface getProvider() {
- return _provider;
+ return provider;
}
@Override
public void setProvider(ProvidedInterface aProvider) {
assert aProvider != null;
assert implementedBy(aProvider);
- _provider = aProvider;
+ provider = aProvider;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ return this == obj;
}
@Override
- public boolean equals(Object obj) {
+ public boolean covers(RequiredInterface obj) {
+ // TODO do more than equals.
if ( !(obj instanceof DefaultRequiredInterface)) {
return false;
}
DefaultRequiredInterface descr = (DefaultRequiredInterface)obj;
- if ( _required.length != descr._required.length ) {
+ if ( required.length != descr.required.length ) {
return false;
}
- String[] interfaces1 = new String[_required.length];
- String[] interfaces2 = new String[_required.length];
- for (int i = 0; i < _required.length; i++) {
- interfaces1[i] = _required[i].getName();
- interfaces2[i] = descr._required[i].getName();
+ String[] interfaces1 = new String[required.length];
+ String[] interfaces2 = new String[required.length];
+ for (int i = 0; i < required.length; i++) {
+ interfaces1[i] = required[i].getName();
+ interfaces2[i] = descr.required[i].getName();
}
Arrays.sort(interfaces1);
Arrays.sort(interfaces2);
@Override
public int hashCode() {
- return _required.hashCode();
+ return required.hashCode();
}
@Override
public String toString() {
StringBuffer buf = new StringBuffer();
buf.append("." + getName() + ":");
- for (Class intf: _required) {
+ for (Class intf: required) {
buf.append("." + intf.getName());
}
return buf.toString();