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 ; }
This method should be called by CallSite only