Skip to content
This repository was archived by the owner on May 6, 2021. It is now read-only.

Commit 043cf19

Browse files
committed
Removed first generic parameter from Pipe class
1 parent ab1104f commit 043cf19

17 files changed

Lines changed: 87 additions & 84 deletions

File tree

src/common-util/test/java/org/comroid/test/common/ref/PipeTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@ public void setup() {
2727
public void testBasicOperations() {
2828
final ReferenceIndex<String> strings = ReferenceIndex.of(controlGroup);
2929

30-
final Pipe<String, String> remapOp = strings.pipe()
30+
final Pipe<String> remapOp = strings.pipe()
3131
.map(String::toLowerCase);
3232
for (int i = 0; i < controlGroup.size(); i++)
3333
Assert.assertEquals("index " + i, controlGroup.get(i).toLowerCase(), remapOp.get(i));
3434

35-
final Pipe<String, String> filterOp = strings.pipe()
35+
final Pipe<String> filterOp = strings.pipe()
3636
.filter(str -> str.chars()
3737
.map(Character::toLowerCase)
3838
.allMatch(c -> c != 'a'));
@@ -42,7 +42,7 @@ public void testBasicOperations() {
4242
.map(String::toLowerCase)
4343
.ifPresent(str -> Assert.assertFalse(str.contains("a")));
4444

45-
final Pipe<String, String> filterMapOp = strings.pipe()
45+
final Pipe<String> filterMapOp = strings.pipe()
4646
.map(String::toLowerCase)
4747
.filter(str -> str.chars()
4848
.allMatch(c -> c != 'a'));

src/common-util/test/java/org/comroid/test/common/ref/PumpTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@ public void setup() {
2525

2626
@Test
2727
public void testBasicOperations() throws InterruptedException {
28-
final Pump<String, String> remapOp = (Pump<String, String>) Pump.<String>create()
28+
final Pump<String> remapOp = (Pump<String>) Pump.<String>create()
2929
.map(String::toLowerCase);
3030
controlGroup.stream()
3131
.map(Reference::constant)
3232
.forEach(remapOp);
3333
for (int i = 0; i < controlGroup.size(); i++)
3434
Assert.assertEquals("index " + i, controlGroup.get(i).toLowerCase(), remapOp.get(i));
3535

36-
final Pump<String, String> filterOp = (Pump<String, String>) Pump.<String>create()
36+
final Pump<String> filterOp = (Pump<String>) Pump.<String>create()
3737
.filter(str -> str.chars()
3838
.map(Character::toLowerCase)
3939
.allMatch(c -> c != 'a'));
@@ -46,7 +46,7 @@ public void testBasicOperations() throws InterruptedException {
4646
.map(String::toLowerCase)
4747
.ifPresent(str -> Assert.assertFalse(str.contains("a")));
4848

49-
final Pump<String, String> filterMapOp = (Pump<String, String>) Pump.<String>create()
49+
final Pump<String> filterMapOp = (Pump<String>) Pump.<String>create()
5050
.map(String::toLowerCase)
5151
.filter(str -> str.chars()
5252
.allMatch(c -> c != 'a'));

src/matrix/main/java/org/comroid/matrix/impl/AbstractMatrix.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public Stream<? extends KeyedReference<String, V>> stream(Predicate<String> filt
5757
}
5858

5959
@Override
60-
public Pipe<?, ? extends KeyedReference<String, V>> pipe(Predicate<String> filter) {
60+
public Pipe<? extends KeyedReference<String, V>> pipe(Predicate<String> filter) {
6161
return entryIndex.pipe();
6262
}
6363

src/mutatio/main/java/org/comroid/mutatio/pipe/BasicPipe.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
package org.comroid.mutatio.pipe;
22

33
import org.comroid.api.Polyfill;
4-
import org.comroid.api.ThrowingRunnable;
54
import org.comroid.mutatio.ref.Reference;
65
import org.comroid.mutatio.ref.ReferenceIndex;
76

87
import java.util.*;
98
import java.util.concurrent.ConcurrentHashMap;
109
import java.util.function.Function;
1110

12-
public class BasicPipe<O, T> implements Pipe<O, T> {
11+
public class BasicPipe<O, T> implements Pipe<T> {
1312
public static final int AUTOEMPTY_DISABLED = -1;
1413
protected final ReferenceIndex<O> refs;
15-
private final Collection<Pipe<T, ?>> subs = new ArrayList<>();
14+
private final Collection<Pipe<?>> subs = new ArrayList<>();
1615
private final StageAdapter<O, T> adapter;
1716
private final int autoEmptyLimit;
1817
private final Map<Integer, Reference<T>> accessors = new ConcurrentHashMap<>();
@@ -51,7 +50,7 @@ public final void addChildren(AutoCloseable child) {
5150
}
5251

5352
@Override
54-
public <R> Pipe<T, R> addStage(StageAdapter<T, R> stage) {
53+
public <R> Pipe<R> addStage(StageAdapter<T, R> stage) {
5554
return new BasicPipe<>(this, stage);
5655
}
5756

@@ -80,12 +79,12 @@ public void clear() {
8079
}
8180

8281
@Override
83-
public void accept(Reference<O> other) {
84-
refs.add(other.get());
82+
public void accept(Reference<Object> other) {
83+
refs.add(other.into(Polyfill::<O>uncheckedCast));
8584
}
8685

8786
@Override
88-
public Pipe<?, T> pipe() {
87+
public Pipe<T> pipe() {
8988
return new BasicPipe<>(refs);
9089
}
9190

src/mutatio/main/java/org/comroid/mutatio/pipe/BiPipe.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import java.util.function.*;
77

88
public final class BiPipe<A, B, X, Y> extends BasicPipe<Pair<A, B>, Pair<X, Y>> {
9-
<T> BiPipe(Pipe<?, A> base, Function<A, B> bMapper) {
9+
<T> BiPipe(Pipe<A> base, Function<A, B> bMapper) {
1010
super(base.map(a -> new Pair<>(a, bMapper.apply(a))));
1111
}
1212

@@ -49,7 +49,7 @@ public <R> BiPipe<X, Y, X, R> flatMapSecond(Function<? super Y, ? extends Refere
4949
.map(pair -> new Pair<>(pair.getFirst(), mapper.apply(pair.getSecond()).get())));
5050
}
5151

52-
public <R> Pipe<Pair<X, Y>, R> merge(BiFunction<X, Y, R> mergeFunction) {
52+
public <R> Pipe<R> merge(BiFunction<X, Y, R> mergeFunction) {
5353
return map(pair -> mergeFunction.apply(pair.getFirst(), pair.getSecond()));
5454
}
5555

@@ -62,7 +62,7 @@ public void forEach(BiConsumer<? super X, ? super Y> action) {
6262
forEach(pair -> action.accept(pair.getFirst(), pair.getSecond()));
6363
}
6464

65-
public Pipe<?, X> drop() {
65+
public Pipe<X> drop() {
6666
return map(Pair::getFirst);
6767
}
6868
}

src/mutatio/main/java/org/comroid/mutatio/pipe/Pipe.java

Lines changed: 35 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,70 +17,73 @@
1717
import java.util.stream.Collector;
1818
import java.util.stream.Stream;
1919

20-
public interface Pipe<I, O> extends ReferenceIndex<O>, Consumer<Reference<I>>, AutoCloseable {
21-
StageAdapter<I, O> getAdapter();
20+
@SuppressWarnings("TypeParameterExplicitlyExtendsObject")
21+
public interface Pipe<O> extends ReferenceIndex<O>, Consumer<Reference<Object>>, AutoCloseable {
22+
StageAdapter<? extends Object, O> getAdapter();
2223

2324
default boolean isSorted() {
2425
return false;
2526
}
2627

27-
static <T> Pipe<T, T> create() {
28+
static <T> Pipe<T> create() {
2829
return new BasicPipe<>(ReferenceIndex.create());
2930
}
3031

3132
@SafeVarargs
32-
static <T> Pipe<T, T> of(T... values) {
33+
static <T> Pipe<T> of(T... values) {
3334
return of(Arrays.asList(values));
3435
}
3536

36-
static <T> Pipe<T, T> of(Collection<T> collection) {
37-
final Pipe<T, T> pipe = create();
37+
static <T> Pipe<T> of(Collection<T> collection) {
38+
final Pipe<T> pipe = create();
3839
collection.stream()
3940
.map(Reference::constant)
41+
.map(ref -> ref.map(Object.class::cast))
4042
.forEach(pipe);
4143

4244
return pipe;
4345
}
4446

45-
static <T> Pipe<?, T> ofStream(Stream<T> stream) {
46-
final Pipe<T, T> pipe = create();
47+
static <T> Pipe<T> ofStream(Stream<T> stream) {
48+
final Pipe<T> pipe = create();
4749
stream.iterator().forEachRemaining(pipe::add);
4850
return pipe;
4951
}
5052

51-
static <T> Collector<Pump<?, T>, List<Pump<?, T>>, Pipe<?, T>> resultingPipeCollector(Executor executor) {
52-
class ResultingPipeCollector implements Collector<Pump<?, T>, List<Pump<?, T>>, Pipe<?, T>> {
53-
private final Pump<T, T> yield = Pump.create(executor);
54-
private final Supplier<List<Pump<?, T>>> supplier = ArrayList::new;
55-
private final BiConsumer<List<Pump<?, T>>, Pump<?, T>> accumulator = List::add;
56-
private final BinaryOperator<List<Pump<?, T>>> combiner = (l, r) -> {
53+
static <T> Collector<Pump<T>, List<Pump<T>>, Pipe<T>> resultingPipeCollector(Executor executor) {
54+
class ResultingPipeCollector implements Collector<Pump<T>, List<Pump<T>>, Pipe<T>> {
55+
private final Pump<T> yield = Pump.create(executor);
56+
private final Supplier<List<Pump<T>>> supplier = ArrayList::new;
57+
private final BiConsumer<List<Pump<T>>, Pump<T>> accumulator = List::add;
58+
private final BinaryOperator<List<Pump<T>>> combiner = (l, r) -> {
5759
l.addAll(r);
5860
return l;
5961
};
60-
private final Function<List<Pump<?, T>>, Pipe<?, T>> finisher = pipes -> {
62+
private final Function<List<Pump<T>>, Pipe<T>> finisher = pipes -> {
6163
pipes.forEach(pump -> pump
6264
.map(Reference::constant)
65+
.map(ref -> ref.map(Object.class::cast))
6366
.peek(yield));
6467
return yield;
6568
};
6669

6770
@Override
68-
public Supplier<List<Pump<?, T>>> supplier() {
71+
public Supplier<List<Pump<T>>> supplier() {
6972
return supplier;
7073
}
7174

7275
@Override
73-
public BiConsumer<List<Pump<?, T>>, Pump<?, T>> accumulator() {
76+
public BiConsumer<List<Pump<T>>, Pump<T>> accumulator() {
7477
return accumulator;
7578
}
7679

7780
@Override
78-
public BinaryOperator<List<Pump<?, T>>> combiner() {
81+
public BinaryOperator<List<Pump<T>>> combiner() {
7982
return combiner;
8083
}
8184

8285
@Override
83-
public Function<List<Pump<?, T>>, Pipe<?, T>> finisher() {
86+
public Function<List<Pump<T>>, Pipe<T>> finisher() {
8487
return finisher;
8588
}
8689

@@ -98,45 +101,45 @@ default List<O> unwrap() {
98101
return span().unwrap();
99102
}
100103

101-
<R> Pipe<O, R> addStage(StageAdapter<O, R> stage);
104+
<R> Pipe<R> addStage(StageAdapter<O, R> stage);
102105

103-
default Pipe<O, O> filter(Predicate<? super O> predicate) {
106+
default Pipe<O> filter(Predicate<? super O> predicate) {
104107
return addStage(StageAdapter.filter(predicate));
105108
}
106109

107-
default <R> Pipe<O, R> map(Function<? super O, ? extends R> mapper) {
110+
default <R> Pipe<R> map(Function<? super O, ? extends R> mapper) {
108111
return addStage(StageAdapter.map(mapper));
109112
}
110113

111-
default <R> Pipe<O, R> flatMap(Function<? super O, ? extends Reference<? extends R>> mapper) {
114+
default <R> Pipe<R> flatMap(Function<? super O, ? extends Reference<? extends R>> mapper) {
112115
return addStage(StageAdapter.flatMap(mapper));
113116
}
114117

115-
default Pipe<O, O> peek(Consumer<? super O> action) {
118+
default Pipe<O> peek(Consumer<? super O> action) {
116119
return addStage(StageAdapter.peek(action));
117120
}
118121

119122
default void forEach(Consumer<? super O> action) {
120123
addStage(StageAdapter.peek(action)).unwrap();
121124
}
122125

123-
default Pipe<O, O> distinct() {
126+
default Pipe<O> distinct() {
124127
return addStage(StageAdapter.distinct());
125128
}
126129

127-
default Pipe<O, O> limit(long maxSize) {
130+
default Pipe<O> limit(long maxSize) {
128131
return addStage(StageAdapter.limit(maxSize));
129132
}
130133

131-
default Pipe<O, O> skip(long skip) {
134+
default Pipe<O> skip(long skip) {
132135
return addStage(StageAdapter.skip(skip));
133136
}
134137

135-
default Pipe<O, O> sorted() {
138+
default Pipe<O> sorted() {
136139
return sorted(Polyfill.uncheckedCast(Comparator.naturalOrder()));
137140
}
138141

139-
default Pipe<O, O> sorted(Comparator<? super O> comparator) {
142+
default Pipe<O> sorted(Comparator<? super O> comparator) {
140143
return new SortedResultingPipe<>(this, comparator);
141144
}
142145

@@ -156,7 +159,7 @@ default boolean remove(O item) throws UnsupportedOperationException {
156159
}
157160

158161
@Override
159-
default Pump<I, O> pump(Executor executor) {
162+
default Pump<O> pump(Executor executor) {
160163
return new BasicPump<>(executor, this.map(Polyfill::uncheckedCast));
161164
}
162165

@@ -166,7 +169,7 @@ default Pump<I, O> pump(Executor executor) {
166169
* Only meant for use from a {@link Pump} instance.
167170
*/
168171
@Override
169-
default void accept(Reference<I> input) {
172+
default void accept(Reference<Object> input) {
170173
throw new UnsupportedOperationException("Method #accept is only meant for use from a Pump instance");
171174
}
172175

@@ -187,7 +190,7 @@ public Reference<O> advance(Reference<O> ref) {
187190
}
188191

189192
final OnceCompletingStage stage = new OnceCompletingStage();
190-
final Pipe<O, O> resulting = addStage(stage);
193+
final Pipe<O> resulting = addStage(stage);
191194
stage.future.thenRun(ThrowingRunnable.handling(resulting::close, null));
192195

193196
return stage.future;

src/mutatio/main/java/org/comroid/mutatio/pipe/Pipeable.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,17 @@
88
import static org.jetbrains.annotations.ApiStatus.OverrideOnly;
99

1010
public interface Pipeable<T> {
11-
Pipe<?, ? extends T> pipe();
11+
Pipe<? extends T> pipe();
1212

13-
default Pump<?, ? extends T> pump() {
13+
default Pump<? extends T> pump() {
1414
return pump(Runnable::run);
1515
}
1616

17-
Pump<?, ? extends T> pump(Executor executor);
17+
Pump<? extends T> pump(Executor executor);
1818

1919
interface From<T> extends Pipeable<T> {
2020
@Override
21-
default Pipe<?, ? extends T> pipe() {
21+
default Pipe<? extends T> pipe() {
2222
return Pipe.of(fetchPipeContent());
2323
}
2424

src/mutatio/main/java/org/comroid/mutatio/pipe/SortedResultingPipe.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@
88
import java.util.Objects;
99
import java.util.stream.Collectors;
1010

11-
public class SortedResultingPipe<T> extends BasicPipe<T, T> implements Pipe<T, T> {
11+
public class SortedResultingPipe<T> extends BasicPipe<T, T> implements Pipe<T> {
1212
private final Comparator<? super T> comparator;
1313

1414
@Override
1515
public boolean isSorted() {
1616
return true;
1717
}
1818

19-
public SortedResultingPipe(Pipe<?, T> base, Comparator<? super T> comparator) {
19+
public SortedResultingPipe(Pipe<T> base, Comparator<? super T> comparator) {
2020
super(base);
2121
this.comparator = comparator;
2222
}

src/mutatio/main/java/org/comroid/mutatio/pump/BasicPump.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.comroid.mutatio.pump;
22

3+
import org.comroid.api.Polyfill;
34
import org.comroid.mutatio.pipe.BasicPipe;
45
import org.comroid.mutatio.pipe.StageAdapter;
56
import org.comroid.mutatio.ref.Reference;
@@ -9,8 +10,8 @@
910
import java.util.Collection;
1011
import java.util.concurrent.Executor;
1112

12-
public class BasicPump<O, T> extends BasicPipe<O, T> implements Pump<O, T> {
13-
private final Collection<Pump<T, ?>> subStages = new ArrayList<>();
13+
public class BasicPump<O, T> extends BasicPipe<O, T> implements Pump<T> {
14+
private final Collection<Pump<?>> subStages = new ArrayList<>();
1415
private final Executor executor;
1516

1617
@Override
@@ -34,23 +35,24 @@ public BasicPump(Executor executor, ReferenceIndex<O> old, StageAdapter<O, T> ad
3435
}
3536

3637
@Override
37-
public <R> Pump<T, R> addStage(StageAdapter<T, R> stage) {
38+
public <R> Pump<R> addStage(StageAdapter<T, R> stage) {
3839
return addStage(executor, stage);
3940
}
4041

4142
@Override
42-
public <R> Pump<T, R> addStage(Executor executor, StageAdapter<T, R> stage) {
43+
public <R> Pump<R> addStage(Executor executor, StageAdapter<T, R> stage) {
4344
return new BasicPump<>(executor, this, stage);
4445
}
4546

4647
@Override
47-
public void accept(Reference<O> in) {
48-
final O item = in.get();
48+
public void accept(Reference<Object> in) {
49+
//noinspection unchecked
50+
final O item = (O) in.get();
4951
refs.add(item);
5052

51-
final Reference<T> out = getAdapter().advance(in);
53+
final Reference<T> out = getAdapter().advance(in.map(Polyfill::<O>uncheckedCast));
5254

5355
if (item != null)
54-
executor.execute(() -> subStages.forEach(sub -> sub.accept(out)));
56+
executor.execute(() -> subStages.forEach(sub -> sub.accept(out.map(Object.class::cast))));
5557
}
5658
}

0 commit comments

Comments
 (0)