goog.module('innerclassinitorder.InnerClassInitOrder$impl');

const j_l_Object = goog.require('java.lang.Object$impl');
const $Util = goog.require('nativebootstrap.Util$impl');

let $1 = goog.forwardDeclare('innerclassinitorder.InnerClassInitOrder.$1$impl');
let $1AddNumber = goog.forwardDeclare('innerclassinitorder.InnerClassInitOrder.$1AddNumber$impl');
let $2 = goog.forwardDeclare('innerclassinitorder.InnerClassInitOrder.$2$impl');
let $3 = goog.forwardDeclare('innerclassinitorder.InnerClassInitOrder.$3$impl');
let $4 = goog.forwardDeclare('innerclassinitorder.InnerClassInitOrder.$4$impl');
let ESInnerSubclass = goog.forwardDeclare('innerclassinitorder.InnerClassInitOrder.ESInnerSubclass$impl');
let ESOuter = goog.forwardDeclare('innerclassinitorder.InnerClassInitOrder.ESOuter$impl');
let ESInner = goog.forwardDeclare('innerclassinitorder.InnerClassInitOrder.ESOuter.ESInner$impl');
let ESWGInnerSubclass = goog.forwardDeclare('innerclassinitorder.InnerClassInitOrder.ESWGInnerSubclass$impl');
let ESWGOuter = goog.forwardDeclare('innerclassinitorder.InnerClassInitOrder.ESWGOuter$impl');
let ESWGInner = goog.forwardDeclare('innerclassinitorder.InnerClassInitOrder.ESWGOuter.ESWGInner$impl');
let InnerClass = goog.forwardDeclare('innerclassinitorder.InnerClassInitOrder.InnerClass$impl');
let Outer = goog.forwardDeclare('innerclassinitorder.InnerClassInitOrder.Outer$impl');
let OuterIsNotSuper = goog.forwardDeclare('innerclassinitorder.InnerClassInitOrder.Outer.OuterIsNotSuper$impl');
let OuterIsSuper = goog.forwardDeclare('innerclassinitorder.InnerClassInitOrder.Outer.OuterIsSuper$impl');
let TestQualifiedSuperCall = goog.forwardDeclare('innerclassinitorder.InnerClassInitOrder.Outer.TestQualifiedSuperCall$impl');
let TestUnqualifiedSuperCall = goog.forwardDeclare('innerclassinitorder.InnerClassInitOrder.Outer.TestUnqualifiedSuperCall$impl');
let OuterRefFromSuperCtorCall = goog.forwardDeclare('innerclassinitorder.InnerClassInitOrder.OuterRefFromSuperCtorCall$impl');
let OuterRefFromThisCtorCall = goog.forwardDeclare('innerclassinitorder.InnerClassInitOrder.OuterRefFromThisCtorCall$impl');
let P1 = goog.forwardDeclare('innerclassinitorder.InnerClassInitOrder.P1$impl');
let P2 = goog.forwardDeclare('innerclassinitorder.InnerClassInitOrder.P1.P2$impl');
let P3 = goog.forwardDeclare('innerclassinitorder.InnerClassInitOrder.P1.P2.P3$impl');
let $Arrays = goog.forwardDeclare('vmbootstrap.Arrays$impl');
let $Asserts = goog.forwardDeclare('vmbootstrap.Asserts$impl');

