docs: private MetaMethod getMethodWithCachingInternal (Class sender, CallSite site, Class [] params) {
          if (GroovyCategorySupport.hasCategoryInCurrentThread())
              return getMethodWithoutCaching(sender, site.getName (), params, false);
  
          final MetaMethodIndex.Entry e = metaMethodIndex.getMethods(sender, site.getName());
          if (e == null) {
              return null;
          }
  
          MetaMethodIndex.CacheEntry cacheEntry;
          final Object methods = e.methods;
          if (methods == null)
            return null;
  
          cacheEntry = e.cachedMethod;
          if (cacheEntry != null && (sameClasses(cacheEntry.params, params))) {
               return cacheEntry.method;
          }
  
          cacheEntry = new MetaMethodIndex.CacheEntry (params, (MetaMethod) chooseMethod(e.name, methods, params));
          e.cachedMethod = cacheEntry;
          return cacheEntry.method;
      }