From 81fe954ffee1b4976c6fb1e385348f8af535b113 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Fri, 17 Jun 2022 16:34:32 +0800 Subject: Fix polymer wildcard applying too aggressively --- .../shedaniel/rei/impl/client/view/ViewsImpl.java | 34 +++++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) (limited to 'runtime/src/main/java') diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java index 8b1f60edc..9fd6fc102 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/view/ViewsImpl.java @@ -67,8 +67,8 @@ import org.jetbrains.annotations.Nullable; import java.util.*; import java.util.function.Consumer; +import java.util.function.Function; import java.util.stream.Collectors; -import java.util.stream.Stream; @ApiStatus.Internal public class ViewsImpl implements Views { @@ -102,12 +102,13 @@ public class ViewsImpl implements Views { Set> filteringCategories = builder.getFilteringCategories(); List> recipesForStacks = builder.getRecipesFor(); List> usagesForStacks = builder.getUsagesFor(); - recipesForStacks = Stream.concat(recipesForStacks.stream(), recipesForStacks.stream().map(EntryStack::wildcard)) - .distinct() - .collect(Collectors.toList()); - usagesForStacks = Stream.concat(usagesForStacks.stream(), usagesForStacks.stream().map(EntryStack::wildcard)) - .distinct() - .collect(Collectors.toList()); + Function, Collection>> wildcardFunction = stack -> { + EntryStack wildcard = stack.wildcard(); + if (EntryStacks.equalsFuzzy(wildcard, stack)) return Collections.emptyList(); + return Collections.singletonList(wildcard); + }; + List> recipesForStacksWildcard = CollectionUtils.flatMap(recipesForStacks, wildcardFunction); + List> usagesForStacksWildcard = CollectionUtils.flatMap(usagesForStacks, wildcardFunction); DisplayRegistry displayRegistry = DisplayRegistry.getInstance(); Map, List> result = Maps.newLinkedHashMap(); @@ -145,7 +146,24 @@ public class ViewsImpl implements Views { } } } - for (EntryStack usagesFor : usagesForStacks) { + if (set.isEmpty() && (!recipesForStacksWildcard.isEmpty() || !usagesForStacksWildcard.isEmpty())) { + for (Display display : allRecipesFromCategory) { + if (processingVisibilityHandlers && !displayRegistry.isDisplayVisible(display)) continue; + if (!recipesForStacksWildcard.isEmpty()) { + if (isRecipesFor(recipesForStacksWildcard, display)) { + set.add(display); + continue; + } + } + if (!usagesForStacksWildcard.isEmpty()) { + if (isUsagesFor(usagesForStacksWildcard, display)) { + set.add(display); + continue; + } + } + } + } + for (EntryStack usagesFor : Iterables.concat(usagesForStacks, usagesForStacksWildcard)) { if (isStackWorkStationOfCategory(categoryConfiguration, usagesFor)) { if (processingVisibilityHandlers) { set.addAll(CollectionUtils.filterToSet(allRecipesFromCategory, displayRegistry::isDisplayVisible)); -- cgit