// invalid expressions
public class a12 {
  static int i;

  int f(int i) {
    <error descr="Not a statement">1;</error>
    <error descr="Not a statement">1==2;</error>
    <error descr="Not a statement">1==2 ? 1 : 3;</error>
    <error descr="Not a statement">f(1) == 3;</error>
    <error descr="Not a statement">1,2;</error>
    <error descr="Not a statement">~1;</error>
    <error descr="Not a statement">!(1==2);</error>
    <error descr="Not a statement">new int[0];</error>
    <error descr="Not a statement">new a12[10];</error>
    <error descr="Not a statement">new a12[]{};</error>
    <error descr="Not a statement">new int[]{1};</error>
    <error descr="Not a statement">new String[]{new String()};</error>
    if (i==1)
      <error descr="Not a statement">String s00 = "";</error>
    for (;;)
      <error descr="Not a statement">String s01 = "";</error>

    
    for (<error descr="Not a statement">1==2,i=3;</error> i<3; <error descr="Not a statement">!(1==2)</error>);

    label2:
        <error descr="Not a statement">int ksdfgdf;</error>


    int i1=3, g=5;
    g++;
    ++g;
    for (int k=1,l=3; k<3; k++,l--) {;};
    class s {}
    new s() { void f(){}};
    return 3;
  }



  //////////////////////////
  void f() {
    a12 a[] = new a12[4];
    int[] ai = null;

    <error descr="Variable expected">5</error> = 5;
    <error descr="Variable expected">5</error>++;
    ++<error descr="Variable expected">5</error>;
    <error descr="Variable expected">5</error> += 5;

    <error descr="Cannot resolve method 'foo123Unresolved(?)'">foo123Unresolved</error>(<error descr="Expression expected">String</error>);
    <error descr="Cannot resolve method 'foo123Unresolved(?)'">foo123Unresolved</error>(<error descr="Cannot resolve symbol 'xxxx'">xxxx</error>);

    <error descr="Cannot resolve method 'xxxxxx(?)'">xxxxxx</error>(<error descr="Cannot resolve symbol 'xxxxxx'">xxxxxx</error>);

    // incomplete code should not cause 'expr expected'
    Object<error descr="';' expected"> </error>


    <error descr="Array type expected; found: 'int'">4</error>[1] = 5;
    a[<error descr="Incompatible types. Found: 'java.lang.String', required: 'int'">"d"</error>] = null;

    <error descr="Array type expected; found: 'a12'">a[0]</error>[1] = 5;
    <error descr="Array type expected; found: 'int'">i</error>[0] = 5;
    i = ai[<error descr="Incompatible types. Found: 'a12', required: 'int'">a[1]</error>];

    final a12[] a12a = new a12[<error descr="Incompatible types. Found: 'null', required: 'int'">{null}</error>];
    int[] iarr = new int[<error descr="Incompatible types. Found: 'null', required: 'int'">{0}</error>];


    new String[<error descr="Incompatible types. Found: 'java.lang.String', required: 'int'">"d"</error>];
    new String[<error descr="Incompatible types. Found: 'double', required: 'int'">1.1</error>]
              [<error descr="Incompatible types. Found: 'a12', required: 'int'">this</error>];

    a[0] = null;
    (a)[(1)].i = 3;
    (( i) ) = (5);
    a12.i = 0;
    arr()[0] = 1;
    new int[] { 1,3} [0] = 2;
    Object[] var = null;
    i = var.length;

    // array initializers
    var = <error descr="Array initializer is not allowed here">{ null, null }</error>;
    Object var1 = <error descr="Array initializer is not allowed here">{ null, null }</error>;
    int[] var2 = { 1,2 };
    var2 = new int[] { 2, 4};
    int[][] ii2 = { { 1,2}, {4} };

  }
  <error descr="Illegal type: 'void'">void</error>[] fv() {
     if (1==2) return new <error descr="Illegal type: 'void'">void</error>[0];
     return null;
  }

  int[] arr() { return new int[0]; }

  public <error descr="Invalid method declaration; return type required">foo</error>() {
  }

  {
    new Object() {
      <error descr="Invalid method declaration; return type required">Object</error>() {}
    };
  }

  // do not warn about illegal type in incomplete declarations (http://www.intellij.net/tracker/idea/viewSCR?publicId=9586)
  void foo<EOLError descr="';' expected"></EOLError>
}


