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();
}
};
}