All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ru.progrm_jarvis.javacommons.classloading.ClassDefiner Maven / Gradle / Ivy

package ru.progrm_jarvis.javacommons.classloading;

import lombok.NonNull;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import ru.progrm_jarvis.javacommons.object.Pair;

import java.lang.invoke.MethodHandles;
import java.util.List;
import java.util.Map;

public interface ClassDefiner {

    /**Uns
     * Defines a class which may be garbage-collected.
     *
     * @param owner lookup whose access rights will be used for class definition
     * @param name name of the defined class
     * @param bytecode bytecode of the class
     * @return defined class
     */
    Class defineClass(@NonNull MethodHandles.Lookup owner,
                         @Nullable String name, byte @NonNull [] bytecode);

    /**
     * Defines multiple classes which may be garbage-collected.
     *
     * @param owner lookup whose access rights will be used for class definition
     * @param bytecodes pairs whose first values are canonical class names
     * and the second values are those classes' bytecodes
     * @return defined class in the order their data was passed
     */
    @SuppressWarnings("unchecked")
    Class[] defineClasses(@NonNull MethodHandles.Lookup owner,
                             @NonNull Pair<@Nullable String, byte @NotNull []>... bytecodes);

    /**
     * Defines multiple classes which may be garbage-collected.
     *
     * @param owner lookup whose access rights will be used for class definition
     * @param bytecodes bytecodes of the classes
     * @return defined class in the order their data was passed
     */
    Class[] defineClasses(@NonNull MethodHandles.Lookup owner,
                             byte @NotNull [] @NonNull ... bytecodes);

    /**
     * Defines multiple classes which may be garbage-collected.
     *
     * @param owner lookup whose access rights will be used for class definition
     * @param bytecodes bytecodes of the classes
     * @return defined class in the order their data was passed
     */
    List> defineClasses(@NonNull MethodHandles.Lookup owner,
                                 @NonNull List bytecodes);

    /**
     * Defines multiple classes which may be garbage-collected.
     *
     * @param owner lookup whose access rights will be used for class definition
     * @param namedBytecode map containing bytecodes by their classes' canonical names
     * @return defined classes by their names
     */
    Map> defineClasses(@NonNull MethodHandles.Lookup owner,
                                        @NonNull Map<@Nullable String, byte @NotNull []> namedBytecode);
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy