package net.bytebuddy.build.maven;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import net.bytebuddy.build.EntryPoint;
import org.apache.maven.plugin.MojoExecutionException;
/**
* Defines a configuration for a Maven build's type transformation.
*/
@SuppressFBWarnings(value = "UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD", justification = "Written to by Maven")
public class Initialization extends AbstractUserConfiguration {
/**
* The fully-qualified name of the entry point or any constant name of {@link EntryPoint.Default}.
*/
protected String entryPoint;
/**
* Creates a default initialization instance.
*
* @return A default initialization instance.
*/
public static Initialization makeDefault() {
Initialization initialization = new Initialization();
initialization.entryPoint = EntryPoint.Default.REBASE.name();
return initialization;
}
/**
* Resolves the described entry point.
*
* @param classLoaderResolver The class loader resolved to use.
* @param groupId This project's group id.
* @param artifactId This project's artifact id.
* @param version This project's version id.
* @return The resolved entry point.
* @throws MojoExecutionException If the entry point cannot be created.
*/
@SuppressFBWarnings(value = "REC_CATCH_EXCEPTION", justification = "Applies Maven exception wrapper")
public EntryPoint getEntryPoint(ClassLoaderResolver classLoaderResolver, String groupId, String artifactId, String version) throws MojoExecutionException {
if (entryPoint == null || entryPoint.isEmpty()) {
throw new MojoExecutionException("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(asCoordinate(groupId, artifactId, version)))
.getDeclaredConstructor()
.newInstance();
} catch (Exception exception) {
throw new MojoExecutionException("Cannot create entry point: " + entryPoint, exception);
}
}
}