Package com.googlecode.aviator.utils
Class Reflector
- java.lang.Object
-
- com.googlecode.aviator.utils.Reflector
-
public class Reflector extends java.lang.Object
Some 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 class
Reflector.MethodKey
Class's instance method cache key(package private) static class
Reflector.PropertyFoundResult
static class
Reflector.PropertyType
static class
Reflector.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>>>
cachedMethods
static method cachingstatic 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 cachingprivate static java.lang.ref.ReferenceQueue<java.util.Map<java.lang.String,Reflector.PropertyFoundResult>>
cachedSetterRq
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.private static java.lang.ref.ReferenceQueue<java.util.Map<java.lang.String,Reflector.PropertyFoundResult>>
cacheMethodRq
private static java.lang.ref.ReferenceQueue<java.util.Map<java.lang.String,Reflector.PropertyFoundResult>>
cachePropertyRq
private 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>>
instanceMethodsRq
private 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.Object
boxArg(java.lang.Class<?> paramType, java.lang.Object arg)
static java.lang.Object[]
boxArgs(java.lang.Class<?>[] params, java.lang.Object[] args)
static java.lang.StringBuilder
capitalize(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.Object
fastGetProperty(java.lang.Object obj, java.lang.String name, Reflector.PropertyType type)
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)
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.String
genGetterName(java.lang.String prefix, java.lang.String name)
private static java.lang.Throwable
getCauseOrElse(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.Object
getProperty(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.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)
(package private) static java.lang.Object
invokeMatchingMethod(java.lang.String methodName, java.util.List methods, java.lang.Object target, java.lang.Object[] args)
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)
static boolean
isCongruent(java.lang.Class<?>[] params, java.lang.Object[] args)
private static java.lang.String
noMethodReport(java.lang.String methodName, java.lang.Object target, java.lang.Object[] args)
static boolean
paramArgTypeMatch(java.lang.Class<?> paramType, java.lang.Class<?> argType)
private static void
putDummyHandle(java.lang.String name, java.util.Map<java.lang.String,Reflector.PropertyFoundResult> handles)
private static Reflector.PropertyFoundResult
retrieveGetterHandle(java.util.Map<java.lang.String,Reflector.PropertyFoundResult> results, java.lang.Class<?> clazz, java.lang.String name)
private static Reflector.PropertyFoundResult
retrieveSetterHandle(java.util.Map<java.lang.String,Reflector.PropertyFoundResult> results, java.lang.Class<?> clazz, java.lang.String name)
private static Reflector.PropertyFoundResult
retrieveStaticFieldHandle(java.util.Map<java.lang.String,Reflector.PropertyFoundResult> results, java.lang.Class<?> clazz, java.lang.String name)
private static Reflector.PropertyFoundResult
retrieveStaticFunction(java.util.Map<java.lang.String,Reflector.PropertyFoundResult> results, java.lang.Class<?> clazz, java.lang.String name)
static void
setProperty(java.util.Map<java.lang.String,java.lang.Object> env, java.lang.String name, java.lang.Object val)
static java.lang.RuntimeException
sneakyThrow(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 boolean
subsumes(java.lang.Class<?>[] c1, java.lang.Class<?>[] c2)
static java.lang.Object
throwNoSuchPropertyException(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.IllegalAccessException
java.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.IllegalAccessException
java.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)
-
-