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()) {
|
||||
case END: //TODO: might throw NPE in concurrent execution
|
||||
Long txId = txEvt.getTransaction().getId();
|
||||
txEvt.setConcurrencyIndex(rowByTxId.get(txId));
|
||||
Integer row = rowByTxId.get(txId);
|
||||
if(row!=null) {
|
||||
txEvt.setConcurrencyIndex(row);
|
||||
rowByTxId.remove(txId);
|
||||
}
|
||||
break;
|
||||
case SINGLE:
|
||||
for (; rowIdx < rowEndTime.size() && rowEndTime.get(rowIdx)>tx.getBeginTime(); rowIdx++);
|
||||
|
||||
@@ -238,6 +238,8 @@ public class FtrDbLoader implements IWaveformDbLoader {
|
||||
genId = cborDecoder.readInt();
|
||||
long startTime = 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);
|
||||
TxStream stream = gen.stream;
|
||||
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 ) {
|
||||
// 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]);
|
||||
|
||||
|
||||
@@ -653,7 +653,9 @@ public class WaveformViewer implements IFileChangeListener, IPreferenceChangeLis
|
||||
public void reloadDatabase() {
|
||||
Map<String, String> state = new HashMap<>();
|
||||
saveWaveformViewerState(state);
|
||||
setSelection(null);
|
||||
waveformPane.getStreamList().clear();
|
||||
waveformPane.update();
|
||||
if(database.isLoaded())
|
||||
database.close();
|
||||
database = dbFactory.getDatabase();
|
||||
|
||||
@@ -5,6 +5,7 @@ import java.util.Vector;
|
||||
import org.eclipse.jface.viewers.ITreeContentProvider;
|
||||
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.ITxRelation;
|
||||
import com.minres.scviewer.e4.application.Messages;
|
||||
@@ -51,9 +52,11 @@ public abstract class AbstractTransactionTreeContentProvider implements ITreeCon
|
||||
TransactionTreeNode node=(TransactionTreeNode) element;
|
||||
switch(node.type) {
|
||||
case PROPS:
|
||||
IWaveform stream = node.element.getStream();
|
||||
IWaveform generator = node.element.getGenerator();
|
||||
return new Object[][]{
|
||||
{Messages.TransactionDetails_1, Messages.TransactionDetails_16, node.element.getStream().getFullName()},
|
||||
{Messages.TransactionDetails_2, Messages.TransactionDetails_16, node.element.getGenerator().getName()},
|
||||
{Messages.TransactionDetails_1, Messages.TransactionDetails_16, stream!=null?stream.getFullName():"[unknown]"},
|
||||
{Messages.TransactionDetails_2, Messages.TransactionDetails_16, generator!=null?generator.getName():"[unknown]"},
|
||||
{Messages.TransactionDetails_19, Messages.TransactionDetails_20, waveformViewerPart.getScaledTime(node.element.getBeginTime())},
|
||||
{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>{
|
||||
|
||||
/** The type. */
|
||||
public TransactionTreeNodeType type;
|
||||
public final TransactionTreeNodeType type;
|
||||
|
||||
/** The element. */
|
||||
public ITx element;
|
||||
public final ITx element;
|
||||
|
||||
private String hier_path;
|
||||
private final String hier_path;
|
||||
/**
|
||||
* Instantiates a new tree node.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user