PrimitiveComparison

WARNING

Performance

View source code on GitHub

Summary

Ensure invocations of Comparator#comparing{,Double,Int,Long} match the return type of the provided function

Suppression

Suppress false positives by adding the suppression annotation @SuppressWarnings("PrimitiveComparison") to the enclosing element.

Disable this pattern completely by adding -Xep:PrimitiveComparison:OFF as compiler argument. Learn more.

Samples

Replacement

Shows the difference in example code before and after the bug pattern is applied.

 import java.util.Comparator;
 
 interface A extends Comparable<A> {
-  Comparator<A> bCmp = Comparator.comparing(o -> (byte) 0);
-  Comparator<A> bCmp2 = Comparator.<A, Byte>comparing(o -> (byte) 0);
-  Comparator<A> cCmp = Comparator.comparing(o -> (char) 0);
-  Comparator<A> cCmp2 = Comparator.<A, Character>comparing(o -> (char) 0);
-  Comparator<A> sCmp = Comparator.comparing(o -> (short) 0);
-  Comparator<A> sCmp2 = Comparator.<A, Short>comparing(o -> (short) 0);
-  Comparator<A> iCmp = Comparator.comparing(o -> 0);
-  Comparator<A> iCmp2 = Comparator.<A, Integer>comparing(o -> 0);
-  Comparator<A> lCmp = Comparator.comparing(o -> 0L);
-  Comparator<A> lCmp2 = Comparator.<A, Long>comparing(o -> 0L);
-  Comparator<A> fCmp = Comparator.comparing(o -> 0.0f);
-  Comparator<A> fCmp2 = Comparator.<A, Float>comparing(o -> 0.0f);
-  Comparator<A> dCmp = Comparator.comparing(o -> 0.0);
-  Comparator<A> dCmp2 = Comparator.<A, Double>comparing(o -> 0.0);
+  Comparator<A> bCmp = Comparator.comparingInt(o -> (byte) 0);
+  Comparator<A> bCmp2 = Comparator.<A>comparingInt(o -> (byte) 0);
+  Comparator<A> cCmp = Comparator.comparingInt(o -> (char) 0);
+  Comparator<A> cCmp2 = Comparator.<A>comparingInt(o -> (char) 0);
+  Comparator<A> sCmp = Comparator.comparingInt(o -> (short) 0);
+  Comparator<A> sCmp2 = Comparator.<A>comparingInt(o -> (short) 0);
+  Comparator<A> iCmp = Comparator.comparingInt(o -> 0);
+  Comparator<A> iCmp2 = Comparator.<A>comparingInt(o -> 0);
+  Comparator<A> lCmp = Comparator.comparingLong(o -> 0L);
+  Comparator<A> lCmp2 = Comparator.<A>comparingLong(o -> 0L);
+  Comparator<A> fCmp = Comparator.comparingDouble(o -> 0.0f);
+  Comparator<A> fCmp2 = Comparator.<A>comparingDouble(o -> 0.0f);
+  Comparator<A> dCmp = Comparator.comparingDouble(o -> 0.0);
+  Comparator<A> dCmp2 = Comparator.<A>comparingDouble(o -> 0.0);
 
   default void m() {
-    bCmp.<Byte>thenComparing(o -> (byte) 0);
-    bCmp.thenComparing(o -> (byte) 0);
-    cCmp.<Character>thenComparing(o -> (char) 0);
-    cCmp.thenComparing(o -> (char) 0);
-    sCmp.<Short>thenComparing(o -> (short) 0);
-    sCmp.thenComparing(o -> (short) 0);
-    iCmp.<Integer>thenComparing(o -> 0);
-    iCmp.thenComparing(o -> 0);
-    lCmp.<Long>thenComparing(o -> 0L);
-    lCmp.thenComparing(o -> 0L);
-    fCmp.<Float>thenComparing(o -> 0.0f);
-    fCmp.thenComparing(o -> 0.0f);
-    dCmp.<Double>thenComparing(o -> 0.0);
-    dCmp.thenComparing(o -> 0.0);
+    bCmp.thenComparingInt(o -> (byte) 0);
+    bCmp.thenComparingInt(o -> (byte) 0);
+    cCmp.thenComparingInt(o -> (char) 0);
+    cCmp.thenComparingInt(o -> (char) 0);
+    sCmp.thenComparingInt(o -> (short) 0);
+    sCmp.thenComparingInt(o -> (short) 0);
+    iCmp.thenComparingInt(o -> 0);
+    iCmp.thenComparingInt(o -> 0);
+    lCmp.thenComparingLong(o -> 0L);
+    lCmp.thenComparingLong(o -> 0L);
+    fCmp.thenComparingDouble(o -> 0.0f);
+    fCmp.thenComparingDouble(o -> 0.0f);
+    dCmp.thenComparingDouble(o -> 0.0);
+    dCmp.thenComparingDouble(o -> 0.0);
   }
 }
 
 import java.util.Comparator;
 
 interface A extends Comparable<A> {
-  Comparator<A> bCmp = Comparator.comparingInt(o -> Byte.valueOf((byte) 0));
-  Comparator<A> bCmp2 = Comparator.<A>comparingInt(o -> Byte.valueOf((byte) 0));
-  Comparator<A> cCmp = Comparator.comparingInt(o -> Character.valueOf((char) 0));
-  Comparator<A> cCmp2 = Comparator.<A>comparingInt(o -> Character.valueOf((char) 0));
-  Comparator<A> sCmp = Comparator.comparingInt(o -> Short.valueOf((short) 0));
-  Comparator<A> sCmp2 = Comparator.<A>comparingInt(o -> Short.valueOf((short) 0));
-  Comparator<A> iCmp = Comparator.comparingInt(o -> Integer.valueOf(0));
-  Comparator<A> iCmp2 = Comparator.<A>comparingInt(o -> Integer.valueOf(0));
-  Comparator<A> lCmp = Comparator.comparingLong(o -> Long.valueOf(0));
-  Comparator<A> lCmp2 = Comparator.<A>comparingLong(o -> Long.valueOf(0));
-  Comparator<A> fCmp = Comparator.comparingDouble(o -> Float.valueOf(0));
-  Comparator<A> fCmp2 = Comparator.<A>comparingDouble(o -> Float.valueOf(0));
-  Comparator<A> dCmp = Comparator.comparingDouble(o -> Double.valueOf(0));
-  Comparator<A> dCmp2 = Comparator.<A>comparingDouble(o -> Double.valueOf(0));
+  Comparator<A> bCmp = Comparator.comparing(o -> Byte.valueOf((byte) 0));
+  Comparator<A> bCmp2 = Comparator.<A, Byte>comparing(o -> Byte.valueOf((byte) 0));
+  Comparator<A> cCmp = Comparator.comparing(o -> Character.valueOf((char) 0));
+  Comparator<A> cCmp2 = Comparator.<A, Character>comparing(o -> Character.valueOf((char) 0));
+  Comparator<A> sCmp = Comparator.comparing(o -> Short.valueOf((short) 0));
+  Comparator<A> sCmp2 = Comparator.<A, Short>comparing(o -> Short.valueOf((short) 0));
+  Comparator<A> iCmp = Comparator.comparing(o -> Integer.valueOf(0));
+  Comparator<A> iCmp2 = Comparator.<A, Integer>comparing(o -> Integer.valueOf(0));
+  Comparator<A> lCmp = Comparator.comparing(o -> Long.valueOf(0));
+  Comparator<A> lCmp2 = Comparator.<A, Long>comparing(o -> Long.valueOf(0));
+  Comparator<A> fCmp = Comparator.comparing(o -> Float.valueOf(0));
+  Comparator<A> fCmp2 = Comparator.<A, Float>comparing(o -> Float.valueOf(0));
+  Comparator<A> dCmp = Comparator.comparing(o -> Double.valueOf(0));
+  Comparator<A> dCmp2 = Comparator.<A, Double>comparing(o -> Double.valueOf(0));
 
   default void m() {
-    bCmp.thenComparingInt(o -> Byte.valueOf((byte) 0));
-    cCmp.thenComparingInt(o -> Character.valueOf((char) 0));
-    sCmp.thenComparingInt(o -> Short.valueOf((short) 0));
-    iCmp.thenComparingInt(o -> Integer.valueOf(0));
-    lCmp.thenComparingLong(o -> Long.valueOf(0));
-    fCmp.thenComparingDouble(o -> Float.valueOf(0));
-    dCmp.thenComparingDouble(o -> Double.valueOf(0));
+    bCmp.thenComparing(o -> Byte.valueOf((byte) 0));
+    cCmp.thenComparing(o -> Character.valueOf((char) 0));
+    sCmp.thenComparing(o -> Short.valueOf((short) 0));
+    iCmp.thenComparing(o -> Integer.valueOf(0));
+    lCmp.thenComparing(o -> Long.valueOf(0));
+    fCmp.thenComparing(o -> Float.valueOf(0));
+    dCmp.thenComparing(o -> Double.valueOf(0));
   }
 }
 
 import static java.util.Comparator.comparing;
