// access level clashes
interface i {
 void ff();
}

public class a implements i {
 void <error descr="'ff()' in 'a' clashes with 'ff()' in 'i'; attempting to assign weaker access privileges ('package-private'); was 'public'">ff</error>() {}
}
class ai implements i {
 public <error descr="'ff()' in 'ai' clashes with 'ff()' in 'i'; incompatible return type">int</error> ff() { return 0;}
}

class c2 implements i {
 public c2() {}
 public void ff() {}
 protected void g() {}
 private int fff(String s) { return 0; }
}

class c3 extends c2 {
 protected c3() {}
 private int g(int k) { return 2;}
 private char fff(String s) { return 0; }
}

class c4 extends c3 {
 private c4() {}
 <error descr="'g()' in 'c4' clashes with 'g()' in 'c2'; attempting to assign weaker access privileges ('private'); was 'protected'">private</error> void g() {}
 private String fff(String s) throws java.io.IOException { return null; }
}
class c4i extends c3 {
 protected <error descr="'g()' in 'c4i' clashes with 'g()' in 'c2'; incompatible return type">Object</error> g() {return null;}
}

// sibling inheritance
abstract class c5 { abstract public int ff(); }
interface i5 { void ff(); }
<error descr="'ff()' in 'i5' clashes with 'ff()' in 'c5'; methods have unrelated return types">abstract class c6 extends c5 implements i5</error> {
}

class c7 { public String ff() { return null;} }
<error descr="'ff()' in 'c7' clashes with 'ff()' in 'i5'; incompatible return type">class c8 extends c7 implements i5</error> {
}

// interface should not clash with Object
interface A {
    Object clone() throws CloneNotSupportedException;
    void finalize();

    <error descr="'hashCode()' in 'A' clashes with 'hashCode()' in 'java.lang.Object'; incompatible return type">void</error> hashCode();
    <error descr="'equals(Object)' in 'A' clashes with 'equals(Object)' in 'java.lang.Object'; incompatible return type">void</error> equals(Object o);
    <error descr="'toString()' in 'A' clashes with 'toString()' in 'java.lang.Object'; incompatible return type">void</error> toString();
}

interface ConflictWithObject {
        Object clone() throws CloneNotSupportedException;
}
<error descr="'clone()' in 'java.lang.Object' clashes with 'clone()' in 'ConflictWithObject'; attempting to assign weaker access privileges ('protected'); was 'public'">class s implements ConflictWithObject</error> {

}

// parallel overriding methods from Object
interface InderFace {
  Object clone() throws CloneNotSupportedException;
}

interface SubInderFace extends InderFace {
}

<error descr="'clone()' in 'java.lang.Object' clashes with 'clone()' in 'InderFace'; attempting to assign weaker access privileges ('protected'); was 'public'">class Implementation implements SubInderFace</error> {
}



//SCR20002
abstract class SCR20002A extends Object implements Runnable {
  protected abstract int getSome();
  private final Inner getInner() { return null; }
  private class Inner { }
}

abstract class SCR20002B extends SCR20002A implements Runnable {
  private final Inner getInner() { return null; }
  private class Inner { }
}
abstract class SCR20002C extends SCR20002B implements Runnable {
}
