提交 2efc4987 编写于 作者: A Alexander Fedorov

#3259 replace variable with the most recent

上级 9bb25b4b
......@@ -27,4 +27,6 @@ public interface DBGVariable<T> {
DBGVariableType getType();
int getLineNumber();
}
......@@ -19,7 +19,9 @@
package org.jkiss.dbeaver.debug.core.model;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.debug.core.DebugException;
......@@ -28,6 +30,7 @@ import org.eclipse.debug.core.model.IStackFrame;
import org.eclipse.debug.core.model.IThread;
import org.eclipse.debug.core.model.IVariable;
import org.eclipse.osgi.util.NLS;
import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.debug.DBGException;
import org.jkiss.dbeaver.debug.DBGStackFrame;
import org.jkiss.dbeaver.debug.DBGVariable;
......@@ -38,6 +41,8 @@ public class DatabaseStackFrame extends DatabaseDebugElement implements IStackFr
private static final IRegisterGroup[] NO_REGISTER_GROUPS = new IRegisterGroup[0];
private static final IVariable[] NO_VARIABLES = new IVariable[0];
private static Log log = Log.getLog(DatabaseStackFrame.class);
private final List<DatabaseVariable> variables = new ArrayList<DatabaseVariable>();
private final DatabaseThread thread;
......@@ -154,8 +159,29 @@ public class DatabaseStackFrame extends DatabaseDebugElement implements IStackFr
protected void rebuildVariables(List<? extends DBGVariable<?>> dbgVariables) {
try {
int frameLN = dbgStackFrame.getLineNumber();
variables.clear();
Map<String, DBGVariable<?>> filtered = new LinkedHashMap<String, DBGVariable<?>>();
for (DBGVariable<?> dbgVariable : dbgVariables) {
String name = dbgVariable.getName();
DBGVariable<?> existing = filtered.get(name);
if (existing == null) {
filtered.put(name, dbgVariable);
} else {
int existingLN = existing.getLineNumber();
int currentLN = dbgVariable.getLineNumber();
int delta = currentLN - existingLN;
if (delta >= 0) {
filtered.put(name, dbgVariable);
} else {
String pattern = "Already have {0} and ignored {1} for frame at {2}";
String message = NLS.bind(pattern, new Object[]{existing, dbgVariable, frameLN});
log.error(message);;
}
}
}
for (DBGVariable<?> dbgVariable : filtered.values()) {
DatabaseVariable variable = new DatabaseVariable(getDatabaseDebugTarget(), dbgVariable);
variables.add(variable);
}
......
......@@ -534,7 +534,7 @@ public class PostgreDebugSession extends DBGBaseSession {
stmt.setInt(1, sessionId);
stmt.setString(2, var.getName());
stmt.setInt(3, var.getLinenumber());
stmt.setInt(3, var.getLineNumber());
stmt.setString(4, (String) value);
stmt.execute();
......
......@@ -28,7 +28,7 @@ public class PostgreDebugVariable implements DBGVariable<String> {
private final String varclass;
private final int linenumber;
private final int lineNumber;
private final boolean unique;
......@@ -63,7 +63,7 @@ public class PostgreDebugVariable implements DBGVariable<String> {
super();
this.name = name;
this.varclass = varclass;
this.linenumber = linenumber;
this.lineNumber = linenumber;
this.unique = unique;
this.constant = constant;
this.notnull = notnull;
......@@ -75,8 +75,9 @@ public class PostgreDebugVariable implements DBGVariable<String> {
return varclass;
}
public int getLinenumber() {
return linenumber;
@Override
public int getLineNumber() {
return lineNumber;
}
public boolean isUnique() {
......@@ -95,10 +96,11 @@ public class PostgreDebugVariable implements DBGVariable<String> {
return oid;
}
@SuppressWarnings("nls")
@Override
public String toString() {
return "PostgreDebugVariable [name=" + name + ", val=" + val + ", varclass=" + varclass + ", linenumber="
+ linenumber + ", unique=" + unique + ", constant=" + constant + ", notnull=" + notnull + ", oid=" + oid
return "PostgreDebugVariable [name=" + name + ", val=" + val + ", varclass=" + varclass + ", lineNumber="
+ lineNumber + ", unique=" + unique + ", constant=" + constant + ", notnull=" + notnull + ", oid=" + oid
+ "]";
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册