Class 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
    • 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
    • Constructor Detail

      • Reflector

        public Reflector()
    • 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)
      • 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)