Intellij will not recognize antlr generated source code
It turns out that my fiddling with preferences caused this issue. If anyone else has this problem:
As v0rl0n mentioned, first make sure the gen folder is listed as a source. Go to Module Settings -> Modules -> Sources.
Look to the right for the blue Source Folders. Ensure your generated source folders are listed (they should have a [generated] flag on the row).
If your generated source directory is listed there, and they are still not being recognized, go to Preferences -> File Types. Look in the Ignore files and folders field. Make sure you don't have anything listed that will match for your generated sources directory.
In my case, I had added target to this list, which caused my problem, and was a real pain to find.
My issue was somewhat similar to @spilymp's:
I was putting the *.g4
files directly in src/main/antlr4
:
.
├── src/
| └── main/
| ├── antlr/
| | ├── Main.g4
| | └── imported.g4
| └── java/
| └── com/
| └── test/
| └── Test.java
which led to source being generated in default
package. I changed the package structure to match that of java:
.
├── src/
| └── main/
| ├── antlr/
| | ├── com/
| | | └── test/
| | | └── Main.g4
| | └── imports/
| | └── imported.g4
| └── java/
| └── com/
| └── test/
| └── Test.java
(Note that imports need to go directly in src/main/antlr4/imports
)
After this I just run the antlr4
goal from the maven menu ([Module] > Plugins > antlr4 > antlr4:antlr4), which generated the sources in the default location (target/generated-sources/antlr4
), where they were already marked with blue, generated-sources icon by Intellij, and MainParser
can now be imported!
The problem
target/generated-sources/antlr4
is not automatically marked as source dir, instead its direct subdir com.example
is. Intellij Idea fails to detect proper package for classes inside target/generated-sources/antlr4/com.example
.
The cause
The source file *.g4
is in src/main/antlr4/com.example
, but it actually it should be src/main/antlr4/com/example
. Note the /
. You probably forgot to mark src/main/antlr4
as source dir in Idea, and when you thought you are creating package structure, you actually just created single dir called com.example
.
The fix
Mark src/main/antlr4
as source dir, create proper directory structure src/main/antlr4/com/example
. Rebuild.
Alternative fix
Go to Project Structure - Modules - Source Folders and find the target/generated-sources/antlr4/com.example
- click Edit properties and set Package prefix to com.example
.
Different but related problem here