code: static ResolvableType forType(Type type, TypeProvider typeProvider, VariableResolver variableResolver) {
  		if (type == null && typeProvider != null) {
  			type = SerializableTypeWrapper.forTypeProvider(typeProvider);
  		}
  		if (type == null) {
  			return NONE;
  		}
  
  		// Purge empty entries on access since we don't have a clean-up thread or the like.
  		cache.purgeUnreferencedEntries();
  
  		// For simple Class references, build the wrapper right away -
  		// no expensive resolution necessary, so not worth caching...
  		if (type instanceof Class) {
  			return new ResolvableType(type, typeProvider, variableResolver, null);
  		}
  
  		// Check the cache - we may have a ResolvableType which has been resolved before...
  		ResolvableType key = new ResolvableType(type, typeProvider, variableResolver);
  		ResolvableType resolvableType = cache.get(key);
  		if (resolvableType == null) {
  			resolvableType = new ResolvableType(type, typeProvider, variableResolver, null);
  			cache.put(resolvableType, resolvableType);
  		}
  		return resolvableType;
  	}
docs: Return a {@link ResolvableType} for the specified {@link Type} backed by a given
  {@link VariableResolver}.
  @param type the source type or {@code null}
  @param typeProvider the type provider or {@code null}
  @param variableResolver the variable resolver or {@code null}
  @return a {@link ResolvableType} for the specified {@link Type} and {@link VariableResolver}