While investigating jruby/jruby#3151, a few issues with the way Caching does delegation came to light:
- At least one place, in
conditional_on_changes_to, an HTTP::Request object gets double-delegated. Both the self.class.new and .caching calls wrap the new HTTP::Request object in a delegating Caching instance.
- The
Caching class itself is created before HTTP::Request has completed loading, resulting in a DelegateClass that does most delegation through method_missing rather than through generated, direct delegation methods.
These issues are not strictly bugs, but they likely affect performance. In the case of jruby/jruby#3151, they also exposed an obscure bug in JRuby.
While investigating jruby/jruby#3151, a few issues with the way
Cachingdoes delegation came to light:conditional_on_changes_to, anHTTP::Requestobject gets double-delegated. Both theself.class.newand.cachingcalls wrap the newHTTP::Requestobject in a delegatingCachinginstance.Cachingclass itself is created beforeHTTP::Requesthas completed loading, resulting in aDelegateClassthat does most delegation throughmethod_missingrather than through generated, direct delegation methods.These issues are not strictly bugs, but they likely affect performance. In the case of jruby/jruby#3151, they also exposed an obscure bug in JRuby.