Merge branch 'release/2.19.5'

This commit is contained in:
2026-04-10 09:37:56 +02:00
40 changed files with 186 additions and 69 deletions

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<relativePath>../..</relativePath>
</parent>

View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<relativePath>../..</relativePath>
</parent>
<version>3.0.0-SNAPSHOT</version>

View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<relativePath>../..</relativePath>
</parent>
<version>1.1.0-SNAPSHOT</version>

View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<relativePath>../..</relativePath>
</parent>
<version>1.0.0-SNAPSHOT</version>

View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<relativePath>../..</relativePath>
</parent>
<version>1.0.0-SNAPSHOT</version>

View File

@@ -2,7 +2,7 @@
<feature
id="com.minres.scviewer.feature"
label="%featureName"
version="2.19.4"
version="2.19.5"
provider-name="%providerName">
<description>

View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<relativePath>../..</relativePath>
</parent>
</project>

View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<relativePath>../..</relativePath>
</parent>
<version>1.1.0-SNAPSHOT</version>

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<relativePath>../..</relativePath>
</parent>
<packaging>eclipse-plugin</packaging>

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<relativePath>../..</relativePath>
</parent>
<packaging>eclipse-plugin</packaging>

View File

@@ -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));
rowByTxId.remove(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++);

View File

@@ -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);

View File

@@ -105,7 +105,7 @@ class TxRelation implements ITxRelation {
TxStream fiber = loader.txStreams.get(fiberId);
fiber.loadStream();
tx = loader.getTransaction(txId);
return loader.txStreams.get(fiberId);
return fiber;
} else
return tx.getStream();
}
@@ -116,7 +116,7 @@ class TxRelation implements ITxRelation {
loader.txStreams.get(fiberId).loadStream();
tx = loader.getTransaction(txId);
}
return tx.getGenerator();
return tx!=null?tx.getGenerator():null;
}
@Override

View File

@@ -73,6 +73,7 @@ class TxStream extends AbstractTxStream {
}
public void loadStream() {
if(chunks.size()>0) return;
try {
List<byte[]> chunks = getChunks();
int blockid = 0;

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<relativePath>../..</relativePath>
</parent>
<packaging>eclipse-plugin</packaging>

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<relativePath>../..</relativePath>
</parent>
<packaging>eclipse-plugin</packaging>

View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<relativePath>../..</relativePath>
</parent>
<version>4.0.0-SNAPSHOT</version>

View File

@@ -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]);

View File

