package jetbrains.mps.debugger.java.runtime.evaluation.model;

/*Generated by MPS */

import jetbrains.mps.annotations.GeneratedClass;
import jetbrains.mps.debugger.java.api.state.JavaUiState;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.mps.openapi.model.SNode;
import org.jetbrains.mps.openapi.module.SModule;
import org.jetbrains.mps.openapi.model.SModel;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import java.util.Map;
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;

@GeneratedClass(node = "r:86d21248-3bf4-41d8-8375-ab68885d035f(jetbrains.mps.debugger.java.runtime.evaluation.model)/7757449281563189172", model = "r:86d21248-3bf4-41d8-8375-ab68885d035f(jetbrains.mps.debugger.java.runtime.evaluation.model)")
/*package*/ abstract class EvaluationContext {
  protected JavaUiState myUiState;
  public EvaluationContext(JavaUiState state) {
    myUiState = state;
  }
  @NotNull
  public List<String> getClassPath() {
    return ListSequence.fromList(new ArrayList<String>());
  }
  @Nullable
  public abstract SNode getLocationNode();
  @Nullable
  public SModule getLocationModule() {
    SModel model = getLocationModel();
    if (model == null) {
      return null;
    }
    return model.getModule();
  }
  @Nullable
  protected SModel getLocationModel() {
    return SNodeOperations.getModel(getLocationNode());
  }
  public JavaUiState getUiState() {
    return myUiState;
  }
  public void setUiState(JavaUiState uiState) {
    myUiState = uiState;
  }
  @NotNull
  public abstract Map<String, VariableDescription> getVariables(_FunctionTypes._return_P1_E0<? extends SNode, ? super String> createClassifierType);
  @Nullable
  public abstract SNode getStaticContextType(_FunctionTypes._return_P1_E0<? extends SNode, ? super String> createClassifierType);
  @Nullable
  public abstract SNode getThisClassifierType(_FunctionTypes._return_P1_E0<? extends SNode, ? super String> createClassifierType);
  public abstract boolean isVariableVisible(String variableName, SNode variableType);
  public abstract boolean isThisTypeValid(SNode thisType);
  public abstract boolean isStaticContextTypeValid(SNode staticContextType);
}
