package jetbrains.mps.execution.demo.pluginSolution.plugin;
/*Generated by MPS */
import jetbrains.mps.plugins.custom.BaseCustomApplicationPlugin;
import org.apache.log4j.Logger;
import org.apache.log4j.LogManager;
import java.util.List;
import com.intellij.execution.configurations.ConfigurationType;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import com.intellij.execution.junit.RuntimeConfigurationProducer;
import com.intellij.openapi.extensions.ExtensionPoint;
import com.intellij.openapi.extensions.Extensions;
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;
import org.apache.log4j.Level;
import com.intellij.util.containers.ContainerUtil;
public class RunConfigurationsInitializer_CustomApplicationPlugin extends BaseCustomApplicationPlugin {
private static final Logger LOG = LogManager.getLogger(RunConfigurationsInitializer_CustomApplicationPlugin.class);
private List<ConfigurationType> myRegisteredKinds = ListSequence.fromList(new ArrayList<ConfigurationType>());
private List<RuntimeConfigurationProducer> myRegisteredProducers = ListSequence.fromList(new ArrayList<RuntimeConfigurationProducer>());
public RunConfigurationsInitializer_CustomApplicationPlugin() {
}
public void doInit() {
// register kinds
ExtensionPoint<ConfigurationType> configurationExtensionPoint = Extensions.getArea(null).getExtensionPoint(ConfigurationType.CONFIGURATION_TYPE_EP);
{
Demo_Kind runConfigurationKind = new Demo_Kind();
ListSequence.fromList(RunConfigurationsInitializer_CustomApplicationPlugin.this.myRegisteredKinds).addElement(runConfigurationKind);
configurationExtensionPoint.registerExtension(runConfigurationKind);
}
// add foreign factories
_FunctionTypes._return_P1_E0<? extends Class<ConfigurationType>, ? super String> getClassFunction = new _FunctionTypes._return_P1_E0<Class<ConfigurationType>, String>() {
public Class<ConfigurationType> invoke(String className) {
try {
return (Class<ConfigurationType>) getClass().getClassLoader().loadClass(className);
} catch (ClassNotFoundException cl) {
if (LOG.isEnabledFor(Level.ERROR)) {
LOG.error("Can not find configuration type " + className + ". Check languages dependency.", cl);
}
return (Class<ConfigurationType>) null;
}
}
};
// register creators
ExtensionPoint<RuntimeConfigurationProducer> producerExtensionPoint = Extensions.getArea(null).getExtensionPoint(RuntimeConfigurationProducer.RUNTIME_CONFIGURATION_PRODUCER);
{
ConfigurationType configurationType = ContainerUtil.findInstance(configurationExtensionPoint.getExtensions(), getClassFunction.invoke("jetbrains.mps.execution.demo.pluginSolution.plugin.Demo_Kind"));
if (configurationType != null) {
List<RuntimeConfigurationProducer> configurationProducers = DemoApplication_Producer.getProducers(configurationType);
ListSequence.fromList(RunConfigurationsInitializer_CustomApplicationPlugin.this.myRegisteredProducers).addSequence(ListSequence.fromList(configurationProducers));
for (RuntimeConfigurationProducer producer : ListSequence.fromList(configurationProducers)) {
producerExtensionPoint.registerExtension(producer);
}
}
}
}
public void doDispose() {
ExtensionPoint<ConfigurationType> configurationExtensionPoint = Extensions.getArea(null).getExtensionPoint(ConfigurationType.CONFIGURATION_TYPE_EP);
for (ConfigurationType configurationKind : ListSequence.fromList(RunConfigurationsInitializer_CustomApplicationPlugin.this.myRegisteredKinds).reversedList()) {
configurationExtensionPoint.unregisterExtension(configurationKind);
}
ListSequence.fromList(RunConfigurationsInitializer_CustomApplicationPlugin.this.myRegisteredKinds).clear();
ExtensionPoint<RuntimeConfigurationProducer> producerExtensionPoint = Extensions.getArea(null).getExtensionPoint(RuntimeConfigurationProducer.RUNTIME_CONFIGURATION_PRODUCER);
for (RuntimeConfigurationProducer producer : ListSequence.fromList(RunConfigurationsInitializer_CustomApplicationPlugin.this.myRegisteredProducers)) {
producerExtensionPoint.unregisterExtension(producer);
}
ListSequence.fromList(RunConfigurationsInitializer_CustomApplicationPlugin.this.myRegisteredProducers).clear();
}
}