Skip to content

Commit 45bde66

Browse files
committed
Merge pull request #1 from functionaljava/master
Syncing a fork
2 parents 1d52ca3 + b148dec commit 45bde66

24 files changed

Lines changed: 88 additions & 31 deletions

core/src/main/java/fj/Class.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,18 @@ private Class(final java.lang.Class<T> c) {
3030
public List<Class<? super T>> inheritance() {
3131
return unfold(
3232
(java.lang.Class<? super T> c2) -> {
33-
if (c == null)
33+
if (c2 == null)
3434
return none();
3535
else {
3636
final P2<java.lang.Class<? super T>, java.lang.Class<? super T>> p =
3737
new P2<java.lang.Class<? super T>, java.lang.Class<? super T>>() {
3838
public java.lang.Class<? super T> _1() {
39-
return c;
39+
return c2;
4040
}
4141

4242
@SuppressWarnings({"unchecked"})
4343
public java.lang.Class<? super T> _2() {
44-
return c.getSuperclass();
44+
return c2.getSuperclass();
4545
}
4646
};
4747
return some(p);

core/src/main/java/fj/Effect.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@ public class Effect {
2222
private Effect() {}
2323

2424
public static P1<Unit> f(Effect0 e) {
25-
return P.lazy(u -> unit());
25+
return P.lazy(() -> {
26+
e.f();
27+
return unit();
28+
});
2629
}
2730

2831
/**
@@ -92,7 +95,7 @@ public static <A, B, C, D, E> F5<A, B, C, D, E, Unit> f(Effect5<A, B, C, D, E> z
9295
* @param f The function to map over the effect.
9396
* @return An effect after a contra-variant map.
9497
*/
95-
public final <A, B> Effect1<B> comap(Effect1<A> e1, final F<B, A> f) {
98+
public static final <A, B> Effect1<B> comap(Effect1<A> e1, final F<B, A> f) {
9699
return b -> e1.f(f.f(b));
97100
}
98101

core/src/main/java/fj/Equal.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -536,18 +536,49 @@ public static <A, B> Equal<Writer<A, B>> writerEqual(Equal<A> eq1, Equal<B> eq2)
536536

537537
/**
538538
* @return Returns none if no equality can be determined by checking the nullity and reference values, else the equality
539+
* @deprecated see issue #122.
539540
*/
541+
@Deprecated
540542
public static Option<Boolean> shallowEqualsO(Object o1, Object o2) {
541543
if (o1 == null && o2 == null) {
542544
return Option.some(true);
543545
} else if (o1 == o2) {
544546
return Option.some(true);
545547
} else if (o1 != null && o2 != null) {
546548
java.lang.Class<?> c = o1.getClass();
549+
// WARNING: this may return some(false) for two instance of same type (and thus comparable) but of different class (typicaly anonymous class instance).
547550
return c.isInstance(o2) ? Option.none() : Option.some(false);
548551
} else {
549552
return Option.some(false);
550553
}
551554
}
555+
556+
/**
557+
* Helper method to implement {@link Object#equals(Object)} correctly. DO NOT USE it for any other purpose.
558+
*
559+
* @param clazz the class in which the {@link Object#equals(Object)} is implemented
560+
* @param self a reference to 'this'
561+
* @param other the other object of the comparison
562+
* @param equal an equal instance for the type of self (that use {@link #anyEqual()} if generic type).
563+
* @return true if self and other are equal
564+
*/
565+
@SuppressWarnings("unchecked")
566+
public static <A> boolean equals0(final java.lang.Class<? super A> clazz, final A self, final Object other, final Equal<A> equal) {
567+
return self == other || clazz.isInstance(other) && equal.eq(self, (A) other);
568+
}
569+
570+
/**
571+
* Helper method to implement {@link Object#equals(Object)} correctly. DO NOT USE it for any other purpose.
572+
*
573+
* @param clazz the class in which the {@link Object#equals(Object)} is implemented
574+
* @param self a reference to 'this'
575+
* @param other the other object of the comparison
576+
* @param equal a lazy equal instance for the type (that use {@link #anyEqual()} if generic type)..
577+
* @return true if self and other are equal
578+
*/
579+
@SuppressWarnings("unchecked")
580+
public static <A> boolean equals0(final java.lang.Class<? super A> clazz, final A self, final Object other, final F0<Equal<A>> equal) {
581+
return self == other || clazz.isInstance(other) && equal.f().eq(self, (A) other);
582+
}
552583

553584
}

core/src/main/java/fj/P1.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,10 +254,9 @@ public String toString() {
254254
return Show.p1Show(Show.<A>anyShow()).showS(this);
255255
}
256256

257-
@SuppressWarnings("unchecked")
258257
@Override
259258
public boolean equals(Object other) {
260-
return Equal.shallowEqualsO(this, other).orSome(P.lazy(u -> Equal.p1Equal(Equal.<A>anyEqual()).eq(this, (P1<A>) other)));
259+
return Equal.equals0(P1.class, this, other, () -> Equal.p1Equal(Equal.<A>anyEqual()));
261260
}
262261

263262
@Override

core/src/main/java/fj/P2.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public abstract class P2<A, B> {
2626

2727
@Override
2828
public boolean equals(Object other) {
29-
return Equal.shallowEqualsO(this, other).orSome(P.lazy(u -> Equal.p2Equal(Equal.<A>anyEqual(), Equal.<B>anyEqual()).eq(this, (P2<A, B>) other)));
29+
return Equal.equals0(P2.class, this, other, () -> Equal.p2Equal(Equal.<A>anyEqual(), Equal.<B>anyEqual()));
3030
}
3131

3232
@Override

core/src/main/java/fj/P3.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,8 @@ public String toString() {
192192

193193
@Override
194194
public boolean equals(Object other) {
195-
return Equal.shallowEqualsO(this, other).orSome(P.lazy(u -> Equal.p3Equal(Equal.<A>anyEqual(), Equal.<B>anyEqual(), Equal.<C>anyEqual()).eq(this, (P3<A, B, C>) other)));
195+
return Equal.equals0(P3.class, this, other,
196+
() -> Equal.p3Equal(Equal.<A>anyEqual(), Equal.<B>anyEqual(), Equal.<C>anyEqual()));
196197
}
197198

198199
@Override

core/src/main/java/fj/P4.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,8 @@ public String toString() {
265265

266266
@Override
267267
public boolean equals(Object other) {
268-
return Equal.shallowEqualsO(this, other).orSome(P.lazy(u -> Equal.p4Equal(Equal.<A>anyEqual(), Equal.<B>anyEqual(), Equal.<C>anyEqual(), Equal.<D>anyEqual()).eq(this, (P4<A, B, C, D>) other)));
268+
return Equal.equals0(P4.class, this, other,
269+
() -> Equal.p4Equal(Equal.<A>anyEqual(), Equal.<B>anyEqual(), Equal.<C>anyEqual(), Equal.<D>anyEqual()));
269270
}
270271

271272
@Override

core/src/main/java/fj/P5.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,8 @@ public String toString() {
344344

345345
@Override
346346
public boolean equals(Object other) {
347-
return Equal.shallowEqualsO(this, other).orSome(P.lazy(u -> Equal.p5Equal(Equal.<A>anyEqual(), Equal.<B>anyEqual(), Equal.<C>anyEqual(), Equal.<D>anyEqual(), Equal.<E>anyEqual()).eq(this, (P5<A, B, C, D, E>) other)));
347+
return Equal.equals0(P5.class, this, other,
348+
() -> Equal.p5Equal(Equal.<A>anyEqual(), Equal.<B>anyEqual(), Equal.<C>anyEqual(), Equal.<D>anyEqual(), Equal.<E>anyEqual()));
348349
}
349350

350351
@Override

core/src/main/java/fj/P6.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,8 @@ public String toString() {
435435

436436
@Override
437437
public boolean equals(Object other) {
438-
return Equal.shallowEqualsO(this, other).orSome(P.lazy(u -> Equal.p6Equal(Equal.<A>anyEqual(), Equal.<B>anyEqual(), Equal.<C>anyEqual(), Equal.<D>anyEqual(), Equal.<E>anyEqual(), Equal.<F>anyEqual()).eq(this, (P6<A, B, C, D, E, F>) other)));
438+
return Equal.equals0(P6.class, this, other,
439+
() -> Equal.p6Equal(Equal.<A>anyEqual(), Equal.<B>anyEqual(), Equal.<C>anyEqual(), Equal.<D>anyEqual(), Equal.<E>anyEqual(), Equal.<F>anyEqual()));
439440
}
440441

441442
@Override

core/src/main/java/fj/P7.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -529,7 +529,8 @@ public String toString() {
529529

530530
@Override
531531
public boolean equals(Object other) {
532-
return Equal.shallowEqualsO(this, other).orSome(P.lazy(u -> Equal.p7Equal(Equal.<A>anyEqual(), Equal.<B>anyEqual(), Equal.<C>anyEqual(), Equal.<D>anyEqual(), Equal.<E>anyEqual(), Equal.<F>anyEqual(), Equal.<G>anyEqual()).eq(this, (P7<A, B, C, D, E, F, G>) other)));
532+
return Equal.equals0(P7.class, this, other,
533+
() -> Equal.p7Equal(Equal.<A>anyEqual(), Equal.<B>anyEqual(), Equal.<C>anyEqual(), Equal.<D>anyEqual(), Equal.<E>anyEqual(), Equal.<F>anyEqual(), Equal.<G>anyEqual()));
533534
}
534535

535536
@Override

0 commit comments

Comments
 (0)