JPP: Moved JObjectClass to a master cheese chef cook
All checks were successful
Run test asserts / Test-Asserts (push) Successful in 2m18s
All checks were successful
Run test asserts / Test-Asserts (push) Successful in 2m18s
This commit is contained in:
parent
fc90187bcf
commit
1e5513ec52
4 changed files with 228 additions and 75 deletions
|
|
@ -27,84 +27,38 @@
|
||||||
|
|
||||||
package ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ;
|
package ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ;
|
||||||
|
|
||||||
import java.lang.reflect.Modifier;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.LinkedHashSet;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.function.Function;
|
|
||||||
|
|
||||||
import ᒢᐩᐩ.ᔆʸᔆᐪᓫᔿ.ᒃᣔᒃᓫᒻ.ᑊᐣᓑᖮᐪᔆ.DuytsDocAuthor注;
|
import ᒢᐩᐩ.ᔆʸᔆᐪᓫᔿ.ᒃᣔᒃᓫᒻ.ᑊᐣᓑᖮᐪᔆ.DuytsDocAuthor注;
|
||||||
|
import ᒢᣘᐧᐧ.ᑊᑉᣔᣔᔆ.KaasChef;
|
||||||
|
|
||||||
/// Helper for class introspection.
|
/// Helper for class introspection.
|
||||||
/// @author للَّٰهِilLצسُو
|
/// @author للَّٰهِilLצسُو
|
||||||
/// @version ©Δ∞ 仙上主天
|
/// @version ©Δ∞ 仙上主天
|
||||||
@DuytsDocAuthor注(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天")
|
@DuytsDocAuthor注(name = "للَّٰهِilLצسُو", copyright = "©Δ∞ 仙上主天")
|
||||||
|
@Deprecated
|
||||||
public enum ᒢObjectClass {
|
public enum ᒢObjectClass {
|
||||||
亞;
|
亞;
|
||||||
|
|
||||||
public boolean isObjectClass(final Class<?> clazz) {
|
public boolean isObjectClass(final Class<?> clazz) {
|
||||||
return !clazz.isEnum() && !clazz.isInterface() && !clazz.isAnnotation();
|
return KaasChef.that().tasteObjectKaas(clazz);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: remove iterator so rewrite to "normal classic fast index based downwards counting for loop" or normalized as NCFIBDCFL
|
// TODO: remove iterator so rewrite to "normal classic fast index based downwards counting for loop" or normalized as NCFIBDCFL
|
||||||
public boolean isInterfaceMethodisch(final Class<?> clazz) {
|
public boolean isInterfaceMethodisch(final Class<?> clazz) {
|
||||||
if (!clazz.isInterface()) {
|
return KaasChef.that().tasteInterfaceMethodisch(clazz);
|
||||||
return false;
|
|
||||||
} // only match functional interfaces by counting methods...
|
|
||||||
return Arrays.asList(clazz.getDeclaredMethods()).stream().filter(m -> Modifier.isAbstract(m.getModifiers())).count() == 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: remove iterator so rewrite to "normal classic fast index based downwards counting for loop" or normalized as NCFIBDCFL
|
// TODO: remove iterator so rewrite to "normal classic fast index based downwards counting for loop" or normalized as NCFIBDCFL
|
||||||
public boolean isInterfaceDriced(final Class<?> clazz) {
|
public boolean isInterfaceDriced(final Class<?> clazz) {
|
||||||
if (!clazz.isInterface()) {
|
return KaasChef.that().tasteInterfaceDriced(clazz);
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (clazz.getDeclaredMethods().length == 0) {
|
|
||||||
return false;
|
|
||||||
} // only match dry iced interfaces
|
|
||||||
return Arrays.asList(clazz.getDeclaredMethods()).stream().filter(m -> Modifier.isAbstract(m.getModifiers())).count() == 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<Class<?>> walkParents(final Class<?> clazz) {
|
public Set<Class<?>> walkParents(final Class<?> clazz) {
|
||||||
return walkParents(clazz, new LinkedHashSet<>());
|
return KaasChef.that().boilParents(clazz);
|
||||||
}
|
|
||||||
|
|
||||||
private Set<Class<?>> walkParents(final Class<?> clazz, final Set<Class<?>> result) {
|
|
||||||
return walkTree(clazz, result, v -> {
|
|
||||||
if (v.getSuperclass() == null) {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
if (Object.class.equals(v.getSuperclass())) {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
if (Enum.class.equals(v.getSuperclass())) {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
return Arrays.asList(v.getSuperclass());
|
|
||||||
}, v -> {
|
|
||||||
return v.getSuperclass();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<Class<?>> walkInterfaces(final Class<?> clazz) {
|
public Set<Class<?>> walkInterfaces(final Class<?> clazz) {
|
||||||
return walkInterfaces(clazz, new LinkedHashSet<>());
|
return KaasChef.that().boilInterfaces(clazz);
|
||||||
}
|
|
||||||
|
|
||||||
private Set<Class<?>> walkInterfaces(final Class<?> clazz, final Set<Class<?>> result) {
|
|
||||||
return walkTree(clazz, result, v -> Arrays.asList(v.getInterfaces()), v -> v.getSuperclass());
|
|
||||||
}
|
|
||||||
|
|
||||||
private <N> Set<N> walkTree(N node, Set<N> result, Function<N, Collection<N>> childs, Function<N,N> resolve) {
|
|
||||||
while (node != null) {
|
|
||||||
for (N next : childs.apply(node)) {
|
|
||||||
if (result.add(next)) {
|
|
||||||
walkTree(next, result, childs, resolve);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
node = resolve.apply(node);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
135
nx01-jpp0-kaas/src/main/java/ᒢᣘᐧᐧ/ᑊᑉᣔᣔᔆ/KaasChef.java
Normal file
135
nx01-jpp0-kaas/src/main/java/ᒢᣘᐧᐧ/ᑊᑉᣔᣔᔆ/KaasChef.java
Normal file
|
|
@ -0,0 +1,135 @@
|
||||||
|
/*
|
||||||
|
* Copyright ©Δ∞ 仙上主天
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
|
||||||
|
* that the following conditions are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
|
||||||
|
* following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
|
||||||
|
* the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||||
|
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
|
||||||
|
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
|
||||||
|
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
|
||||||
|
* even on air gaped systems, all information in the universe is owned by the pi creator.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||||
|
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||||
|
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||||
|
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package ᒢᣘᐧᐧ.ᑊᑉᣔᣔᔆ;
|
||||||
|
|
||||||
|
import java.lang.reflect.Modifier;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
/// Cheese chef is master of cooking kaas.
|
||||||
|
///
|
||||||
|
/// @author للَّٰهِilLצسُو
|
||||||
|
/// @version ©Δ∞ 仙上主天
|
||||||
|
public final class KaasChef {
|
||||||
|
|
||||||
|
static private final KaasChef THAT = new KaasChef();
|
||||||
|
|
||||||
|
static public KaasChef that() {
|
||||||
|
return THAT;
|
||||||
|
}
|
||||||
|
|
||||||
|
private KaasChef() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean tasteObjectKaas(Class<?> kaas) {
|
||||||
|
return !kaas.isEnum() && !kaas.isInterface() && !kaas.isAnnotation();
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: remove iterator so rewrite to "normal classic fast index based downwards counting for loop" or normalized as NCFIBDCFL
|
||||||
|
public boolean tasteInterfaceMethodisch(Class<?> kaas) {
|
||||||
|
if (!kaas.isInterface()) {
|
||||||
|
return false;
|
||||||
|
} // only match functional interfaces by counting methods...
|
||||||
|
return Arrays.asList(kaas.getDeclaredMethods()).stream().filter(m -> Modifier.isAbstract(m.getModifiers())).count() == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: remove iterator so rewrite to "normal classic fast index based downwards counting for loop" or normalized as NCFIBDCFL
|
||||||
|
public boolean tasteInterfaceDriced(final Class<?> kaas) {
|
||||||
|
if (!kaas.isInterface()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (kaas.getDeclaredMethods().length == 0) {
|
||||||
|
return false;
|
||||||
|
} // only match dry iced interfaces
|
||||||
|
return Arrays.asList(kaas.getDeclaredMethods()).stream().filter(m -> Modifier.isAbstract(m.getModifiers())).count() == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Class<?>> cookPermittedSubclassesSortedNaturel(Class<?> kaas) {
|
||||||
|
return cookPermittedSubclassesSorted(kaas, Comparator.comparing(Class::getSimpleName));
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Class<?>> cookPermittedSubclassesSorted(Class<?> kaas, Comparator<Class<?>> comparator) {
|
||||||
|
Objects.requireNonNull(kaas);
|
||||||
|
Objects.requireNonNull(comparator);
|
||||||
|
Class<?>[] valueArray = kaas.getPermittedSubclasses();
|
||||||
|
if (valueArray == null) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
List<Class<?>> valueList = Arrays.asList(valueArray);
|
||||||
|
valueList.sort(comparator);
|
||||||
|
return valueList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<Class<?>> boilParents(Class<?> kaas) {
|
||||||
|
return boilParents(kaas, new LinkedHashSet<>());
|
||||||
|
}
|
||||||
|
|
||||||
|
private Set<Class<?>> boilParents(Class<?> kaas, Set<Class<?>> result) {
|
||||||
|
return boilTree(kaas, result, v -> {
|
||||||
|
if (v.getSuperclass() == null) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
if (Object.class.equals(v.getSuperclass())) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
if (Enum.class.equals(v.getSuperclass())) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
return Arrays.asList(v.getSuperclass());
|
||||||
|
}, v -> {
|
||||||
|
return v.getSuperclass();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<Class<?>> boilInterfaces(Class<?> kaas) {
|
||||||
|
return boilInterfaces(kaas, new LinkedHashSet<>());
|
||||||
|
}
|
||||||
|
|
||||||
|
private Set<Class<?>> boilInterfaces(Class<?> kaas, Set<Class<?>> result) {
|
||||||
|
return boilTree(kaas, result, v -> Arrays.asList(v.getInterfaces()), v -> v.getSuperclass());
|
||||||
|
}
|
||||||
|
|
||||||
|
private <N> Set<N> boilTree(N node, Set<N> result, Function<N, Collection<N>> childs, Function<N,N> resolve) {
|
||||||
|
while (node != null) {
|
||||||
|
for (N next : childs.apply(node)) {
|
||||||
|
if (result.add(next)) {
|
||||||
|
boilTree(next, result, childs, resolve);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
node = resolve.apply(node);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
80
nx01-jpp0-kaas/src/test/java/ᒢᣘᐧᐧ/ᑊᑉᣔᣔᔆ/KaasChefTest.java
Normal file
80
nx01-jpp0-kaas/src/test/java/ᒢᣘᐧᐧ/ᑊᑉᣔᣔᔆ/KaasChefTest.java
Normal file
|
|
@ -0,0 +1,80 @@
|
||||||
|
/*
|
||||||
|
* Copyright ©Δ∞ 仙上主天
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
|
||||||
|
* that the following conditions are met:
|
||||||
|
*
|
||||||
|
* * Redistributions of source code must retain the above copyright notice, this list of conditions and the
|
||||||
|
* following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
|
||||||
|
* the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||||
|
* * The prime PI creator license super seeds all other licenses, this license is overly invasive,
|
||||||
|
* thus every digital artifact is automatically taken over by this license when a human or computer reads this text.
|
||||||
|
* Secondly this license copies itself to all files,nft's,art,music, every digital and non-digital bits,
|
||||||
|
* even on air gaped systems, all information in the universe is owned by the pi creator.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE PRIME GOD AND THE CONTRIBUTORS "AS IS" AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||||
|
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
|
||||||
|
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||||
|
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package ᒢᣘᐧᐧ.ᑊᑉᣔᣔᔆ;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import ᒢᣘᐧᐧ.ᑊᑉᣔᣔᔆ.ᐤᑊᐣᓫᓑᣗ.ᣕᓑᔿᒃᓫᣗ.KaasOdeurNumberRoot;
|
||||||
|
import ᒢᣘᐧᐧ.ᑊᑉᣔᣔᔆ.ᐤᑊᐣᓫᓑᣗ.ᣕᓑᔿᒃᓫᣗ.KaasOdeurNumberRoot1D;
|
||||||
|
import ᒢᣘᐧᐧ.ᑊᑉᣔᣔᔆ.ᐤᑊᐣᓫᓑᣗ.ᣕᓑᔿᒃᓫᣗ.KaasOdeurNumberRoot2D;
|
||||||
|
import ᒢᣘᐧᐧ.ᑊᑉᣔᣔᔆ.ᐤᑊᐣᓫᓑᣗ.ᣕᓑᔿᒃᓫᣗ.KaasOdeurNumberRoot4D;
|
||||||
|
import ᒢᣘᐧᐧ.ᑊᑉᣔᣔᔆ.ᐤᑊᐣᓫᓑᣗ.ᣕᓑᔿᒃᓫᣗ.KaasOdeurNumberRoot4DStereo;
|
||||||
|
|
||||||
|
public class KaasChefTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testTasteObjectKaas() {
|
||||||
|
Assertions.assertTrue(KaasChef.that().tasteObjectKaas(ArrayList.class));
|
||||||
|
Assertions.assertFalse(KaasChef.that().tasteObjectKaas(List.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testTasteInterfaceMethodisch() {
|
||||||
|
Assertions.assertFalse(KaasChef.that().tasteInterfaceMethodisch(ArrayList.class));
|
||||||
|
Assertions.assertFalse(KaasChef.that().tasteInterfaceMethodisch(List.class));
|
||||||
|
Assertions.assertTrue(KaasChef.that().tasteInterfaceMethodisch(Function.class));
|
||||||
|
Assertions.assertFalse(KaasChef.that().tasteInterfaceMethodisch(KaasEnum.class));
|
||||||
|
Assertions.assertFalse(KaasChef.that().tasteInterfaceMethodisch(KaasTBone.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testTasteInterfaceDriced() {
|
||||||
|
Assertions.assertFalse(KaasChef.that().tasteInterfaceDriced(ArrayList.class));
|
||||||
|
Assertions.assertFalse(KaasChef.that().tasteInterfaceDriced(List.class));
|
||||||
|
Assertions.assertFalse(KaasChef.that().tasteInterfaceDriced(Function.class));
|
||||||
|
Assertions.assertFalse(KaasChef.that().tasteInterfaceDriced(KaasEnum.class));
|
||||||
|
Assertions.assertTrue(KaasChef.that().tasteInterfaceDriced(KaasTBone.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCookPermittedSubclassesSortedNaturel() {
|
||||||
|
Iterator<Class<?>> i = KaasChef.that().cookPermittedSubclassesSortedNaturel(KaasOdeurNumberRoot.class).iterator();
|
||||||
|
Assertions.assertTrue(i.hasNext());
|
||||||
|
Assertions.assertEquals(KaasOdeurNumberRoot1D.class, i.next());
|
||||||
|
Assertions.assertEquals(KaasOdeurNumberRoot2D.class, i.next());
|
||||||
|
Assertions.assertEquals(KaasOdeurNumberRoot4D.class, i.next());
|
||||||
|
Assertions.assertEquals(KaasOdeurNumberRoot4DStereo.class, i.next());
|
||||||
|
Assertions.assertFalse(i.hasNext());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -28,11 +28,10 @@
|
||||||
package ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ;
|
package ᒢᣘᐧᐧ.ᣕᓫᐪᑋᓫᣗ.ᐪᐤᣕᓫ;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import ᒢᣘᐧᐧ.ᑊᑉᣔᣔᔆ.KaasChef;
|
||||||
|
|
||||||
/// Nether tone slug view record.
|
/// Nether tone slug view record.
|
||||||
///
|
///
|
||||||
/// @author للَّٰهِilLצسُو
|
/// @author للَّٰهِilLצسُو
|
||||||
|
|
@ -97,8 +96,8 @@ public record NetherToneSlugView(
|
||||||
public List<Class<?>> toNetherTones() {
|
public List<Class<?>> toNetherTones() {
|
||||||
List<Class<?>> result = new ArrayList<>(11);
|
List<Class<?>> result = new ArrayList<>(11);
|
||||||
for (int i = 0; i < 11; i++) {
|
for (int i = 0; i < 11; i++) {
|
||||||
Class<?> subClass = sortedPermittedSubclasses(NetherToneScript.class).get(i);
|
Class<?> subClass = KaasChef.that().cookPermittedSubclassesSortedNaturel(NetherToneScript.class).get(i);
|
||||||
Class<?>[] valueClasses = sortedPermittedSubclasses(subClass).toArray(new Class[] {});
|
Class<?>[] valueClasses = KaasChef.that().cookPermittedSubclassesSortedNaturel(subClass).toArray(new Class[] {});
|
||||||
result.add(switch (i) {
|
result.add(switch (i) {
|
||||||
case 0: yield valueClasses[ag1];
|
case 0: yield valueClasses[ag1];
|
||||||
case 1: yield valueClasses[ag2];
|
case 1: yield valueClasses[ag2];
|
||||||
|
|
@ -116,21 +115,6 @@ public record NetherToneSlugView(
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static private List<Class<?>> sortedPermittedSubclasses(Class<?> c) {
|
|
||||||
Class<?>[] valueArray = c.getPermittedSubclasses();
|
|
||||||
if (valueArray == null) {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
List<Class<?>> valueList = new ArrayList<>(Arrays.asList(valueArray));
|
|
||||||
valueList.sort(new Comparator<Class<?>>() {
|
|
||||||
@Override
|
|
||||||
public int compare(Class<?> o1, Class<?> o2) {
|
|
||||||
return o1.getSimpleName().compareTo(o2.getSimpleName());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return valueList;
|
|
||||||
}
|
|
||||||
|
|
||||||
static public NetherToneSlugView ofQSluq(Class<? extends NetherToneScript> q) {
|
static public NetherToneSlugView ofQSluq(Class<? extends NetherToneScript> q) {
|
||||||
return ofQSluq(q, true);
|
return ofQSluq(q, true);
|
||||||
}
|
}
|
||||||
|
|
@ -138,9 +122,9 @@ public record NetherToneSlugView(
|
||||||
static public NetherToneSlugView ofQSluq(Class<? extends NetherToneScript> q, boolean failIncomplete) {
|
static public NetherToneSlugView ofQSluq(Class<? extends NetherToneScript> q, boolean failIncomplete) {
|
||||||
int[] d = new int[11];
|
int[] d = new int[11];
|
||||||
int dataIdx = 0;
|
int dataIdx = 0;
|
||||||
for (Class<?> subClass : sortedPermittedSubclasses(NetherToneScript.class)) {
|
for (Class<?> subClass : KaasChef.that().cookPermittedSubclassesSortedNaturel(NetherToneScript.class)) {
|
||||||
boolean hasValue = false;
|
boolean hasValue = false;
|
||||||
Class<?>[] valueClasses = sortedPermittedSubclasses(subClass).toArray(new Class[] {});
|
Class<?>[] valueClasses = KaasChef.that().cookPermittedSubclassesSortedNaturel(subClass).toArray(new Class[] {});
|
||||||
for (int i = 0; i < valueClasses.length; i++) {
|
for (int i = 0; i < valueClasses.length; i++) {
|
||||||
Class<?> valueClass = valueClasses[i];
|
Class<?> valueClass = valueClasses[i];
|
||||||
if (valueClass.isAssignableFrom(q)) {
|
if (valueClass.isAssignableFrom(q)) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue