use of org.qi4j.runtime.injection.DependencyModel in project qi4j-sdk by Qi4j.
the class ServiceModel method calculateConfigurationType.
@SuppressWarnings({ "raw", "unchecked" })
public Class calculateConfigurationType() {
Class injectionClass = null;
Iterable<DependencyModel> configurationThisDependencies = filter(and(translate(new DependencyModel.InjectionTypeFunction(), Specifications.<Class<?>>in(Configuration.class)), new DependencyModel.ScopeSpecification(This.class)), dependencies());
for (DependencyModel dependencyModel : configurationThisDependencies) {
if (dependencyModel.rawInjectionType().equals(Configuration.class) && dependencyModel.injectionType() instanceof ParameterizedType) {
Class<?> type = Classes.RAW_CLASS.map(((ParameterizedType) dependencyModel.injectionType()).getActualTypeArguments()[0]);
if (injectionClass == null) {
injectionClass = type;
} else {
if (injectionClass.isAssignableFrom(type)) {
injectionClass = type;
}
}
}
}
return injectionClass;
}
use of org.qi4j.runtime.injection.DependencyModel in project qi4j-sdk by Qi4j.
the class ConstructorsModel method newConstructorModel.
@SuppressWarnings("raw")
private ConstructorModel newConstructorModel(Class fragmentClass, Constructor realConstructor, Constructor injectedConstructor) {
int idx = 0;
InjectedParametersModel parameters = new InjectedParametersModel();
Annotation[][] parameterAnnotations = injectedConstructor.getParameterAnnotations();
for (Type type : injectedConstructor.getGenericParameterTypes()) {
Annotation injectionAnnotation = first(filter(Specifications.translate(Annotations.type(), Annotations.hasAnnotation(InjectionScope.class)), iterable(parameterAnnotations[idx])));
if (injectionAnnotation == null) {
if (fragmentClass.getSuperclass().isMemberClass()) {
injectionAnnotation = new Uses() {
@Override
public Class<? extends Annotation> annotationType() {
return Uses.class;
}
};
} else {
// invalid constructor parameter
return null;
}
}
boolean optional = DependencyModel.isOptional(injectionAnnotation, parameterAnnotations[idx]);
Type genericType = type;
if (genericType instanceof ParameterizedType) {
genericType = new ParameterizedTypeInstance(((ParameterizedType) genericType).getActualTypeArguments(), ((ParameterizedType) genericType).getRawType(), ((ParameterizedType) genericType).getOwnerType());
for (int i = 0; i < ((ParameterizedType) genericType).getActualTypeArguments().length; i++) {
Type typeArg = ((ParameterizedType) genericType).getActualTypeArguments()[i];
if (typeArg instanceof TypeVariable) {
typeArg = Classes.resolveTypeVariable((TypeVariable) typeArg, realConstructor.getDeclaringClass(), fragmentClass);
((ParameterizedType) genericType).getActualTypeArguments()[i] = typeArg;
}
}
}
DependencyModel dependencyModel = new DependencyModel(injectionAnnotation, genericType, fragmentClass, optional, parameterAnnotations[idx]);
parameters.addDependency(dependencyModel);
idx++;
}
return new ConstructorModel(realConstructor, parameters);
}
Aggregations