@Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        PluginInfo that = (PluginInfo) o;
        return Objects.equals(className, that.className) &&
               Objects.equals(type, that.type) &&
               Objects.equals(version, that.version);
    }
@Test
    public void testNoVersionFilter() {
        PluginInfo.NoVersionFilter filter = new PluginInfo.NoVersionFilter();
        // We intentionally refrain from using assertEquals and assertNotEquals
        // here to ensure that the filter's equals() method is used
        assertFalse(filter.equals("1.0"));
        assertFalse(filter.equals(new Object()));
        assertFalse(filter.equals(null));
        assertTrue(filter.equals(PluginDesc.UNDEFINED_VERSION));
    }