class InnerClassInitOrder extends j_l_Object {
 /** @protected @nodts */
 constructor() {
  super();
  /**@type {number} @nodts*/
  this.f_number__innerclassinitorder_InnerClassInitOrder = 0;
  /**@type {Outer} @nodts*/
  this.f_outer__innerclassinitorder_InnerClassInitOrder_;
  /**@type {OuterIsSuper} @nodts*/
  this.f_outerIsSuper__innerclassinitorder_InnerClassInitOrder_;
 }
 /** @nodts @return {!InnerClassInitOrder} */
 static $create__() {
  InnerClassInitOrder.$clinit();
  let $instance = new InnerClassInitOrder();
  $instance.$ctor__innerclassinitorder_InnerClassInitOrder__void();
  return $instance;
 }
 /** @nodts */
 $ctor__innerclassinitorder_InnerClassInitOrder__void() {
  this.$ctor__java_lang_Object__void();
  this.$init__void_$p_innerclassinitorder_InnerClassInitOrder();
 }
 /** @nodts */
 m_testOuterThisFromSuperCall__void() {
  OuterRefFromSuperCtorCall.$create__innerclassinitorder_InnerClassInitOrder(this);
  $Asserts.$assert(this.f_number__innerclassinitorder_InnerClassInitOrder == 100);
 }
 /** @nodts */
 m_testOuterThisFromThisCall__void() {
  OuterRefFromThisCtorCall.$create__innerclassinitorder_InnerClassInitOrder(this);
  $Asserts.$assert(this.f_number__innerclassinitorder_InnerClassInitOrder == 1100);
 }
 /** @nodts */
 m_testExtendsNested__void() {
  let o = ESOuter.$create__();
  $Asserts.$assert(1 == ESInner.$create__innerclassinitorder_InnerClassInitOrder_ESOuter(o).f_value__innerclassinitorder_InnerClassInitOrder_ESOuter_ESInner);
  $Asserts.$assert(2 == ESInner.$create__innerclassinitorder_InnerClassInitOrder_ESOuter__int(o, 2).f_value__innerclassinitorder_InnerClassInitOrder_ESOuter_ESInner);
  $Asserts.$assert(1 == ESInnerSubclass.$create__innerclassinitorder_InnerClassInitOrder_ESOuter(o).f_value__innerclassinitorder_InnerClassInitOrder_ESOuter_ESInner);
  $Asserts.$assert(2 == ESInnerSubclass.$create__int__innerclassinitorder_InnerClassInitOrder_ESOuter(2, o).f_value__innerclassinitorder_InnerClassInitOrder_ESOuter_ESInner);
 }
 /** @nodts */
 m_testExtendsNestedWithGenerics__void() {
  let o = /**@type {!ESWGOuter<?string>}*/ (ESWGOuter.$create__());
  $Asserts.$assert(1 == (/**@type {!ESWGInner<?string>}*/ (ESWGInner.$create__innerclassinitorder_InnerClassInitOrder_ESWGOuter(o))).f_value__innerclassinitorder_InnerClassInitOrder_ESWGOuter_ESWGInner);
  $Asserts.$assert(2 == (/**@type {!ESWGInner<?string>}*/ (ESWGInner.$create__innerclassinitorder_InnerClassInitOrder_ESWGOuter__int(o, 2))).f_value__innerclassinitorder_InnerClassInitOrder_ESWGOuter_ESWGInner);
  $Asserts.$assert(1 == ESWGInnerSubclass.$create__innerclassinitorder_InnerClassInitOrder_ESWGOuter(o).f_value__innerclassinitorder_InnerClassInitOrder_ESWGOuter_ESWGInner);
  $Asserts.$assert(2 == ESWGInnerSubclass.$create__int__innerclassinitorder_InnerClassInitOrder_ESWGOuter(2, o).f_value__innerclassinitorder_InnerClassInitOrder_ESWGOuter_ESWGInner);
 }
 /** @nodts */
 m_testInnerClassCtors__void() {
  let p1 = /**@type {!P1<*>}*/ (P1.$create__());
  $Asserts.$assert(1 == p1.f_value__innerclassinitorder_InnerClassInitOrder_P1);
  $Asserts.$assert(2 == (/**@type {!P1<*>}*/ (P1.$create__int(2))).f_value__innerclassinitorder_InnerClassInitOrder_P1);
  let p2 = /**@type {!P2<*, *>}*/ (P2.$create__innerclassinitorder_InnerClassInitOrder_P1(p1));
  $Asserts.$assert(1 == p2.f_value__innerclassinitorder_InnerClassInitOrder_P1);
  $Asserts.$assert(2 == (/**@type {!P2<*, *>}*/ (P2.$create__innerclassinitorder_InnerClassInitOrder_P1__int(p1, 2))).f_value__innerclassinitorder_InnerClassInitOrder_P1);
  $Asserts.$assert(1 == (/**@type {!P3<*, *, *>}*/ (P3.$create__innerclassinitorder_InnerClassInitOrder_P1_P2(p2))).f_value__innerclassinitorder_InnerClassInitOrder_P1);
  $Asserts.$assert(2 == (/**@type {!P3<*, *, *>}*/ (P3.$create__innerclassinitorder_InnerClassInitOrder_P1_P2__int(p2, 2))).f_value__innerclassinitorder_InnerClassInitOrder_P1);
 }
 /** @nodts */
 m_testInnerClassInitialization__void() {
  InnerClass.$create__innerclassinitorder_InnerClassInitOrder(this);
  $Asserts.$assert(this.f_number__innerclassinitorder_InnerClassInitOrder == 1111);
 }
 /** @nodts */
 m_testInnerClassLoop__void() {
  let results = /**@type {!Array<$1AddNumber>}*/ ($Arrays.$create([10], $1AddNumber));
  for (let i = 0; i < 10; i = i + 1 | 0) {
   let ap = $1.$create__innerclassinitorder_InnerClassInitOrder__int(this, i);
   $Arrays.$set(results, i, ap);
  }
  for (let $array = results, $index = 0; $index < $array.length; $index++) {
   let theAp = $array[$index];
   {
    theAp.m_act__void();
   }
  }
  $Asserts.$assert(this.f_number__innerclassinitorder_InnerClassInitOrder == 1156);
 }
 /** @nodts */
 m_testOuterIsNotSuper__void() {
  let x = OuterIsNotSuper.$create__innerclassinitorder_InnerClassInitOrder_Outer(this.f_outerIsSuper__innerclassinitorder_InnerClassInitOrder_);
  $Asserts.$assert(2 == x.m_getValue__int());
 }
 /** @nodts */
 m_testOuterIsNotSuperAnon__void() {
  let x = $2.$create__innerclassinitorder_InnerClassInitOrder(this);
  $Asserts.$assert(2 == x.m_getValue__int());
 }
 /** @nodts */
 m_testQualifiedSuperCall__void() {
  let x = TestQualifiedSuperCall.$create__();
  $Asserts.$assert(2 == x.m_getValue__int());
 }
 /** @nodts */
 m_testQualifiedSuperCallAnon__void() {
  let x = $3.$create__innerclassinitorder_InnerClassInitOrder(this);
  $Asserts.$assert(2 == x.m_getValue__int());
 }
 /** @nodts */
 m_testSuperDispatch__void() {
  $Asserts.$assert(1 == this.f_outerIsSuper__innerclassinitorder_InnerClassInitOrder_.m_checkDispatchFromSub1__int());
  $Asserts.$assert(1 == this.f_outerIsSuper__innerclassinitorder_InnerClassInitOrder_.m_checkDispatchFromSub2__int());
 }
 /** @nodts */
 m_testUnqualifiedAlloc__void() {
  let x = this.f_outerIsSuper__innerclassinitorder_InnerClassInitOrder_.m_unqualifiedAlloc__innerclassinitorder_InnerClassInitOrder_Outer_OuterIsNotSuper();
  $Asserts.$assert(2 == x.m_getValue__int());
 }
 /** @nodts */
 m_testUnqualifiedSuperCall__void() {
  let x = TestUnqualifiedSuperCall.$create__innerclassinitorder_InnerClassInitOrder_Outer(this.f_outerIsSuper__innerclassinitorder_InnerClassInitOrder_);
  $Asserts.$assert(2 == x.m_getValue__int());
 }
 /** @nodts */
 m_testUnqualifiedSuperCallAnon__void() {
  let x = $4.$create__innerclassinitorder_InnerClassInitOrder(this);
  $Asserts.$assert(2 == x.m_getValue__int());
 }
 /** @private @nodts */
 $init__void_$p_innerclassinitorder_InnerClassInitOrder() {
  this.f_number__innerclassinitorder_InnerClassInitOrder = 0;
  this.f_outer__innerclassinitorder_InnerClassInitOrder_ = Outer.$create__int(1);
  this.f_outerIsSuper__innerclassinitorder_InnerClassInitOrder_ = OuterIsSuper.$create__innerclassinitorder_InnerClassInitOrder_Outer__int(this.f_outer__innerclassinitorder_InnerClassInitOrder_, 2);
 }
 /** @nodts */
 static $clinit() {
  InnerClassInitOrder.$clinit = () =>{};
  InnerClassInitOrder.$loadModules();
  j_l_Object.$clinit();
 }
 /** @nodts @return {boolean} */
 static $isInstance(/** ? */ instance) {
  return instance instanceof InnerClassInitOrder;
 }
 
