@Override public Configurable[] getConfigurables() { if (!isInitialized) { ArrayList<Configurable> list = new ArrayList<Configurable>(); if (super.myEp.dynamic) { Composite composite = cast(Composite.class, this); if (composite != null) { Collections.addAll(list, composite.getConfigurables()); } } if (super.myEp.children != null) { for (ConfigurableEP ep : super.myEp.getChildren()) { if (ep.isAvailable()) { list.add((Configurable) wrapConfigurable(ep)); } } } if (super.myEp.childrenEPName != null) { Object[] extensions = Extensions.getArea(super.myEp.getProject()) .getExtensionPoint(super.myEp.childrenEPName) .getExtensions(); if (extensions.length > 0) { if (extensions[0] instanceof ConfigurableEP) { for (Object object : extensions) { list.add((Configurable) wrapConfigurable((ConfigurableEP) object)); } } else if (!super.myEp.dynamic) { Composite composite = cast(Composite.class, this); if (composite != null) { Collections.addAll(list, composite.getConfigurables()); } } } } Collections.addAll(list, myKids); // sort configurables is needed for (Configurable configurable : list) { if (configurable instanceof Weighted) { if (((Weighted) configurable).getWeight() != 0) { myComparator = COMPARATOR; Collections.sort(list, myComparator); break; } } } myKids = ArrayUtil.toObjectArray(list, Configurable.class); isInitialized = true; } return myKids; }
@Nullable private static Configurable createConfigurableForProvider( ConfigurableEP<Configurable>[] extensions, Class<? extends ConfigurableProvider> providerClass) { for (ConfigurableEP<Configurable> extension : extensions) { if (extension.providerClass != null) { final Class<Object> aClass = extension.findClassNoExceptions(extension.providerClass); if (aClass != null && providerClass.isAssignableFrom(aClass)) { return extension.createConfigurable(); } } } return null; }
@NotNull private static <T extends Configurable> T findConfigurable( ConfigurableEP<Configurable>[] extensions, Class<T> configurableClass) { for (ConfigurableEP<Configurable> extension : extensions) { if (extension.providerClass != null || extension.instanceClass != null || extension.implementationClass != null) { final Configurable configurable = extension.createConfigurable(); if (configurableClass.isInstance(configurable)) { return configurableClass.cast(configurable); } } } throw new IllegalArgumentException("Cannot find configurable of " + configurableClass); }
private static <T extends UnnamedConfigurable> T createConfigurable( @NotNull ConfigurableEP<T> ep, boolean log) { long time = System.currentTimeMillis(); T configurable = ep.createConfigurable(); if (configurable instanceof Configurable) { ConfigurableCardPanel.warn((Configurable) configurable, "init", time); if (log) { LOG.debug("cannot create configurable wrapper for " + configurable.getClass()); } } return configurable; }
@Nullable public static <T extends UnnamedConfigurable> T wrapConfigurable(@NotNull ConfigurableEP<T> ep) { if (!ep.canCreateConfigurable()) { return null; } if (ep.displayName != null || ep.key != null || ep.parentId != null || ep.groupId != null) { return !ep.dynamic && ep.children == null && ep.childrenEPName == null ? (T) new ConfigurableWrapper(ep) : (T) new CompositeWrapper(ep); } return createConfigurable(ep, LOG.isDebugEnabled()); }
@Nls @Override public String getDisplayName() { if (myEp.displayName == null && myEp.key == null) { boolean loaded = myConfigurable != null; Configurable configurable = cast(Configurable.class, this); if (configurable != null) { String name = configurable.getDisplayName(); if (!loaded && LOG.isDebugEnabled()) { LOG.debug("XML does not provide displayName for " + configurable.getClass()); } return name; } } return myEp.getDisplayName(); }