+import static java.util.Comparator.comparingDouble;
+import static java.util.Comparator.comparingInt;
+import static java.util.Comparator.comparingLong;
 
 import java.util.Comparator;
 
 interface A extends Comparable<A> {
-  Comparator<A> bCmp = comparing(o -> (byte) 0);
-  Comparator<A> cCmp = comparing(o -> (char) 0);
-  Comparator<A> sCmp = comparing(o -> (short) 0);
-  Comparator<A> iCmp = comparing(o -> 0);
-  Comparator<A> lCmp = comparing(o -> 0L);
-  Comparator<A> fCmp = comparing(o -> 0.0f);
-  Comparator<A> dCmp = comparing(o -> 0.0);
+  Comparator<A> bCmp = comparingInt(o -> (byte) 0);
+  Comparator<A> cCmp = comparingInt(o -> (char) 0);
+  Comparator<A> sCmp = comparingInt(o -> (short) 0);
+  Comparator<A> iCmp = comparingInt(o -> 0);
+  Comparator<A> lCmp = comparingLong(o -> 0L);
+  Comparator<A> fCmp = comparingDouble(o -> 0.0f);
+  Comparator<A> dCmp = comparingDouble(o -> 0.0);
 }
 
+import static java.util.Comparator.comparing;
 import static java.util.Comparator.comparingDouble;
 import static java.util.Comparator.comparingInt;
 import static java.util.Comparator.comparingLong;
 
 import java.util.Comparator;
 
 interface A extends Comparable<A> {
-  Comparator<A> bCmp = comparingInt(o -> Byte.valueOf((byte) 0));
-  Comparator<A> cCmp = comparingInt(o -> Character.valueOf((char) 0));
-  Comparator<A> sCmp = comparingInt(o -> Short.valueOf((short) 0));
-  Comparator<A> iCmp = comparingInt(o -> Integer.valueOf(0));
-  Comparator<A> lCmp = comparingLong(o -> Long.valueOf(0));
-  Comparator<A> fCmp = comparingDouble(o -> Float.valueOf(0));
-  Comparator<A> dCmp = comparingDouble(o -> Double.valueOf(0));
+  Comparator<A> bCmp = comparing(o -> Byte.valueOf((byte) 0));
+  Comparator<A> cCmp = comparing(o -> Character.valueOf((char) 0));
+  Comparator<A> sCmp = comparing(o -> Short.valueOf((short) 0));
+  Comparator<A> iCmp = comparing(o -> Integer.valueOf(0));
+  Comparator<A> lCmp = comparing(o -> Long.valueOf(0));
+  Comparator<A> fCmp = comparing(o -> Float.valueOf(0));
+  Comparator<A> dCmp = comparing(o -> Double.valueOf(0));
 }
 
 import java.util.Comparator;
 
 interface A extends Comparable<A> {
-  Comparator<A> bCmp = Comparator.<A, A>comparing(o -> o).thenComparing(o -> (byte) 0);
-  Comparator<A> cCmp = Comparator.<A, A>comparing(o -> o).thenComparing(o -> (char) 0);
-  Comparator<A> sCmp = Comparator.<A, A>comparing(o -> o).thenComparing(o -> (short) 0);
-  Comparator<A> iCmp = Comparator.<A, A>comparing(o -> o).thenComparing(o -> 0);
-  Comparator<A> lCmp = Comparator.<A, A>comparing(o -> o).thenComparing(o -> 0L);
-  Comparator<A> fCmp = Comparator.<A, A>comparing(o -> o).thenComparing(o -> 0.0f);
-  Comparator<A> dCmp = Comparator.<A, A>comparing(o -> o).thenComparing(o -> 0.0);
+  Comparator<A> bCmp = Comparator.<A, A>comparing(o -> o).thenComparingInt(o -> (byte) 0);
+  Comparator<A> cCmp = Comparator.<A, A>comparing(o -> o).thenComparingInt(o -> (char) 0);
+  Comparator<A> sCmp = Comparator.<A, A>comparing(o -> o).thenComparingInt(o -> (short) 0);
+  Comparator<A> iCmp = Comparator.<A, A>comparing(o -> o).thenComparingInt(o -> 0);
+  Comparator<A> lCmp = Comparator.<A, A>comparing(o -> o).thenComparingLong(o -> 0L);
+  Comparator<A> fCmp = Comparator.<A, A>comparing(o -> o).thenComparingDouble(o -> 0.0f);
+  Comparator<A> dCmp = Comparator.<A, A>comparing(o -> o).thenComparingDouble(o -> 0.0);
 }
 
 import java.util.Comparator;
 
 interface A extends Comparable<A> {
   Comparator<A> bCmp =
-      Comparator.<A, A>comparing(o -> o).thenComparingInt(o -> Byte.valueOf((byte) 0));
+      Comparator.<A, A>comparing(o -> o).thenComparing(o -> Byte.valueOf((byte) 0));
   Comparator<A> cCmp =
-      Comparator.<A, A>comparing(o -> o).thenComparingInt(o -> Character.valueOf((char) 0));
+      Comparator.<A, A>comparing(o -> o).thenComparing(o -> Character.valueOf((char) 0));
   Comparator<A> sCmp =
-      Comparator.<A, A>comparing(o -> o).thenComparingInt(o -> Short.valueOf((short) 0));
-  Comparator<A> iCmp = Comparator.<A, A>comparing(o -> o).thenComparingInt(o -> Integer.valueOf(0));
-  Comparator<A> lCmp = Comparator.<A, A>comparing(o -> o).thenComparingLong(o -> Long.valueOf(0));
-  Comparator<A> fCmp =
-      Comparator.<A, A>comparing(o -> o).thenComparingDouble(o -> Float.valueOf(0));
-  Comparator<A> dCmp =
-      Comparator.<A, A>comparing(o -> o).thenComparingDouble(o -> Double.valueOf(0));
+      Comparator.<A, A>comparing(o -> o).thenComparing(o -> Short.valueOf((short) 0));
+  Comparator<A> iCmp = Comparator.<A, A>comparing(o -> o).thenComparing(o -> Integer.valueOf(0));
+  Comparator<A> lCmp = Comparator.<A, A>comparing(o -> o).thenComparing(o -> Long.valueOf(0));
+  Comparator<A> fCmp = Comparator.<A, A>comparing(o -> o).thenComparing(o -> Float.valueOf(0));
+  Comparator<A> dCmp = Comparator.<A, A>comparing(o -> o).thenComparing(o -> Double.valueOf(0));
 }
 