 /** @nodts */
 static $loadModules() {
  $1 = goog.module.get('innerclassinitorder.InnerClassInitOrder.$1$impl');
  $1AddNumber = goog.module.get('innerclassinitorder.InnerClassInitOrder.$1AddNumber$impl');
  $2 = goog.module.get('innerclassinitorder.InnerClassInitOrder.$2$impl');
  $3 = goog.module.get('innerclassinitorder.InnerClassInitOrder.$3$impl');
  $4 = goog.module.get('innerclassinitorder.InnerClassInitOrder.$4$impl');
  ESInnerSubclass = goog.module.get('innerclassinitorder.InnerClassInitOrder.ESInnerSubclass$impl');
  ESOuter = goog.module.get('innerclassinitorder.InnerClassInitOrder.ESOuter$impl');
  ESInner = goog.module.get('innerclassinitorder.InnerClassInitOrder.ESOuter.ESInner$impl');
  ESWGInnerSubclass = goog.module.get('innerclassinitorder.InnerClassInitOrder.ESWGInnerSubclass$impl');
  ESWGOuter = goog.module.get('innerclassinitorder.InnerClassInitOrder.ESWGOuter$impl');
  ESWGInner = goog.module.get('innerclassinitorder.InnerClassInitOrder.ESWGOuter.ESWGInner$impl');
  InnerClass = goog.module.get('innerclassinitorder.InnerClassInitOrder.InnerClass$impl');
  Outer = goog.module.get('innerclassinitorder.InnerClassInitOrder.Outer$impl');
  OuterIsNotSuper = goog.module.get('innerclassinitorder.InnerClassInitOrder.Outer.OuterIsNotSuper$impl');
  OuterIsSuper = goog.module.get('innerclassinitorder.InnerClassInitOrder.Outer.OuterIsSuper$impl');
  TestQualifiedSuperCall = goog.module.get('innerclassinitorder.InnerClassInitOrder.Outer.TestQualifiedSuperCall$impl');
  TestUnqualifiedSuperCall = goog.module.get('innerclassinitorder.InnerClassInitOrder.Outer.TestUnqualifiedSuperCall$impl');
  OuterRefFromSuperCtorCall = goog.module.get('innerclassinitorder.InnerClassInitOrder.OuterRefFromSuperCtorCall$impl');
  OuterRefFromThisCtorCall = goog.module.get('innerclassinitorder.InnerClassInitOrder.OuterRefFromThisCtorCall$impl');
  P1 = goog.module.get('innerclassinitorder.InnerClassInitOrder.P1$impl');
  P2 = goog.module.get('innerclassinitorder.InnerClassInitOrder.P1.P2$impl');
  P3 = goog.module.get('innerclassinitorder.InnerClassInitOrder.P1.P2.P3$impl');
  $Arrays = goog.module.get('vmbootstrap.Arrays$impl');
  $Asserts = goog.module.get('vmbootstrap.Asserts$impl');
 }
}
$Util.$setClassMetadata(InnerClassInitOrder, 'innerclassinitorder.InnerClassInitOrder');

exports = InnerClassInitOrder;

//# sourceMappingURL=InnerClassInitOrder.js.map
