class Shifts { public int shift(int a) { int b; b = a << 31; b = a >> -31; b = a << 32; // Noncompliant {{Remove this useless shift}} b = a >> -32; // Noncompliant [[sc=11;ec=13]] {{Remove this useless shift}} b = a << 33; // Noncompliant {{Either make "a" a "long" or correct this shift to 1}} b = a >> -33; // Noncompliant {{Either make "a" a "long" or correct this shift to -1}} a <<= 31; a >>= -31; a <<= 32; // Noncompliant a >>= -32; // Noncompliant a <<= 33; // Noncompliant a >>= -33; // Noncompliant return b << +48; // Noncompliant } public long shift(long a) { long b; b = a >> 63; b = a << -63; b = a >> 64; // Noncompliant b = a << -64; // Noncompliant b = a >> 65; // Noncompliant {{Correct this shift to 1}} b = a << -65; // Noncompliant {{Correct this shift to -1}} a >>= 63; a <<= -63; a >>= 64; // Noncompliant a <<= -64; // Noncompliant a >>= 65; // Noncompliant a <<= -65; // Noncompliant [[sc=7;ec=10]] return b >> +96; // Noncompliant } public long shiftOtherCases(long a, long b) { long c; long[] d = new long[]{1L}; Long[] e = new Long[]{1L}; c = a >> b; c = a << (b + 3); c = a >> returnLong(); //Compliant c = (a - 3) << (b + 3); c = (a - 3) >> 63; c = (a - 3) << 64; // Noncompliant c = (a - 3) >> 96; // Noncompliant c = returnLong() << 97; // Noncompliant c = d[0] >> 98; // Noncompliant c = e[0] << 99; // Noncompliant c = a >> 0x0009; c = a << 0x0000; // Noncompliant return c; } public int shiftOtherCases(int a, int b) { int c; int[] d = new int[]{1}; Integer[] e = new Integer[]{1}; c = a << b; c = a >> (b + 3); c = a << returnInt(); c = (a - 3) >> (b + 4); c = (a - 3) << 31; c = (a - 3) >> 32; // Noncompliant c = (a - 3) << 48; // Noncompliant c = returnInt() >> 49; // Noncompliant c = d[0] << 50; // Noncompliant c = e[0] >> 51; // Noncompliant c = a << 0x0009; c = a >> 0x0000; // Noncompliant return c; } public void cornerCase() { int a; a = 1 << 0; a = 1 << 1; a = 1 << 1L; a = 1 << 1l; a = 0xfffffffffffffffeL << 7; a = 0xffffffffffffffffL << 7; a = 0x8000000000000000L << 7; a = 1 << 0x8000000000000000L; } public int returnInt() { return 0; } public long returnLong() { return 0L; } }