Identification

Shows code lines which will (not) be flagged by this bug pattern.
A //BUG: Diagnostic contains: comment is placed above any violating line.

import java.util.Comparator;
import java.util.function.Function;

class A {
  {
    // BUG: Diagnostic contains:
    Comparator.comparing(this::toPrimitive);
    Comparator.comparing(this::toPrimitive, cmp());
    // BUG: Diagnostic contains:
    Comparator.comparing(o -> (byte) 0);
    Comparator.comparing(o -> (byte) 0, cmp());
    Comparator.comparing(this::toBoxed);
    Comparator.comparing(this::toBoxed, cmp());
    Comparator.comparing(o -> Byte.valueOf((byte) 0));
    Comparator.comparing(o -> Byte.valueOf((byte) 0), cmp());
    Comparator.comparing(toBoxed());
    Comparator.comparing(toBoxed(), cmp());
    Comparator.comparingInt(this::toPrimitive);
    Comparator.comparingInt(o -> (byte) 0);
    // BUG: Diagnostic contains:
    Comparator.comparingInt(this::toBoxed);
    // BUG: Diagnostic contains:
    Comparator.comparingInt(o -> Byte.valueOf((byte) 0));
    // BUG: Diagnostic contains:
    Comparator.comparingLong(this::toPrimitive);
    // BUG: Diagnostic contains:
    Comparator.comparingLong(o -> (byte) 0);
    // BUG: Diagnostic contains:
    Comparator.comparingLong(this::toBoxed);
    // BUG: Diagnostic contains:
    Comparator.comparingLong(o -> Byte.valueOf((byte) 0));
    // BUG: Diagnostic contains:
    Comparator.comparingDouble(this::toPrimitive);
    // BUG: Diagnostic contains:
    Comparator.comparingDouble(o -> (byte) 0);
    // BUG: Diagnostic contains:
    Comparator.comparingDouble(this::toBoxed);
    // BUG: Diagnostic contains:
    Comparator.comparingDouble(o -> Byte.valueOf((byte) 0));

