package org.jetbrains.debugger.values;

import com.intellij.openapi.util.AsyncResult;
import com.intellij.util.ThreeState;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.debugger.Scope;

public interface FunctionValue extends ObjectValue {
  /**
   * You must invoke {@link #resolve} to use any function value methods
   */
  @NotNull
  AsyncResult<FunctionValue> resolve();

  /**
   * Returns position of opening parenthesis of function arguments. Position is absolute
   * within resource (not relative to script start position).
   *
   * @return position or null if position is not available
   */
  int getOpenParenLine();

  int getOpenParenColumn();

  @Nullable
  Scope[] getScopes();

  /**
   * Method could be called (it is normal and expected) for unresolved function.
   * It must return quickly. Return {@link com.intellij.util.ThreeState#UNSURE} otherwise.
   */
  @NotNull
  ThreeState hasScopes();
}
