/*******************************************************************************
* Copyright (c) 2012-2013 CWI
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*
* * Michael Steindorfer - Michael.Steindorfer@cwi.nl - CWI
*******************************************************************************/
package org.rascalmpl.debug;
import org.rascalmpl.value.ISourceLocation;
/**
* Factory to support the creation of {@link IDebugMessage} instances.
*/
public class DebugMessageFactory {
/*
* Interpreter requests.
*/
public static IDebugMessage requestSuspension() {
return new DebugMessage(IDebugMessage.Action.SUSPEND, IDebugMessage.Subject.INTERPRETER, IDebugMessage.Detail.CLIENT_REQUEST);
}
public static IDebugMessage requestResumption() {
return new DebugMessage(IDebugMessage.Action.RESUME, IDebugMessage.Subject.INTERPRETER, IDebugMessage.Detail.CLIENT_REQUEST);
}
public static IDebugMessage requestStepInto() {
return new DebugMessage(IDebugMessage.Action.RESUME, IDebugMessage.Subject.INTERPRETER, IDebugMessage.Detail.STEP_INTO);
}
public static IDebugMessage requestStepOver() {
return new DebugMessage(IDebugMessage.Action.RESUME, IDebugMessage.Subject.INTERPRETER, IDebugMessage.Detail.STEP_OVER);
}
public static IDebugMessage requestTermination() {
return new DebugMessage(IDebugMessage.Action.TERMINATE, IDebugMessage.Subject.INTERPRETER, IDebugMessage.Detail.UNKNOWN);
}
/*
* Breakpoint requests.
*/
public static IDebugMessage requestSetBreakpoint(ISourceLocation location) {
return new DebugMessage(IDebugMessage.Action.SET, IDebugMessage.Subject.BREAKPOINT, IDebugMessage.Detail.UNKNOWN, location);
}
public static IDebugMessage requestDeleteBreakpoint(ISourceLocation location) {
return new DebugMessage(IDebugMessage.Action.DELETE, IDebugMessage.Subject.BREAKPOINT, IDebugMessage.Detail.UNKNOWN, location);
}
/*
* Simple message implementation.
*/
private static class DebugMessage implements IDebugMessage {
private final Action action;
private final Subject subject;
private final Detail detail;
private final Object payload;
public DebugMessage(Action action, Subject subject, Detail detail) {
this(action, subject, detail, null);
}
public DebugMessage(Action action, Subject subject, Detail detail, Object payload) {
this.action = action;
this.subject = subject;
this.detail = detail;
this.payload = payload;
}
@Override
public Action getAction() {
return action;
}
@Override
public Subject getSubject() {
return subject;
}
@Override
public Detail getDetail() {
return detail;
}
@Override
public Object getPayload() {
return payload;
}
}
}