Ignore invisible SearchableConfigurable.Parent (0xDBE)

This commit is contained in:
Sergey Malenkov
2014-09-02 22:15:39 +04:00
parent 4f7f9fa0b5
commit 3a80de8c85
2 changed files with 43 additions and 1 deletions
@@ -196,7 +196,7 @@ public class ConfigurableWrapper implements SearchableConfigurable {
return configurable instanceof SearchableConfigurable ? ((SearchableConfigurable)configurable).enableSearch(option) : null;
}
private static class CompositeWrapper extends ConfigurableWrapper implements Configurable.Composite {
private static class CompositeWrapper extends ConfigurableWrapper implements SearchableConfigurable.Parent {
private Configurable[] myKids;
@@ -241,6 +241,42 @@ public class ConfigurableWrapper implements SearchableConfigurable {
myKids = ArrayUtil.append(myKids, configurable);
return this;
}
@Override
public boolean hasOwnContent() {
UnnamedConfigurable configurable = getConfigurable();
if (configurable instanceof SearchableConfigurable.Parent) {
SearchableConfigurable.Parent parent = (SearchableConfigurable.Parent)configurable;
return parent.hasOwnContent();
}
return false;
}
@Override
public boolean isVisible() {
if (super.myConfigurable == null) {
String name = super.myEp.instanceClass;
if (name == null) {
name = super.myEp.implementationClass;
}
if (name != null) {
try {
if (!SearchableConfigurable.Parent.class.isAssignableFrom(super.myEp.findClass(name))) {
return true; // do not instantiate wrapped configurable if not needed
}
}
catch (ClassNotFoundException exception) {
return true; // ignore unexpected exception from findClass
}
}
}
UnnamedConfigurable configurable = getConfigurable();
if (configurable instanceof SearchableConfigurable.Parent) {
SearchableConfigurable.Parent parent = (SearchableConfigurable.Parent)configurable;
return parent.isVisible();
}
return true;
}
}
private static final class GroupWrapper extends CompositeWrapper implements ConfigurableGroup {
@@ -97,6 +97,12 @@ public final class MixedConfigurableGroup implements SearchableConfigurable, Con
ArrayList<ConfigurableGroup> groups = new ArrayList<ConfigurableGroup>();
HashMap<String, ArrayList<Configurable>> map = new HashMap<String, ArrayList<Configurable>>();
for (Configurable configurable : configurables) {
if (configurable instanceof SearchableConfigurable.Parent) {
SearchableConfigurable.Parent parent = (SearchableConfigurable.Parent)configurable;
if (!parent.isVisible()) {
continue;
}
}
if (configurable instanceof ConfigurableGroup) {
groups.add((ConfigurableGroup)configurable);
}