public PluginConfiguration build()

in util/plugin/src/main/java/jetbrains/jetpad/plugin/PluginConfigurationBuilder.java [46:90]


  public PluginConfiguration build() {
    final Map<ExtensionPoint<?>, List<?>> context = new HashMap<>();

    for (Plugin p : myPlugins) {
      p.install(new PluginContext() {
        @Override
        public <ExtensionT> PluginContext add(ExtensionPoint<ExtensionT> ep, Collection<? extends ExtensionT> exts) {
          if (exts.isEmpty()) {
            return this;
          }

          if (!context.containsKey(ep)) {
            context.put(ep, new ArrayList<ExtensionT>());
          }

          @SuppressWarnings("unchecked")
          List<ExtensionT> extensionList = (List<ExtensionT>) context.get(ep);
          extensionList.addAll(exts);

          return this;
        }
      });
    }

    return new PluginConfiguration() {
      @Override
      public <ExtensionT> Collection<ExtensionT> getExts(ExtensionPoint<ExtensionT> ep) {
        if (!context.containsKey(ep)) {
          return Collections.emptyList();
        }
        @SuppressWarnings("unchecked")
        List<ExtensionT> extensionList = (List<ExtensionT>) context.get(ep);
        return Collections.unmodifiableCollection(extensionList);
      }

      @Override
      public <ExtensionT> ExtensionT getExt(ExtensionPoint<ExtensionT> ep) {
        Collection<ExtensionT> exts = getExts(ep);
        if (exts.size() != 1) {
          throw new IllegalStateException("There should be exactly one instance of " + ep);
        }
        return exts.iterator().next();
      }
    };
  }