fixes various NPE related to selection while reloading database
This commit is contained in:
@@ -153,8 +153,11 @@ abstract class AbstractTxStream extends HierNode implements IWaveform {
|
|||||||
switch(evt.getKind()) {
|
switch(evt.getKind()) {
|
||||||
case END: //TODO: might throw NPE in concurrent execution
|
case END: //TODO: might throw NPE in concurrent execution
|
||||||
Long txId = txEvt.getTransaction().getId();
|
Long txId = txEvt.getTransaction().getId();
|
||||||
txEvt.setConcurrencyIndex(rowByTxId.get(txId));
|
Integer row = rowByTxId.get(txId);
|
||||||
rowByTxId.remove(txId);
|
if(row!=null) {
|
||||||
|
txEvt.setConcurrencyIndex(row);
|
||||||
|
rowByTxId.remove(txId);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case SINGLE:
|
case SINGLE:
|
||||||
for (; rowIdx < rowEndTime.size() && rowEndTime.get(rowIdx)>tx.getBeginTime(); rowIdx++);
|
for (; rowIdx < rowEndTime.size() && rowEndTime.get(rowIdx)>tx.getBeginTime(); rowIdx++);
|
||||||
|
|||||||
@@ -238,6 +238,8 @@ public class FtrDbLoader implements IWaveformDbLoader {
|
|||||||
genId = cborDecoder.readInt();
|
genId = cborDecoder.readInt();
|
||||||
long startTime = cborDecoder.readInt()*time_scale_factor;
|
long startTime = cborDecoder.readInt()*time_scale_factor;
|
||||||
long endTime = cborDecoder.readInt()*time_scale_factor;
|
long endTime = cborDecoder.readInt()*time_scale_factor;
|
||||||
|
if(endTime<startTime) // fix buggy recording, end time needs to be later or equal start time
|
||||||
|
endTime=startTime;
|
||||||
TxGenerator gen = txGenerators.get(genId);
|
TxGenerator gen = txGenerators.get(genId);
|
||||||
TxStream stream = gen.stream;
|
TxStream stream = gen.stream;
|
||||||
FtrTx scvTx = new FtrTx(txId, stream.getId(), genId, startTime, endTime, blockId, blockOffset);
|
FtrTx scvTx = new FtrTx(txId, stream.getId(), genId, startTime, endTime, blockId, blockOffset);
|
||||||
|
|||||||
@@ -124,7 +124,8 @@ public class StreamPainter extends TrackPainter{
|
|||||||
|
|
||||||
protected void drawTx(Projection proj, Rectangle area, ITx tx, int concurrencyIndex, boolean highlighted ) {
|
protected void drawTx(Projection proj, Rectangle area, ITx tx, int concurrencyIndex, boolean highlighted ) {
|
||||||
// compute colors
|
// compute colors
|
||||||
Color[] transColor = waveCanvas.styleProvider.computeColor( tx.getGenerator().getName());
|
IWaveform generator = tx.getGenerator();
|
||||||
|
Color[] transColor = waveCanvas.styleProvider.computeColor( generator!=null?generator.getName():"unknown");
|
||||||
|
|
||||||
proj.setBackground(transColor[highlighted?1:0]);
|
proj.setBackground(transColor[highlighted?1:0]);
|
||||||
|
|
||||||
|
|||||||
@@ -653,7 +653,9 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
|
|||||||
public void reloadDatabase() {
|
public void reloadDatabase() {
|
||||||
Map<String, String> state = new HashMap<>();
|
Map<String, String> state = new HashMap<>();
|
||||||
saveWaveformViewerState(state);
|
saveWaveformViewerState(state);
|
||||||
|
setSelection(null);
|
||||||
waveformPane.getStreamList().clear();
|
waveformPane.getStreamList().clear();
|
||||||
|
waveformPane.update();
|
||||||
if(database.isLoaded())
|
if(database.isLoaded())
|
||||||
database.close();
|
database.close();
|
||||||
database = dbFactory.getDatabase();
|
database = dbFactory.getDatabase();
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import java.util.Vector;
|
|||||||
import org.eclipse.jface.viewers.ITreeContentProvider;
|
import org.eclipse.jface.viewers.ITreeContentProvider;
|
||||||
import org.eclipse.jface.viewers.Viewer;
|
import org.eclipse.jface.viewers.Viewer;
|
||||||
|
|
||||||
|
import com.minres.scviewer.database.IWaveform;
|
||||||
import com.minres.scviewer.database.tx.ITx;
|
import com.minres.scviewer.database.tx.ITx;
|
||||||
import com.minres.scviewer.database.tx.ITxRelation;
|
import com.minres.scviewer.database.tx.ITxRelation;
|
||||||
import com.minres.scviewer.e4.application.Messages;
|
import com.minres.scviewer.e4.application.Messages;
|
||||||
@@ -51,9 +52,11 @@ public abstract class AbstractTransactionTreeContentProvider implements ITreeCon
|
|||||||
TransactionTreeNode node=(TransactionTreeNode) element;
|
TransactionTreeNode node=(TransactionTreeNode) element;
|
||||||
switch(node.type) {
|
switch(node.type) {
|
||||||
case PROPS:
|
case PROPS:
|
||||||
|
IWaveform stream = node.element.getStream();
|
||||||
|
IWaveform generator = node.element.getGenerator();
|
||||||
return new Object[][]{
|
return new Object[][]{
|
||||||
{Messages.TransactionDetails_1, Messages.TransactionDetails_16, node.element.getStream().getFullName()},
|
{Messages.TransactionDetails_1, Messages.TransactionDetails_16, stream!=null?stream.getFullName():"[unknown]"},
|
||||||
{Messages.TransactionDetails_2, Messages.TransactionDetails_16, node.element.getGenerator().getName()},
|
{Messages.TransactionDetails_2, Messages.TransactionDetails_16, generator!=null?generator.getName():"[unknown]"},
|
||||||
{Messages.TransactionDetails_19, Messages.TransactionDetails_20, waveformViewerPart.getScaledTime(node.element.getBeginTime())},
|
{Messages.TransactionDetails_19, Messages.TransactionDetails_20, waveformViewerPart.getScaledTime(node.element.getBeginTime())},
|
||||||
{Messages.TransactionDetails_21, Messages.TransactionDetails_20, waveformViewerPart.getScaledTime(node.element.getEndTime())}
|
{Messages.TransactionDetails_21, Messages.TransactionDetails_20, waveformViewerPart.getScaledTime(node.element.getEndTime())}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -16,12 +16,12 @@ import com.minres.scviewer.e4.application.Messages;
|
|||||||
public class TransactionTreeNode implements Comparable<TransactionTreeNode>{
|
public class TransactionTreeNode implements Comparable<TransactionTreeNode>{
|
||||||
|
|
||||||
/** The type. */
|
/** The type. */
|
||||||
public TransactionTreeNodeType type;
|
public final TransactionTreeNodeType type;
|
||||||
|
|
||||||
/** The element. */
|
/** The element. */
|
||||||
public ITx element;
|
public final ITx element;
|
||||||
|
|
||||||
private String hier_path;
|
private final String hier_path;
|
||||||
/**
|
/**
|
||||||
* Instantiates a new tree node.
|
* Instantiates a new tree node.
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user