    // BUG: Diagnostic contains:
    cmp().thenComparing(this::toPrimitive);
    cmp().thenComparing(this::toPrimitive, cmp());
    // BUG: Diagnostic contains:
    cmp().thenComparing(o -> (byte) 0);
    cmp().thenComparing(o -> (byte) 0, cmp());
    cmp().thenComparing(this::toBoxed);
    cmp().thenComparing(this::toBoxed, cmp());
    cmp().thenComparing(o -> Byte.valueOf((byte) 0));
    cmp().thenComparing(o -> Byte.valueOf((byte) 0), cmp());
    cmp().thenComparing(toBoxed());
    cmp().thenComparing(toBoxed(), cmp());
    cmp().thenComparingInt(this::toPrimitive);
    cmp().thenComparingInt(o -> (byte) 0);
    // BUG: Diagnostic contains:
    cmp().thenComparingInt(this::toBoxed);
    // BUG: Diagnostic contains:
    cmp().thenComparingInt(o -> Byte.valueOf((byte) 0));
    // BUG: Diagnostic contains:
    cmp().thenComparingLong(this::toPrimitive);
    // BUG: Diagnostic contains:
    cmp().thenComparingLong(o -> (byte) 0);
    // BUG: Diagnostic contains:
    cmp().thenComparingLong(this::toBoxed);
    // BUG: Diagnostic contains:
    cmp().thenComparingLong(o -> Byte.valueOf((byte) 0));
    // BUG: Diagnostic contains:
    cmp().thenComparingDouble(this::toPrimitive);
    // BUG: Diagnostic contains:
    cmp().thenComparingDouble(o -> (byte) 0);
    // BUG: Diagnostic contains:
    cmp().thenComparingDouble(this::toBoxed);
    // BUG: Diagnostic contains:
    cmp().thenComparingDouble(o -> Byte.valueOf((byte) 0));
  }

