package jetbrains.mps.debugger.java.runtime;
/*Generated by MPS */
import jetbrains.mps.debug.api.source.NodePositionProvider;
import com.intellij.openapi.components.ProjectComponent;
import jetbrains.mps.debug.api.source.PositionProvider;
import jetbrains.mps.project.MPSProject;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.mps.openapi.model.SNodeReference;
import org.jetbrains.annotations.NotNull;
import jetbrains.mps.debug.api.programState.ILocation;
import jetbrains.mps.debug.api.AbstractDebugSession;
import java.util.Iterator;
import jetbrains.mps.textgen.trace.DebugInfo;
import jetbrains.mps.util.NameUtil;
import jetbrains.mps.textgen.trace.BaseLanguageNodeLookup;
import jetbrains.mps.debug.api.source.NodeSourcePosition;
import org.jetbrains.annotations.NonNls;
import jetbrains.mps.debugger.java.runtime.state.DebugSession;
public class JavaNodePositionProvider extends NodePositionProvider implements ProjectComponent {
private final PositionProvider myProvider;
public JavaNodePositionProvider(PositionProvider provider, MPSProject mpsProject) {
super(mpsProject);
myProvider = provider;
}
@Nullable
@Override
protected SNodeReference getSNodePointer(@NotNull ILocation location, @NotNull AbstractDebugSession session) {
for (Iterator<DebugInfo> it = session.getTraceProvider().debugInfo(NameUtil.namespaceFromLongName(location.getUnitName())).iterator(); it.hasNext();) {
SNodeReference n = new BaseLanguageNodeLookup(it.next()).getNodeAt(location.getFileName(), location.getLineNumber());
if (n != null) {
return n;
}
}
return null;
}
@Override
public void projectOpened() {
}
@Override
public void projectClosed() {
}
@Override
public void initComponent() {
myProvider.addProvider(this, NodeSourcePosition.class.getName());
}
@Override
public void disposeComponent() {
myProvider.removeProvider(this);
}
@NonNls
@NotNull
@Override
public String getComponentName() {
return "Java Node Position Provider";
}
@Override
public boolean accepts(AbstractDebugSession session) {
return super.accepts(session) && session instanceof DebugSession;
}
}