//version 8:
class A {
	class B {
		String s;
		@java.lang.SuppressWarnings("all")
		public B(final String s) {
			this.s = s;
		}
	}
}
class C {
	final class D {
		private final A a;
		A.B test(String s) {
			return a.new B(s) {
			};
		}
		@java.lang.SuppressWarnings("all")
		public D(final A a) {
			this.a = a;
		}
		@java.lang.SuppressWarnings("all")
		public A getA() {
			return this.a;
		}
		@java.lang.Override
		@java.lang.SuppressWarnings("all")
		public boolean equals(final java.lang.Object o) {
			if (o == this) return true;
			if (!(o instanceof C.D)) return false;
			final C.D other = (C.D) o;
			final java.lang.Object this$a = this.getA();
			final java.lang.Object other$a = other.getA();
			if (this$a == null ? other$a != null : !this$a.equals(other$a)) return false;
			return true;
		}
		@java.lang.Override
		@java.lang.SuppressWarnings("all")
		public int hashCode() {
			final int PRIME = 59;
			int result = 1;
			final java.lang.Object $a = this.getA();
			result = result * PRIME + ($a == null ? 43 : $a.hashCode());
			return result;
		}
		@java.lang.Override
		@java.lang.SuppressWarnings("all")
		public java.lang.String toString() {
			return "C.D(a=" + this.getA() + ")";
		}
	}
}