1
0
Fork 0
vim/runtime/syntax/testdir/input/java_generics_signature.java
Daniel Baumann 0985b09abd
Adding upstream version 2:9.1.1230.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-21 11:09:31 +02:00

140 lines
3.7 KiB
Java

// VIM_TEST_SETUP let g:java_highlight_functions = 'style'
// VIM_TEST_SETUP let g:java_highlight_signature = 1
// VIM_TEST_SETUP let g:java_highlight_generics = 1
// VIM_TEST_SETUP hi link javaGenericsC1 Todo
// VIM_TEST_SETUP hi link javaGenericsC2 Error
import java.math.BigInteger;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.LongFunction;
import java.util.function.Predicate;
class Generics$Tests<T extends Number & Comparable<? super T>, U>
{ // JDK 21+.
static final Function<Function<Object, Object>, Object> PARTIAL =
Generics$Tests.y0();
static final Function<BigInteger, BigInteger> FACTORIAL_2000 =
Generics$Tests.<BigInteger, BigInteger>y1()
.apply(f -> x -> (x.compareTo(BigInteger.ONE) < 1)
? BigInteger.ONE
: x.multiply(f.apply(x.subtract(BigInteger.ONE))));
static <T1> Y0<T1> y0()
{
return (Function<T1, T1> f) -> f.apply(
Generics$Tests.<T1>y0()
.apply(f));
}
static <T1, T2> Y1<T1, T2> y1()
{
return (Function<Function<T1, T2>, Function<T1, T2>> f) ->
(T1 x) -> f.apply(Generics$Tests.<T1, T2>y1()
.apply(f))
.apply(x);
}
static<T> void noOp(T dummy) { }
interface alpha<T> { }
interface Y0<T1> extends Function<Function<T1, T1>, T1> { }
interface Y1<T1, T2> extends Function<Function<Function<T1, T2>,
Function<T1, T2>>,
Function<T1, T2>> { }
interface Stackable<E> extends Iterable<E>
{
boolean isEmpty();
E peek();
E pop();
Stackable<E> popAll(Stackable<? super E> elements);
Stackable<E> popSome(Stackable<? super E> elements,
Predicate<? super E> filter);
Stackable<E> push(E element);
Stackable<E> pushAll(Iterable<? extends E> elements);
Stackable<E> pushSome(Iterable<? extends E> elements,
Predicate<? super E> filter);
Stackable<E> wind(Consumer<? super Stackable<E>> action);
}
sealed interface Num<N extends Number>
{
int radix();
N value();
}
record Bin<N extends Number>(N value) implements Num<N>
{
public int radix() { return 2; }
}
record Dec<N extends Number>(N value) implements Num<N>
{
public int radix() { return 10; }
}
record Hex<N extends Number>(N value) implements Num<N>
{
public int radix() { return 16; }
}
record Oct<N extends Number>(N value) implements Num<N>
{
public int radix() { return 8; }
}
static Num<Long> fromDecimal(long x, int radix)
{
record Pair(LongFunction<Num<Long>> a,
LongFunction<String> b) { }
final Pair p = switch (radix) {
case 2 -> new Pair(Bin::new, Long::toBinaryString);
case 8 -> new Pair(Oct::new, Long::toOctalString);
case 16 -> new Pair(Hex::new, Long::toHexString);
default -> new Pair(Dec::new,
y -> Long.toString(y));
};
return p.a().apply(Long.parseLong(p.b().apply(x), radix));
}
static long toDecimal(Num<Long> x)
{
return Long.parseLong(switch (x) {
case Bin<?>(Long b) -> Long.toBinaryString(b);
case Oct<?>(Long o) -> Long.toOctalString(o);
case Hex<?>(Long h) -> Long.toHexString(h);
default -> Long.toString(x.value());
}, x.radix());
}
@java.lang.annotation.Target(
java.lang.annotation.ElementType.TYPE_USE)
@interface Taggable
{
String value() default "";
}
{
int N = 0, X = 1, Y = 2;
Predicate<T> f = y->N<y.intValue();
Predicate<T> g = y->X<N&&(Integer)y>N;
boolean[] bb = {
X<N||N>Y, X < Y, X <Y, X <(Y), X<(Y), (X)<Y,
Double.isFinite(X<<Y),
X<=Y, X<(int)(byte)Y, X<~Y, X<-Y, X<+Y,
};
Class<?> klass = Generics$Tests.class;
Class< java.lang.Class<@Taggable("<>")int[][]> [] [] >
[ ] [ ] $ [ ] [ ];
if (false) { new Generics$Tests<>(); }
alpha<?> ao;
alpha<U> au;
alpha<alpha<U>> aau;
alpha<Y0<?>> ay0o;
alpha<Y0<U>> ay0u;
Y0<alpha<?>> y0ao;
Y0<alpha<U>> y0au;
}
}