package com.github.czyzby.uedi.stereotype.impl;
import java.lang.reflect.Member;
import com.github.czyzby.uedi.stereotype.Default;
import com.github.czyzby.uedi.stereotype.Named;
import com.github.czyzby.uedi.stereotype.Provider;
/** Static utilities for provider-related operations.
*
* @author MJ */
public class Providers {
/** 0-element object array. Pass to methods to avoid creating var-arg arrays when using reflection API. */
public static final Object[] EMPTY_ARRAY = new Object[0];
/** Do not initiate. */
private Providers() {
}
/** @param member will determine its ID. Can be null.
* @return member name or null if unavailable. */
public static String getName(final Member member) {
return member == null ? "default" : member.getName();
}
/** @param component will determine its ID.
* @return name of the component if its {@link Named} or normalized simple name of its class. */
public static String getName(final Object component) {
if (component instanceof Named) {
return ((Named) component).getName();
}
final String className = component.getClass().getSimpleName();
if (className == null || className.isEmpty()) { // Anonymous class.
return "unknown";
}
return Character.toLowerCase(className.charAt(0)) + className.substring(1);
}
/** @param provider will be validated.
* @return whether the provider should be treated as the default one in case of ambiguous dependencies. */
public static boolean isDefault(final Provider<?> provider) {
return provider instanceof Default
|| provider instanceof DelegateProvider<?> && ((DelegateProvider<?>) provider).isDefault();
}
}