[GRADLE-2163] AsmBackedClassGenerator.addGetter is not adding convention backed method for get<Property>() for boolean properties Created: 12/Mar/12 Updated: 04/Jan/13 Resolved: 14/Mar/12
|Reporter:||Justin Ryan||Assignee:||Luke Daley|
I was having a problem with Checkstyle.groovy, where the run() method calls getIgnoreFailures(), but it wouldn't pick up the convention value. Which, by the way, points to a flaw in the unit tests, since the test is checking the property while the code is calling the accessor, e.g. assert getIgnoreFailures() == true should be used instead of assert ignoreFailures == true.
A little tracking down, showed that while AbstractClassGenerator.generate is looping the metaClass.properties, it gets to a boolean property who's MetaBeanProperty.getter is named "is<Property>" which consequently gets generated with convention support in AsmBackedClassGenerator.addGetter. But Groovyc also generates "get<Property>" for boolean properties (GROOVY-2696), and this method is NOT being created in AsmBackedClassGenerator. Which means the compile is happy since the method signatures match up, yet it's just a plain accessor. And without a good unit test it goes unnoticed.
From what I can tell, Groovy generates the "get<Property>" method but doesn't expose it was a getter method via MetaBeanProperty. To work around it, AsmBackedClassGenerator.addGetter should look for this corner case and generate two identical methods.
|Comment by Justin Ryan [ 12/Mar/12 ]|
If someone can confirm my logic, I can submit a pull request tomorrow.
I should mention that this effects all boolean conventions where the "get<Property>" method call is used. I can vouch that this includes Checkstyle, CodeNarc and PMD.
|Comment by Justin Ryan [ 14/Mar/12 ]|
Working pull request made: https://github.com/gradle/gradle/pull/72
It includes test and code.