mirror of
https://github.com/YatopiaMC/Yatopia.git
synced 2024-12-05 00:53:43 +01:00
74c4554995
* Updated Upstream and Sidestream(s) (Paper/Tuinity/Airplane/Purpur/Origami) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: 151457628 Fix Counter#decrement recursive call (#5665) 21ac7dc98 [Auto] Updated Upstream (CraftBukkit) 18ad2c9dd Add environment variable (PAPER_DISABLE_SERVER_GUI) to disable server gui 6ecbe5776 Rename leftover resource->datapack (#5662) ec90a7859 I give up on trying to teach people to avoid the incorrect ways. dc7b7a160 Fix missing username console death message (#5654) (#5658) c639a52a6 Add basic Datapack API (#5653) (#5653) 99c1d9da6 Updated Upstream (CraftBukkit) (#5652) 2d50c17e2 [CI-SKIP] Add PR rebasing steps (#5634) 2c5f8085e Remove boat interaction event (Fixes #5539) 96ee1fb8f fix WorldSaveEvent not firing with /save-all (#5650) e90e7829e remove unneeded patch (#5641) d875bacc2 Activate warning by default when people are doing silly things (#5642) cb896d471 Updated Upstream (Bukkit/CraftBukkit/Spigot) (#5643) ecbf5a38e Revert "Updated Upstream (Bukkit/CraftBukkit/Spigot) (#5636)" 20fc4ab70 Updated Upstream (Bukkit/CraftBukkit/Spigot) (#5636) 20d8812ea Fix CraftPotionBrewer cache (#5632) cd6ae8816 Add a "Should Burn in Sunlight" API for Phantoms and Skeletons (#5608) 25edfe58b Remove unneeded component conversion for kick msg (#5626) cec386f66 Call PortalCreateEvent when players enter the end (#5618) 453c7f05c Add ItemStack#displayName to get the formatted display name of an ItemStack (#5628) 4efe8b498 Update Java version warning (#5621) e0a021ccc Add ItemStack#getTranslationKey() (#5616) 53d71b717 Add setPotionUseTimeLeft to Witch (#5597) 239935d18 Add Inventory#close (#5610) 29bf6cd41 Updated Upstream (CraftBukkit) ad45f316c Add raw address to AsyncPlayerPreLoginEvent (#5614) 28865335a [Auto] Updated Upstream (CraftBukkit) 750049fa2 Fix incorrect colors in some log messages (#5609) c5fa3f0d4 Add Adventure message to PlayerAdvancementDoneEvent (#5030) 69c09cdb0 Updated Upstream (CraftBukkit) (#5607) Tuinity Changes: 1222573 Fix incorrect status dataconverter for pre 1.13 chunks Airplane Changes: 3dce697 Fix gradle stuff 209bce3 Patches Purpur Changes: 72708f4 Option to disable dragon egg teleporting 5f87a45 Updated Upstream (Paper) 7bfc70d swap heavy logic to end bb9d72d Fix #338 - Phantoms always burning bug 8fa99b3 Configurable critical damage multiplier (#339) dc4a1cb Updated Upstream (Paper & Tuinity) c166841 Configurable powered rail boost modifier (closes #329) (#333) ab9b8ca Updated Upstream (Paper & Airplane) 44e72f7 Let parrots breed using any tempting item 09d98d3 this part is important, too :3 2015fe5 Breedable parrots 552d783 Iron golem poppy calms anger 1fa06a1 Optimize collisions (#328) 1112240 Extend Halloween Optimization (#321) 03f1aec Config for health to impact Creeper explosion radius (#304) 8f7bce4 Add config for hidden from entity selector patch 21906a2 Hide hidden players from entity selector 445496d [ci-skip] fix this too, now.. jfc 3ba8c81 Ya'll didn't see nothing.. 2d4611b Updated Upstream (Paper) beed258 Better offline mode warning (#330) c1efe3c It's meant to be double 🤦 3f9958b Implement the Mob Blindness mod 6e98c88 Add missing repo to settings.gradle.kts da5185b Update Gradle to 7.0.1 fbd28d8 Updated Upstream (Paper & Tuinity) cb42dec Updated Upstream (Paper) e883991 Fix compatibility with MyPet Origami Changes: 4c0616d Update Paper * Updated Upstream and Sidestream(s) (Paper) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: 45e19ffb0 [Auto] Updated Upstream (CraftBukkit) * Updated Upstream and Sidestream(s) (Paper/Purpur) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: 7989028a5 More Enchantment API (#5588) c0cb5c129 Adds methods for checking item repairability (#5651) 22399b07f Actually use extended/ambient in BeaconEffectEvent (#5647) 979135878 Add cause and cancel message to PlayerGameModeChangeEvent (#5638) 51e1e58d2 Fix Adventure support in UnknownCommandEvent (#5664) Purpur Changes: ca9be56 Do not allow duplicate unsafe enchants * Updated Upstream and Sidestream(s) (Paper/Purpur/Paper) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: 7989028a5 More Enchantment API (#5588) c0cb5c129 Adds methods for checking item repairability (#5651) 22399b07f Actually use extended/ambient in BeaconEffectEvent (#5647) 979135878 Add cause and cancel message to PlayerGameModeChangeEvent (#5638) 51e1e58d2 Fix Adventure support in UnknownCommandEvent (#5664) Purpur Changes: ca9be56 Do not allow duplicate unsafe enchants Paper Changes: 322886c86 Avoid NPE due to PlayerBedFailEnterEvent d3c9a195c removed duplicate ProjectileHitEvent for fireball (#5671) * Updated Upstream and Sidestream(s) (Paper/Airplane/Empirecraft) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: 2c6b1f048 Revert "Remove itneract event from boat" (Fixes #5677) aae1c54a9 Add command line option to load extra plugin jars not in the plugins folder Airplane Changes: 4a22184 Updated Upstream (Tuinity) Empirecraft Changes: d0aaf527 Updated Paper * Updated Upstream and Sidestream(s) (Airplane/Purpur) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Airplane Changes: 046ae54 Improve hopper performance via bitset Purpur Changes: c333d3d Add config for the unverified username message (#348) 703b5da Fix invulnerable-while-accepting-resource-pack not being used * Updated Upstream and Sidestream(s) (Paper/Purpur) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: 6c183f1ae [Auto] Updated Upstream (CraftBukkit) Purpur Changes: e0991e0 allow using legacy section symbol in unverified username message 6bd246b Updated Upstream (Paper) * Updated Upstream and Sidestream(s) (Airplane) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Airplane Changes: 5fab6a2 Improvements to fluid & profiler patches * Updated Upstream and Sidestream(s) (Paper/Tuinity/Airplane/Purpur/Empirecraft) Upstream/An Sidestream has released updates that appears to apply and compile correctly This update has NOT been tested by YatopiaMC and as with ANY update, please do your own testing. Paper Changes: 41e6073ce [Auto] Updated Upstream (CraftBukkit) 6f93dc95d Add cause to Weather/ThunderChangeEvents (#4832) 507cf19b3 [CI-SKIP] [Auto] Rebuild Patches afe0785bf Added PlayerPurchaseEvent for standalone Merchant GUIs (#5583) 615df3d8a Fix entity motion tag from mob spawners (#5718) 2d34898b5 Add methods for getting default item attributes (#5593) d9766433e Add EntityInsideBlockEvent (#5596) 47d48790d Change return type of ItemStack#editMeta to allow checking for successful vs non-successful edits 7aabe7d56 [CI-SKIP] fix minecart vs minecraft typos (#5713) f775e87b4 [CI-SKIP] ci: update setup-java action (#5710) c58b3b277 ci: replace Java 11 with Java 16 in GH Actions build flow (#5709) 4b72327a6 ItemStack#editMeta 68984b664 Add Unix domain socket support (#5611) 68c67e680 Add Mob#lookAt API (#5633) 4bacecd16 [Auto] Updated Upstream (Bukkit/CraftBukkit) 1f28e6eeb Fix default ChatRenderer when no plugins are installed (#5702) ecb0d32ca Enhance (Async)ChatEvent with per-viewer rendering API (#5684) f3e541ca1 Actually list all missing hard depends (#5701) 11f83fe8e [CI-SKIP] [Auto] Rebuild Patches a36e5d65f MC-148809: Fix incorrect structure block data length 3dcbdc73b Fix force upgrade patch (#5699) dab6ec6cd List all missing hard depends not just first (#5673) aed5031e3 Fix/Optimize world and light datafixes (#5693) 719040d92 [Auto] Updated Upstream (CraftBukkit) Tuinity Changes: f0e91a4 Updated Upstream (Paper) f88659c Fix and optimise world force upgrading Airplane Changes: 636dbff [ci skip] Cleanup mcdev import files c579320 [ci skip] Remove icons 7ada9a4 [skip ci] Need to specify 1.16.5 in the README of course 813df1a Update README daf3f0b Optimize air case for raytracing 1c252a5 Update Tuinity URL 50babee Updated Upstream (Tuinity) 85e0c63 Revert "Allow plugins to stupidly replace server internals" db3fe2c Remove auto import 6b32e01 Allow plugins to stupidly replace server internals f849f00 Flare Update ac10e43 Flare Update 7f3b091 Move check 040fa19 Better checking for useless move packets Purpur Changes: adb0cafe Updated Upstream (Paper) f9ccf6dd Updated Upstream (Paper & Airplane) 1343a050 Updated Upstream (Paper, Tuinity, & Airplane) af2dd61a Updated Upstream (Paper, Tuinity, & Airplane) 1808888a Expand gamemode extra perms some more Empirecraft Changes: 9e2881e6 Don't dismount on teleports... 7ed16bf3 Updated Paper c3d0a1b2 Re-add missing line in Vehicle teleporting patch * drop Improved-oversized-chunk-data-packet-handling.patch
1249 lines
60 KiB
Diff
1249 lines
60 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Lucy-t <64509677+Lucy-t@users.noreply.github.com>
|
|
Date: Thu, 7 Jan 2021 00:24:16 -0500
|
|
Subject: [PATCH] Port Cadmium
|
|
|
|
Code from LucilleTea's port of cadmium to 1.16: https://github.com/LucilleTea/DataFixerUpper
|
|
|
|
diff --git a/src/main/java/com/mojang/datafixers/DataFixUtils.java b/src/main/java/com/mojang/datafixers/DataFixUtils.java
|
|
index cf8959aea3e48c1276ae9536d4de0f0127e1801e..b730a4c0b8b8c9036641d033568b3554062999cb 100644
|
|
--- a/src/main/java/com/mojang/datafixers/DataFixUtils.java
|
|
+++ b/src/main/java/com/mojang/datafixers/DataFixUtils.java
|
|
@@ -54,6 +54,15 @@ public class DataFixUtils {
|
|
return other;
|
|
}
|
|
|
|
+ // Yatopia start - Cadmium port
|
|
+ public static <U> U orElse(final U nullable, final U other) {
|
|
+ if (nullable!=null) {
|
|
+ return nullable;
|
|
+ }
|
|
+ return other;
|
|
+ }
|
|
+ // Yatopia end
|
|
+
|
|
public static <U> U orElseGet(final Optional<? extends U> optional, final Supplier<? extends U> other) {
|
|
if (optional.isPresent()) {
|
|
return optional.get();
|
|
diff --git a/src/main/java/com/mojang/datafixers/DataFixerBuilder.java b/src/main/java/com/mojang/datafixers/DataFixerBuilder.java
|
|
index abc265b00044b14abb55c2628d454ee01fef467b..c8c19535fa64edc392fa18093ba47b16a168ebaf 100644
|
|
--- a/src/main/java/com/mojang/datafixers/DataFixerBuilder.java
|
|
+++ b/src/main/java/com/mojang/datafixers/DataFixerBuilder.java
|
|
@@ -64,13 +64,17 @@ public class DataFixerBuilder {
|
|
public DataFixer build(final Executor executor) {
|
|
final DataFixerUpper fixerUpper = new DataFixerUpper(new Int2ObjectAVLTreeMap<>(schemas), new ArrayList<>(globalList), new IntAVLTreeSet(fixerVersions));
|
|
|
|
+ // Yatopia start - Cadmium port
|
|
+ long startTime = System.nanoTime();
|
|
+ final List<CompletableFuture<?>> futures = Lists.newArrayList();
|
|
+ // Yatopia end
|
|
final IntBidirectionalIterator iterator = fixerUpper.fixerVersions().iterator();
|
|
while (iterator.hasNext()) {
|
|
final int versionKey = iterator.nextInt();
|
|
if (versionKey < minDataFixPrecacheVersion) continue; // Paper
|
|
final Schema schema = schemas.get(versionKey);
|
|
for (final String typeName : schema.types()) {
|
|
- CompletableFuture.runAsync(() -> {
|
|
+ futures.add(CompletableFuture.runAsync(() -> { // Yatopia - Cadmium port
|
|
final Type<?> dataType = schema.getType(() -> typeName);
|
|
final TypeRewriteRule rule = fixerUpper.getRule(DataFixUtils.getVersion(versionKey), dataVersion);
|
|
dataType.rewrite(rule, DataFixerUpper.OPTIMIZATION_RULE);
|
|
@@ -78,9 +82,16 @@ public class DataFixerBuilder {
|
|
LOGGER.error("Unable to build datafixers", e);
|
|
Runtime.getRuntime().exit(1);
|
|
return null;
|
|
- });
|
|
+ })); // Yatopia - Cadmium port
|
|
}
|
|
}
|
|
+ // Yatopia start - Cadmium port
|
|
+ CompletableFuture.allOf(futures.toArray(new CompletableFuture<?>[0]))
|
|
+ .thenAccept((res) -> {
|
|
+ long endTime = System.nanoTime();
|
|
+ LOGGER.info("Finished building data fixers after {}ms", (endTime - startTime) / 1_000_000);
|
|
+ });
|
|
+ // Yatopia end
|
|
|
|
return fixerUpper;
|
|
}
|
|
diff --git a/src/main/java/com/mojang/datafixers/FieldFinder.java b/src/main/java/com/mojang/datafixers/FieldFinder.java
|
|
index a20a9dedcff2f3d633c5fd09d238a98fe18968c0..7ae4fab4c448ec3444624b6e671364a89243f6dc 100644
|
|
--- a/src/main/java/com/mojang/datafixers/FieldFinder.java
|
|
+++ b/src/main/java/com/mojang/datafixers/FieldFinder.java
|
|
@@ -118,7 +118,7 @@ public final class FieldFinder<FT> implements OpticFinder<FT> {
|
|
(Type<Pair<FT, V>>) choiceType,
|
|
type,
|
|
type,
|
|
- new Proj1<>()
|
|
+ Proj1.instance() // Yatopia - Cadmium port
|
|
);
|
|
}
|
|
|
|
diff --git a/src/main/java/com/mojang/datafixers/TypeRewriteRule.java b/src/main/java/com/mojang/datafixers/TypeRewriteRule.java
|
|
index 6f836c3382ed83e07000c0a5e4b6e9b69f8c45bf..37690009f2f3782e741f71272df525e9093794bc 100644
|
|
--- a/src/main/java/com/mojang/datafixers/TypeRewriteRule.java
|
|
+++ b/src/main/java/com/mojang/datafixers/TypeRewriteRule.java
|
|
@@ -105,20 +105,24 @@ public interface TypeRewriteRule {
|
|
}
|
|
}
|
|
|
|
- static TypeRewriteRule orElse(final TypeRewriteRule first, final TypeRewriteRule second) {
|
|
+ // Yatopia start - Cadmium port
|
|
+ static TypeRewriteRule orElse(final TypeRewriteRule first, final TypeRewriteRule second) {
|
|
+ /*
|
|
return orElse(first, () -> second);
|
|
}
|
|
|
|
static TypeRewriteRule orElse(final TypeRewriteRule first, final Supplier<TypeRewriteRule> second) {
|
|
- return new OrElse(first, second);
|
|
- }
|
|
+ */
|
|
+ return new OrElse(first, second);
|
|
+ }
|
|
+ // Yatopia end
|
|
|
|
final class OrElse implements TypeRewriteRule {
|
|
protected final TypeRewriteRule first;
|
|
- protected final Supplier<TypeRewriteRule> second;
|
|
+ protected final TypeRewriteRule second; // Yatopia - Cadmium port
|
|
private final int hashCode;
|
|
|
|
- public OrElse(final TypeRewriteRule first, final Supplier<TypeRewriteRule> second) {
|
|
+ public OrElse(final TypeRewriteRule first, final TypeRewriteRule second) { // Yatopia - Cadmium port
|
|
this.first = first;
|
|
this.second = second;
|
|
hashCode = Objects.hash(first, second);
|
|
@@ -130,7 +134,7 @@ public interface TypeRewriteRule {
|
|
if (view.isPresent()) {
|
|
return view;
|
|
}
|
|
- return second.get().rewrite(type);
|
|
+ return second.rewrite(type); // Yatopia - Cadmium port
|
|
}
|
|
|
|
@Override
|
|
@@ -159,9 +163,13 @@ public interface TypeRewriteRule {
|
|
return new One(rule);
|
|
}
|
|
|
|
+ // Yatopia start - Cadmium port
|
|
+ /*
|
|
static TypeRewriteRule once(final TypeRewriteRule rule) {
|
|
return orElse(rule, () -> one(once(rule)));
|
|
}
|
|
+ */
|
|
+ // Yatopia end
|
|
|
|
static TypeRewriteRule checkOnce(final TypeRewriteRule rule, final Consumer<Type<?>> onFail) {
|
|
// TODO: toggle somehow
|
|
diff --git a/src/main/java/com/mojang/datafixers/Typed.java b/src/main/java/com/mojang/datafixers/Typed.java
|
|
index 55c55beba58fb0505ccf8270a27d6c6ffc01c629..4b84d12d51eedf99d0b5d2168f31c8a2f819b432 100644
|
|
--- a/src/main/java/com/mojang/datafixers/Typed.java
|
|
+++ b/src/main/java/com/mojang/datafixers/Typed.java
|
|
@@ -184,11 +184,11 @@ public final class Typed<A> {
|
|
}
|
|
|
|
public <B> Typed<Either<A, B>> inj1(final Type<B> type) {
|
|
- return new Typed<>(DSL.or(this.type, type), ops, new Inj1<A, B, A>().build(value));
|
|
+ return new Typed<>(DSL.or(this.type, type), ops, Inj1.<A, B, A>instance().build(value)); // Yatopia - Cadmium port
|
|
}
|
|
|
|
public <B> Typed<Either<B, A>> inj2(final Type<B> type) {
|
|
- return new Typed<>(DSL.or(type, this.type), ops, new Inj2<B, A, A>().build(value));
|
|
+ return new Typed<>(DSL.or(type, this.type), ops, Inj2.<B, A, A>instance().build(value)); // Yatopia - Cadmium port
|
|
}
|
|
|
|
public static <A, B> Typed<Pair<A, B>> pair(final Typed<A> first, final Typed<B> second) {
|
|
diff --git a/src/main/java/com/mojang/datafixers/TypedOptic.java b/src/main/java/com/mojang/datafixers/TypedOptic.java
|
|
index 10c5565709510609f8b6c4c39bb25b163dd878bc..9e2b6e46ad846ebd964b969932da84c671ebc651 100644
|
|
--- a/src/main/java/com/mojang/datafixers/TypedOptic.java
|
|
+++ b/src/main/java/com/mojang/datafixers/TypedOptic.java
|
|
@@ -131,7 +131,7 @@ public final class TypedOptic<S, T, A, B> {
|
|
DSL.and(newType, gType),
|
|
fType,
|
|
newType,
|
|
- new Proj1<>()
|
|
+ Proj1.instance() // Yatopia - Cadmium port
|
|
);
|
|
}
|
|
|
|
@@ -142,7 +142,7 @@ public final class TypedOptic<S, T, A, B> {
|
|
DSL.and(fType, newType),
|
|
gType,
|
|
newType,
|
|
- new Proj2<>()
|
|
+ Proj2.instance() // Yatopia - Cadmium port
|
|
);
|
|
}
|
|
|
|
@@ -153,7 +153,7 @@ public final class TypedOptic<S, T, A, B> {
|
|
DSL.or(newType, gType),
|
|
fType,
|
|
newType,
|
|
- new Inj1<>()
|
|
+ Inj1.instance() // Yatopia - Cadmium port
|
|
);
|
|
}
|
|
|
|
@@ -164,7 +164,7 @@ public final class TypedOptic<S, T, A, B> {
|
|
DSL.or(fType, newType),
|
|
gType,
|
|
newType,
|
|
- new Inj2<>()
|
|
+ Inj2.instance() // Yatopia - Cadmium port
|
|
);
|
|
}
|
|
|
|
diff --git a/src/main/java/com/mojang/datafixers/View.java b/src/main/java/com/mojang/datafixers/View.java
|
|
index 4139dc999917d84c7dea5b02117a50af51206f04..58f856d95405f02c107fad12e830e98d1e1a8337 100644
|
|
--- a/src/main/java/com/mojang/datafixers/View.java
|
|
+++ b/src/main/java/com/mojang/datafixers/View.java
|
|
@@ -11,7 +11,6 @@ import com.mojang.datafixers.types.Type;
|
|
import com.mojang.serialization.DynamicOps;
|
|
|
|
import java.util.Objects;
|
|
-import java.util.Optional;
|
|
import java.util.function.Function;
|
|
|
|
public final class View<A, B> implements App2<View.Mu, A, B> {
|
|
@@ -73,9 +72,15 @@ public final class View<A, B> implements App2<View.Mu, A, B> {
|
|
return Objects.hash(type, newType, function);
|
|
}
|
|
|
|
- public Optional<? extends View<A, B>> rewrite(final PointFreeRule rule) {
|
|
- return rule.rewrite(DSL.func(type, newType), function()).map(f -> create(type, newType, f));
|
|
+ // Yatopia start - Cadmium port
|
|
+ public View<A, B> rewrite(final PointFreeRule rule) {
|
|
+ PointFree<Function<A, B>> result = rule.rewrite(DSL.func(type, newType), function());
|
|
+ if (result!=null) {
|
|
+ return create(type, newType, result);
|
|
+ }
|
|
+ return null;
|
|
}
|
|
+ // Yatopia end
|
|
|
|
public View<A, B> rewriteOrNop(final PointFreeRule rule) {
|
|
return DataFixUtils.orElse(rewrite(rule), this);
|
|
diff --git a/src/main/java/com/mojang/datafixers/functions/Apply.java b/src/main/java/com/mojang/datafixers/functions/Apply.java
|
|
index 32c55622c7a6de4d4eb4c70c62f4fbf11385667b..89793b452e95c9ae8bec42d22bebd762533a8046 100644
|
|
--- a/src/main/java/com/mojang/datafixers/functions/Apply.java
|
|
+++ b/src/main/java/com/mojang/datafixers/functions/Apply.java
|
|
@@ -3,11 +3,11 @@
|
|
package com.mojang.datafixers.functions;
|
|
|
|
import com.mojang.datafixers.DSL;
|
|
+import com.mojang.datafixers.DataFixUtils; // Yatopia - Cadmium port
|
|
import com.mojang.datafixers.types.Type;
|
|
import com.mojang.serialization.DynamicOps;
|
|
|
|
import java.util.Objects;
|
|
-import java.util.Optional;
|
|
import java.util.function.Function;
|
|
|
|
final class Apply<A, B> extends PointFree<B> {
|
|
@@ -31,20 +31,33 @@ final class Apply<A, B> extends PointFree<B> {
|
|
return "(ap " + func.toString(level + 1) + "\n" + indent(level + 1) + arg.toString(level + 1) + "\n" + indent(level) + ")";
|
|
}
|
|
|
|
+ // Yatopia start - Cadmium port
|
|
@Override
|
|
- public Optional<? extends PointFree<B>> all(final PointFreeRule rule, final Type<B> type) {
|
|
- return Optional.of(Functions.app(
|
|
- rule.rewrite(DSL.func(argType, type), func).map(f1 -> (PointFree<Function<A, B>>) f1).orElse(func),
|
|
- rule.rewrite(argType, arg).map(f -> (PointFree<A>) f).orElse(arg),
|
|
- argType
|
|
- ));
|
|
+ public PointFree<B> all(final PointFreeRule rule, final Type<B> type) {
|
|
+ return Functions.app(
|
|
+ DataFixUtils.orElse(rule.rewrite(DSL.func(argType, type), func), func),
|
|
+ DataFixUtils.orElse(rule.rewrite(argType, arg), arg),
|
|
+ argType
|
|
+ );
|
|
}
|
|
|
|
@Override
|
|
- public Optional<? extends PointFree<B>> one(final PointFreeRule rule, final Type<B> type) {
|
|
- return rule.rewrite(DSL.func(argType, type), func).map(f -> Optional.of(Functions.app(f, arg, argType)))
|
|
- .orElseGet(() -> rule.rewrite(argType, arg).map(a -> Functions.app(func, a, argType)));
|
|
+ public PointFree<B> one(final PointFreeRule rule, final Type<B> type) {
|
|
+ final PointFree<Function<A, B>> result1 = rule.rewrite(DSL.func(argType, type), func);
|
|
+
|
|
+ if (result1!=null) {
|
|
+ return Functions.app(result1, arg, argType);
|
|
+ }
|
|
+
|
|
+ final PointFree<A> result2 = rule.rewrite(argType, arg);
|
|
+
|
|
+ if (result2!=null) {
|
|
+ return Functions.app(func, result2, argType);
|
|
+ }
|
|
+
|
|
+ return null;
|
|
}
|
|
+ // Yatopia end
|
|
|
|
@Override
|
|
public boolean equals(final Object o) {
|
|
diff --git a/src/main/java/com/mojang/datafixers/functions/Comp.java b/src/main/java/com/mojang/datafixers/functions/Comp.java
|
|
index a7a0ba66c715709801c2839018a6bb19df5cfdc6..6ea5ecad576f880783b9503ec370a5171d4f4da4 100644
|
|
--- a/src/main/java/com/mojang/datafixers/functions/Comp.java
|
|
+++ b/src/main/java/com/mojang/datafixers/functions/Comp.java
|
|
@@ -3,12 +3,12 @@
|
|
package com.mojang.datafixers.functions;
|
|
|
|
import com.mojang.datafixers.DSL;
|
|
+import com.mojang.datafixers.DataFixUtils; // Yatopia - Cadmium port
|
|
import com.mojang.datafixers.types.Func;
|
|
import com.mojang.datafixers.types.Type;
|
|
import com.mojang.serialization.DynamicOps;
|
|
|
|
import java.util.Objects;
|
|
-import java.util.Optional;
|
|
import java.util.function.Function;
|
|
|
|
final class Comp<A, B, C> extends PointFree<Function<A, C>> {
|
|
@@ -28,21 +28,34 @@ final class Comp<A, B, C> extends PointFree<Function<A, C>> {
|
|
}
|
|
|
|
@Override
|
|
- public Optional<? extends PointFree<Function<A, C>>> all(final PointFreeRule rule, final Type<Function<A, C>> type) {
|
|
+ // Yatopia start - Cadmium port
|
|
+ public PointFree<Function<A, C>> all(final PointFreeRule rule, final Type<Function<A, C>> type) {
|
|
final Func<A, C> funcType = (Func<A, C>) type;
|
|
- return Optional.of(Functions.comp(
|
|
- middleType,
|
|
- rule.rewrite(DSL.func(middleType, funcType.second()), first).map(f -> (PointFree<Function<B, C>>) f).orElse(first),
|
|
- rule.rewrite(DSL.func(funcType.first(), middleType), second).map(f1 -> (PointFree<Function<A, B>>) f1).orElse(second)
|
|
- ));
|
|
+ return Functions.comp(
|
|
+ middleType,
|
|
+ DataFixUtils.orElse(rule.rewrite(DSL.func(middleType, funcType.second()), first), first),
|
|
+ DataFixUtils.orElse(rule.rewrite(DSL.func(funcType.first(), middleType), second), second)
|
|
+ );
|
|
}
|
|
|
|
@Override
|
|
- public Optional<? extends PointFree<Function<A, C>>> one(final PointFreeRule rule, final Type<Function<A, C>> type) {
|
|
+ public PointFree<Function<A, C>> one(final PointFreeRule rule, final Type<Function<A, C>> type) {
|
|
final Func<A, C> funcType = (Func<A, C>) type;
|
|
- return rule.rewrite(DSL.func(middleType, funcType.second()), first).map(f -> Optional.of(Functions.comp(middleType, f, second)))
|
|
- .orElseGet(() -> rule.rewrite(DSL.func(funcType.first(), middleType), second).map(s -> Functions.comp(middleType, first, s)));
|
|
+ final PointFree<Function<B, C>> result1 = rule.rewrite(DSL.func(middleType, funcType.second()), first);
|
|
+
|
|
+ if (result1!=null) {
|
|
+ return Functions.comp(middleType, result1, second);
|
|
+ }
|
|
+
|
|
+ final PointFree<Function<A, B>> result2 = rule.rewrite(DSL.func(funcType.first(), middleType), second);
|
|
+
|
|
+ if (result2!=null) {
|
|
+ return Functions.comp(middleType, first, result2);
|
|
+ }
|
|
+
|
|
+ return null;
|
|
}
|
|
+ // Yatopia end
|
|
|
|
@Override
|
|
public boolean equals(final Object o) {
|
|
diff --git a/src/main/java/com/mojang/datafixers/functions/PointFree.java b/src/main/java/com/mojang/datafixers/functions/PointFree.java
|
|
index f7593e3baf71a8992aa094719d9a369399996d46..b743d6d7188c53ac04ec087d9f89b6f87374e811 100644
|
|
--- a/src/main/java/com/mojang/datafixers/functions/PointFree.java
|
|
+++ b/src/main/java/com/mojang/datafixers/functions/PointFree.java
|
|
@@ -7,7 +7,6 @@ import com.mojang.serialization.DynamicOps;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
import javax.annotation.Nullable;
|
|
-import java.util.Optional;
|
|
import java.util.function.Function;
|
|
|
|
public abstract class PointFree<T> {
|
|
@@ -30,13 +29,15 @@ public abstract class PointFree<T> {
|
|
|
|
public abstract Function<DynamicOps<?>, T> eval();
|
|
|
|
- Optional<? extends PointFree<T>> all(final PointFreeRule rule, final Type<T> type) {
|
|
- return Optional.of(this);
|
|
+ // Yatopia start - Cadmium port
|
|
+ PointFree<T> all(final PointFreeRule rule, final Type<T> type) {
|
|
+ return this;
|
|
}
|
|
|
|
- Optional<? extends PointFree<T>> one(final PointFreeRule rule, final Type<T> type) {
|
|
- return Optional.empty();
|
|
+ PointFree<T> one(final PointFreeRule rule, final Type<T> type) {
|
|
+ return null;
|
|
}
|
|
+ // Yatopia end
|
|
|
|
@Override
|
|
public final String toString() {
|
|
diff --git a/src/main/java/com/mojang/datafixers/functions/PointFreeRule.java b/src/main/java/com/mojang/datafixers/functions/PointFreeRule.java
|
|
index eaee52d2eb5c9051b1114ae307022d83984e5840..0e31fe8412cef25b209c72a628756d5b67cce79f 100644
|
|
--- a/src/main/java/com/mojang/datafixers/functions/PointFreeRule.java
|
|
+++ b/src/main/java/com/mojang/datafixers/functions/PointFreeRule.java
|
|
@@ -25,16 +25,23 @@ import org.apache.commons.lang3.ObjectUtils;
|
|
import java.util.BitSet;
|
|
import java.util.List;
|
|
import java.util.Objects;
|
|
-import java.util.Optional;
|
|
import java.util.function.Function;
|
|
import java.util.function.Supplier;
|
|
|
|
public interface PointFreeRule {
|
|
- <A> Optional<? extends PointFree<A>> rewrite(final Type<A> type, final PointFree<A> expr);
|
|
+ // Yatopia start - Cadmium port
|
|
+ <A> PointFree<A> rewrite(final Type<A> type, final PointFree<A> expr);
|
|
|
|
- default <A, B> Optional<View<A, B>> rewrite(final View<A, B> view) {
|
|
- return rewrite(view.getFuncType(), view.function()).map(pf -> View.create(view.type(), view.newType(), pf));
|
|
+ default <A, B> View<A, B> rewrite(final View<A, B> view) {
|
|
+ PointFree<Function<A, B>> result = rewrite(view.getFuncType(), view.function());
|
|
+
|
|
+ if (result!=null) {
|
|
+ return View.create(view.type(), view.newType(), result);
|
|
+ }
|
|
+
|
|
+ return null;
|
|
}
|
|
+ // Yatopia end
|
|
|
|
default <A> PointFree<A> rewriteOrNop(final Type<A> type, final PointFree<A> expr) {
|
|
return DataFixUtils.orElse(rewrite(type, expr), expr);
|
|
@@ -52,9 +59,11 @@ public interface PointFreeRule {
|
|
INSTANCE;
|
|
|
|
@Override
|
|
- public <A> Optional<PointFree<A>> rewrite(final Type<A> type, final PointFree<A> expr) {
|
|
- return Optional.of(expr);
|
|
+ // Yatopia start - Cadmium port
|
|
+ public <A> PointFree<A> rewrite(final Type<A> type, final PointFree<A> expr) {
|
|
+ return expr;
|
|
}
|
|
+ // Yatopia end
|
|
|
|
@Override
|
|
public PointFreeRule get() {
|
|
@@ -67,25 +76,28 @@ public interface PointFreeRule {
|
|
|
|
@SuppressWarnings("unchecked")
|
|
@Override
|
|
- public <A> Optional<? extends PointFree<A>> rewrite(final Type<A> type, final PointFree<A> expr) {
|
|
+ // Yatopia start - Cadmium port
|
|
+ public <A> PointFree<A> rewrite(final Type<A> type, final PointFree<A> expr) {
|
|
if (expr instanceof Bang) {
|
|
- return Optional.empty();
|
|
+ return null;
|
|
}
|
|
if (type instanceof Func<?, ?>) {
|
|
final Func<?, ?> func = (Func<?, ?>) type;
|
|
if (func.second() instanceof EmptyPart) {
|
|
- return Optional.of((PointFree<A>) Functions.bang());
|
|
+ return (PointFree<A>) Functions.bang();
|
|
}
|
|
}
|
|
- return Optional.empty();
|
|
+ return null;
|
|
}
|
|
+ // Yatopia end
|
|
}
|
|
|
|
enum CompAssocLeft implements PointFreeRule {
|
|
INSTANCE;
|
|
|
|
@Override
|
|
- public <A> Optional<? extends PointFree<A>> rewrite(final Type<A> type, final PointFree<A> expr) {
|
|
+ // Yatopia start - Cadmium port
|
|
+ public <A> PointFree<A> rewrite(final Type<A> type, final PointFree<A> expr) {
|
|
if (expr instanceof Comp<?, ?, ?>) {
|
|
final Comp<?, ?, ?> comp2 = (Comp<?, ?, ?>) expr;
|
|
final PointFree<? extends Function<?, ?>> second = comp2.second;
|
|
@@ -94,13 +106,14 @@ public interface PointFreeRule {
|
|
return swap(comp1, comp2);
|
|
}
|
|
}
|
|
- return Optional.empty();
|
|
+ return null;
|
|
}
|
|
+ // Yatopia end
|
|
|
|
@SuppressWarnings("unchecked")
|
|
- private static <A, B, C, D, E> Optional<PointFree<E>> swap(final Comp<A, B, C> comp1, final Comp<?, ?, D> comp2raw) {
|
|
+ private static <A, B, C, D, E> PointFree<E> swap(final Comp<A, B, C> comp1, final Comp<?, ?, D> comp2raw) { // Yatopia - Cadmium port
|
|
final Comp<A, C, D> comp2 = (Comp<A, C, D>) comp2raw;
|
|
- return Optional.of((PointFree<E>) new Comp<>(comp1.middleType, new Comp<>(comp2.middleType, comp2.first, comp1.first), comp1.second));
|
|
+ return (PointFree<E>) new Comp<>(comp1.middleType, new Comp<>(comp2.middleType, comp2.first, comp1.first), comp1.second); // Yatopia - Cadmium port
|
|
}
|
|
}
|
|
|
|
@@ -108,7 +121,7 @@ public interface PointFreeRule {
|
|
INSTANCE;
|
|
|
|
@Override
|
|
- public <A> Optional<? extends PointFree<A>> rewrite(final Type<A> type, final PointFree<A> expr) {
|
|
+ public <A> PointFree<A> rewrite(final Type<A> type, final PointFree<A> expr) { // Yatopia - Cadmium port
|
|
if (expr instanceof Comp<?, ?, ?>) {
|
|
final Comp<?, ?, ?> comp1 = (Comp<?, ?, ?>) expr;
|
|
final PointFree<? extends Function<?, ?>> first = comp1.first;
|
|
@@ -117,13 +130,13 @@ public interface PointFreeRule {
|
|
return swap(comp1, comp2);
|
|
}
|
|
}
|
|
- return Optional.empty();
|
|
+ return null; // Yatopia - Cadmium port
|
|
}
|
|
|
|
@SuppressWarnings("unchecked")
|
|
- private static <A, B, C, D, E> Optional<PointFree<E>> swap(final Comp<A, B, D> comp1, final Comp<?, C, ?> comp2raw) {
|
|
+ private static <A, B, C, D, E> PointFree<E> swap(final Comp<A, B, D> comp1, final Comp<?, C, ?> comp2raw) { // Yatopia - Cadmium port
|
|
final Comp<B, C, D> comp2 = (Comp<B, C, D>) comp2raw;
|
|
- return Optional.of((PointFree<E>) new Comp<>(comp2.middleType, comp2.first, new Comp<>(comp1.middleType, comp2.second, comp1.second)));
|
|
+ return (PointFree<E>) new Comp<>(comp2.middleType, comp2.first, new Comp<>(comp1.middleType, comp2.second, comp1.second)); // Yatopia - Cadmium port
|
|
}
|
|
}
|
|
|
|
@@ -133,15 +146,15 @@ public interface PointFreeRule {
|
|
// (ap lens id) -> id
|
|
@SuppressWarnings("unchecked")
|
|
@Override
|
|
- public <A> Optional<? extends PointFree<A>> rewrite(final Type<A> type, final PointFree<A> expr) {
|
|
+ public <A> PointFree<A> rewrite(final Type<A> type, final PointFree<A> expr) { // Yatopia - Cadmium port
|
|
if (expr instanceof Apply<?, ?>) {
|
|
final Apply<?, A> apply = (Apply<?, A>) expr;
|
|
final PointFree<? extends Function<?, A>> func = apply.func;
|
|
if (func instanceof ProfunctorTransformer<?, ?, ?, ?> && Objects.equals(apply.arg, Functions.id())) {
|
|
- return Optional.of((PointFree<A>) Functions.id());
|
|
+ return (PointFree<A>) Functions.id(); // Yatopia - Cadmium port
|
|
}
|
|
}
|
|
- return Optional.empty();
|
|
+ return null;
|
|
}
|
|
}
|
|
|
|
@@ -150,7 +163,7 @@ public interface PointFreeRule {
|
|
|
|
// (ap f1 (ap f2 arg)) -> (ap (f1 ◦ f2) arg)
|
|
@Override
|
|
- public <A> Optional<? extends PointFree<A>> rewrite(final Type<A> type, final PointFree<A> expr) {
|
|
+ public <A> PointFree<A> rewrite(final Type<A> type, final PointFree<A> expr) { // Yatopia - Cadmium port
|
|
if (expr instanceof Apply<?, ?>) {
|
|
final Apply<?, ?> applyFirst = (Apply<?, ?>) expr;
|
|
if (applyFirst.arg instanceof Apply<?, ?>) {
|
|
@@ -158,46 +171,54 @@ public interface PointFreeRule {
|
|
return cap(applyFirst, applySecond);
|
|
}
|
|
}
|
|
- return Optional.empty();
|
|
+ return null; // Yatopia - Cadmium port
|
|
}
|
|
|
|
@SuppressWarnings("unchecked")
|
|
- private <A, B, C, D, E> Optional<? extends PointFree<A>> cap(final Apply<D, E> applyFirst, final Apply<B, C> applySecond) {
|
|
+ private <A, B, C, D, E> PointFree<A> cap(final Apply<D, E> applyFirst, final Apply<B, C> applySecond) { // Yatopia - Cadmium port
|
|
final PointFree<?> func = applySecond.func;
|
|
- return Optional.of((PointFree<A>) Functions.app(Functions.comp(applyFirst.argType, applyFirst.func, (PointFree<Function<B, D>>) func), applySecond.arg, applySecond.argType));
|
|
+ return (PointFree<A>) Functions.app(Functions.comp(applyFirst.argType, applyFirst.func, (PointFree<Function<B, D>>) func), applySecond.arg, applySecond.argType); // Yatopia - Cadmium port
|
|
}
|
|
}
|
|
|
|
interface CompRewrite extends PointFreeRule {
|
|
@Override
|
|
- default <A> Optional<? extends PointFree<A>> rewrite(final Type<A> type, final PointFree<A> expr) {
|
|
+ default <A> PointFree<A> rewrite(final Type<A> type, final PointFree<A> expr) { // Yatopia - Cadmium port
|
|
if (expr instanceof Comp<?, ?, ?>) {
|
|
final Comp<?, ?, ?> comp = (Comp<?, ?, ?>) expr;
|
|
final PointFree<? extends Function<?, ?>> first = comp.first;
|
|
final PointFree<? extends Function<?, ?>> second = comp.second;
|
|
if (first instanceof Comp<?, ?, ?>) {
|
|
final Comp<?, ?, ?> firstComp = (Comp<?, ?, ?>) first;
|
|
- return doRewrite(type, comp.middleType, firstComp.second, comp.second).map(result -> {
|
|
+ final PointFree<?> result = doRewrite(type, comp.middleType, firstComp.second, comp.second); // Yatopia - Cadmium port
|
|
+
|
|
+ if (result!=null) { // Yatopia - Cadmium port
|
|
if (result instanceof Comp<?, ?, ?>) {
|
|
final Comp<?, ?, ?> resultComp = (Comp<?, ?, ?>) result;
|
|
return buildLeftNested(resultComp, firstComp);
|
|
}
|
|
return buildRight(firstComp, result);
|
|
- });
|
|
+ } // Yatopia - Cadmium port
|
|
+
|
|
+ return null;
|
|
}
|
|
if (second instanceof Comp<?, ?, ?>) {
|
|
final Comp<?, ?, ?> secondComp = (Comp<?, ?, ?>) second;
|
|
- return doRewrite(type, comp.middleType, comp.first, secondComp.first).map(result -> {
|
|
+ final PointFree<?> result = doRewrite(type, comp.middleType, comp.first, secondComp.first); // Yatopia - Cadmium port
|
|
+
|
|
+ if (result!=null) { // Yatopia - Cadmium port
|
|
if (result instanceof Comp<?, ?, ?>) {
|
|
final Comp<?, ?, ?> resultComp = (Comp<?, ?, ?>) result;
|
|
return buildRightNested(secondComp, resultComp);
|
|
}
|
|
return buildLeft(result, secondComp);
|
|
- });
|
|
+ }
|
|
+
|
|
+ return null; // Yatopia - Cadmium port
|
|
}
|
|
- return (Optional<? extends PointFree<A>>) doRewrite(type, comp.middleType, comp.first, comp.second);
|
|
+ return (PointFree<A>) doRewrite(type, comp.middleType, comp.first, comp.second); // Yatopia - Cadmium port
|
|
}
|
|
- return Optional.empty();
|
|
+ return null; // Yatopia - Cadmium port
|
|
}
|
|
|
|
@SuppressWarnings("unchecked")
|
|
@@ -222,7 +243,7 @@ public interface PointFreeRule {
|
|
return (PointFree<E>) new Comp<>(comp2.middleType, comp2.first, new Comp<>(comp1.middleType, comp2.second, comp1.second));
|
|
}
|
|
|
|
- <A> Optional<? extends PointFree<?>> doRewrite(Type<A> type, Type<?> middleType, PointFree<? extends Function<?, ?>> first, PointFree<? extends Function<?, ?>> second);
|
|
+ <A> PointFree<?> doRewrite(Type<A> type, Type<?> middleType, PointFree<? extends Function<?, ?>> first, PointFree<? extends Function<?, ?>> second); // Yatopia - Cadmium port
|
|
}
|
|
|
|
enum SortProj implements CompRewrite {
|
|
@@ -230,7 +251,7 @@ public interface PointFreeRule {
|
|
|
|
// (ap π1 f)◦(ap π2 g) -> (ap π2 g)◦(ap π1 f)
|
|
@Override
|
|
- public <A> Optional<? extends PointFree<?>> doRewrite(final Type<A> type, final Type<?> middleType, final PointFree<? extends Function<?, ?>> first, final PointFree<? extends Function<?, ?>> second) {
|
|
+ public <A> PointFree<?> doRewrite(final Type<A> type, final Type<?> middleType, final PointFree<? extends Function<?, ?>> first, final PointFree<? extends Function<?, ?>> second) { // Yatopia - Cadmium port
|
|
if (first instanceof Apply<?, ?> && second instanceof Apply<?, ?>) {
|
|
final Apply<?, ?> applyFirst = (Apply<?, ?>) first;
|
|
final Apply<?, ?> applySecond = (Apply<?, ?>) second;
|
|
@@ -253,11 +274,11 @@ public interface PointFreeRule {
|
|
if (Objects.equals(fo, Optics.proj2()) && Objects.equals(so, Optics.proj1())) {
|
|
final Func<?, ?> firstArg = (Func<?, ?>) applyFirst.argType;
|
|
final Func<?, ?> secondArg = (Func<?, ?>) applySecond.argType;
|
|
- return Optional.of(cap(firstArg, secondArg, applyFirst, applySecond));
|
|
+ return cap(firstArg, secondArg, applyFirst, applySecond); // Yatopia - Cadmium port
|
|
}
|
|
}
|
|
}
|
|
- return Optional.empty();
|
|
+ return null; // Yatopia - Cadmium port
|
|
}
|
|
|
|
@SuppressWarnings("unchecked")
|
|
@@ -275,7 +296,7 @@ public interface PointFreeRule {
|
|
|
|
// (ap i1 f)◦(ap i2 g) -> (ap i2 g)◦(ap i1 f)
|
|
@Override
|
|
- public <A> Optional<? extends PointFree<?>> doRewrite(final Type<A> type, final Type<?> middleType, final PointFree<? extends Function<?, ?>> first, final PointFree<? extends Function<?, ?>> second) {
|
|
+ public <A> PointFree<?> doRewrite(final Type<A> type, final Type<?> middleType, final PointFree<? extends Function<?, ?>> first, final PointFree<? extends Function<?, ?>> second) { // Yatopia - Cadmium port
|
|
if (first instanceof Apply<?, ?> && second instanceof Apply<?, ?>) {
|
|
final Apply<?, ?> applyFirst = (Apply<?, ?>) first;
|
|
final Apply<?, ?> applySecond = (Apply<?, ?>) second;
|
|
@@ -298,11 +319,11 @@ public interface PointFreeRule {
|
|
if (Objects.equals(fo, Optics.inj2()) && Objects.equals(so, Optics.inj1())) {
|
|
final Func<?, ?> firstArg = (Func<?, ?>) applyFirst.argType;
|
|
final Func<?, ?> secondArg = (Func<?, ?>) applySecond.argType;
|
|
- return Optional.of(cap(firstArg, secondArg, applyFirst, applySecond));
|
|
+ return cap(firstArg, secondArg, applyFirst, applySecond); // Yatopia - Cadmium port
|
|
}
|
|
}
|
|
}
|
|
- return Optional.empty();
|
|
+ return null; // Yatopia - Cadmium port
|
|
}
|
|
|
|
@SuppressWarnings("unchecked")
|
|
@@ -320,7 +341,7 @@ public interface PointFreeRule {
|
|
|
|
// Optic[o1] ◦ Optic[o2] -> Optic[o1 ◦ o2]
|
|
@Override
|
|
- public <A> Optional<? extends PointFree<A>> rewrite(final Type<A> type, final PointFree<A> expr) {
|
|
+ public <A> PointFree<A> rewrite(final Type<A> type, final PointFree<A> expr) { // Yatopia - Cadmium port
|
|
if (expr instanceof Comp<?, ?, ?>) {
|
|
final Comp<?, ?, ?> comp = (Comp<?, ?, ?>) expr;
|
|
final PointFree<? extends Function<?, ?>> first = comp.first;
|
|
@@ -328,10 +349,10 @@ public interface PointFreeRule {
|
|
if (first instanceof ProfunctorTransformer<?, ?, ?, ?> && second instanceof ProfunctorTransformer<?, ?, ?, ?>) {
|
|
final ProfunctorTransformer<?, ?, ?, ?> firstOptic = (ProfunctorTransformer<?, ?, ?, ?>) first;
|
|
final ProfunctorTransformer<?, ?, ?, ?> secondOptic = (ProfunctorTransformer<?, ?, ?, ?>) second;
|
|
- return Optional.of(cap(firstOptic, secondOptic));
|
|
+ return cap(firstOptic, secondOptic); // Yatopia - Cadmium port
|
|
}
|
|
}
|
|
- return Optional.empty();
|
|
+ return null; // Yatopia - Cadmium port
|
|
}
|
|
|
|
@SuppressWarnings("unchecked")
|
|
@@ -345,9 +366,8 @@ public interface PointFreeRule {
|
|
INSTANCE;
|
|
|
|
// (ap lens f)◦(ap lens g) -> (ap lens (f ◦ g))
|
|
- @SuppressWarnings("unchecked")
|
|
@Override
|
|
- public <A> Optional<? extends PointFree<?>> doRewrite(final Type<A> type, final Type<?> middleType, final PointFree<? extends Function<?, ?>> first, final PointFree<? extends Function<?, ?>> second) {
|
|
+ public <A> PointFree<?> doRewrite(final Type<A> type, final Type<?> middleType, final PointFree<? extends Function<?, ?>> first, final PointFree<? extends Function<?, ?>> second) { // Yatopia - Cadmium port
|
|
if (first instanceof Apply<?, ?> && second instanceof Apply<?, ?>) {
|
|
final Apply<?, ?> applyFirst = (Apply<?, ?>) first;
|
|
final Apply<?, ?> applySecond = (Apply<?, ?>) second;
|
|
@@ -364,17 +384,17 @@ public interface PointFreeRule {
|
|
}
|
|
}
|
|
}
|
|
- return Optional.empty();
|
|
+ return null; // Yatopia - Cadmium port
|
|
}
|
|
|
|
- private <R, A, B, C, S, T, U> Optional<? extends PointFree<R>> cap(final ProfunctorTransformer<S, T, A, B> l1, final ProfunctorTransformer<?, U, ?, C> l2, final PointFree<?> f1, final PointFree<?> f2, final Func<?, ?> firstType, final Func<?, ?> secondType) {
|
|
+ private <R, A, B, C, S, T, U> PointFree<R> cap(final ProfunctorTransformer<S, T, A, B> l1, final ProfunctorTransformer<?, U, ?, C> l2, final PointFree<?> f1, final PointFree<?> f2, final Func<?, ?> firstType, final Func<?, ?> secondType) { // Yatopia - Cadmium port
|
|
return cap2(l1, (ProfunctorTransformer<T, U, B, C>) l2, (PointFree<Function<B, C>>) f1, (PointFree<Function<A, B>>) f2, (Func<B, C>) firstType, (Func<A, B>) secondType);
|
|
}
|
|
|
|
- private <R, P extends K2, Proof extends K1, A, B, C, S, T, U> Optional<? extends PointFree<R>> cap2(final ProfunctorTransformer<S, T, A, B> l1, final ProfunctorTransformer<T, U, B, C> l2, final PointFree<Function<B, C>> f1, final PointFree<Function<A, B>> f2, final Func<B, C> firstType, final Func<A, B> secondType) {
|
|
+ private <R, P extends K2, Proof extends K1, A, B, C, S, T, U> PointFree<R> cap2(final ProfunctorTransformer<S, T, A, B> l1, final ProfunctorTransformer<T, U, B, C> l2, final PointFree<Function<B, C>> f1, final PointFree<Function<A, B>> f2, final Func<B, C> firstType, final Func<A, B> secondType) { // Yatopia - Cadmium port
|
|
final PointFree<Function<Function<A, C>, Function<S, U>>> lens = (PointFree<Function<Function<A, C>, Function<S, U>>>) (PointFree<?>) l1;
|
|
final PointFree<Function<A, C>> arg = Functions.comp(firstType.first(), f1, f2);
|
|
- return Optional.of((PointFree<R>) Functions.app(lens, arg, DSL.func(secondType.first(), firstType.second())));
|
|
+ return (PointFree<R>) Functions.app(lens, arg, DSL.func(secondType.first(), firstType.second())); // Yatopia - Cadmium port
|
|
}
|
|
}
|
|
|
|
@@ -382,15 +402,14 @@ public interface PointFreeRule {
|
|
INSTANCE;
|
|
|
|
// (fold g ◦ in) ◦ fold (f ◦ in) -> fold ( g ◦ f ◦ in), <== g ◦ in ◦ fold (f ◦ in) ◦ out == in ◦ fold (f ◦ in) ◦ out ◦ g <== g doesn't touch fold's index
|
|
- @SuppressWarnings("unchecked")
|
|
@Override
|
|
- public <A> Optional<? extends PointFree<?>> doRewrite(final Type<A> type, final Type<?> middleType, final PointFree<? extends Function<?, ?>> first, final PointFree<? extends Function<?, ?>> second) {
|
|
+ public <A> PointFree<?> doRewrite(final Type<A> type, final Type<?> middleType, final PointFree<? extends Function<?, ?>> first, final PointFree<? extends Function<?, ?>> second) { // Yatopia - Cadmium port
|
|
if (first instanceof Fold<?, ?> && second instanceof Fold<?, ?>) {
|
|
// fold (_) ◦ fold (_)
|
|
final Fold<?, ?> firstFold = (Fold<?, ?>) first;
|
|
final Fold<?, ?> secondFold = (Fold<?, ?>) second;
|
|
final RecursiveTypeFamily family = firstFold.aType.family();
|
|
- if (Objects.equals(family, secondFold.aType.family()) && firstFold.index == secondFold.index) {
|
|
+ if (firstFold.index==secondFold.index && Objects.equals(family, secondFold.aType.family())) { // Yatopia - Cadmium port
|
|
// same fold
|
|
final List<RewriteResult<?, ?>> newAlgebra = Lists.newArrayList();
|
|
|
|
@@ -399,8 +418,8 @@ public interface PointFreeRule {
|
|
boolean foundOne = false;
|
|
for (int i = 0; i < family.size(); i++) {
|
|
final RewriteResult<?, ?> firstAlgFunc = firstFold.algebra.apply(i);
|
|
- final RewriteResult<?, ?> secondAlgFunc = secondFold.algebra.apply(i);
|
|
final boolean firstId = Objects.equals(CompAssocRight.INSTANCE.rewriteOrNop(firstAlgFunc.view()).function(), Functions.id());
|
|
+ /*
|
|
final boolean secondId = Objects.equals(secondAlgFunc.view().function(), Functions.id());
|
|
|
|
if (firstId && secondId) {
|
|
@@ -408,15 +427,37 @@ public interface PointFreeRule {
|
|
} else if (!foundOne && !firstId && !secondId) {
|
|
newAlgebra.add(getCompose(firstAlgFunc, secondAlgFunc));
|
|
foundOne = true;
|
|
+ */
|
|
+ // Yatopia start - Cadmium port
|
|
+ if (firstId) {
|
|
+ final RewriteResult<?, ?> secondAlgFunc = secondFold.algebra.apply(i);
|
|
+ final boolean secondId = Objects.equals(secondAlgFunc.view().function(), Functions.id());
|
|
+
|
|
+ if (secondId) {
|
|
+ newAlgebra.add(firstFold.algebra.apply(i));
|
|
+ } else {
|
|
+ return null;
|
|
+ }
|
|
+ } else if (!foundOne) {
|
|
+ final RewriteResult<?, ?> secondAlgFunc = secondFold.algebra.apply(i);
|
|
+ final boolean secondId = Objects.equals(secondAlgFunc.view().function(), Functions.id());
|
|
+
|
|
+ if (!secondId) {
|
|
+ newAlgebra.add(getCompose(firstAlgFunc, secondAlgFunc));
|
|
+ foundOne = true;
|
|
+ } else {
|
|
+ return null;
|
|
+ }
|
|
+ // Yatopia end
|
|
} else {
|
|
- return Optional.empty();
|
|
+ return null; // Yatopia - Cadmium port
|
|
}
|
|
}
|
|
final Algebra algebra = new ListAlgebra("FusedSame", newAlgebra);
|
|
- return Optional.of((PointFree<A>) family.fold(algebra).apply(firstFold.index).view().function());
|
|
+ return family.fold(algebra).apply(firstFold.index).view().function(); // Yatopia - Cadmium port
|
|
}
|
|
}
|
|
- return Optional.empty();
|
|
+ return null; // Yatopia - Cadmium port
|
|
}
|
|
|
|
@SuppressWarnings("unchecked")
|
|
@@ -431,13 +472,14 @@ public interface PointFreeRule {
|
|
// (fold g ◦ in) ◦ fold (f ◦ in) -> fold ( g ◦ f ◦ in), <== g ◦ in ◦ fold (f ◦ in) ◦ out == in ◦ fold (f ◦ in) ◦ out ◦ g <== g doesn't touch fold's index
|
|
@SuppressWarnings("unchecked")
|
|
@Override
|
|
- public <A> Optional<? extends PointFree<?>> doRewrite(final Type<A> type, final Type<?> middleType, final PointFree<? extends Function<?, ?>> first, final PointFree<? extends Function<?, ?>> second) {
|
|
+ public <A> PointFree<?> doRewrite(final Type<A> type, final Type<?> middleType, final PointFree<? extends Function<?, ?>> first, final PointFree<? extends Function<?, ?>> second) { // Yatopia - Cadmium port
|
|
if (first instanceof Fold<?, ?> && second instanceof Fold<?, ?>) {
|
|
// fold (_) ◦ fold (_)
|
|
final Fold<?, ?> firstFold = (Fold<?, ?>) first;
|
|
final Fold<?, ?> secondFold = (Fold<?, ?>) second;
|
|
final RecursiveTypeFamily family = firstFold.aType.family();
|
|
- if (Objects.equals(family, secondFold.aType.family()) && firstFold.index == secondFold.index) {
|
|
+ // if (Objects.equals(family, secondFold.aType.family()) && firstFold.index == secondFold.index) {
|
|
+ if (firstFold.index==secondFold.index && Objects.equals(family, secondFold.aType.family())) { // Yatopia - Cadmium port
|
|
// same fold
|
|
final List<RewriteResult<?, ?>> newAlgebra = Lists.newArrayList();
|
|
|
|
@@ -460,46 +502,57 @@ public interface PointFreeRule {
|
|
// TODO: verify that this is enough
|
|
for (int i = 0; i < family.size(); i++) {
|
|
final RewriteResult<?, ?> firstAlgFunc = firstFold.algebra.apply(i);
|
|
+ // Yatopia start - Cadmium port
|
|
+ if (firstAlgFunc.recData().intersects(secondModifies)) {
|
|
+ // outer function depends on the result of the inner one
|
|
+ return null;
|
|
+ }
|
|
+ // Yatopia end
|
|
final RewriteResult<?, ?> secondAlgFunc = secondFold.algebra.apply(i);
|
|
+ /*
|
|
final PointFree<?> firstF = CompAssocRight.INSTANCE.rewriteOrNop(firstAlgFunc.view()).function();
|
|
final PointFree<?> secondF = CompAssocRight.INSTANCE.rewriteOrNop(secondAlgFunc.view()).function();
|
|
final boolean firstId = Objects.equals(firstF, Functions.id());
|
|
final boolean secondId = Objects.equals(secondF, Functions.id());
|
|
if (firstAlgFunc.recData().intersects(secondModifies) || secondAlgFunc.recData().intersects(firstModifies)) {
|
|
+ */
|
|
+ // Yatopia start - Cadmium port
|
|
+ if (secondAlgFunc.recData().intersects(firstModifies)) {
|
|
// outer function depends on the result of the inner one
|
|
- return Optional.empty();
|
|
+ return null;
|
|
}
|
|
- if (firstId) {
|
|
+ // Yatopia end
|
|
+ if (Objects.equals(CompAssocRight.INSTANCE.rewriteOrNop(firstAlgFunc.view()).function(), Functions.id())) { // Yatopia - Cadmium port
|
|
newAlgebra.add(secondAlgFunc);
|
|
- } else if (secondId) {
|
|
+ } else if (Objects.equals(CompAssocRight.INSTANCE.rewriteOrNop(secondAlgFunc.view()).function(), Functions.id())) { // Yatopia - Cadmium port
|
|
newAlgebra.add(firstAlgFunc);
|
|
} else {
|
|
- return Optional.empty();
|
|
+ return null; // Yatopia - Cadmium port
|
|
}
|
|
}
|
|
// have new algebra - make a new fold
|
|
|
|
final Algebra algebra = new ListAlgebra("FusedDifferent", newAlgebra);
|
|
- return Optional.of((PointFree<A>) family.fold(algebra).apply(firstFold.index).view().function());
|
|
+ return family.fold(algebra).apply(firstFold.index).view().function(); // Yatopia - Cadmium port
|
|
}
|
|
}
|
|
- return Optional.empty();
|
|
+ return null; // Yatopia - Cadmium port
|
|
}
|
|
}
|
|
|
|
/*final class ReflexCata implements Rule {
|
|
@SuppressWarnings("unchecked")
|
|
@Override
|
|
- public <A> Optional<? extends PF<A>> rewrite(final Type<A> type, final PF<A> expr) {
|
|
+ public <A> PF<A> rewrite(final Type<A> type, final PF<A> expr) { // Yatopia - Cadmium port
|
|
if (type instanceof Type.Func<?, ?> && expr instanceof PF.Cata<?, ?, ?, ?>) {
|
|
final Type.Func<?, ?> funcType = (Type.Func<?, ?>) type;
|
|
final PF.Cata<?, ?, ?, ?> cata = (PF.Cata<?, ?, ?, ?>) expr;
|
|
// TODO better equality
|
|
if (Objects.equals(cata.alg, PF.genBF(cata.family.to)) && Objects.equals(funcType.first, funcType.second)) {
|
|
- return Optional.of((PF<A>) PF.id());
|
|
+ return (PF<A>) PF.id(); // Yatopia - Cadmium port
|
|
}
|
|
}
|
|
- return Optional.empty();
|
|
+ return null; // Yatopia - Cadmium port
|
|
}
|
|
}*/
|
|
|
|
@@ -518,14 +571,20 @@ public interface PointFreeRule {
|
|
this.rules = ImmutableList.copyOf(rules);
|
|
}
|
|
|
|
+ // Yatopia start - Cadmium port
|
|
@Override
|
|
- public <A> Optional<? extends PointFree<A>> rewrite(final Type<A> type, final PointFree<A> expr) {
|
|
- Optional<? extends PointFree<A>> result = Optional.of(expr);
|
|
+ public <A> PointFree<A> rewrite(final Type<A> type, final PointFree<A> expr) {
|
|
+ PointFree<A> result = expr;
|
|
for (final Supplier<PointFreeRule> rule : rules) {
|
|
- result = result.flatMap(pf -> rule.get().<A>rewrite(type, pf));
|
|
+ if (result==null) {
|
|
+ return null;
|
|
+ }
|
|
+
|
|
+ result = rule.get().rewrite(type, result);
|
|
}
|
|
return result;
|
|
}
|
|
+ // Yatopia end
|
|
|
|
@Override
|
|
public boolean equals(final Object obj) {
|
|
@@ -546,30 +605,28 @@ public interface PointFreeRule {
|
|
}
|
|
|
|
static PointFreeRule orElse(final PointFreeRule first, final PointFreeRule second) {
|
|
- return new OrElse(first, () -> second);
|
|
- }
|
|
-
|
|
- static PointFreeRule orElseStrict(final PointFreeRule first, final Supplier<PointFreeRule> second) {
|
|
return new OrElse(first, second);
|
|
}
|
|
|
|
final class OrElse implements PointFreeRule {
|
|
protected final PointFreeRule first;
|
|
- protected final Supplier<PointFreeRule> second;
|
|
+ protected final PointFreeRule second; // Yatopia - Cadmium port
|
|
|
|
- public OrElse(final PointFreeRule first, final Supplier<PointFreeRule> second) {
|
|
+ public OrElse(final PointFreeRule first, final PointFreeRule second) { // Yatopia - Cadmium port
|
|
this.first = first;
|
|
this.second = second;
|
|
}
|
|
|
|
+ // Yatopia start - Cadmium port
|
|
@Override
|
|
- public <A> Optional<? extends PointFree<A>> rewrite(final Type<A> type, final PointFree<A> expr) {
|
|
- final Optional<? extends PointFree<A>> view = first.rewrite(type, expr);
|
|
- if (view.isPresent()) {
|
|
+ public <A> PointFree<A> rewrite(final Type<A> type, final PointFree<A> expr) {
|
|
+ final PointFree<A> view = first.rewrite(type, expr);
|
|
+ if (view!=null) {
|
|
return view;
|
|
}
|
|
- return second.get().rewrite(type, expr);
|
|
+ return second.rewrite(type, expr);
|
|
}
|
|
+ // Yatopia end
|
|
|
|
@Override
|
|
public boolean equals(final Object obj) {
|
|
@@ -589,6 +646,42 @@ public interface PointFreeRule {
|
|
}
|
|
}
|
|
|
|
+ // Yatopia start - Cadmium port
|
|
+ final class OrElseStrict implements PointFreeRule {
|
|
+ protected final PointFreeRule rule;
|
|
+
|
|
+ public OrElseStrict(final PointFreeRule rule) {
|
|
+ this.rule = rule;
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public <A> PointFree<A> rewrite(final Type<A> type, final PointFree<A> expr) {
|
|
+ final PointFree<A> view = rule.rewrite(type, expr);
|
|
+ if (view!=null) {
|
|
+ return view;
|
|
+ }
|
|
+ return expr.one(this, type);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public boolean equals(final Object obj) {
|
|
+ if (obj == this) {
|
|
+ return true;
|
|
+ }
|
|
+ if (!(obj instanceof OrElse)) {
|
|
+ return false;
|
|
+ }
|
|
+ final OrElse that = (OrElse) obj;
|
|
+ return Objects.equals(rule, that.first);
|
|
+ }
|
|
+
|
|
+ @Override
|
|
+ public int hashCode() {
|
|
+ return Objects.hash(rule);
|
|
+ }
|
|
+ }
|
|
+ // Yatopia end
|
|
+
|
|
static PointFreeRule all(final PointFreeRule rule) {
|
|
return new All(rule);
|
|
}
|
|
@@ -598,7 +691,7 @@ public interface PointFreeRule {
|
|
}
|
|
|
|
static PointFreeRule once(final PointFreeRule rule) {
|
|
- return orElseStrict(rule, () -> one(once(rule)));
|
|
+ return new OrElseStrict(rule); // Yatopia - Cadmium port
|
|
}
|
|
|
|
static PointFreeRule many(final PointFreeRule rule) {
|
|
@@ -617,7 +710,7 @@ public interface PointFreeRule {
|
|
}
|
|
|
|
@Override
|
|
- public <A> Optional<? extends PointFree<A>> rewrite(final Type<A> type, final PointFree<A> expr) {
|
|
+ public <A> PointFree<A> rewrite(final Type<A> type, final PointFree<A> expr) { // Yatopia - Cadmium port
|
|
return expr.all(rule, type);
|
|
}
|
|
|
|
@@ -647,7 +740,7 @@ public interface PointFreeRule {
|
|
}
|
|
|
|
@Override
|
|
- public <A> Optional<? extends PointFree<A>> rewrite(final Type<A> type, final PointFree<A> expr) {
|
|
+ public <A> PointFree<A> rewrite(final Type<A> type, final PointFree<A> expr) { // Yatopia - Cadmium port
|
|
return expr.one(rule, type);
|
|
}
|
|
|
|
@@ -676,17 +769,22 @@ public interface PointFreeRule {
|
|
this.rule = rule;
|
|
}
|
|
|
|
+ // Yatopia start - Cadmium port
|
|
@Override
|
|
- public <A> Optional<? extends PointFree<A>> rewrite(final Type<A> type, final PointFree<A> expr) {
|
|
- Optional<? extends PointFree<A>> result = Optional.of(expr);
|
|
+ public <A> PointFree<A> rewrite(final Type<A> type, final PointFree<A> expr) {
|
|
+ PointFree<A> result = expr;
|
|
while (true) {
|
|
- final Optional<? extends PointFree<A>> newResult = result.flatMap(e -> rule.rewrite(type, e).map(r -> r));
|
|
- if (!newResult.isPresent()) {
|
|
+ if (result==null) {
|
|
+ return null;
|
|
+ }
|
|
+ final PointFree<A> newResult = rule.rewrite(type, result);
|
|
+ if (newResult==null) {
|
|
return result;
|
|
}
|
|
result = newResult;
|
|
}
|
|
}
|
|
+ // Yatopia end
|
|
|
|
@Override
|
|
public boolean equals(final Object o) {
|
|
diff --git a/src/main/java/com/mojang/datafixers/optics/IdAdapter.java b/src/main/java/com/mojang/datafixers/optics/IdAdapter.java
|
|
index 3f1793aca685a627d0e925d037f663a257522d8d..0e4bf4b58710be135e6573ccff3f8c0a2a41191a 100644
|
|
--- a/src/main/java/com/mojang/datafixers/optics/IdAdapter.java
|
|
+++ b/src/main/java/com/mojang/datafixers/optics/IdAdapter.java
|
|
@@ -3,6 +3,14 @@
|
|
package com.mojang.datafixers.optics;
|
|
|
|
class IdAdapter<S, T> implements Adapter<S, T, S, T> {
|
|
+ // Yatopia start - Cadmium port
|
|
+ private static final Adapter<?, ?, ?, ?> INSTANCE = new IdAdapter<>();
|
|
+
|
|
+ private IdAdapter() {
|
|
+
|
|
+ }
|
|
+ // Yatopia end
|
|
+
|
|
@Override
|
|
public S from(final S s) {
|
|
return s;
|
|
@@ -22,4 +30,11 @@ class IdAdapter<S, T> implements Adapter<S, T, S, T> {
|
|
public String toString() {
|
|
return "id";
|
|
}
|
|
+
|
|
+ // Yatopia start - Cadmium port
|
|
+ @SuppressWarnings("unchecked")
|
|
+ public static <S, T> Adapter<S, T, S, T> instance() {
|
|
+ return (Adapter<S, T, S, T>) INSTANCE;
|
|
+ }
|
|
+ // Yatopia end
|
|
}
|
|
diff --git a/src/main/java/com/mojang/datafixers/optics/Inj1.java b/src/main/java/com/mojang/datafixers/optics/Inj1.java
|
|
index 8c56955c9d6c3d6021d5c9fda452e39774ac587c..4813f335cd536d1b32b9095dbd76e18c22a6dea1 100644
|
|
--- a/src/main/java/com/mojang/datafixers/optics/Inj1.java
|
|
+++ b/src/main/java/com/mojang/datafixers/optics/Inj1.java
|
|
@@ -5,6 +5,14 @@ package com.mojang.datafixers.optics;
|
|
import com.mojang.datafixers.util.Either;
|
|
|
|
public final class Inj1<F, G, F2> implements Prism<Either<F, G>, Either<F2, G>, F, F2> {
|
|
+ // Yatopia start - Cadmium port
|
|
+ private static final Inj1<?, ?, ?> INSTANCE = new Inj1<>();
|
|
+
|
|
+ private Inj1() {
|
|
+
|
|
+ }
|
|
+ // Yatopia end
|
|
+
|
|
@Override
|
|
public Either<Either<F2, G>, F> match(final Either<F, G> either) {
|
|
return either.map(Either::right, g -> Either.left(Either.right(g)));
|
|
@@ -24,4 +32,11 @@ public final class Inj1<F, G, F2> implements Prism<Either<F, G>, Either<F2, G>,
|
|
public boolean equals(final Object obj) {
|
|
return obj instanceof Inj1<?, ?, ?>;
|
|
}
|
|
+
|
|
+ // Yatopia start - Cadmium port
|
|
+ @SuppressWarnings("unchecked")
|
|
+ public static <F, G, F2> Inj1<F, G, F2> instance() {
|
|
+ return (Inj1<F, G, F2>) INSTANCE;
|
|
+ }
|
|
+ // Yatopia end
|
|
}
|
|
diff --git a/src/main/java/com/mojang/datafixers/optics/Inj2.java b/src/main/java/com/mojang/datafixers/optics/Inj2.java
|
|
index 2f95715f310faec6e43c715cbf204a092bfc107e..ad2400ccdb159cbf8b882d0b5afc53d3e220f770 100644
|
|
--- a/src/main/java/com/mojang/datafixers/optics/Inj2.java
|
|
+++ b/src/main/java/com/mojang/datafixers/optics/Inj2.java
|
|
@@ -2,9 +2,18 @@
|
|
// Licensed under the MIT license.
|
|
package com.mojang.datafixers.optics;
|
|
|
|
+import com.mojang.datafixers.DataFixerBuilder; // Yatopia - Cadmium port
|
|
import com.mojang.datafixers.util.Either;
|
|
|
|
public final class Inj2<F, G, G2> implements Prism<Either<F, G>, Either<F, G2>, G, G2> {
|
|
+ // Yatopia start - Cadmium port
|
|
+ private static final Inj2<?, ?, ?> INSTANCE = new Inj2<>();
|
|
+
|
|
+ private Inj2() {
|
|
+
|
|
+ }
|
|
+ // Yatopia end
|
|
+
|
|
@Override
|
|
public Either<Either<F, G2>, G> match(final Either<F, G> either) {
|
|
return either.map(f -> Either.left(Either.left(f)), Either::right);
|
|
@@ -24,4 +33,11 @@ public final class Inj2<F, G, G2> implements Prism<Either<F, G>, Either<F, G2>,
|
|
public boolean equals(final Object obj) {
|
|
return obj instanceof Inj2<?, ?, ?>;
|
|
}
|
|
+
|
|
+ // Yatopia start - Cadmium port
|
|
+ @SuppressWarnings("unchecked")
|
|
+ public static <F, G, G2> Inj2<F, G, G2> instance() {
|
|
+ return (Inj2<F, G, G2>) INSTANCE;
|
|
+ }
|
|
+ // Yatopia end
|
|
}
|
|
diff --git a/src/main/java/com/mojang/datafixers/optics/Optics.java b/src/main/java/com/mojang/datafixers/optics/Optics.java
|
|
index 4bf469df6a9092a554df4dafdbfe37f51da28f32..cec492b8e633adedbf6c4d83cf257f640412de06 100644
|
|
--- a/src/main/java/com/mojang/datafixers/optics/Optics.java
|
|
+++ b/src/main/java/com/mojang/datafixers/optics/Optics.java
|
|
@@ -65,7 +65,7 @@ public abstract class Optics {
|
|
}
|
|
|
|
public static <S, T> Adapter<S, T, S, T> id() {
|
|
- return new IdAdapter<>();
|
|
+ return IdAdapter.instance(); // Yatopia - Cadmium port
|
|
}
|
|
|
|
public static <S, T, A, B> Adapter<S, T, A, B> adapter(final Function<S, A> from, final Function<B, T> to) {
|
|
@@ -223,19 +223,19 @@ public abstract class Optics {
|
|
}
|
|
|
|
public static <F, G, F2> Proj1<F, G, F2> proj1() {
|
|
- return new Proj1<>();
|
|
+ return Proj1.instance(); // Yatopia - Cadmium port
|
|
}
|
|
|
|
public static <F, G, G2> Proj2<F, G, G2> proj2() {
|
|
- return new Proj2<>();
|
|
+ return Proj2.instance(); // Yatopia - Cadmium port
|
|
}
|
|
|
|
public static <F, G, F2> Inj1<F, G, F2> inj1() {
|
|
- return new Inj1<>();
|
|
+ return Inj1.instance(); // Yatopia - Cadmium port
|
|
}
|
|
|
|
public static <F, G, G2> Inj2<F, G, G2> inj2() {
|
|
- return new Inj2<>();
|
|
+ return Inj2.instance(); // Yatopia - Cadmium port
|
|
}
|
|
|
|
/*public static <Proof extends Cartesian.Mu, S1, S2, T1, T2, A, B> Optic<Proof, Either<S1, S2>, Either<T1, T2>, A, B> choosing(final Optic<? super Profunctor.Mu, S1, T1, A, B> first, final Optic<? super Profunctor.Mu, S2, T2, A, B> second) {
|
|
diff --git a/src/main/java/com/mojang/datafixers/optics/Proj1.java b/src/main/java/com/mojang/datafixers/optics/Proj1.java
|
|
index 488e4cd9a87178a441eda0ee5bff9c5feca69e6d..ae8850e52feeff51f61c4527c792446ef5e23344 100644
|
|
--- a/src/main/java/com/mojang/datafixers/optics/Proj1.java
|
|
+++ b/src/main/java/com/mojang/datafixers/optics/Proj1.java
|
|
@@ -5,6 +5,14 @@ package com.mojang.datafixers.optics;
|
|
import com.mojang.datafixers.util.Pair;
|
|
|
|
public final class Proj1<F, G, F2> implements Lens<Pair<F, G>, Pair<F2, G>, F, F2> {
|
|
+ // Yatopia start - Cadmium port
|
|
+ private static final Proj1<?, ?, ?> INSTANCE = new Proj1<>();
|
|
+
|
|
+ private Proj1() {
|
|
+
|
|
+ }
|
|
+ // Yatopia end
|
|
+
|
|
@Override
|
|
public F view(final Pair<F, G> pair) {
|
|
return pair.getFirst();
|
|
@@ -24,4 +32,11 @@ public final class Proj1<F, G, F2> implements Lens<Pair<F, G>, Pair<F2, G>, F, F
|
|
public boolean equals(final Object obj) {
|
|
return obj instanceof Proj1<?, ?, ?>;
|
|
}
|
|
+
|
|
+ // Yatopia start - Cadmium port
|
|
+ @SuppressWarnings("unchecked")
|
|
+ public static <F, G, F2> Proj1<F, G, F2> instance() {
|
|
+ return (Proj1<F, G, F2>) INSTANCE;
|
|
+ }
|
|
+ // Yatopia end
|
|
}
|
|
diff --git a/src/main/java/com/mojang/datafixers/optics/Proj2.java b/src/main/java/com/mojang/datafixers/optics/Proj2.java
|
|
index 3bd3689115f25d34fceaa8f8f915c21656267af5..76d05449689808e3d0435aea7480dcad134730f1 100644
|
|
--- a/src/main/java/com/mojang/datafixers/optics/Proj2.java
|
|
+++ b/src/main/java/com/mojang/datafixers/optics/Proj2.java
|
|
@@ -5,6 +5,14 @@ package com.mojang.datafixers.optics;
|
|
import com.mojang.datafixers.util.Pair;
|
|
|
|
public final class Proj2<F, G, G2> implements Lens<Pair<F, G>, Pair<F, G2>, G, G2> {
|
|
+ // Yatopia start - Cadmium port
|
|
+ private static final Proj2<?, ?, ?> INSTANCE = new Proj2<>();
|
|
+
|
|
+ private Proj2() {
|
|
+
|
|
+ }
|
|
+ // Yatopia end
|
|
+
|
|
@Override
|
|
public G view(final Pair<F, G> pair) {
|
|
return pair.getSecond();
|
|
@@ -24,4 +32,11 @@ public final class Proj2<F, G, G2> implements Lens<Pair<F, G>, Pair<F, G2>, G, G
|
|
public boolean equals(final Object obj) {
|
|
return obj instanceof Proj2<?, ?, ?>;
|
|
}
|
|
+
|
|
+ // Yatopia start - Cadmium port
|
|
+ @SuppressWarnings("unchecked")
|
|
+ public static <F, G2, G> Proj2<F, G, G2> instance() {
|
|
+ return (Proj2<F, G, G2>) INSTANCE;
|
|
+ }
|
|
+ // Yatopia end
|
|
}
|
|
diff --git a/src/main/java/com/mojang/datafixers/types/Type.java b/src/main/java/com/mojang/datafixers/types/Type.java
|
|
index 4592da3c75e639164d10cc05518c27d8f488a103..53ab2332aaff5970e5f3825734906fc7f1f8c53c 100644
|
|
--- a/src/main/java/com/mojang/datafixers/types/Type.java
|
|
+++ b/src/main/java/com/mojang/datafixers/types/Type.java
|
|
@@ -87,7 +87,7 @@ public abstract class Type<A> implements App<Type.Mu, A> {
|
|
}
|
|
|
|
public Optional<RewriteResult<A, ?>> everywhere(final TypeRewriteRule rule, final PointFreeRule optimizationRule, final boolean recurse, final boolean checkIndex) {
|
|
- final TypeRewriteRule rule2 = TypeRewriteRule.seq(TypeRewriteRule.orElse(rule, TypeRewriteRule::nop), TypeRewriteRule.all(TypeRewriteRule.everywhere(rule, optimizationRule, recurse, checkIndex), recurse, checkIndex));
|
|
+ final TypeRewriteRule rule2 = TypeRewriteRule.seq(TypeRewriteRule.orElse(rule, TypeRewriteRule.Nop.INSTANCE), TypeRewriteRule.all(TypeRewriteRule.everywhere(rule, optimizationRule, recurse, checkIndex), recurse, checkIndex)); // Yatopia - Cadmium port
|
|
return rewrite(rule2, optimizationRule);
|
|
}
|
|
|
|
@@ -187,7 +187,17 @@ public abstract class Type<A> implements App<Type.Mu, A> {
|
|
});
|
|
|
|
if (ref.getValue() != null) {
|
|
- Optional<RewriteResult<A, ?>> result = rule.rewrite(this).flatMap(r -> r.view().rewrite(fRule).map(view -> RewriteResult.create(view, r.recData())));
|
|
+ // Yatopia start - Cadmium port
|
|
+ Optional<RewriteResult<A, ?>> result = rule.rewrite(this).flatMap(r -> {
|
|
+ View<A, ?> view = r.view().rewrite(fRule);
|
|
+
|
|
+ if (view!=null) {
|
|
+ return Optional.of(RewriteResult.create(view, r.recData()));
|
|
+ }
|
|
+
|
|
+ return Optional.empty();
|
|
+ });
|
|
+ // Yatopia end
|
|
REWRITE_CACHE.put(key, result);
|
|
pending.complete(result);
|
|
PENDING_REWRITE_CACHE.remove(key);
|