package com.github.sormuras.bach;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Indicates that the annotated module is a project declaration.
 *
 * <p>In other words, it transforms an annotated {@code module-info.java} compilation unit into a
 * logical {@code project-info.java} compilation unit.
 *
 * <p>This annotation declares a set of untargeted nested annotations intended solely for use as a
 * member type in complex annotation type declarations. They cannot be used to annotate anything
 * directly.
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.MODULE)
public @interface ProjectInfo {
  /** @return the name of the project, defaults to {@code "*"} */
  String name() default "*";

  /** @return the version of the project, defaults to {@code "0"} */
  String version() default "0";
}

@@ -727,22 +727,29 @@
 tInfo %7B%0A
+%0A
   /**
- 
+%0A   * %7B
 @return 
@@ -796,16 +796,89 @@
 ode %22*%22%7D
+%7D%0A   *%0A   * @see Project#name()%0A   * @see ProjectBuilder#computeName()%0A  
  */%0A  St
@@ -908,17 +908,23 @@
 ;%0A%0A  /**
- 
+%0A   * %7B
 @return 
@@ -978,42 +978,1228 @@
 %220%22%7D
- */%0A  String version() default %220%22;
+%7D%0A   *%0A   * @see Project#version()%0A   */%0A  String version() default %220%22;%0A%0A  /** %7B@return the array of required module names%7D */%0A  String%5B%5D requires() default %7B%7D;%0A%0A  /** %7B@return an array of external module lookup%7D */%0A  Lookup%5B%5D lookups() default %7B%7D;%0A%0A  /** An external module name to URI pair annotation. */%0A  @Target(%7B%7D)%0A  @interface Lookup %7B%0A    /** %7B@return the module name%7D */%0A    String module();%0A%0A    /** %7B@return the target of the lookup, usually resolvable to a remote JAR file%7D */%0A    String via();%0A%0A    /** %7B@return the type of the string returned by %7B@link #via()%7D, defaults to %7B@link Type#AUTO%7D%7D */%0A    Type type() default Type.AUTO;%0A%0A    /** %7B@return the base path of path targets%7D */%0A    String pathBase() default %22.%22;%0A%0A    /** %7B@return the base URI of the repository for Maven-based target coordinates%7D */%0A    String mavenRepository() default %22https://repo.maven.apache.org/maven2%22;%0A%0A    /** Lookup target type. */%0A    enum Type %7B%0A      /** Detect type of the lookup target automatically. */%0A      AUTO,%0A      /** Uniform Resource Identifier (%7B@link java.net.URI URI%7D) reference as-is. */%0A      URI,%0A      /** Path to a local file. */%0A      PATH,%0A      /** Maven-based coordinates. */%0A      MAVEN%0A    %7D%0A  %7D
 %0A%7D%0A

Extend project info annotation with library-related components