My Java project with multiple subprojects is using the Immutables library for value objects.
package foo.bar;
import org.immutables.value.Value;
public class MyContainerClass {
@Value.Immutable
public interface Baz {
String name();
}
// more interfaces here
}
This generates a class in the same package named foo.bar.ImmutableBaz
implementing the Baz
interface. Another subproject recently declared another interface of the same name in the same package foo.bar
, but a different container class. This resulted in the generation of a second foo.bar.ImmutableBaz
class. Both classes inadvertently ended up with the same fully qualified name which caused issues at runtime with the wrong class being loaded.
How would I best detect these naming clashes, for example in a test or as part of a CI pipeline?
I know I can specify the target package with Immutables, but I'm looking to detect and avoid unintentional clashes.