Skip to content

Commit 1c3f985

Browse files
committed
Add rebuild trigger policy indicator to explorer toolbar
Adds a visual indicator in the Bndtools Explorer toolbar displaying the current rebuild trigger policy. The indicator updates when preferences change and opens the build preferences page when clicked. Also reorders and improves the rebuild policy combo box in preferences: - Reorders items to: Default, Optimized (API-based), Always - Updates labels and tooltips for better clarity - Adjusts selection indices to match new order This makes the rebuild trigger policy setting more discoverable and easier to understand. Signed-off-by: Christoph Rueger <chrisrueger@gmail.com>
1 parent 2c4b2af commit 1c3f985

3 files changed

Lines changed: 60 additions & 8 deletions

File tree

bndtools.core/src/bndtools/explorer/BndtoolsExplorer.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,9 @@ public void linkActivated(HyperlinkEvent e) {
242242
toolBarManager.add(HelpButtons.HELP_BTN_BNDTOOLS_EXPLORER);
243243
toolBarManager.update(true);
244244

245+
// Add rebuild trigger policy indicator
246+
addRebuildTriggerPolicyIndicator(toolBarManager);
247+
245248
return header;
246249
}
247250

@@ -472,6 +475,54 @@ public void run() {
472475
return pin;
473476
}
474477

478+
private void addRebuildTriggerPolicyIndicator(ToolBarManager toolBarManager) {
479+
// Create a custom action that displays the current rebuild trigger
480+
// policy
481+
Action rebuildPolicyAction = new Action("Rebuild Trigger Policy") {
482+
@Override
483+
public void run() {
484+
// Optional: Open preferences or show a menu
485+
PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(null,
486+
BndPreferencePage.PAGE_ID_BUILD, new String[] {}, null);
487+
dialog.open();
488+
}
489+
};
490+
491+
// Update the action based on preferences
492+
Runnable updatePolicyIndicator = () -> {
493+
String policy = preferences.getRebuildTriggerPolicy();
494+
boolean isDefault = preferences.isRebuildTriggerPolicyDefault();
495+
496+
if (isDefault) {
497+
rebuildPolicyAction.setText("Rebuild: Default");
498+
rebuildPolicyAction
499+
.setToolTipText("Rebuild Trigger Policy: Using rebuild trigger policy from build.bnd");
500+
} else if ("api".equals(policy)) {
501+
rebuildPolicyAction.setText("Rebuild: Optimized");
502+
rebuildPolicyAction.setToolTipText(
503+
"Rebuild Trigger Policy: API-based rebuild optimization enabled - non-API changes just rebuild the current project and won't trigger cascades");
504+
} else if ("always".equals(policy)) {
505+
rebuildPolicyAction.setText("Rebuild: Always");
506+
rebuildPolicyAction.setToolTipText("Rebuild Trigger Policy: All changes trigger downstream rebuilds");
507+
} else {
508+
rebuildPolicyAction.setText("Rebuild: Unknown");
509+
rebuildPolicyAction.setImageDescriptor(Icons.desc("errors"));
510+
}
511+
toolBarManager.update(true);
512+
};
513+
514+
// Update on preference changes
515+
closeables.add(preferences.onString("rebuildTriggerPolicy", (value) -> {
516+
updatePolicyIndicator.run();
517+
}));
518+
519+
// Initial update
520+
updatePolicyIndicator.run();
521+
522+
// Add to toolbar
523+
toolBarManager.add(rebuildPolicyAction);
524+
}
525+
475526
private void fixupRefactoringPasteAction(FilterPanelPart filterPart) {
476527
IActionBars actionBars = getViewSite().getActionBars();
477528
IAction originalPaste = actionBars.getGlobalActionHandler(ActionFactory.PASTE.getId());

bndtools.core/src/bndtools/preferences/ui/BndBuildPreferencePage.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,23 +54,23 @@ protected Control createContents(Composite parent) {
5454
Label lblRebuildPolicy = new Label(composite, SWT.NONE);
5555
lblRebuildPolicy.setText("Rebuild Trigger Policy:");
5656
cmbRebuildPolicy = new Combo(composite, SWT.READ_ONLY);
57-
cmbRebuildPolicy.setItems("Default (use build.bnd setting)", "Always rebuild",
58-
"API-based (skip if API unchanged)");
57+
cmbRebuildPolicy.setItems("Default (use build.bnd setting)", "Optimized (skip if API unchanged)",
58+
"Always rebuild");
5959
cmbRebuildPolicy.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
6060
cmbRebuildPolicy.setToolTipText(
6161
"'Default' uses the value of '-rebuildtriggerpolicy' from build.bnd (or 'always' if not set). "
6262
+ "'Always rebuild' triggers a rebuild on every change. "
63-
+ "'API-based' skips rebuilds when only non-API changes are detected. "
64-
+ "Changes take effect on the next build.");
63+
+ "'Optimized' (API-Based) builds just the current project and skips rebuild cascades when only non-API changes are detected. "
64+
+ "Changes require a workspace refresh and take effect on the next build.");
6565
lblRebuildPolicy.setToolTipText(cmbRebuildPolicy.getToolTipText());
6666

6767
// Load Data
6868
cmbBuildLogging.select(buildLogging);
6969
String currentPolicy = prefs.getRebuildTriggerPolicy();
7070
if (Constants.REBUILDTRIGGERPOLICY_API.equals(currentPolicy)) {
71-
cmbRebuildPolicy.select(2);
72-
} else if (Constants.REBUILDTRIGGERPOLICY_ALWAYS.equals(currentPolicy)) {
7371
cmbRebuildPolicy.select(1);
72+
} else if (Constants.REBUILDTRIGGERPOLICY_ALWAYS.equals(currentPolicy)) {
73+
cmbRebuildPolicy.select(2);
7474
} else {
7575
cmbRebuildPolicy.select(0); // Default
7676
}
@@ -92,9 +92,9 @@ public boolean performOk() {
9292
prefs.setParallel(parallel.getSelection());
9393
String policy;
9494
int idx = cmbRebuildPolicy.getSelectionIndex();
95-
if (idx == 2) {
95+
if (idx == 1) {
9696
policy = Constants.REBUILDTRIGGERPOLICY_API;
97-
} else if (idx == 1) {
97+
} else if (idx == 2) {
9898
policy = Constants.REBUILDTRIGGERPOLICY_ALWAYS;
9999
} else {
100100
policy = ""; // Default: do not override build.bnd

bndtools.core/src/bndtools/preferences/ui/BndPreferencePage.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public class BndPreferencePage extends PreferencePage implements IWorkbenchPrefe
2424
public BndPreferencePage() {}
2525

2626
public static final String PAGE_ID = "bndtools.prefPages.basic";
27+
public static final String PAGE_ID_BUILD = "bndtools.prefPages.build";
2728

2829
private boolean noCheckCnf = false;
2930
private boolean warnExistingLaunch = true;

0 commit comments

Comments
 (0)