@@ -842,7 +842,7 @@ public class WaveformView implements IWaveformView {
public void setSelection(ISelection selection, boolean add, boolean addIfNeeded) {
boolean selectionChanged = false;
currentWaveformSelection.forEach(e -> e.selected = false);
currentWaveformSelection.forEach(e -> {if(e!=null) e.selected = false;});
if (selection instanceof IStructuredSelection) {
IStructuredSelection sel = (IStructuredSelection) selection;
if (sel.size() == 0) {
@@ -862,8 +862,12 @@ public class WaveformView implements IWaveformView {
if (trackEntry == null) {
trackEntry = getEntryFor(txSel);
if (trackEntry == null && addIfNeeded) {
trackEntry = new TrackEntry(txSel.getStream(), styleProvider);
streams.add(trackEntry);
IWaveform stream = txSel.getStream();
Optional<TrackEntry> te = streams.stream().filter(e -> stream.equals(e.waveform)).findFirst();
if (te.isEmpty()) { // add stream only if really needed
trackEntry = new TrackEntry(txSel.getStream(), styleProvider);
streams.add(trackEntry);
}
}
}
currentTxSelection = txSel;
@@ -885,7 +889,7 @@ public class WaveformView implements IWaveformView {
currentTxSelection = null;
currentWaveformSelection.clear();
}
currentWaveformSelection.forEach(e -> e.selected = true);
currentWaveformSelection.forEach(e -> {if(e!=null)e.selected = true;});
if (selectionChanged) {
currentWaveformSelection.forEach(e -> waveformCanvas.reveal(e.waveform));
waveformCanvas.setSelected(currentTxSelection);
@@ -1376,10 +1380,13 @@ public class WaveformView implements IWaveformView {
}
public TrackEntry getEntryFor(ITx source) {
Optional<TrackEntry> optGen = streams.stream().filter(e -> source.getGenerator().equals(e.waveform))
if(source.getGenerator()==null) return null;
Optional<TrackEntry> optGen = streams.stream()
.filter(e -> source.getGenerator().equals(e.waveform))
.findFirst();
if (optGen.isPresent())
return optGen.get();
if(source.getStream()==null) return null;
Optional<TrackEntry> optStr = streams.stream().filter(e -> source.getStream().equals(e.waveform)).findFirst();
if (optStr.isPresent())
return optStr.get();

View File

@@ -5,7 +5,7 @@
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<relativePath>../..</relativePath>
</parent>
<packaging>eclipse-plugin</packaging>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<relativePath>../..</relativePath>
</parent>
<packaging>eclipse-plugin</packaging>

View File

@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: SCViewer Help
Bundle-SymbolicName: com.minres.scviewer.e4.application.help;singleton:=true
Bundle-Version: 2.19.4
Bundle-Version: 2.19.5
Bundle-Vendor: MINRES Technologies GmbH
Automatic-Module-Name: com.minres.scviewer.e4.application.help
Bundle-RequiredExecutionEnvironment: JavaSE-17

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<relativePath>../..</relativePath>
</parent>
<packaging>eclipse-plugin</packaging>

View File

@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %Bundle-Name
Bundle-SymbolicName: com.minres.scviewer.e4.application;singleton:=true
Bundle-Version: 2.19.4
Bundle-Version: 2.19.5
Bundle-Vendor: %Bundle-Vendor
Require-Bundle: javax.inject;bundle-version="1.0.0",
org.eclipse.core.runtime;bundle-version="3.11.1",

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<relativePath>../..</relativePath>
</parent>
<packaging>eclipse-plugin</packaging>

View File

@@ -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();

View File

@@ -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())}
};

View File

@@ -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.
*

View File

@@ -17,7 +17,9 @@ Require-Bundle: com.minres.scviewer.database;bundle-version="1.0.0",
org.eclipse.swt,
org.eclipse.osgi,
org.eclipse.core.expressions;bundle-version="3.4.600",
org.eclipse.jface
org.eclipse.jface,
org.eclipse.ui.console,
org.eclipse.jdt.ui
Bundle-RequiredExecutionEnvironment: JavaSE-17
Bundle-ActivationPolicy: lazy
Import-Package: com.google.common.collect

View File

@@ -20,10 +20,11 @@
<editor
class="com.minres.scviewer.ui.TxEditorPart"
contributorClass="com.minres.scviewer.ui.TxEditorActionBarContributor"
extensions="txdb"
filenames="*.txdb,*.txlog,*.vcd,*.ftr"
default="true"
filenames="*.txlog,*.vcd,*.ftr,*.fst,*.txlog.gz,*.txdb"
icon="res/images/scviewer.png"
id="com.minres.scviewer.ui.TxEditorPart"
matchingStrategy="SCViewerMatchingStrategy"
name="Wave Viewer">
</editor>
</extension>
@@ -372,5 +373,14 @@
icon="res/images/cross.png">
</image>
</extension>
<extension
point="org.eclipse.ui.perspectives">
<perspective
class="com.minres.scviewer.ui.perspectives.WaveformPerspective"
icon="res/images/scviewer.png"
id="com.minres.scviewer.ui.perspectives.WaveformPerspective"
name="Waveform">
</perspective>
</extension>
</plugin>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<relativePath>../..</relativePath>
</parent>
<packaging>eclipse-plugin</packaging>

View File

@@ -0,0 +1,14 @@
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorMatchingStrategy;
import org.eclipse.ui.IEditorReference;
public class SCViewerMatchingStrategy implements IEditorMatchingStrategy {
@Override
public boolean matches(IEditorReference editorRef, IEditorInput input) {
return input.getName().endsWith(".ftr") || input.getName().endsWith(".fst")
|| input.getName().endsWith(".vcd") || input.getName().endsWith(".txlog")
|| input.getName().endsWith(".txlog.gz") || input.getName().endsWith(".txdb");
}
}

View File

@@ -0,0 +1,90 @@
package com.minres.scviewer.ui.perspectives;
import org.eclipse.ui.IFolderLayout;
import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;
import org.eclipse.ui.console.IConsoleConstants;
import org.eclipse.jdt.ui.JavaUI;
/**
* This class is meant to serve as an example for how various contributions
* are made to a perspective. Note that some of the extension point id's are
* referred to as API constants while others are hardcoded and may be subject
* to change.
*/
public class WaveformPerspective implements IPerspectiveFactory {
private IPageLayout factory;
public WaveformPerspective() {
super();
}
public void createInitialLayout(IPageLayout factory) {
this.factory = factory;
addViews();
addActionSets();
addNewWizardShortcuts();
addPerspectiveShortcuts();
addViewShortcuts();
}
private void addViews() {
// Creates the overall folder layout.
// Note that each new Folder uses a percentage of the remaining EditorArea.
IFolderLayout topLeft =
factory.createFolder(
"topLeft", //NON-NLS-1
IPageLayout.LEFT,
0.25f,
factory.getEditorArea());
topLeft.addView(IPageLayout.ID_PROJECT_EXPLORER);
IFolderLayout bottomLeft =
factory.createFolder(
"bottomLeft", //NON-NLS-1
IPageLayout.BOTTOM,
0.25f,
"topLeft");
bottomLeft.addView(IPageLayout.ID_OUTLINE);
IFolderLayout bottom =
factory.createFolder(
"bottomRight", //NON-NLS-1
IPageLayout.BOTTOM,
0.75f,
factory.getEditorArea());
bottom.addView(IPageLayout.ID_PROP_SHEET);
bottom.addPlaceholder(IConsoleConstants.ID_CONSOLE_VIEW);
}
private void addActionSets() {
factory.addActionSet(JavaUI.ID_ACTION_SET);
factory.addActionSet(JavaUI.ID_ELEMENT_CREATION_ACTION_SET);
factory.addActionSet(IPageLayout.ID_NAVIGATE_ACTION_SET); //NON-NLS-1
}
private void addPerspectiveShortcuts() {
factory.addPerspectiveShortcut("org.eclipse.team.ui.TeamSynchronizingPerspective"); //NON-NLS-1
factory.addPerspectiveShortcut("org.eclipse.ui.resourcePerspective"); //NON-NLS-1
}
private void addNewWizardShortcuts() {
factory.addNewWizardShortcut("org.eclipse.ui.wizards.new.folder");//NON-NLS-1
factory.addNewWizardShortcut("org.eclipse.ui.wizards.new.file");//NON-NLS-1
}
private void addViewShortcuts() {
factory.addShowViewShortcut("org.eclipse.ant.ui.views.AntView"); //NON-NLS-1
factory.addShowViewShortcut("org.eclipse.pde.ui.DependenciesView"); //NON-NLS-1
factory.addShowViewShortcut("org.eclipse.jdt.junit.ResultView"); //NON-NLS-1
factory.addShowViewShortcut("org.eclipse.team.ui.GenericHistoryView"); //NON-NLS-1
factory.addShowViewShortcut(IConsoleConstants.ID_CONSOLE_VIEW);
factory.addShowViewShortcut(JavaUI.ID_PACKAGES);
factory.addShowViewShortcut(IPageLayout.ID_PROJECT_EXPLORER);
factory.addShowViewShortcut(IPageLayout.ID_PROBLEM_VIEW);
factory.addShowViewShortcut(IPageLayout.ID_OUTLINE);
}
}

View File

@@ -26,23 +26,13 @@ public class TxDbTreeLabelProvider implements ILabelProvider {
private List<ILabelProviderListener> listeners = new ArrayList<ILabelProviderListener>();
private Image database;
private Image stream;
private Image signal;
private Image folder;
private Image wave;
private static Image database=TxEditorPlugin.createImage("database");
private static Image stream=TxEditorPlugin.createImage("stream");
private static Image signal=TxEditorPlugin.createImage("signal");
private static Image folder=TxEditorPlugin.createImage("folder");
private static Image wave=TxEditorPlugin.createImage("wave");
public TxDbTreeLabelProvider() {
super();
database=TxEditorPlugin.createImage("database");
stream=TxEditorPlugin.createImage("stream");
folder=TxEditorPlugin.createImage("folder");
signal=TxEditorPlugin.createImage("signal");
wave=TxEditorPlugin.createImage("wave");
}
@Override
public void addListener(ILabelProviderListener listener) {
listeners.add(listener);

View File

@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<packaging>pom</packaging>
<modules>
<module>releng/com.minres.scviewer.target</module>
@@ -71,7 +71,7 @@
<artifact>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.target</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
</artifact>
</target>
<executionEnvironment>

View File

@@ -6,11 +6,11 @@
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<relativePath>../..</relativePath>
</parent>
<artifactId>com.minres.scviewer.e4.product</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<packaging>eclipse-repository</packaging>
<groupId>com.minres.scviewer</groupId>
<build>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<?pde version="3.5"?>
<product name="SCViewer" uid="scviewer" id="com.minres.scviewer.e4.application.product" application="org.eclipse.e4.ui.workbench.swt.E4Application" version="2.19.4" useFeatures="true" includeLaunchers="true" autoIncludeRequirements="true">
<product name="SCViewer" uid="scviewer" id="com.minres.scviewer.e4.application.product" application="org.eclipse.e4.ui.workbench.swt.E4Application" version="2.19.5" useFeatures="true" includeLaunchers="true" autoIncludeRequirements="true">
<configIni use="default">
</configIni>
@@ -22,14 +22,6 @@
<macosx icon="icons/SCViewer.icns"/>
<win useIco="true">
<ico path="icons/SCViewer.ico"/>
<bmp
winSmallHigh="icons/SCViewer_16x16@32.bmp"
winSmallLow="icons/SCViewer_16x16@8.bmp"
winMediumHigh="icons/SCViewer_32x32@32.bmp"
winMediumLow="icons/SCViewer_32x32@8.bmp"
winLargeHigh="icons/SCViewer_48x48@32.bmp"
winLargeLow="icons/SCViewer_48x48@8.bmp"
winExtraLargeHigh="icons/SCViewer_256x256@32.bmp"/>
</win>
</launcher>

View File

@@ -12,7 +12,7 @@
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<relativePath>../..</relativePath>
</parent>

View File

@@ -7,7 +7,7 @@
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<relativePath>../..</relativePath>
</parent>
<build>

View File

@@ -6,7 +6,7 @@
<parent>
<groupId>com.minres.scviewer</groupId>
<artifactId>com.minres.scviewer.parent</artifactId>
<version>2.19.4</version>
<version>2.19.5</version>
<relativePath>../..</relativePath>
</parent>
<packaging>eclipse-test-plugin</packaging>