  private Comparator<Object> cmp() {
    return null;
  }

  private byte toPrimitive(Object o) {
    return 0;
  }

  private Byte toBoxed(Object o) {
    return 0;
  }

  private Function<Object, Byte> toBoxed() {
    return o -> 0;
  }
}
import java.util.Comparator;
import java.util.function.Function;
import java.util.function.ToIntFunction;

class A {
  {
    // BUG: Diagnostic contains:
    Comparator.comparing(this::toPrimitive);
    Comparator.comparing(this::toPrimitive, cmp());
    // BUG: Diagnostic contains:
    Comparator.comparing(o -> 0);
    Comparator.comparing(o -> 0, cmp());
    Comparator.comparing(this::toBoxed);
    Comparator.comparing(this::toBoxed, cmp());
    Comparator.comparing(o -> Integer.valueOf(0));
    Comparator.comparing(o -> Integer.valueOf(0), cmp());
    Comparator.comparing(toBoxed());
    Comparator.comparing(toBoxed(), cmp());
    Comparator.comparingInt(this::toPrimitive);
    Comparator.comparingInt(o -> 0);
    Comparator.comparingInt(toPrimitive());
    // BUG: Diagnostic contains:
    Comparator.comparingInt(this::toBoxed);
    // BUG: Diagnostic contains:
    Comparator.comparingInt(o -> Integer.valueOf(0));
    // BUG: Diagnostic contains:
    Comparator.comparingLong(this::toPrimitive);
    // BUG: Diagnostic contains:
    Comparator.comparingLong(o -> 0);
    // BUG: Diagnostic contains:
    Comparator.comparingLong(this::toBoxed);
    // BUG: Diagnostic contains:
    Comparator.comparingLong(o -> Integer.valueOf(0));
    // BUG: Diagnostic contains:
    Comparator.comparingDouble(this::toPrimitive);
    // BUG: Diagnostic contains:
    Comparator.comparingDouble(o -> 0);
    // BUG: Diagnostic contains:
    Comparator.comparingDouble(this::toBoxed);
    // BUG: Diagnostic contains:
    Comparator.comparingDouble(o -> Integer.valueOf(0));

