Anna,

That is the intended structure, but my experience has been that existing releases of the IDE incorrectly pass the contents of directories like `snippet-files` as source files when compiling the primary packages and classes, meaning `p/Main.java`. This applies to any analysis of the files in the package/class hierarchy, including `javac`, `javadoc`, and tools like IDE that examine source code,

Note that `snippet-files` is not a valid identifier, and so files in the `snippet-files` directory cannot be considered part of the package hierarchy rooted at `src/main/java`.    That is true for any sub-directory that is not named with a valid Java identifier.   Until this aspect of the IDE is addressed, you cannot use option 1 as I described earlier (using the local snippet-files subdirectory) and so you must use option 2 ( a separate package/class hierarchy, with the `-snippet-path` option).

-- Jon

On 3/22/22 6:21 AM, Anna Kozlova wrote:
Hi Jonathan,
I have this structure:

└── src

└── main

├── java

└── p

└── Main.java

|── snippet-files

└── ShowOptional.java


I think that IDE passes wrong parameters to the javadoc tool though I have no idea what should be changed. E.g. if I try to generate javadoc for the whole 'p' directory, snippet-files are passed as [sources] but I have still the same error. What should be on the command line?


Thanks,

Anna


On Mon, Mar 21, 2022 at 7:25 PM Jonathan Gibbons <jonathan.gibb...@oracle.com> wrote:

    Anna,

    What is the layout for the files you are using?

    -- Jon


    On 3/21/22 10:31 AM, Anna Kozlova wrote:
    Hi Jonathan,
    thank you! Unfortunately (1) doesn't work for me, what I get with
    the last available jdk 18:

    Standard Doclet version 18+36-2087
    Building tree for all the packages and classes...
    Generating project_name/output/p/Main.html...
    project_name/src/p/Main.java:8: error: File not found:
    ShowOptional.java
     * {@snippet file="ShowOptional.java" region="example"}


    where I have code from the JSR sample
    package p;
    /** * {@snippet file="ShowOptional.java" region="example"} */
    public class Main {}
    Can it be that I need to pass javadoc tool, something which I am
    not aware of?
    Thanks,
    Anna


    On Mon, Mar 21, 2022 at 3:59 PM Jonathan Gibbons
    <jonathan.gibb...@oracle.com> wrote:

        Anna,

        Separate from whether you use `class` or `file` to identify
        the snippet, there are two locations in which you can put the
        files.

        1. In a subdirectory named `snippet-files` of the package
        that references the snippet. In this case, you do _not_ need
        a `--snippet-path` option. In your example, this would be
        `src/main/java/p/snippet-files/Snippet.java`. The use of a
        `snippet-files` dierctory is intended to be similar to
        `doc-files` to provide images or additional text files for
        documentation.

        2. In an arbitrary directory (hierarchy) of your choice that
        is specified on the `--snippet-path` option. That is a path
        similar to a source path, and can contain multiple
        directories separated by the standard path separator
        character, if you so choose.

        In your example, while it is not wrong to use
        `src/main/snippet-files`, you are relying on option #2 above,
        which is why you need the `--snippet-path` option.

        -- Jon


        On 2/23/22 4:03 AM, Anna Kozlova wrote:
        Hi folks,

        I try to support external snippets in IntelliJ. As far as I
        understand this part of JEP 413

            The location of the external code can be specified
            either by class name, using the class attribute, or by a
            short relative file path, using the file attribute. In
            either case the file can be placed in a package
            hierarchy rooted in a snippet-files subdirectory of the
            directory containing the source code with the {@snippet
...} tag.

        I should be able to put snippet files somewhere near my code
        and the javadoc tool would find them. Unfortunately, I
        failed to generate javadoc unless I specify explicitly
        `--snippet-path`.

        I tried e.g. the following structure
        |└── src └── main ├── java │ └── p │ └── Main.java └──
        snippet-files ├── p │ └── Snippet.java|
        Is this structure correct? Or should this `snippet-files`
        directory be explicitly added as `--snippet-path ` by the
        IDE/build tool and I just misread the JEP?

        Thank you,
        Anna

Reply via email to