blob: 1656336aef47c3e6232f41e625fd4a251b41e4a5 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014, 2018 Willink Transformations and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* R.Dvorak and others - QVTo debugger framework
* E.D.Willink - revised API for OCL debugger framework
*******************************************************************************/
package org.eclipse.ocl.examples.debug.vm.data;
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
public class VMStackFrameData implements Serializable
{
private static final long serialVersionUID = -1055712783030253722L;
private static class Loc implements VMLocationData
{
private static final long serialVersionUID = 300982114845658039L;
private final @NonNull VMStackFrameData frame;
private Loc(@NonNull VMStackFrameData frame) {
this.frame = frame;
}
public int getCharEnd() {
return frame.charEnd;
}
public int getCharStart() {
return frame.charStart;
}
public int getLineNum() {
return frame.lineNum;
}
public @NonNull String getURI() {
return frame.uri;
}
public @NonNull String getModule() {
return frame.module;
}
public @Nullable String getElementSignature() {
return frame.elementSignature;
}
}
public final long id;
private final @NonNull String uri;
private final int lineNum;
private final int charStart;
private final int charEnd;
public final @NonNull String module;
public final @Nullable String elementSignature;
public final @NonNull VMVariableData @NonNull [] visibleVariables;
private transient VMLocationData location;
public VMStackFrameData(long id, @NonNull String uri, @NonNull String module, @Nullable String elementSignature, int line, int startPosition, int endPosition, @NonNull VMVariableData @NonNull [] vars) {
if (/*vars.length == 0 ||*/ Arrays.asList(vars).contains(null)) {
throw new IllegalArgumentException();
}
this.id = id;
this.uri = uri;
this.module = module;
this.elementSignature = elementSignature;
this.visibleVariables = vars;
this.lineNum = line;
this.charStart = startPosition;
this.charEnd = endPosition == startPosition ? endPosition + 1 : endPosition; // FIXME BUG 468878
}
public synchronized @NonNull VMLocationData getLocation() {
VMLocationData location2 = location;
if (location2 == null) {
location = location2 = new Loc(this);
}
return location2;
}
@SuppressWarnings("null")
public @NonNull List<VMVariableData> getVisibleVariables() {
return Arrays.asList(visibleVariables);
}
@Override
public String toString() {
StringBuilder s = new StringBuilder();
s.append(getClass().getSimpleName());
s.append("(").append(id);
s.append(", ").append(uri);
s.append(":").append(module);
s.append(":").append(lineNum);
s.append(":").append(charStart);
s.append(", ").append(elementSignature);
VMVariableData[] visibleVariables2 = visibleVariables;
if (visibleVariables2 != null) {
s.append(", {");
for (int i = 0; i < visibleVariables2.length; i++) {
if (i > 0) {
s.append(",");
}
s.append("\n\t\t");
s.append(visibleVariables2[i]);
}
s.append("}");
}
s.append(")");
return s.toString();
}
}