Skip to content

Commit 2506ff0

Browse files
committed
refactoring
1 parent d729779 commit 2506ff0

File tree

3 files changed

+39
-36
lines changed

3 files changed

+39
-36
lines changed

src/main/java/io/jbock/util/Eithers.java

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,11 @@ public Set<Characteristics> characteristics() {
7171
}
7272

7373
// visible for testing
74-
static abstract class Acc<L, R> {
74+
static abstract class Acc<L, C, R> {
7575
private List<R> right;
7676

7777
final List<R> right() {
78-
return right;
78+
return right == null ? List.of() : right;
7979
}
8080

8181
final void addRight(R value) {
@@ -88,11 +88,9 @@ final void addRight(R value) {
8888
right.add(value);
8989
}
9090

91-
final Acc<L, R> combine(Acc<L, R> other) {
91+
final Acc<L, C, R> combine(Acc<L, C, R> other) {
9292
if (isLeft()) {
93-
if (other.isLeft()) {
94-
combineLeft(other);
95-
}
93+
combineLeft(other.left());
9694
return this;
9795
}
9896
if (other.isLeft()) {
@@ -108,16 +106,26 @@ final Acc<L, R> combine(Acc<L, R> other) {
108106
return this;
109107
}
110108

111-
abstract void combineLeft(Acc<L, R> other);
109+
abstract void combineLeft(C otherLeft);
112110

113111
abstract boolean isLeft();
112+
113+
abstract C left();
114+
115+
Either<C, List<R>> finish() {
116+
if (isLeft()) {
117+
return Either.left(left());
118+
}
119+
return Either.right(right());
120+
}
114121
}
115122

116-
private static class ShortcuttingAcc<L, R> extends Acc<L, R> {
123+
private static class ShortcuttingAcc<L, R> extends Acc<L, L, R> {
117124
L left;
118125

119126
@Override
120-
void combineLeft(Acc<L, R> other) {
127+
void combineLeft(L otherLeft) {
128+
addLeft(otherLeft);
121129
}
122130

123131
@Override
@@ -126,27 +134,24 @@ boolean isLeft() {
126134
}
127135

128136
void addLeft(L value) {
129-
if (left != null) {
130-
return;
137+
if (left == null) {
138+
left = value;
131139
}
132-
left = value;
133140
}
134141

135-
Either<L, List<R>> finish() {
136-
if (left != null) {
137-
return Either.left(left);
138-
}
139-
return Either.right(right() == null ? List.of() : right());
142+
L left() {
143+
return left;
140144
}
141145
}
142146

143-
private static class FullAcc<L, R> extends Acc<L, R> {
147+
private static class FullAcc<L, R> extends Acc<L, List<L>, R> {
144148
List<L> left;
145149

146150
@Override
147-
void combineLeft(Acc<L, R> other) {
148-
// TODO remove cast
149-
left.addAll(((FullAcc<L, R>) other).left);
151+
void combineLeft(List<L> otherLeft) {
152+
if (otherLeft != null && !otherLeft.isEmpty()) {
153+
left.addAll(otherLeft);
154+
}
150155
}
151156

152157
@Override
@@ -161,11 +166,9 @@ void addLeft(L value) {
161166
left.add(value);
162167
}
163168

164-
Either<List<L>, List<R>> finish() {
165-
if (left != null && !left.isEmpty()) {
166-
return Either.left(left);
167-
}
168-
return Either.right(right() == null ? List.of() : right());
169+
@Override
170+
List<L> left() {
171+
return left;
169172
}
170173
}
171174

src/test/java/io/jbock/util/ToValidListAllTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,17 @@ private Either<List<String>, List<Integer>> apply(List<Either<String, Integer>>
3838

3939
private void checkAssociativity(Either<String, Integer> t1, Either<String, Integer> t2) {
4040
@SuppressWarnings("unchecked")
41-
Collector<Either<? extends String, ? extends Integer>, Eithers.Acc<String, Integer>, Either<List<String>, List<Integer>>> coll =
42-
(Collector<Either<? extends String, ? extends Integer>, Eithers.Acc<String, Integer>, Either<List<String>, List<Integer>>>) Eithers.<String, Integer>toValidListAll();
41+
Collector<Either<? extends String, ? extends Integer>, Eithers.Acc<String, ?, Integer>, Either<List<String>, List<Integer>>> coll =
42+
(Collector<Either<? extends String, ? extends Integer>, Eithers.Acc<String, ?, Integer>, Either<List<String>, List<Integer>>>) Eithers.<String, Integer>toValidListAll();
4343

44-
Eithers.Acc<String, Integer> a1 = coll.supplier().get();
44+
Eithers.Acc<String, ?, Integer> a1 = coll.supplier().get();
4545
coll.accumulator().accept(a1, t1);
4646
coll.accumulator().accept(a1, t2);
4747
Either<List<String>, List<Integer>> r1 = coll.finisher().apply(a1);// result without splitting
4848

49-
Eithers.Acc<String, Integer> a2 = coll.supplier().get();
49+
Eithers.Acc<String, ?, Integer> a2 = coll.supplier().get();
5050
coll.accumulator().accept(a2, t1);
51-
Eithers.Acc<String, Integer> a3 = coll.supplier().get();
51+
Eithers.Acc<String, ?, Integer> a3 = coll.supplier().get();
5252
coll.accumulator().accept(a3, t2);
5353
Either<List<String>, List<Integer>> r2 = coll.finisher().apply(coll.combiner().apply(a2, a3));// result with splitting
5454
assertEquals(r1, r2);

src/test/java/io/jbock/util/ToValidListTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,17 @@ private Either<String, List<Integer>> apply(List<Either<String, Integer>> data)
3838

3939
private void checkAssociativity(Either<String, Integer> t1, Either<String, Integer> t2) {
4040
@SuppressWarnings("unchecked")
41-
Collector<Either<? extends String, ? extends Integer>, Eithers.Acc<String, Integer>, Either<String, List<Integer>>> coll =
42-
(Collector<Either<? extends String, ? extends Integer>, Eithers.Acc<String, Integer>, Either<String, List<Integer>>>) Eithers.<String, Integer>toValidList();
41+
Collector<Either<? extends String, ? extends Integer>, Eithers.Acc<String, ?, Integer>, Either<String, List<Integer>>> coll =
42+
(Collector<Either<? extends String, ? extends Integer>, Eithers.Acc<String, ?, Integer>, Either<String, List<Integer>>>) Eithers.<String, Integer>toValidList();
4343

44-
Eithers.Acc<String, Integer> a1 = coll.supplier().get();
44+
Eithers.Acc<String, ?, Integer> a1 = coll.supplier().get();
4545
coll.accumulator().accept(a1, t1);
4646
coll.accumulator().accept(a1, t2);
4747
Either<String, List<Integer>> r1 = coll.finisher().apply(a1);// result without splitting
4848

49-
Eithers.Acc<String, Integer> a2 = coll.supplier().get();
49+
Eithers.Acc<String, ?, Integer> a2 = coll.supplier().get();
5050
coll.accumulator().accept(a2, t1);
51-
Eithers.Acc<String, Integer> a3 = coll.supplier().get();
51+
Eithers.Acc<String, ?, Integer> a3 = coll.supplier().get();
5252
coll.accumulator().accept(a3, t2);
5353
Either<String, List<Integer>> r2 = coll.finisher().apply(coll.combiner().apply(a2, a3));// result with splitting
5454
assertEquals(r1, r2);

0 commit comments

Comments
 (0)