    // BUG: Diagnostic contains:
    cmp().thenComparing(this::toPrimitive);
    cmp().thenComparing(this::toPrimitive, cmp());
    // BUG: Diagnostic contains:
    cmp().thenComparing(o -> 0);
    cmp().thenComparing(o -> 0, cmp());
    cmp().thenComparing(this::toBoxed);
    cmp().thenComparing(this::toBoxed, cmp());
    cmp().thenComparing(o -> Integer.valueOf(0));
    cmp().thenComparing(o -> Integer.valueOf(0), cmp());
    cmp().thenComparing(toBoxed());
    cmp().thenComparing(toBoxed(), cmp());
    cmp().thenComparingInt(this::toPrimitive);
    cmp().thenComparingInt(o -> 0);
    cmp().thenComparingInt(toPrimitive());
    // BUG: Diagnostic contains:
    cmp().thenComparingInt(this::toBoxed);
    // BUG: Diagnostic contains:
    cmp().thenComparingInt(o -> Integer.valueOf(0));
    // BUG: Diagnostic contains:
    cmp().thenComparingLong(this::toPrimitive);
    // BUG: Diagnostic contains:
    cmp().thenComparingLong(o -> 0);
    // BUG: Diagnostic contains:
    cmp().thenComparingLong(this::toBoxed);
    // BUG: Diagnostic contains:
    cmp().thenComparingLong(o -> Integer.valueOf(0));
    // BUG: Diagnostic contains:
    cmp().thenComparingDouble(this::toPrimitive);
    // BUG: Diagnostic contains:
    cmp().thenComparingDouble(o -> 0);
    // BUG: Diagnostic contains:
    cmp().thenComparingDouble(this::toBoxed);
    // BUG: Diagnostic contains:
    cmp().thenComparingDouble(o -> Integer.valueOf(0));
  }

  private Comparator<Object> cmp() {
    return null;
  }

  private int toPrimitive(Object o) {
    return 0;
  }

  private Integer toBoxed(Object o) {
    return 0;
  }

  private Function<Object, Integer> toBoxed() {
    return o -> 0;
  }

  private ToIntFunction<Object> toPrimitive() {
    return o -> 0;
  }
}
import java.util.Comparator;
import java.util.function.Function;
import java.util.function.ToLongFunction;

