in src/main/java/org/apache/sling/models/impl/injectors/SlingObjectInjector.java [62:106]
public Object getValue(final @NotNull Object adaptable, final String name, final @NotNull Type type, final @NotNull AnnotatedElement element,
final @NotNull DisposalCallbackRegistry callbackRegistry) {
// only class types are supported
if (!(type instanceof Class<?>)) {
return null;
}
Class<?> requestedClass = (Class<?>) type;
// validate input
if (adaptable instanceof SlingHttpServletRequest) {
SlingHttpServletRequest request = (SlingHttpServletRequest) adaptable;
if (requestedClass.equals(ResourceResolver.class)) {
return request.getResourceResolver();
}
if (requestedClass.equals(Resource.class) && element.isAnnotationPresent(SlingObject.class)) {
return request.getResource();
}
if (requestedClass.equals(SlingHttpServletRequest.class) || requestedClass.equals(HttpServletRequest.class)) {
return request;
}
if (requestedClass.equals(SlingHttpServletResponse.class)
|| requestedClass.equals(HttpServletResponse.class)) {
return getSlingHttpServletResponse(request);
}
if (requestedClass.equals(SlingScriptHelper.class)) {
return getSlingScriptHelper(request);
}
} else if (adaptable instanceof ResourceResolver) {
ResourceResolver resourceResolver = (ResourceResolver) adaptable;
if (requestedClass.equals(ResourceResolver.class)) {
return resourceResolver;
}
} else if (adaptable instanceof Resource) {
Resource resource = (Resource) adaptable;
if (requestedClass.equals(ResourceResolver.class)) {
return resource.getResourceResolver();
}
if (requestedClass.equals(Resource.class) && element.isAnnotationPresent(SlingObject.class)) {
return resource;
}
}
return null;
}