EdgeKind.java

package network.ike.workspace.cascade;

/**
 * The Maven model site that produced a {@link CascadeEdge}.
 *
 * <p>The release cascade derives edges from every version-bearing site
 * in an IKE POM, not just {@code <dependencies>}. The kind records
 * which site an edge came from, so the cascade can do
 * site-appropriate things on alignment — for example, rewriting a
 * parent's {@code <version>} differently from a dependency's, or
 * skipping a build-only plugin edge that the consumer POM doesn't
 * carry to its release.
 *
 * <p>Kinds:
 * <ul>
 *   <li>{@link #PARENT} — the project's {@code <parent>} block.</li>
 *   <li>{@link #DEPENDENCY} — a {@code <dependency>} (compile,
 *       runtime, or test scope) or a {@code <dependencyManagement>}
 *       entry without {@code <scope>import</scope>}.</li>
 *   <li>{@link #BOM} — a {@code <dependencyManagement>} entry whose
 *       scope is {@code import} (an imported BOM).</li>
 *   <li>{@link #PLUGIN} — a {@code <build><plugins>} or
 *       {@code <build><pluginManagement><plugins>} entry. Includes
 *       plugins carrying {@code <extensions>true</extensions>}.</li>
 *   <li>{@link #EXTENSION} — a {@code .mvn/extensions.xml} entry.
 *       Maven 4 build extensions resolve before the POM model loads
 *       and so cannot ride a plugin edge; this kind names them
 *       explicitly.</li>
 * </ul>
 *
 * <p>See IKE-Network/ike-issues#496 for the derivation specification
 * and the {@code dev-release-graph-derivation} topic in
 * {@code ike-lab-documents}.
 */
public enum EdgeKind {

    /** A {@code <parent>} edge. */
    PARENT,

    /**
     * A {@code <dependency>} or non-import
     * {@code <dependencyManagement>} edge.
     */
    DEPENDENCY,

    /**
     * A {@code <dependencyManagement>} entry with
     * {@code <scope>import</scope>}.
     */
    BOM,

    /**
     * A {@code <plugin>} or {@code <pluginManagement>} edge, including
     * extensions-carrying plugins.
     */
    PLUGIN,

    /** A {@code .mvn/extensions.xml} edge. */
    EXTENSION
}