Package com.googlecode.aviator.utils
Class Reflector
- java.lang.Object
-
- com.googlecode.aviator.utils.Reflector
-
public class Reflector extends java.lang.ObjectSome code is copied from https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Reflector.java
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static classReflector.MethodKeyClass's instance method cache key(package private) static classReflector.PropertyFoundResultstatic classReflector.PropertyTypestatic classReflector.Target
-
Field Summary
Fields Modifier and Type Field Description static java.util.concurrent.ConcurrentHashMap<java.lang.Class<?>,java.lang.ref.Reference<java.util.Map<java.lang.String,Reflector.PropertyFoundResult>>>cachedMethodsstatic method cachingstatic java.util.concurrent.ConcurrentHashMap<java.lang.Class<?>,java.lang.ref.Reference<java.util.Map<java.lang.String,Reflector.PropertyFoundResult>>>cachedPropertiesstatic and instance fields property cachingprivate static java.lang.ref.ReferenceQueue<java.util.Map<java.lang.String,Reflector.PropertyFoundResult>>cachedSetterRqstatic java.util.concurrent.ConcurrentHashMap<java.lang.Class<?>,java.lang.ref.Reference<java.util.Map<java.lang.String,Reflector.PropertyFoundResult>>>cachedSetttersinstance fields setter caching.private static java.lang.ref.ReferenceQueue<java.util.Map<java.lang.String,Reflector.PropertyFoundResult>>cacheMethodRqprivate static java.lang.ref.ReferenceQueue<java.util.Map<java.lang.String,Reflector.PropertyFoundResult>>cachePropertyRqprivate static java.util.Set<java.lang.Class<?>>doubleClasses(package private) static java.util.concurrent.ConcurrentHashMap<Reflector.MethodKey,java.lang.ref.Reference<java.util.List<java.lang.reflect.Method>>>instanceMethodsCache(package private) static java.lang.ref.ReferenceQueue<java.util.List<java.lang.reflect.Method>>instanceMethodsRqprivate static java.util.Set<java.lang.Class<?>>longClasses
-
Constructor Summary
Constructors Constructor Description Reflector()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description private static java.util.Set<java.lang.Class<?>>asSet(java.lang.Class<?>... classes)static java.lang.ObjectboxArg(java.lang.Class<?> paramType, java.lang.Object arg)static java.lang.Object[]boxArgs(java.lang.Class<?>[] params, java.lang.Object[] args)static java.lang.StringBuildercapitalize(java.lang.StringBuilder sb, java.lang.String s)(package private) static <K,V>
voidclearCache(java.lang.ref.ReferenceQueue<V> rq, java.util.concurrent.ConcurrentHashMap<K,java.lang.ref.Reference<V>> cache)static java.lang.ObjectfastGetProperty(java.lang.Object obj, java.lang.String name, Reflector.PropertyType type)static java.lang.ObjectfastGetProperty(java.lang.String name, java.lang.String[] names, java.util.Map<java.lang.String,java.lang.Object> env, Reflector.Target target, boolean tryResolveStaticMethod, int offset, int len)static java.util.Map<java.lang.String,java.util.List<java.lang.reflect.Method>>findMethodsFromClass(java.lang.Class<?> clazz, boolean isStatic)private static java.lang.StringgenGetterName(java.lang.String prefix, java.lang.String name)private static java.lang.ThrowablegetCauseOrElse(java.lang.Exception e)private static java.util.List<java.lang.reflect.Method>getClassInstanceMethods(java.lang.Class<?> c, java.lang.String methodName)private static java.util.Map<java.lang.String,Reflector.PropertyFoundResult>getClassPropertyResults(java.util.concurrent.ConcurrentHashMap<java.lang.Class<?>,java.lang.ref.Reference<java.util.Map<java.lang.String,Reflector.PropertyFoundResult>>> cache, java.lang.ref.ReferenceQueue<java.util.Map<java.lang.String,Reflector.PropertyFoundResult>> rq, java.lang.Class<?> clazz)static java.util.List<java.lang.reflect.Method>getInstanceMethods(java.lang.Class<?> clazz, java.lang.String methodName)static java.lang.ObjectgetProperty(java.lang.Object target, java.lang.String name)static java.util.List<java.lang.reflect.Method>getStaticMethods(java.lang.Class<?> c, java.lang.String methodName)static java.lang.ObjectinvokeInstanceMethod(java.lang.Class<?> c, java.lang.String methodName, java.lang.Object target, java.util.List<java.lang.reflect.Method> methods, java.lang.Object[] args)(package private) static java.lang.ObjectinvokeMatchingMethod(java.lang.String methodName, java.util.List methods, java.lang.Object target, java.lang.Object[] args)static java.lang.ObjectinvokeStaticMethod(java.lang.Class<?> c, java.lang.String methodName, java.util.List<java.lang.reflect.Method> methods, java.lang.Object[] args)static booleanisCongruent(java.lang.Class<?>[] params, java.lang.Object[] args)private static java.lang.StringnoMethodReport(java.lang.String methodName, java.lang.Object target, java.lang.Object[] args)static booleanparamArgTypeMatch(java.lang.Class<?> paramType, java.lang.Class<?> argType)private static voidputDummyHandle(java.lang.String name, java.util.Map<java.lang.String,Reflector.PropertyFoundResult> handles)private static Reflector.PropertyFoundResultretrieveGetterHandle(java.util.Map<java.lang.String,Reflector.PropertyFoundResult> results, java.lang.Class<?> clazz, java.lang.String name)private static Reflector.PropertyFoundResultretrieveSetterHandle(java.util.Map<java.lang.String,Reflector.PropertyFoundResult> results, java.lang.Class<?> clazz, java.lang.String name)private static Reflector.PropertyFoundResultretrieveStaticFieldHandle(java.util.Map<java.lang.String,Reflector.PropertyFoundResult> results, java.lang.Class<?> clazz, java.lang.String name)private static Reflector.PropertyFoundResultretrieveStaticFunction(java.util.Map<java.lang.String,Reflector.PropertyFoundResult> results, java.lang.Class<?> clazz, java.lang.String name)static voidsetProperty(java.util.Map<java.lang.String,java.lang.Object> env, java.lang.String name, java.lang.Object val)static java.lang.RuntimeExceptionsneakyThrow(java.lang.Throwable t)Throw even checked exceptions without being required to declare them or catch them.private static <T extends java.lang.Throwable>
voidsneakyThrow0(java.lang.Throwable t)static booleansubsumes(java.lang.Class<?>[] c1, java.lang.Class<?>[] c2)static java.lang.ObjectthrowNoSuchPropertyException(java.lang.String msg)
-
-
-
Field Detail
-
cachedProperties
public static java.util.concurrent.ConcurrentHashMap<java.lang.Class<?>,java.lang.ref.Reference<java.util.Map<java.lang.String,Reflector.PropertyFoundResult>>> cachedProperties
static and instance fields property caching
-
cachedSettters
public static java.util.concurrent.ConcurrentHashMap<java.lang.Class<?>,java.lang.ref.Reference<java.util.Map<java.lang.String,Reflector.PropertyFoundResult>>> cachedSettters
instance fields setter caching.
-
cachedSetterRq
private static final java.lang.ref.ReferenceQueue<java.util.Map<java.lang.String,Reflector.PropertyFoundResult>> cachedSetterRq
-
cachePropertyRq
private static final java.lang.ref.ReferenceQueue<java.util.Map<java.lang.String,Reflector.PropertyFoundResult>> cachePropertyRq
-
cachedMethods
public static java.util.concurrent.ConcurrentHashMap<java.lang.Class<?>,java.lang.ref.Reference<java.util.Map<java.lang.String,Reflector.PropertyFoundResult>>> cachedMethods
static method caching
-
cacheMethodRq
private static final java.lang.ref.ReferenceQueue<java.util.Map<java.lang.String,Reflector.PropertyFoundResult>> cacheMethodRq
-
instanceMethodsCache
static java.util.concurrent.ConcurrentHashMap<Reflector.MethodKey,java.lang.ref.Reference<java.util.List<java.lang.reflect.Method>>> instanceMethodsCache
-
instanceMethodsRq
static final java.lang.ref.ReferenceQueue<java.util.List<java.lang.reflect.Method>> instanceMethodsRq
-
longClasses
private static java.util.Set<java.lang.Class<?>> longClasses
-
doubleClasses
private static java.util.Set<java.lang.Class<?>> doubleClasses
-
-
Method Detail
-
sneakyThrow
public static java.lang.RuntimeException sneakyThrow(java.lang.Throwable t)
Throw even checked exceptions without being required to declare them or catch them. Suggested idiom:throw sneakyThrow( some exception );
-
sneakyThrow0
private static <T extends java.lang.Throwable> void sneakyThrow0(java.lang.Throwable t) throws T extends java.lang.Throwable- Throws:
T extends java.lang.Throwable
-
noMethodReport
private static java.lang.String noMethodReport(java.lang.String methodName, java.lang.Object target, java.lang.Object[] args)
-
subsumes
public static boolean subsumes(java.lang.Class<?>[] c1, java.lang.Class<?>[] c2)
-
getCauseOrElse
private static java.lang.Throwable getCauseOrElse(java.lang.Exception e)
-
invokeMatchingMethod
static java.lang.Object invokeMatchingMethod(java.lang.String methodName, java.util.List methods, java.lang.Object target, java.lang.Object[] args)
-
capitalize
public static java.lang.StringBuilder capitalize(java.lang.StringBuilder sb, java.lang.String s)
-
genGetterName
private static java.lang.String genGetterName(java.lang.String prefix, java.lang.String name)
-
fastGetProperty
public static java.lang.Object fastGetProperty(java.lang.Object obj, java.lang.String name, Reflector.PropertyType type)
-
throwNoSuchPropertyException
public static java.lang.Object throwNoSuchPropertyException(java.lang.String msg)
-
retrieveStaticFieldHandle
private static Reflector.PropertyFoundResult retrieveStaticFieldHandle(java.util.Map<java.lang.String,Reflector.PropertyFoundResult> results, java.lang.Class<?> clazz, java.lang.String name) throws java.lang.IllegalAccessException, java.lang.NoSuchFieldException
- Throws:
java.lang.IllegalAccessExceptionjava.lang.NoSuchFieldException
-
retrieveStaticFunction
private static Reflector.PropertyFoundResult retrieveStaticFunction(java.util.Map<java.lang.String,Reflector.PropertyFoundResult> results, java.lang.Class<?> clazz, java.lang.String name) throws java.lang.IllegalAccessException, java.lang.NoSuchMethodException
- Throws:
java.lang.IllegalAccessExceptionjava.lang.NoSuchMethodException
-
retrieveGetterHandle
private static Reflector.PropertyFoundResult retrieveGetterHandle(java.util.Map<java.lang.String,Reflector.PropertyFoundResult> results, java.lang.Class<?> clazz, java.lang.String name) throws java.lang.IllegalAccessException
- Throws:
java.lang.IllegalAccessException
-
retrieveSetterHandle
private static Reflector.PropertyFoundResult retrieveSetterHandle(java.util.Map<java.lang.String,Reflector.PropertyFoundResult> results, java.lang.Class<?> clazz, java.lang.String name) throws java.lang.IllegalAccessException
- Throws:
java.lang.IllegalAccessException
-
putDummyHandle
private static void putDummyHandle(java.lang.String name, java.util.Map<java.lang.String,Reflector.PropertyFoundResult> handles)
-
getClassPropertyResults
private static java.util.Map<java.lang.String,Reflector.PropertyFoundResult> getClassPropertyResults(java.util.concurrent.ConcurrentHashMap<java.lang.Class<?>,java.lang.ref.Reference<java.util.Map<java.lang.String,Reflector.PropertyFoundResult>>> cache, java.lang.ref.ReferenceQueue<java.util.Map<java.lang.String,Reflector.PropertyFoundResult>> rq, java.lang.Class<?> clazz)
-
getStaticMethods
public static java.util.List<java.lang.reflect.Method> getStaticMethods(java.lang.Class<?> c, java.lang.String methodName)
-
clearCache
static <K,V> void clearCache(java.lang.ref.ReferenceQueue<V> rq, java.util.concurrent.ConcurrentHashMap<K,java.lang.ref.Reference<V>> cache)
-
getInstanceMethods
public static java.util.List<java.lang.reflect.Method> getInstanceMethods(java.lang.Class<?> clazz, java.lang.String methodName)
-
getClassInstanceMethods
private static java.util.List<java.lang.reflect.Method> getClassInstanceMethods(java.lang.Class<?> c, java.lang.String methodName)
-
invokeStaticMethod
public static java.lang.Object invokeStaticMethod(java.lang.Class<?> c, java.lang.String methodName, java.util.List<java.lang.reflect.Method> methods, java.lang.Object[] args)
-
invokeInstanceMethod
public static java.lang.Object invokeInstanceMethod(java.lang.Class<?> c, java.lang.String methodName, java.lang.Object target, java.util.List<java.lang.reflect.Method> methods, java.lang.Object[] args)
-
boxArg
public static java.lang.Object boxArg(java.lang.Class<?> paramType, java.lang.Object arg)
-
boxArgs
public static java.lang.Object[] boxArgs(java.lang.Class<?>[] params, java.lang.Object[] args)
-
asSet
private static java.util.Set<java.lang.Class<?>> asSet(java.lang.Class<?>... classes)
-
paramArgTypeMatch
public static boolean paramArgTypeMatch(java.lang.Class<?> paramType, java.lang.Class<?> argType)
-
isCongruent
public static boolean isCongruent(java.lang.Class<?>[] params, java.lang.Object[] args)
-
getProperty
public static java.lang.Object getProperty(java.lang.Object target, java.lang.String name)
-
setProperty
public static void setProperty(java.util.Map<java.lang.String,java.lang.Object> env, java.lang.String name, java.lang.Object val)
-
fastGetProperty
public static java.lang.Object fastGetProperty(java.lang.String name, java.lang.String[] names, java.util.Map<java.lang.String,java.lang.Object> env, Reflector.Target target, boolean tryResolveStaticMethod, int offset, int len)
-
findMethodsFromClass
public static java.util.Map<java.lang.String,java.util.List<java.lang.reflect.Method>> findMethodsFromClass(java.lang.Class<?> clazz, boolean isStatic)
-
-