mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-10-30 21:23:00 +00:00 
			
		
		
		
	Use ClassValue instead of LoadingCache
This should be significantly faster than LoadingCache (2.5x in my benchmarks, but not sure they're representative). This isn't super important - a lookup only takes 6us - but still worth using!
This commit is contained in:
		| @@ -4,9 +4,6 @@ | ||||
| 
 | ||||
| package dan200.computercraft.core.asm; | ||||
| 
 | ||||
| import com.google.common.cache.CacheBuilder; | ||||
| import com.google.common.cache.CacheLoader; | ||||
| import com.google.common.cache.LoadingCache; | ||||
| import dan200.computercraft.api.lua.LuaFunction; | ||||
| import dan200.computercraft.api.lua.MethodResult; | ||||
| import dan200.computercraft.api.peripheral.PeripheralType; | ||||
| @@ -23,7 +20,6 @@ import java.lang.reflect.Modifier; | ||||
| import java.util.ArrayList; | ||||
| import java.util.Collections; | ||||
| import java.util.List; | ||||
| import java.util.concurrent.ExecutionException; | ||||
| import java.util.function.Function; | ||||
| 
 | ||||
| import static dan200.computercraft.core.asm.Generator.catching; | ||||
| @@ -36,9 +32,14 @@ final class MethodSupplierImpl<T> implements MethodSupplier<T> { | ||||
|     private final IntCache<T> dynamic; | ||||
|     private final Function<Object, String[]> dynamicMethods; | ||||
| 
 | ||||
|     private final LoadingCache<Class<?>, List<NamedMethod<T>>> classCache = CacheBuilder | ||||
|         .newBuilder() | ||||
|         .build(CacheLoader.from(catching(this::getMethodsImpl, List.of()))); | ||||
|     private final ClassValue<List<NamedMethod<T>>> classCache = new ClassValue<>() { | ||||
|         private final Function<Class<?>, List<NamedMethod<T>>> getter = catching(MethodSupplierImpl.this::getMethodsImpl, List.of()); | ||||
| 
 | ||||
|         @Override | ||||
|         protected List<NamedMethod<T>> computeValue(Class<?> type) { | ||||
|             return getter.apply(type); | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
|     MethodSupplierImpl( | ||||
|         List<GenericMethod> genericMethods, | ||||
| @@ -93,12 +94,7 @@ final class MethodSupplierImpl<T> implements MethodSupplier<T> { | ||||
| 
 | ||||
|     @VisibleForTesting | ||||
|     List<NamedMethod<T>> getMethods(Class<?> klass) { | ||||
|         try { | ||||
|         return classCache.get(klass); | ||||
|         } catch (ExecutionException e) { | ||||
|             LOG.error("Error getting methods for {}.", klass.getName(), e.getCause()); | ||||
|             return List.of(); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     private List<NamedMethod<T>> getMethodsImpl(Class<?> klass) { | ||||
| @@ -148,5 +144,4 @@ final class MethodSupplierImpl<T> implements MethodSupplier<T> { | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jonathan Coates
					Jonathan Coates