package net.bytebuddy.build.gradle;
import net.bytebuddy.build.EntryPoint;
import org.gradle.api.GradleException;
import java.io.File;
/**
* Defines an entry point for a Byte Buddy transformation in a Gradle build.
*/
public class Initialization extends AbstractUserConfiguration {
/**
* The fully-qualified name of the entry point or any constant name of {@link EntryPoint.Default}.
*/
private String entryPoint;
/**
* Creates a default initialization instance.
*
* @return A default initialization instance.
*/
public static Initialization makeDefault() {
Initialization initialization = new Initialization();
initialization.setEntryPoint(EntryPoint.Default.REBASE.name());
return initialization;
}
/**
* Sets the default entry point or any constant name of {@link net.bytebuddy.build.EntryPoint.Default}.
*
* @param entryPoint The default entry point or any constant name of {@link net.bytebuddy.build.EntryPoint.Default}.
*/
public void setEntryPoint(String entryPoint) {
this.entryPoint = entryPoint;
}
/**
* Resolves this initialization to an entry point instance.
*
* @param classLoaderResolver The class loader resolver to use if appropriate.
* @param root The root file describing the current tasks classes.
* @param classPath The class path of the current task.
* @return A resolved entry point.
*/
public EntryPoint getEntryPoint(ClassLoaderResolver classLoaderResolver, File root, Iterable<? extends File> classPath) {
if (entryPoint == null || entryPoint.isEmpty()) {
throw new GradleException("Entry point name is not defined");
}
for (EntryPoint.Default entryPoint : EntryPoint.Default.values()) {
if (this.entryPoint.equals(entryPoint.name())) {
return entryPoint;
}
}
try {
return (EntryPoint) Class.forName(entryPoint, false, classLoaderResolver.resolve(getClassPath(root, classPath)))
.getDeclaredConstructor()
.newInstance();
} catch (Exception exception) {
throw new GradleException("Cannot create entry point: " + entryPoint, exception);
}
}
}