class A {
  {
    // BUG: Diagnostic contains:
    Comparator.comparing(this::toPrimitive);
    Comparator.comparing(this::toPrimitive, cmp());
    // BUG: Diagnostic contains:
    Comparator.comparing(o -> 0L);
    Comparator.comparing(o -> 0L, cmp());
    Comparator.comparing(this::toBoxed);
    Comparator.comparing(this::toBoxed, cmp());
    Comparator.comparing(o -> Long.valueOf(0));
    Comparator.comparing(o -> Long.valueOf(0), cmp());
    Comparator.comparing(toBoxed());
    Comparator.comparing(toBoxed(), cmp());
    Comparator.comparingLong(this::toPrimitive);
    Comparator.comparingLong(o -> 0L);
    Comparator.comparingLong(toPrimitive());
    // BUG: Diagnostic contains:
    Comparator.comparingLong(this::toBoxed);
    // BUG: Diagnostic contains:
    Comparator.comparingLong(o -> Long.valueOf(0));
    // BUG: Diagnostic contains:
    Comparator.comparingDouble(this::toPrimitive);
    // BUG: Diagnostic contains:
    Comparator.comparingDouble(o -> 0L);
    // BUG: Diagnostic contains:
    Comparator.comparingDouble(this::toBoxed);
    // BUG: Diagnostic contains:
    Comparator.comparingDouble(o -> Long.valueOf(0));

    // BUG: Diagnostic contains:
    cmp().thenComparing(this::toPrimitive);
    cmp().thenComparing(this::toPrimitive, cmp());
    // BUG: Diagnostic contains:
    cmp().thenComparing(o -> 0L);
    cmp().thenComparing(o -> 0L, cmp());
    cmp().thenComparing(this::toBoxed);
    cmp().thenComparing(this::toBoxed, cmp());
    cmp().thenComparing(o -> Long.valueOf(0));
    cmp().thenComparing(o -> Long.valueOf(0), cmp());
    cmp().thenComparing(toBoxed());
    cmp().thenComparing(toBoxed(), cmp());
    cmp().thenComparingLong(this::toPrimitive);
    cmp().thenComparingLong(o -> 0L);
    cmp().thenComparingLong(toPrimitive());
    // BUG: Diagnostic contains:
    cmp().thenComparingLong(this::toBoxed);
    // BUG: Diagnostic contains:
    cmp().thenComparingLong(o -> Long.valueOf(0));
    // BUG: Diagnostic contains:
    cmp().thenComparingDouble(this::toPrimitive);
    // BUG: Diagnostic contains:
    cmp().thenComparingDouble(o -> 0L);
    // BUG: Diagnostic contains:
    cmp().thenComparingDouble(this::toBoxed);
    // BUG: Diagnostic contains:
    cmp().thenComparingDouble(o -> Long.valueOf(0));
  }

  private Comparator<Object> cmp() {
    return null;
  }

  private long toPrimitive(Object o) {
    return 0L;
  }

  private Long toBoxed(Object o) {
    return 0L;
  }

  private Function<Object, Long> toBoxed() {
    return o -> 0L;
  }

  private ToLongFunction<Object> toPrimitive() {
    return o -> 0L;
  }
}
import java.util.Comparator;
import java.util.function.Function;

class A {
  {
    // BUG: Diagnostic contains:
    Comparator.comparing(this::toPrimitive);
    Comparator.comparing(this::toPrimitive, cmp());
    // BUG: Diagnostic contains:
    Comparator.comparing(o -> 0.0f);
    Comparator.comparing(o -> 0.0f, cmp());
    Comparator.comparing(this::toBoxed);
    Comparator.comparing(this::toBoxed, cmp());
    Comparator.comparing(o -> Float.valueOf(0));
    Comparator.comparing(o -> Float.valueOf(0), cmp());
    Comparator.comparing(toBoxed());
    Comparator.comparing(toBoxed(), cmp());
    Comparator.comparingDouble(this::toPrimitive);
    Comparator.comparingDouble(o -> 0.0f);
    // BUG: Diagnostic contains:
    Comparator.comparingDouble(this::toBoxed);
    // BUG: Diagnostic contains:
    Comparator.comparingDouble(o -> Float.valueOf(0));

