Commit 6af014cb authored by Sebastian Pretscher's avatar Sebastian Pretscher

Merge branch 'master' of git@github.com:jroith/cup-eclipse.git

parents 6257eb01 2f50ba33
......@@ -57,7 +57,7 @@ public class GetDebuggerMappingVisitor extends Visitor<Object>
if (range != null) {
for (int line : lines) {
if (line >= node.getBegin().getLine() &&
line >= node.getEnd().getLine())
line <= node.getEnd().getLine())
{
int lineOffset = line - node.getBegin().getLine();
mappings.add(new Mapping(node.getDebugId(), lineOffset));
......
......@@ -94,6 +94,8 @@ public final class PluginUtility {
return;
}
/**
* Find the generated file that matches our cup file.
* @param cupFile The original cup file.
......@@ -134,4 +136,4 @@ public final class PluginUtility {
}
\ No newline at end of file
}
......@@ -11,6 +11,7 @@ import java.util.Set;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
......@@ -18,6 +19,7 @@ import org.eclipse.debug.core.model.IBreakpoint;
import org.eclipse.jdt.debug.core.IJavaLineBreakpoint;
import org.eclipse.jdt.debug.core.JDIDebugModel;
import de.in.tum.www2.cup.analysis.GetDebuggerMappingVisitor.Mapping;
import de.tum.in.www2.cupplugin.PluginUtility;
public class BreakpointMapper {
......@@ -40,6 +42,11 @@ public class BreakpointMapper {
protected void addRemoteBreakpoint(CupLineBreakpoint origin) {
IJavaLineBreakpoint remote = null;
IResource originResource = origin.getMarker().getResource();
if(originResource == null){
return;
}
IFile resource = PluginUtility.findGenerated(((IFile) origin
.getResource()));
if(resource == null){
......@@ -63,20 +70,23 @@ public class BreakpointMapper {
if(originLineNumber == -1){
return;
}
debugIds.add(originLineNumber);
Mapping debugId = Debugger.getInstance(originResource).getDebugId(originLineNumber);
if(debugId == null){
return;
}
debugIds.add(debugId.getDebugId());
int remoteLineNumber = lineMatcher.debuggerFindCase(debugIds).get(0);
int remoteLineNumber = lineMatcher.debuggerFindCase(debugIds).get(0) + debugId.getLineOffsetFromId();
if(remoteLineNumber == -1){
return;
}
//remoteLineNumber = 5;//TODO nur zum testen
attributes.put(IBreakpoint.PERSISTED, false);
if (resource != null) {
try {
remote = JDIDebugModel.createLineBreakpoint(resource,
Debugger.getGeneratedTargetClass(origin), remoteLineNumber, -1, -1, 0,
Debugger.getInstance(originResource).getGeneratedTargetClass(origin), remoteLineNumber, -1, -1, 0,
true, attributes);
remote.setEnabled(true);
......
......@@ -11,18 +11,21 @@ import org.eclipse.ui.IEditorInput;
import de.tum.in.www2.cupplugin.editors.CupTextEditor;
import de.tum.in.www2.cupplugin.model.Model;
import de.in.tum.www2.cup.analysis.FindNextCodeBlockLineVisitor;
import de.in.tum.www2.cup.analysis.GetDebuggerMappingVisitor;
import de.in.tum.www2.cup.analysis.GetDebuggerMappingVisitor.Mapping;
import de.in.tum.www2.cup.ast.ParserResult;
public class Debugger {
public class Debugger {
static final String DEBUG_ID = "de.tum.www2.cupplugin.debug.Debugger";
// Static reference to the controller instance per document
static HashMap<CupTextEditor, Debugger> instances = new HashMap<CupTextEditor, Debugger>();
static HashMap<IResource, Debugger> delayedInstances = new HashMap<IResource, Debugger>();
private static final BreakpointMapper breakpointMapper = new BreakpointMapper();
private static final String DEFAULT_CLASS = "Test";//TODO: auf Parser umstellen
private static final BreakpointMapper breakpointMapper = new BreakpointMapper();
private static final String DEFAULT_CLASS = "Test";// TODO: auf Parser
// umstellen
/**
* Add Debug hooks to an editor
*
......@@ -70,8 +73,8 @@ public class Debugger {
return instances.get(editor);
}
}
public static BreakpointMapper getBreakpointMapper(){
public static BreakpointMapper getBreakpointMapper() {
return breakpointMapper;
}
......@@ -116,12 +119,13 @@ public class Debugger {
return DefaultBreakPointManager;
}
/**
* Get the next useful location for a breakpointmarker
* @param line the line, the action was triggered on
* @return the next useful line
*/
/**
* Get the next useful location for a breakpointmarker
*
* @param line
* the line, the action was triggered on
* @return the next useful line
*/
public int getNextCodeBlockForLineBreakpoint(int line) {
Model m = Model.getInstanceForDocument(myEditor.getDocumentProvider()
......@@ -136,15 +140,50 @@ public class Debugger {
return v.getResult();
}
/**
* The java class in which a remote breakpoint will be set. The Java debugger needs that information to break correctly.
* example: Parser
* Parser$NestedSubClass
* @param breakpoint the breakpoint that asks
* @return the class name
*/
public static String getGeneratedTargetClass(CupLineBreakpoint breakpoint){
/**
* The java class in which a remote breakpoint will be set. The Java
* debugger needs that information to break correctly. example: Parser
* Parser$NestedSubClass
*
* @param breakpoint
* the breakpoint that asks
* @return the class name
*/
public String getGeneratedTargetClass(CupLineBreakpoint breakpoint) {
Model m = Model.getInstanceForDocument(myEditor.getDocumentProvider()
.getDocument(myEditor.getEditorInput()));
try {
String rname = m.getAstModel().className.getName().name;
if (!rname.trim().equals("")) {
return rname;
}
} catch (NullPointerException e) {
return DEFAULT_CLASS;
}
return DEFAULT_CLASS;
}
public Mapping getDebugId(int lineNumber) {
Model m = Model.getInstanceForDocument(myEditor.getDocumentProvider()
.getDocument(myEditor.getEditorInput()));
ParserResult astModel = m.getAstModel();
if (astModel == null) {
return null;
}
// create Visitor
int lines[] = {lineNumber};
GetDebuggerMappingVisitor v = new GetDebuggerMappingVisitor(lines);
astModel.accept(v, null);
if(v.getMappings().size() < 1){
return null;
}
return v.getMappings().get(0);
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment