4949
5050import org .scijava .discovery .Discoverer ;
5151import org .scijava .discovery .ManualDiscoverer ;
52+ import org .scijava .function .Consumers ;
5253import org .scijava .log2 .Logger ;
5354import org .scijava .log2 .StderrLoggerFactory ;
5455import org .scijava .meta .Versions ;
@@ -577,10 +578,11 @@ private List<RichOp<?>> resolveOpDependencies(OpCandidate candidate,
577578 @ SuppressWarnings ("rawtypes" )
578579 private synchronized void initWrappers () {
579580 if (wrappers != null ) return ;
580- wrappers = new HashMap <>();
581+ HashMap < Class <?>, OpWrapper <?>> tmp = new HashMap <>();
581582 for (Discoverer d : discoverers )
582583 for (OpWrapper wrapper : d .discover (OpWrapper .class ))
583- wrappers .put (wrapper .type (), wrapper );
584+ tmp .put (wrapper .type (), wrapper );
585+ wrappers = tmp ;
584586 }
585587
586588 /**
@@ -705,15 +707,16 @@ private OpRef inferOpRef(Type type, String name, Map<TypeVariable<?>, Type> type
705707
706708 private synchronized void initOpDirectory () {
707709 if (opDirectory != null ) return ;
708- opDirectory = new HashMap <>();
710+ Map < String , List < OpInfo >> tmp = new HashMap <>();
709711 // add all OpInfos that are directly discoverable
710- discoverers .stream ().flatMap (d -> d .discover (OpInfo .class ).stream ()).forEach (info -> addToOpIndex .accept (info , log ));
712+ discoverers .stream ().flatMap (d -> d .discover (OpInfo .class ).stream ()).forEach (info -> addToOpIndex .accept (tmp , info , log ));
711713 List <OpInfoGenerator > generators = infoGenerators ();
712- discoverers .stream ().flatMap (d -> d .discover (Op .class ).stream ()).forEach (o -> registerOpsFrom (o , generators ));
713- discoverers .stream ().flatMap (d -> d .discover (OpCollection .class ).stream ()).forEach (o -> registerOpsFrom (o , generators ));
714- Set <OpInfo > infos = opDirectory .values ().stream ().flatMap (Collection ::stream ).map (info -> opsFromObject (info , generators )).flatMap (Collection ::stream ).collect (
714+ discoverers .stream ().flatMap (d -> d .discover (Op .class ).stream ()).forEach (o -> registerOpsFrom (tmp , o , generators ));
715+ discoverers .stream ().flatMap (d -> d .discover (OpCollection .class ).stream ()).forEach (o -> registerOpsFrom (tmp , o , generators ));
716+ Set <OpInfo > infos = tmp .values ().stream ().flatMap (Collection ::stream ).map (info -> opsFromObject (info , generators )).flatMap (Collection ::stream ).collect (
715717 Collectors .toSet ());
716- infos .forEach (info -> addToOpIndex .accept (info , log ));
718+ infos .forEach (info -> addToOpIndex .accept (tmp , info , log ));
719+ opDirectory = tmp ;
717720 }
718721
719722 /**
@@ -729,8 +732,8 @@ private List<OpInfo> opsFromObject(Object o, List<OpInfoGenerator> generators) {
729732 .collect (Collectors .toList ());
730733 }
731734
732- private void registerOpsFrom (Object o , List <OpInfoGenerator > generators ) {
733- opsFromObject (o , generators ).forEach (info -> addToOpIndex .accept (info , log ));
735+ private void registerOpsFrom (final Map < String , List < OpInfo >> opDirectory , final Object o , List <OpInfoGenerator > generators ) {
736+ opsFromObject (o , generators ).forEach (info -> addToOpIndex .accept (opDirectory , info , log ));
734737 }
735738
736739 private List <OpInfoGenerator > infoGenerators () {
@@ -749,14 +752,14 @@ private synchronized void initIdDirectory() {
749752 .forEach (info -> idDirectory .put (info .id (), info ));
750753 }
751754
752- private final BiConsumer < OpInfo , Logger > addToOpIndex = (final OpInfo opInfo , final Logger log ) -> {
753- if (opInfo .names () == null || opInfo .names ().size () == 0 ) {
755+ private final Consumers . Arity3 < Map < String , List < OpInfo >>, OpInfo , Logger > addToOpIndex = (final Map < String , List < OpInfo >> directory , final OpInfo opInfo , final Logger log ) -> {
756+ if (opInfo .names () == null || opInfo .names ().isEmpty () ) {
754757 log .error ("Skipping Op " + opInfo .implementationName () + ":\n " +
755758 "Op implementation must provide name." );
756759 return ;
757760 }
758761 for (String opName : opInfo .names ()) {
759- opDirectory .computeIfAbsent (opName , name -> new ArrayList <>()).add (opInfo );
762+ directory .computeIfAbsent (opName , name -> new ArrayList <>()).add (opInfo );
760763 }
761764 };
762765
0 commit comments