    // BUG: Diagnostic contains:
    cmp().thenComparing(this::toPrimitive);
    cmp().thenComparing(this::toPrimitive, cmp());
    // BUG: Diagnostic contains:
    cmp().thenComparing(o -> 0.0f);
    cmp().thenComparing(o -> 0.0f, cmp());
    cmp().thenComparing(this::toBoxed);
    cmp().thenComparing(this::toBoxed, cmp());
    cmp().thenComparing(o -> Float.valueOf(0));
    cmp().thenComparing(o -> Float.valueOf(0), cmp());
    cmp().thenComparing(toBoxed());
    cmp().thenComparing(toBoxed(), cmp());
    cmp().thenComparingDouble(this::toPrimitive);
    cmp().thenComparingDouble(o -> 0.0f);
    // BUG: Diagnostic contains:
    cmp().thenComparingDouble(this::toBoxed);
    // BUG: Diagnostic contains:
    cmp().thenComparingDouble(o -> Float.valueOf(0));
  }

  private Comparator<Object> cmp() {
    return null;
  }

  private float toPrimitive(Object o) {
    return 0.0f;
  }

  private Float toBoxed(Object o) {
    return 0.0f;
  }

  private Function<Object, Float> toBoxed() {
    return o -> 0.0f;
  }
}
import java.util.Comparator;
import java.util.function.Function;
import java.util.function.ToDoubleFunction;

class A {
  {
    // BUG: Diagnostic contains:
    Comparator.comparing(this::toPrimitive);
    Comparator.comparing(this::toPrimitive, cmp());
    // BUG: Diagnostic contains:
    Comparator.comparing(o -> 0.0);
    Comparator.comparing(o -> 0.0, cmp());
    Comparator.comparing(this::toBoxed);
    Comparator.comparing(this::toBoxed, cmp());
    Comparator.comparing(o -> Double.valueOf(0));
    Comparator.comparing(o -> Double.valueOf(0), cmp());
    Comparator.comparing(toBoxed());
    Comparator.comparing(toBoxed(), cmp());
    Comparator.comparingDouble(this::toPrimitive);
    Comparator.comparingDouble(o -> 0.0);
    Comparator.comparingDouble(toPrimitive());
    // BUG: Diagnostic contains:
    Comparator.comparingDouble(this::toBoxed);
    // BUG: Diagnostic contains:
    Comparator.comparingDouble(o -> Double.valueOf(0));

    // BUG: Diagnostic contains:
    cmp().thenComparing(this::toPrimitive);
    cmp().thenComparing(this::toPrimitive, cmp());
    // BUG: Diagnostic contains:
    cmp().thenComparing(o -> 0.0);
    cmp().thenComparing(o -> 0.0, cmp());
    cmp().thenComparing(this::toBoxed);
    cmp().thenComparing(this::toBoxed, cmp());
    cmp().thenComparing(o -> Double.valueOf(0));
    cmp().thenComparing(o -> Double.valueOf(0), cmp());
    cmp().thenComparing(toBoxed());
    cmp().thenComparing(toBoxed(), cmp());
    cmp().thenComparingDouble(this::toPrimitive);
    cmp().thenComparingDouble(o -> 0.0);
    cmp().thenComparingDouble(toPrimitive());
    // BUG: Diagnostic contains:
    cmp().thenComparingDouble(this::toBoxed);
    // BUG: Diagnostic contains:
    cmp().thenComparingDouble(o -> Double.valueOf(0));
  }

  private Comparator<Object> cmp() {
    return null;
  }

  private double toPrimitive(Object o) {
    return 0.0;
  }

  private Double toBoxed(Object o) {
    return 0.0;
  }

  private Function<Object, Double> toBoxed() {
    return o -> 0.0;
  }

  private ToDoubleFunction<Object> toPrimitive() {
    return o -> 0.0;
  }
}

Copyright © 2017-2024 Picnic Technologies BV