blob: 9b5e54f344a39bf6492e9d832b24fe79a03181f6 [file] [log] [blame]
package org.eclipse.emf.henshin.interpreter.debug;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.model.IDebugTarget;
import org.eclipse.debug.core.model.IValue;
import org.eclipse.debug.core.model.IVariable;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.henshin.interpreter.matching.constraints.Variable;
public class HenshinDebugVariable extends HenshinDebugElement implements IVariable {
private String name;
private HenshinDebugValue value;
private Variable variable;
private final boolean isConstraintType;
private final boolean isConstraint;
/**
* for a variable with a primitive / human readable value
*/
public HenshinDebugVariable(IDebugTarget target, String name, String value, Variable variable) {
this(target, name, value, variable.typeConstraint.type.getName());
this.variable = variable;
}
public HenshinDebugVariable(IDebugTarget target, String name, String value, String declaredType) {
this(target, name, new DebugValueObject(target, null, declaredType, value, -1));
}
/**
* for a variable whose value contains child variables
*/
public HenshinDebugVariable(IDebugTarget target, String name, HenshinDebugValue value) {
super(target);
this.name = name;
this.value = value;
isConstraintType = "Constraint Type".equals(name);
isConstraint = "Constraint".equals(name);
}
public boolean isConstraint() {
return isConstraint;
}
public boolean isConstraintType() {
return isConstraintType;
}
public Variable getVariable() {
return variable;
}
@Override
public void setValue(String expression) throws DebugException {
this.value = new DebugValueEObject(getDebugTarget(), null, expression, (EObject) value, -1);
}
@Override
public void setValue(IValue value) throws DebugException {
setValue(value.getValueString());
}
@Override
public boolean supportsValueModification() {
return false;
}
@Override
public boolean verifyValue(String expression) throws DebugException {
return false;
}
@Override
public boolean verifyValue(IValue value) throws DebugException {
return false;
}
@Override
public IValue getValue() throws DebugException {
return value;
}
@Override
public String getName() throws DebugException {
return name;
}
@Override
public String getReferenceTypeName() throws DebugException {
// TODO: Return correct string
return value.toString();
}
@Override
public boolean hasValueChanged() throws DebugException {
// maybe add this in the future
return false;
}
@Override
public int hashCode() {
//return name.hashCode()+value.hashCode();
return super.hashCode();
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
HenshinDebugVariable other = (HenshinDebugVariable) obj;
return name.equals(other.name)
&& value.equals(other.value);
}
}