@Override
    public Configurable @NotNull [] getConfigurables() {
      if (isInitialized) {
        return myKids;
      }

      long time = System.currentTimeMillis();
      ArrayList<Configurable> list = new ArrayList<>();
      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) {
        Project project = super.myEp.getProject();
        ExtensionsArea area = project == null ? ApplicationManager.getApplication().getExtensionArea() : project.getExtensionArea();
        ExtensionPoint<Object> point = area.getExtensionPointIfRegistered(super.myEp.childrenEPName);
        List<Object> extensions;
        if (point == null) {
          LOG.warn("Cannot find extension point " + super.myEp.childrenEPName + " in " + area);
          extensions = Collections.emptyList();
        }
        else {
          extensions = point.getExtensionList();
        }
        if (!extensions.isEmpty()) {
          if (extensions.get(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;
            list.sort(myComparator);
            break;
          }
        }
      }
      if (myFilter != null) {
        list.removeIf(Predicate.not(myFilter));
      }
      myKids = list.toArray(new Configurable[0]);
      isInitialized = true;
      ConfigurableCardPanel.warn(this, "children", time);
      return myKids;
    }
@Override
    public Configurable @NotNull [] getConfigurables()