package jetbrains.mps.debugger.java.runtime.evaluation.container; /*Generated by MPS */ import jetbrains.mps.project.Project; import org.jetbrains.mps.openapi.module.SModuleReference; import org.jetbrains.mps.openapi.model.SModelReference; import org.jetbrains.mps.openapi.model.SNodeReference; import org.jetbrains.mps.openapi.module.SRepository; import jetbrains.mps.debugger.java.runtime.state.DebugSession; import jetbrains.mps.debugger.java.api.state.JavaUiState; import org.jetbrains.annotations.NotNull; import java.util.List; import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes; import org.jetbrains.mps.openapi.module.ModelAccess; import org.jetbrains.mps.openapi.module.SModule; import org.jetbrains.mps.openapi.model.SModel; import jetbrains.mps.smodel.tempmodel.TemporaryModels; import jetbrains.mps.smodel.tempmodel.TempModuleOptions; import com.intellij.openapi.application.ApplicationManager; import jetbrains.mps.debugger.java.api.evaluation.EvaluationException; import jetbrains.mps.classloading.ClassLoaderManager; import jetbrains.mps.smodel.ModuleRepositoryFacade; import org.jetbrains.mps.openapi.persistence.PersistenceFacade; import jetbrains.mps.debugger.java.api.evaluation.Evaluator; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.ArrayList; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.smodel.CopyUtil; import jetbrains.mps.smodel.ModelAccessHelper; import jetbrains.mps.util.Computable; import jetbrains.mps.smodel.behaviour.BHReflection; import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations; import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory; import jetbrains.mps.core.aspects.behaviour.SMethodTrimmedId; import jetbrains.mps.smodel.ModelDependencyUpdate; import jetbrains.mps.smodel.ModelImports; import jetbrains.mps.smodel.action.SNodeFactoryOperations; import org.jetbrains.mps.openapi.model.SReference; import jetbrains.mps.smodel.SModelUtil_new; public class EvaluationContainer implements IEvaluationContainer { protected final Project myProject; protected final SModuleReference myContainerModule; protected volatile SModelReference myContainerModel; protected volatile SNodeReference myNode; protected final SRepository myDebuggerRepository; protected final DebugSession myDebugSession; protected volatile JavaUiState myUiState; public EvaluationContainer(Project mpsProject, DebugSession session, @NotNull SModuleReference containerModule, final List<SNodeReference> nodesToImport, final _FunctionTypes._void_P1_E0<? super IEvaluationContainer> onNodeSetUp) { myProject = mpsProject; myDebugSession = session; myContainerModule = containerModule; myUiState = myDebugSession.getUiState(); myDebuggerRepository = mpsProject.getRepository(); final ModelAccess modelAccess = mpsProject.getModelAccess(); modelAccess.runWriteAction(new Runnable() { public void run() { SModule containerModule = myContainerModule.resolve(myDebuggerRepository); SModel descriptor = TemporaryModels.getInstance().create(false, TempModuleOptions.forExistingModule(containerModule)); myContainerModel = descriptor.getReference(); } }); ApplicationManager.getApplication().invokeLater(new Runnable() { public void run() { modelAccess.executeCommand(new Runnable() { public void run() { setUpNode(nodesToImport); } }); onNodeSetUp.invoke(EvaluationContainer.this); } }); } @Override public Class generateClass() throws EvaluationException { SModel containerModel = myContainerModel.resolve(myDebuggerRepository); return GeneratorUtil.generateAndLoadEvaluatorClass(myProject, containerModel, Properties.EVALUATOR_NAME, Properties.IS_DEVELOPER_MODE, ClassLoaderManager.getInstance().getClassLoader(ModuleRepositoryFacade.getInstance().getModule(PersistenceFacade.getInstance().createModuleReference("cf8c9de5-1b4a-4dc8-8e6d-847159af31dd(jetbrains.mps.debugger.java.api)")))); } @Override public Evaluator createEvaluatorInstance(Class clazz) throws EvaluationException { return GeneratorUtil.createInstance(clazz, new Class[]{JavaUiState.class}, new Object[]{myUiState}); } @Override public IEvaluationContainer copy(boolean isWatch, _FunctionTypes._void_P1_E0<? super IEvaluationContainer> onNodeSetUp) { final SNodeReference reference = myNode; return new EvaluationContainer(myProject, myDebugSession, myContainerModule, ListSequence.fromList(new ArrayList<SNodeReference>()), onNodeSetUp) { @Override protected SNode createEvaluatorNode() { return (SNode) CopyUtil.copyAndPreserveId(reference.resolve(myDebuggerRepository), true); } }; } @Override public String getPresentation() { return new ModelAccessHelper(myDebuggerRepository).runReadAction(new Computable<String>() { @Override public String compute() { return PresentationUtil.getPresentation(((SNode) BHReflection.invoke(SNodeOperations.cast(getNode(), MetaAdapterFactory.getInterfaceConcept(0x7da4580f9d754603L, 0x816251a896d78375L, 0x7f4a99699cea367bL, "jetbrains.mps.debugger.java.evaluation.structure.IEvaluatorConcept")), SMethodTrimmedId.create("getCode", null, "hASWOEj0jB")))); } }); } @Override public SNode getNode() { if (myNode == null) { return null; } return myNode.resolve(myDebuggerRepository); } @Override public void updateState() { myUiState = myDebugSession.getUiState(); } protected void setUpNode(List<SNodeReference> nodesToImport) { SModel containerModel = myContainerModel.resolve(myDebuggerRepository); SNode evaluatorNode = createEvaluatorNode(); containerModel.addRootNode(evaluatorNode); myNode = evaluatorNode.getReference(); // todo: variables new EvaluationContainer.MyBaseLanguagesImportHelper().tryToImport(((SNode) BHReflection.invoke(evaluatorNode, SMethodTrimmedId.create("getCode", null, "hASWOEj0jB"))), nodesToImport); // XXX likely, don't need a repo in updateImportedModels() here, as it's not vital to import accessories implicitly new ModelDependencyUpdate(containerModel).updateUsedLanguages().updateImportedModels(myDebuggerRepository).updateModuleDependencies(myDebuggerRepository); ModelImports modelImports = new ModelImports(containerModel); modelImports.addUsedLanguage(MetaAdapterFactory.getLanguage(0x7da4580f9d754603L, 0x816251a896d78375L, "jetbrains.mps.debugger.java.evaluation")); modelImports.addUsedLanguage(MetaAdapterFactory.getLanguage(0x802088974572437dL, 0xb50e8f050cba9566L, "jetbrains.mps.debugger.java.privateMembers")); } protected SNode createEvaluatorNode() { return SNodeFactoryOperations.createNewNode(SNodeFactoryOperations.asInstanceConcept(MetaAdapterFactory.getConcept(0x7da4580f9d754603L, 0x816251a896d78375L, 0xbbe5b47d7cc5fa1L, "jetbrains.mps.debugger.java.evaluation.structure.Evaluator")), null); } private class MyBaseLanguagesImportHelper extends BaseLanguagesImportHelper { @Override public SNode findVariable(SReference variableReference) { return null; } @Override public SNode createVariableReference(SNode variable) { return createInternalVariableReference_jbng3m_a0a1z(variable.getName()); } } private static SNode createInternalVariableReference_jbng3m_a0a1z(Object p0) { PersistenceFacade facade = PersistenceFacade.getInstance(); SNode n1 = SModelUtil_new.instantiateConceptDeclaration(MetaAdapterFactory.getConcept(0xdf345b11b8c74213L, 0xac6648d2a9b75d88L, 0x111fb5bb1f2L, "jetbrains.mps.baseLanguageInternal.structure.InternalVariableReference"), null, null, false); { n1.setProperty(MetaAdapterFactory.getProperty(0xdf345b11b8c74213L, 0xac6648d2a9b75d88L, 0x111fb5bb1f2L, 0x111fb5dbc49L, "name"), p0 + ""); SNode n2 = SModelUtil_new.instantiateConceptDeclaration(MetaAdapterFactory.getConcept(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101de48bf9eL, "jetbrains.mps.baseLanguage.structure.ClassifierType"), null, null, false); n2.setReference(MetaAdapterFactory.getReferenceLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101de48bf9eL, 0x101de490babL, "classifier"), jetbrains.mps.smodel.SReference.create(MetaAdapterFactory.getReferenceLink(0xf3061a5392264cc5L, 0xa443f952ceaf5816L, 0x101de48bf9eL, 0x101de490babL, "classifier"), n2, facade.createModelReference("6354ebe7-c22a-4a0f-ac54-50b52ab9b065/java:java.lang(JDK/)"), facade.createNodeId("~Object"))); n1.addChild(MetaAdapterFactory.getContainmentLink(0xdf345b11b8c74213L, 0xac6648d2a9b75d88L, 0x111fb5bb1f2L, 0x111fb5c4f4cL, "type"), n2); } return n1; } }