package jetbrains.mps.execution.configurations.implementation.plugin.plugin;
/*Generated by MPS */
import jetbrains.mps.execution.api.configurations.BaseMpsRunConfiguration;
import jetbrains.mps.execution.api.settings.IPersistentConfiguration;
import org.apache.log4j.Logger;
import org.apache.log4j.LogManager;
import org.jetbrains.annotations.NotNull;
import jetbrains.mps.execution.lib.NodeBySeveralConcepts_Configuration;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import jetbrains.mps.execution.lib.NodesDescriptor;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.smodel.behaviour.BHReflection;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import jetbrains.mps.core.aspects.behaviour.SMethodTrimmedId;
import jetbrains.mps.baseLanguage.execution.api.Java_Command;
import jetbrains.mps.baseLanguage.execution.api.JavaRunParameters1_Configuration;
import jetbrains.mps.execution.api.settings.PersistentConfigurationContext;
import com.intellij.execution.configurations.RuntimeConfigurationException;
import jetbrains.mps.baseLanguage.closures.runtime.Wrappers;
import jetbrains.mps.project.MPSProject;
import jetbrains.mps.ide.project.ProjectHelper;
import com.intellij.execution.configurations.RuntimeConfigurationError;
import org.jdom.Element;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.util.xmlb.XmlSerializer;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.execution.actions.ConfigurationContext;
import jetbrains.mps.plugins.runconfigs.MPSPsiElement;
import org.jetbrains.mps.openapi.model.SNodeReference;
import org.jetbrains.mps.openapi.module.SRepository;
import jetbrains.mps.smodel.ModelAccessHelper;
import jetbrains.mps.util.Computable;
import java.util.Objects;
import org.apache.log4j.Level;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.Nullable;
import com.intellij.execution.configurations.RunProfileState;
import com.intellij.execution.Executor;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.ExecutionException;
import com.intellij.openapi.options.SettingsEditor;
import com.intellij.execution.configurations.ConfigurationPerRunnerSettings;
import com.intellij.execution.runners.ProgramRunner;
import com.intellij.execution.configurations.ConfigurationInfoProvider;
import jetbrains.mps.execution.api.settings.SettingsEditorEx;
public class Java_Configuration extends BaseMpsRunConfiguration implements IPersistentConfiguration {
private static final Logger LOG = LogManager.getLogger(Java_Configuration.class);
@NotNull
private Java_Configuration.MyState myState = new Java_Configuration.MyState();
private NodeBySeveralConcepts_Configuration myNode = new NodeBySeveralConcepts_Configuration(ListSequence.fromListAndArray(new ArrayList<NodesDescriptor>(), new NodesDescriptor(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c108ca66L, "jetbrains.mps.baseLanguage.structure.ClassConcept"), new _FunctionTypes._return_P1_E0<Boolean, SNode>() {
public Boolean invoke(SNode node) {
return (((SNode) BHReflection.invoke(SNodeOperations.cast(node, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c108ca66L, "jetbrains.mps.baseLanguage.structure.ClassConcept")), SMethodTrimmedId.create("getMainMethod", MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c108ca66L, "jetbrains.mps.baseLanguage.structure.ClassConcept"), "hEwIClG"))) != null);
}
}), new NodesDescriptor(MetaAdapterFactory.getInterfaceConcept(0x4caf0310491e41f5L, 0x8a9b2006b3a94898L, 0x40c1a7cb987d20d5L, "jetbrains.mps.execution.util.structure.IMainClass"), new _FunctionTypes._return_P1_E0<Boolean, SNode>() {
public Boolean invoke(SNode node) {
return ((boolean) (Boolean) BHReflection.invoke(SNodeOperations.cast(node, MetaAdapterFactory.getInterfaceConcept(0x4caf0310491e41f5L, 0x8a9b2006b3a94898L, 0x40c1a7cb987d20d5L, "jetbrains.mps.execution.util.structure.IMainClass")), SMethodTrimmedId.create("isNodeRunnable", null, "431DWIovi3C"))) && Java_Command.isUnitNode(node);
}
})));
private JavaRunParameters1_Configuration myRunParameters = new JavaRunParameters1_Configuration(this.getProject());
public void checkConfiguration(final PersistentConfigurationContext context) throws RuntimeConfigurationException {
this.getNode().checkConfiguration(context);
final Wrappers._boolean hasMainMethod = new Wrappers._boolean(false);
final MPSProject mpsProject = ProjectHelper.fromIdeaProject(this.getProject());
mpsProject.getModelAccess().runReadAction(new Runnable() {
public void run() {
SNode node = Java_Configuration.this.getNode().getNode().resolve(mpsProject.getRepository());
if (SNodeOperations.isInstanceOf(node, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c108ca66L, "jetbrains.mps.baseLanguage.structure.ClassConcept"))) {
hasMainMethod.value = (((SNode) BHReflection.invoke(SNodeOperations.cast(node, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c108ca66L, "jetbrains.mps.baseLanguage.structure.ClassConcept")), SMethodTrimmedId.create("getMainMethod", MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xf8c108ca66L, "jetbrains.mps.baseLanguage.structure.ClassConcept"), "hEwIClG"))) == null);
}
}
});
if (hasMainMethod.value) {
throw new RuntimeConfigurationError("Selected class does not have main method.");
}
}
@Override
public void writeExternal(Element element) throws WriteExternalException {
element.addContent(XmlSerializer.serialize(myState));
{
Element fieldElement = new Element("myNode");
myNode.writeExternal(fieldElement);
element.addContent(fieldElement);
}
{
Element fieldElement = new Element("myRunParameters");
myRunParameters.writeExternal(fieldElement);
element.addContent(fieldElement);
}
}
@Override
public void readExternal(Element element) throws InvalidDataException {
if (element == null) {
throw new InvalidDataException("Cant read " + this + ": element is null.");
}
XmlSerializer.deserializeInto(myState, (Element) element.getChildren().get(0));
{
Element fieldElement = element.getChild("myNode");
if (fieldElement != null) {
myNode.readExternal(fieldElement);
} else {
if (LOG.isDebugEnabled()) {
LOG.debug("Element " + "myNode" + " in " + this.getClass().getName() + " was null.");
}
}
}
{
Element fieldElement = element.getChild("myRunParameters");
if (fieldElement != null) {
myRunParameters.readExternal(fieldElement);
} else {
if (LOG.isDebugEnabled()) {
LOG.debug("Element " + "myRunParameters" + " in " + this.getClass().getName() + " was null.");
}
}
}
}
public NodeBySeveralConcepts_Configuration getNode() {
return myNode;
}
public JavaRunParameters1_Configuration getRunParameters() {
return myRunParameters;
}
public boolean isFromContext(@NotNull ConfigurationContext context) {
if (context.getPsiLocation() instanceof MPSPsiElement) {
MPSPsiElement mpsElement = (MPSPsiElement) context.getPsiLocation();
if (mpsElement != null) {
final SNodeReference nodePointer = mpsElement.getUnresolvedItem(SNodeReference.class);
final SRepository repository = mpsElement.getMPSProject().getRepository();
return new ModelAccessHelper(repository).runReadAction(new Computable<Boolean>() {
public Boolean compute() {
SNode source = nodePointer.resolve(repository);
if (!(SNodeOperations.isInstanceOf(source, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101d9d3ca30L, "jetbrains.mps.baseLanguage.structure.Classifier")))) {
SNode mainMethodCandidate = SNodeOperations.getNodeAncestor(source, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfbbebabf0aL, "jetbrains.mps.baseLanguage.structure.StaticMethodDeclaration"), true, false);
if (mainMethodCandidate != null && ((boolean) (Boolean) BHReflection.invoke(mainMethodCandidate, SMethodTrimmedId.create("isMainMethod", MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0xfbbebabf0aL, "jetbrains.mps.baseLanguage.structure.StaticMethodDeclaration"), "hEwJkuu")))) {
SNode classifier = SNodeOperations.getNodeAncestor(mainMethodCandidate, MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101d9d3ca30L, "jetbrains.mps.baseLanguage.structure.Classifier"), false, false);
source = classifier;
} else {
return false;
}
}
return Objects.equals(source.getReference(), Java_Configuration.this.getNode().getNode());
}
});
}
}
return false;
}
@Override
public Java_Configuration clone() {
Java_Configuration clone = null;
try {
clone = createCloneTemplate();
clone.myState = (Java_Configuration.MyState) myState.clone();
clone.myNode = (NodeBySeveralConcepts_Configuration) myNode.clone();
clone.myRunParameters = (JavaRunParameters1_Configuration) myRunParameters.clone();
return clone;
} catch (CloneNotSupportedException ex) {
if (LOG.isEnabledFor(Level.ERROR)) {
LOG.error("", ex);
}
}
return clone;
}
public class MyState {
public MyState() {
}
@Override
public Object clone() throws CloneNotSupportedException {
Java_Configuration.MyState state = new Java_Configuration.MyState();
return state;
}
}
public Java_Configuration(Project project, Java_Configuration_Factory factory, String name) {
super(project, factory, name);
}
@Nullable
public RunProfileState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment environment) throws ExecutionException {
return new Java_Configuration_RunProfileState(this, executor, environment);
}
@Nullable
public SettingsEditor<ConfigurationPerRunnerSettings> getRunnerSettingsEditor(ProgramRunner runner) {
return null;
}
public ConfigurationPerRunnerSettings createRunnerSettings(ConfigurationInfoProvider provider) {
return null;
}
public SettingsEditorEx<Java_Configuration> getConfigurationEditor() {
return (SettingsEditorEx<Java_Configuration>) getEditor();
}
public Java_Configuration createCloneTemplate() {
return (Java_Configuration) super.clone();
}
public SettingsEditorEx<? extends IPersistentConfiguration> getEditor() {
return new Java_Configuration_Editor(myNode.getEditor(), myRunParameters.getEditor());
}
@Override
public void checkConfiguration() throws RuntimeConfigurationException {
final jetbrains.mps.project.Project mpsProject = ProjectHelper.fromIdeaProject(getProject());
checkConfiguration(new PersistentConfigurationContext() {
public jetbrains.mps.project.Project getProject() {
return mpsProject;
}
});
}
@Override
public boolean canExecute(String executorId) {
return Java_Configuration_RunProfileState.canExecute(executorId);
}
public Object[] createMakeNodePointersTask() {
return new Object[]{ListSequence.fromListAndArray(new ArrayList<SNodeReference>(), this.getNode().getNode())};
}
}