I have been trying to find the correct settings for IntelliJ's annotation processing in order for it to co-exist with Gradle's build process.
Whenever I build from IntelliJ I cannot get it to recognise the generated sources from the gradle-apt-plugin.
My requirements for my project are:
- Building between IntelliJ and Gradle should be seamless and not interfere with the process of each other
- I need to use IntelliJ's Create separate module per source set option
- I need to use IntelliJ's folder based structure
- IntelliJ needs to be able to recognise and autocomplete AutoValue classes
Here are the steps for a MCVE in order to reproduce the issue with IntelliJ 2017.2.4 and Gradle 3.5:
- Create a new Gradle project from IntelliJ
- Check the Create separate module per source set option
- Open build.gradle file:
- Add the following
plugins
block:
plugins {
id 'java'
id 'net.ltgt.apt' version '0.12'
}
- Add the following
dependencies
block
dependencies {
compileOnly 'com.google.auto.value:auto-value:1.5'
apt 'com.google.auto.value:auto-value:1.5'
}
- Go to Settings → Build, Execution, Deployment → Annotation Processors
- Check the Enable Annotation Processing
- Create a class:
@AutoValue
public abstract class GeneratedSourcesTest {
static GeneratedSourcesTest create(String field) {
return new AutoValue_GeneratedSourcesTest(field);
}
public abstract String field();
}
- On IntelliJ run Build → Build Project
- Open the
GeneratedSourcesTest
class, on the static factory method, everything compiles fine but I get the error:
cannot resolve symbol ‘AutoValue_GeneratedSourcesTest’
How can I make the AutoValue_GeneratedSourcesTest
class accessible from IntelliJ?