Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 51 additions & 7 deletions bndtools.core/src/bndtools/editor/BndSourceEffectivePage.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
import static aQute.bnd.osgi.Constants.MERGED_HEADERS;
import static bndtools.editor.completion.BndHover.lookupSyntax;
import static bndtools.editor.completion.BndHover.syntaxHoverText;
import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.mapping;
import static java.util.stream.Collectors.toCollection;

import java.io.File;
import java.net.URI;
Expand Down Expand Up @@ -315,7 +318,15 @@ public void controlMoved(ControlEvent arg0) {}

private void open(Object element) {
if (element instanceof PropertyRow prop) {
String fpath = prop.provenance();
List<String> fpaths = prop.provenances();

if (fpaths == null || fpaths.isEmpty()) {
return;
}

// we can only open one path
String fpath = fpaths.get(0);

if (fpath == null || fpath.isBlank()) {
return;
}
Expand Down Expand Up @@ -493,7 +504,13 @@ private int[] createColumns(TableViewer tableViewer) {
return syntax != null ? syntax.autoHelpUrl() : null;
}), //
new ColSpec("Value", -250, PropertyRow::value, PropertyRow::tooltip, null), //
new ColSpec("Provenance", 150, (pr -> relativizeProvenancePath(pr.provenance())), null, null), //
new ColSpec("Provenance", 150, (pr -> {
return pr.provenances()
.stream()
.map(prov -> relativizeProvenancePath(prov))
.collect(Collectors.joining(","));
}),
null, null), //
new ColSpec("Errors", 150, (pr -> {
List<String> errors = pr.errors();
return errors.isEmpty() ? "" : errors.toString();
Expand Down Expand Up @@ -681,6 +698,24 @@ Object[] getTableData() {
})
.collect(Collectors.toCollection(LinkedHashSet::new));

Map<String, List<String>> stemProvenances = visible.stream()
.collect(Collectors.groupingBy(k -> {
String stem = BndEditModel.getStem(k.key());
if (isInstruction(stem) || MERGED_HEADERS.contains(stem)) {
return stem;
}
return k.key();
}, mapping(k -> {
String prov = k.getProvenance()
.orElse(null);
return prov;
}, //
// remove duplicates
collectingAndThen(toCollection(LinkedHashSet::new),
// convert back to List
ArrayList::new
))));

return stems.stream()
.map(stem -> {
Processor p = getProperties();
Expand All @@ -690,8 +725,10 @@ Object[] getTableData() {
.toString()
: p.get(stem);

List<String> provList = stemProvenances.get(stem);

String tooltip = BndEditModel.format(stem, value);
return new PropertyRow(stem, value, null, tooltip,
return new PropertyRow(stem, value, provList, tooltip,
p.getErrors());
})
.toArray();
Expand All @@ -704,7 +741,7 @@ Object[] getTableData() {
.orElse(null);
Processor p = getProperties();
String tooltip = BndEditModel.format(k.key(), expandedOrRawValue(k, p));
return new PropertyRow(k.key(), expandedOrRawValue(k, p), provenance, tooltip,
return new PropertyRow(k.key(), expandedOrRawValue(k, p), List.of(provenance), tooltip,
p.getErrors());
})
.toArray();
Expand Down Expand Up @@ -756,9 +793,15 @@ public boolean useNativeToolTip(Object object) {

@Override
public String getToolTipText(Object element) {
if (spec.tooltip != null && element instanceof PropertyRow pkey) {
return spec.tooltip.apply(pkey);
if ("Provenance".equals(spec.title) && element instanceof PropertyRow prow) {
return prow.provenances()
.stream()
.collect(Collectors.joining("\n"));
}
if (spec.tooltip != null && element instanceof PropertyRow prow) {
return spec.tooltip.apply(prow);
}

return null;
}

Expand All @@ -775,5 +818,6 @@ public TooltipInput getTooltipInfo(Object element) {
/**
* represents a row in the Effective view table.
*/
record PropertyRow(String title, String value, String provenance, String tooltip, List<String> errors) {}
record PropertyRow(String title, String value, List<String> provenances, String tooltip,
List<String> errors) {}
}
18 changes: 10 additions & 8 deletions bndtools.core/src/bndtools/editor/completion/BndHover.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.Shell;

import aQute.bnd.build.model.BndEditModel;
import aQute.bnd.help.Syntax;
import aQute.bnd.osgi.Processor;

Expand Down Expand Up @@ -100,6 +101,7 @@ static String wrap(String text, int width) {
}

public static String syntaxHoverText(String key, Processor properties) {

Syntax syntax = lookupSyntax(key);
StringBuilder sb = new StringBuilder();

Expand All @@ -118,11 +120,14 @@ public static String syntaxHoverText(String key, Processor properties) {
.toString()
: properties.get(key);


if (value != null && !value.isEmpty()) {
String stem = BndEditModel.getStem(key);
String formatted = BndEditModel.format(stem, value);
sb.append("\n")
.append(key)
.append("=")
.append(value);
.append(formatted);
}

List<String> errors = properties.getErrors();
Expand All @@ -132,16 +137,13 @@ public static String syntaxHoverText(String key, Processor properties) {
sb.append(errors);
}

String text = sb.toString();

if (text.length() > 30) {
text = wrap(text, 30);
}
return text;
return sb.toString();
}

public static Syntax lookupSyntax(String key) {
Syntax syntax = Syntax.HELP.get(key);

String stem = BndEditModel.getStem(key);
Syntax syntax = Syntax.HELP.get(stem);

if (syntax == null) {
if (!key.startsWith("-"))
Expand Down