44import static aQute .bnd .osgi .Constants .MERGED_HEADERS ;
55import static bndtools .editor .completion .BndHover .lookupSyntax ;
66import static bndtools .editor .completion .BndHover .syntaxHoverText ;
7+ import static java .util .stream .Collectors .collectingAndThen ;
8+ import static java .util .stream .Collectors .mapping ;
9+ import static java .util .stream .Collectors .toCollection ;
710
811import java .io .File ;
912import java .net .URI ;
@@ -315,7 +318,15 @@ public void controlMoved(ControlEvent arg0) {}
315318
316319 private void open (Object element ) {
317320 if (element instanceof PropertyRow prop ) {
318- String fpath = prop .provenance ();
321+ List <String > fpaths = prop .provenances ();
322+
323+ if (fpaths == null || fpaths .isEmpty ()) {
324+ return ;
325+ }
326+
327+ // we can only open one path
328+ String fpath = fpaths .get (0 );
329+
319330 if (fpath == null || fpath .isBlank ()) {
320331 return ;
321332 }
@@ -493,7 +504,13 @@ private int[] createColumns(TableViewer tableViewer) {
493504 return syntax != null ? syntax .autoHelpUrl () : null ;
494505 }), //
495506 new ColSpec ("Value" , -250 , PropertyRow ::value , PropertyRow ::tooltip , null ), //
496- new ColSpec ("Provenance" , 150 , (pr -> relativizeProvenancePath (pr .provenance ())), null , null ), //
507+ new ColSpec ("Provenance" , 150 , (pr -> {
508+ return pr .provenances ()
509+ .stream ()
510+ .map (prov -> relativizeProvenancePath (prov ))
511+ .collect (Collectors .joining ("," ));
512+ }),
513+ null , null ), //
497514 new ColSpec ("Errors" , 150 , (pr -> {
498515 List <String > errors = pr .errors ();
499516 return errors .isEmpty () ? "" : errors .toString ();
@@ -681,6 +698,24 @@ Object[] getTableData() {
681698 })
682699 .collect (Collectors .toCollection (LinkedHashSet ::new ));
683700
701+ Map <String , List <String >> stemProvenances = visible .stream ()
702+ .collect (Collectors .groupingBy (k -> {
703+ String stem = BndEditModel .getStem (k .key ());
704+ if (isInstruction (stem ) || MERGED_HEADERS .contains (stem )) {
705+ return stem ;
706+ }
707+ return k .key ();
708+ }, mapping (k -> {
709+ String prov = k .getProvenance ()
710+ .orElse (null );
711+ return prov ;
712+ }, //
713+ // remove duplicates
714+ collectingAndThen (toCollection (LinkedHashSet ::new ),
715+ // convert back to List
716+ ArrayList ::new
717+ ))));
718+
684719 return stems .stream ()
685720 .map (stem -> {
686721 Processor p = getProperties ();
@@ -690,8 +725,10 @@ Object[] getTableData() {
690725 .toString ()
691726 : p .get (stem );
692727
728+ List <String > provList = stemProvenances .get (stem );
729+
693730 String tooltip = BndEditModel .format (stem , value );
694- return new PropertyRow (stem , value , null , tooltip ,
731+ return new PropertyRow (stem , value , provList , tooltip ,
695732 p .getErrors ());
696733 })
697734 .toArray ();
@@ -704,7 +741,7 @@ Object[] getTableData() {
704741 .orElse (null );
705742 Processor p = getProperties ();
706743 String tooltip = BndEditModel .format (k .key (), expandedOrRawValue (k , p ));
707- return new PropertyRow (k .key (), expandedOrRawValue (k , p ), provenance , tooltip ,
744+ return new PropertyRow (k .key (), expandedOrRawValue (k , p ), List . of ( provenance ) , tooltip ,
708745 p .getErrors ());
709746 })
710747 .toArray ();
@@ -756,9 +793,15 @@ public boolean useNativeToolTip(Object object) {
756793
757794 @ Override
758795 public String getToolTipText (Object element ) {
759- if (spec .tooltip != null && element instanceof PropertyRow pkey ) {
760- return spec .tooltip .apply (pkey );
796+ if ("Provenance" .equals (spec .title ) && element instanceof PropertyRow prow ) {
797+ return prow .provenances ()
798+ .stream ()
799+ .collect (Collectors .joining ("\n " ));
761800 }
801+ if (spec .tooltip != null && element instanceof PropertyRow prow ) {
802+ return spec .tooltip .apply (prow );
803+ }
804+
762805 return null ;
763806 }
764807
@@ -775,5 +818,6 @@ public TooltipInput getTooltipInfo(Object element) {
775818 /**
776819 * represents a row in the Effective view table.
777820 */
778- record PropertyRow (String title , String value , String provenance , String tooltip , List <String > errors ) {}
821+ record PropertyRow (String title , String value , List <String > provenances , String tooltip ,
822+ List <String > errors ) {}
779823}
0 commit comments