in src/main/java/org/apache/sling/models/impl/ModelAdapterFactory.java [807:830]
private <ModelType> ModelClassConstructor<ModelType> getBestMatchingConstructor(Object adaptable, ModelClass<ModelType> type) {
ModelClassConstructor<ModelType>[] constructors = type.getConstructors();
for (ModelClassConstructor<ModelType> constructor : constructors) {
// first try to find the constructor with most parameters and @Inject annotation
if (constructor.hasInjectAnnotation()) {
return constructor;
}
// compatibility mode for sling models implementation <= 1.0.6:
// support constructor without @Inject if it has exactly one parameter matching the adaptable class
final Class<?>[] paramTypes = constructor.getConstructor().getParameterTypes();
if (paramTypes.length == 1) {
Class<?> paramType = constructor.getConstructor().getParameterTypes()[0];
if (paramType.isInstance(adaptable)) {
return constructor;
}
}
// if no constructor for injection found use public constructor without any params
if (constructor.getConstructor().getParameterTypes().length == 0) {
return constructor;
}
}
return null;
}