class Autoboxing {
    public boolean compare(short s, Integer i) {
         return i == s; //OK, i is unboxed
    }

    public boolean compare(Short s, Integer i) {
         return <error descr="Operator '==' cannot be applied to 'java.lang.Integer', 'java.lang.Short'">i == s</error>; //comparing as references
    }

    void f(Integer i) {
      switch(i) {
       default:
      }
    }

    {
      Object data = 1;
      boolean is1 = <error descr="Operator '==' cannot be applied to 'java.lang.Object', 'int'">data == 1</error>;
    }

    //IDEADEV-5549: Short and double are convertible
    public static double f () {
      Short s = 0;
      return (double)s;
    }

    //IDEADEV-5613
    class DumbTest {
      private long eventId;

      public int hashCode() {
        return ((Long) eventId).hashCode();
      }
    }

    public static void main(String[] args) {
        Long l = 0L;
        Short s = 0;

        int d = <error descr="Inconvertible types; cannot cast 'java.lang.Long' to 'int'">(int)l</error>;
        d = (int)s;

        short t = 0;
        Integer d1 = <error descr="Inconvertible types; cannot cast 'short' to 'java.lang.Integer'">(Integer) t</error>;
        Byte b = <error descr="Inconvertible types; cannot cast 'short' to 'java.lang.Byte'">(Byte) t</error>;

    }

  {
    {
      boolean cond = true;
      // test for JLS3 bug, see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6888770
      Byte B = 0;
      byte b = 0;
      byte value = cond ? B : b;  /////////

      short s = 0;
      Short S = 0;
      short rs = cond ? S : s;

      char c = 0;
      Character C = 0;
      char rc = cond ? C : c;

      boolean bb = cond ? Boolean.FALSE : true;
    }
    
  }
}