class Outer { class Inner1 extends Outer { Inner1() {} Inner1(Outer o) {} } class Inner2 extends Inner1 { public Inner2(Object o) { <error descr="Incompatible types. Found: 'java.lang.Object', required: 'Outer'">o</error>.super(); } public Inner2(int o) { Outer.this.super(); } public Inner2(Outer o) { o.super(Outer.this); } public Inner2(Outer o, int par) { o.super(<error descr="Cannot reference 'this' before supertype constructor has been called">this</error>); } public Inner2(Outer o, Object par) { <error descr="Cannot reference 'this' before supertype constructor has been called">this</error>.super(o); } } class BadInner extends Inner1 { <error descr="Cannot reference 'BadInner.this' before supertype constructor has been called">BadInner()</error> {} } <error descr="Cannot reference 'BadInner2.this' before supertype constructor has been called">class BadInner2 extends Inner1</error> { } class s { void f(Object o) { new s(); Outer.this.new s(); } } } class Outer2 { class Inner {} } class Ext extends Outer2 { class ExtInner extends Inner { ExtInner() { super(); } } }