Yeah, no need for that (but thanks for digging), I found the issue. Basically, we create 2 different ExecutableMetaData.Builder hierarchies as there are 2 branches from ConcreteEntityWebService and accept() returns false for the methods in the parallel hierarchy. In the end, it keeps only one so, depending on the run, it will choose the one with a constraint or the one without. Interesting case indeed and a nasty bug. Gunnar Morling in this case, I would be in favor of relaxing Executable#overrides() (and maybe rename it overridesInHierarchy() to make it clear that it should only be used in a given hierarchy) so that it does not test the class hierarchy. We use it at 2 places and I think it makes sense in the 2 places as we are in a class hierarchy. |