johncarl81 / parceler

:package: Android Parcelables made easy through code generation.
http://parceler.org
Apache License 2.0
3.56k stars 273 forks source link

Ability to treat reflection warnings as errors #381

Open TWiStErRob opened 4 years ago

TWiStErRob commented 4 years ago

Given the following class:

@Parcel
data class Parceled @ParcelConstructor constructor(
    val privateField: String
)

I get this build output:

> Task :kaptDebugKotlin
fail-on-warning\build\tmp\kapt3\stubs\debug\com\example\Parceled.java:9: warning: Parceler: Reflection is required to access private field: String privateField, consider using non-private.
    private final java.lang.String privateField = null;

I'm looking for a way to make this warning an error, similar to how lint and javac and kotlinc allows me to.

TWiStErRob commented 4 years ago

I found a workaround: https://github.com/TWiStErRob/repros/tree/master/parceler/fail-on-warning, but it's quite elaborate.

johncarl81 commented 4 years ago

I like this idea. We could just change this decorator out for one that validates to an error based on an annotation processor configuration in this location: https://github.com/johncarl81/parceler/blob/master/parceler/src/main/java/org/parceler/internal/ParcelerInvocationBuilderStrategy.java#L40

johncarl81 commented 4 years ago

Or use a validator that validates a warning to an error.

TWiStErRob commented 4 years ago

Something like dagger.moduleBindingValidation would be nice.

TWiStErRob commented 4 years ago

Hmm, that actually gave me an idea for another workaround:

kapt {
   javacOptions {
      option("-Werror")
   }
}

since these warnings are coming from Javac running the annotation processor on kapt stubs.

Finer control is still appreciated though. 🤓 It is possible that there are multiple annotation processors in one kapt run, and someone would want Parceler to error, but another one has to have the warning (e.g. one a project I work on DBFlow warns, and it can't be fixed); meaning -Werror doesn't work here.