package org.erlide.builder;
import com.google.inject.Injector;
import com.google.inject.Singleton;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.Platform;
import org.eclipse.xtext.xbase.lib.CollectionLiterals;
import org.eclipse.xtext.xbase.lib.Exceptions;
import org.erlide.builder.BuilderPlugin;
import org.erlide.builder.IErlangBuilder;
@Singleton
@SuppressWarnings("all")
public class BuildersProvider {
private Map<String, IErlangBuilder> builders;
public BuildersProvider() {
HashMap<String, IErlangBuilder> _newHashMap = CollectionLiterals.<String, IErlangBuilder>newHashMap();
this.builders = _newHashMap;
}
public Collection<IErlangBuilder> get() {
Collection<IErlangBuilder> _xblockexpression = null;
{
boolean _isEmpty = this.builders.isEmpty();
if (_isEmpty) {
this.loadBuilderExtensions();
}
Collection<IErlangBuilder> _values = this.builders.values();
_xblockexpression = Collections.<IErlangBuilder>unmodifiableCollection(_values);
}
return _xblockexpression;
}
public IErlangBuilder get(final String id) {
IErlangBuilder _xblockexpression = null;
{
boolean _isEmpty = this.builders.isEmpty();
if (_isEmpty) {
this.loadBuilderExtensions();
}
_xblockexpression = this.builders.get(id);
}
return _xblockexpression;
}
private void loadBuilderExtensions() {
final IExtensionRegistry reg = Platform.getExtensionRegistry();
final IConfigurationElement[] elements = reg.getConfigurationElementsFor("org.erlide.builder.builders");
for (final IConfigurationElement element : elements) {
try {
Object _createExecutableExtension = element.createExecutableExtension("class");
final IErlangBuilder builder = ((IErlangBuilder) _createExecutableExtension);
BuilderPlugin _instance = BuilderPlugin.getInstance();
Injector _injector = _instance.getInjector();
_injector.injectMembers(builder);
String _id = builder.getId();
this.builders.put(_id, builder);
} catch (final Throwable _t) {
if (_t instanceof CoreException) {
final CoreException e = (CoreException)_t;
} else {
throw Exceptions.sneakyThrow(_t);
}
}
}
}
}