I am having trouble getting Intellij to recognize the generated source code from antlr4. Any reference to the generated code appears as errors, code completion doesn't work, etc.
I am using maven and the antlr4-maven-plugin to generate the code.
My code, referencing the generated code compiles and builds fine under maven.
The generated code is under /target/generated-sources/antlr4, which is what Intellij expects.
I have tried the usual fixes such as reimport maven projects, update folders, invalidate cache, etc. None of it seems to work.
Anyone seen this before?
Is there a way to point to the generated sources directly within Intellij?
I had what I think may have been a similar issue. I am new to IntelliJ, so I am guessing to some extent.
Is the gen folder in your project brown (i.e. a resource) or blue (source code)?
I could not get my project to recognize generated code until I managed to get the gen folder registered as one containing source code.
Sorry to say you may need to fiddle with it - I cannot recall how I did it - but all was well after I changed this.
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
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.
Steps that worked for me:
- Open Maven Projects in right tab
- Right click on the module that contained my antlr code
- Click Generate Source and Update Folders
I had a similar problem. Intellij found my generated code in the java
folder but not in a subfolder of java
. I solved it by putting my grammar files (*.g4) into a package (com.test):
.
├── src/
| └── main/
| ├── antlr/
| | └── com.test/
| | └── Test.g4
| └── java/
| └── test/
| └── Test.java
└── target/
└── generated-sources/
└── antlr/
└── com.test/
├── TestBaseListener.java
└── ...
The easiest way to solve this issue is to Right-Click the gen
directory and choose Mark Directory as -> Sources Root