Class ClassInjector.UsingReflection.Dispatcher.UsingUnsafeInjection

    • Field Detail

      • accessor

        private final java.lang.Object accessor
        An instance of the accessor class that is required for using it's intentionally non-static methods.
      • findLoadedClass

        private final java.lang.reflect.Method findLoadedClass
        The accessor method for using ClassLoader.findLoadedClass(String).
      • defineClass

        private final java.lang.reflect.Method defineClass
        The accessor method for using ClassLoader.defineClass(String, byte[], int, int, ProtectionDomain).
      • getDefinedPackage

        private final java.lang.reflect.Method getDefinedPackage
        The accessor method for using java.lang.ClassLoader#getDefinedPackage(String). May be null.
      • getPackage

        private final java.lang.reflect.Method getPackage
        The accessor method for using ClassLoader.getPackage(String).
      • definePackage

        private final java.lang.reflect.Method definePackage
        The accessor method for using ClassLoader.definePackage(String, String, String, String, String, String, String, URL).
      • getClassLoadingLock

        private final java.lang.reflect.Method getClassLoadingLock
        The accessor method for using ClassLoader#getClassLoadingLock(String) or returning the supplied ClassLoader if this method does not exist on the current VM.
    • Constructor Detail

      • UsingUnsafeInjection

        protected UsingUnsafeInjection​(java.lang.Object accessor,
                                       java.lang.reflect.Method findLoadedClass,
                                       java.lang.reflect.Method defineClass,
                                       java.lang.reflect.Method getDefinedPackage,
                                       java.lang.reflect.Method getPackage,
                                       java.lang.reflect.Method definePackage,
                                       java.lang.reflect.Method getClassLoadingLock)
        Creates a new class loading injection dispatcher using an unsafe injected dispatcher.
        Parameters:
        accessor - An instance of the accessor class that is required for using it's intentionally non-static methods.
        findLoadedClass - An instance of ClassLoader.findLoadedClass(String).
        defineClass - An instance of ClassLoader.defineClass(String, byte[], int, int, ProtectionDomain).
        getDefinedPackage - An instance of java.lang.ClassLoader#getDefinedPackage(String). May be null.
        getPackage - An instance of ClassLoader.getPackage(String).
        definePackage - An instance of ClassLoader.definePackage(String, String, String, String, String, String, String, URL).
        getClassLoadingLock - The accessor method for using ClassLoader#getClassLoadingLock(String) or returning the supplied ClassLoader if this method does not exist on the current VM.
    • Method Detail

      • getClassLoadingLock

        public java.lang.Object getClassLoadingLock​(java.lang.ClassLoader classLoader,
                                                    java.lang.String name)
        Returns the lock for loading the specified class.
        Specified by:
        getClassLoadingLock in interface ClassInjector.UsingReflection.Dispatcher
        Parameters:
        classLoader - the class loader to inject the class into.
        name - The name of the class.
        Returns:
        The lock for loading this class.
      • findClass

        public java.lang.Class<?> findClass​(java.lang.ClassLoader classLoader,
                                            java.lang.String name)
        Looks up a class from the given class loader.
        Specified by:
        findClass in interface ClassInjector.UsingReflection.Dispatcher
        Parameters:
        classLoader - The class loader for which a class should be located.
        name - The binary name of the class that should be located.
        Returns:
        The class for the binary name or null if no such class is defined for the provided class loader.
      • defineClass

        public java.lang.Class<?> defineClass​(java.lang.ClassLoader classLoader,
                                              java.lang.String name,
                                              byte[] binaryRepresentation,
                                              java.security.ProtectionDomain protectionDomain)
        Defines a class for the given class loader.
        Specified by:
        defineClass in interface ClassInjector.UsingReflection.Dispatcher
        Parameters:
        classLoader - The class loader for which a new class should be defined.
        name - The binary name of the class that should be defined.
        binaryRepresentation - The binary representation of the class.
        protectionDomain - The protection domain for the defined class.
        Returns:
        The defined, loaded class.
      • getPackage

        public java.lang.Package getPackage​(java.lang.ClassLoader classLoader,
                                            java.lang.String name)
        Looks up a package from a class loader or its ancestor.
        Specified by:
        getPackage in interface ClassInjector.UsingReflection.Dispatcher
        Parameters:
        classLoader - The class loader to query.
        name - The binary name of the package.
        Returns:
        The package for the given name as defined by the provided class loader or its ancestor, or null if no such package exists.
      • definePackage

        public java.lang.Package definePackage​(java.lang.ClassLoader classLoader,
                                               java.lang.String name,
                                               java.lang.String specificationTitle,
                                               java.lang.String specificationVersion,
                                               java.lang.String specificationVendor,
                                               java.lang.String implementationTitle,
                                               java.lang.String implementationVersion,
                                               java.lang.String implementationVendor,
                                               java.net.URL sealBase)
        Defines a package for the given class loader.
        Specified by:
        definePackage in interface ClassInjector.UsingReflection.Dispatcher
        Parameters:
        classLoader - The class loader for which a package is to be defined.
        name - The binary name of the package.
        specificationTitle - The specification title of the package or null if no specification title exists.
        specificationVersion - The specification version of the package or null if no specification version exists.
        specificationVendor - The specification vendor of the package or null if no specification vendor exists.
        implementationTitle - The implementation title of the package or null if no implementation title exists.
        implementationVersion - The implementation version of the package or null if no implementation version exists.
        implementationVendor - The implementation vendor of the package or null if no implementation vendor exists.
        sealBase - The seal base URL or null if the package should not be sealed.
        Returns:
        The defined package.