goog.module('array.Arrays$impl');

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

let ArrayContainer = goog.forwardDeclare('array.Arrays.ArrayContainer$impl');
let SomeObject = goog.forwardDeclare('array.Arrays.SomeObject$impl');
let Serializable = goog.forwardDeclare('java.io.Serializable$impl');
let Boolean = goog.forwardDeclare('java.lang.Boolean$impl');
let Cloneable = goog.forwardDeclare('java.lang.Cloneable$impl');
let j_l_String = goog.forwardDeclare('java.lang.String$impl');
let $Long = goog.forwardDeclare('nativebootstrap.Long$impl');
let $Arrays = goog.forwardDeclare('vmbootstrap.Arrays$impl');
let $Primitives = goog.forwardDeclare('vmbootstrap.Primitives$impl');
let $$int = goog.forwardDeclare('vmbootstrap.primitives.$int$impl');
let $$long = goog.forwardDeclare('vmbootstrap.primitives.$long$impl');

class Arrays extends j_l_Object {
 /** @protected @nodts */
 constructor() {
  super();
 }
 /** @nodts @return {!Arrays} */
 static $create__() {
  Arrays.$clinit();
  let $instance = new Arrays();
  $instance.$ctor__array_Arrays__void();
  return $instance;
 }
 /** @nodts */
 $ctor__array_Arrays__void() {
  this.$ctor__java_lang_Object__void();
 }
 /** @nodts */
 m_testObjectArray__void() {
  let objects = new Array(100);
  objects = new Array(0);
  objects = [null, null];
  let objects2d = /**@type {!Array<Array<*>>}*/ ($Arrays.$create([5, 10], j_l_Object));
  objects2d = (/**@type {!Array<Array<*>>}*/ ($Arrays.$stampType([[null, null], null], j_l_Object, 2)));
  objects2d = (/**@type {!Array<Array<*>>}*/ ($Arrays.$create([20, null], j_l_Object)));
  let arrayLiteral2d = /**@type {!Array<Array<*>>}*/ ($Arrays.$stampType([[null, null], null], j_l_Object, 2));
  let object = objects[0];
  object = objects2d[0][1];
  $Arrays.$set(objects, 0, null);
  $Arrays.$set(objects2d[0], 1, null);
 }
 /** @nodts */
 m_testJavaTypeArray__void() {
  let objects = /**@type {!Array<SomeObject>}*/ ($Arrays.$create([100], SomeObject));
  objects = (/**@type {!Array<SomeObject>}*/ ($Arrays.$create([0], SomeObject)));
  objects = (/**@type {!Array<SomeObject>}*/ ($Arrays.$stampType([null, null], SomeObject)));
  let objects2d = /**@type {!Array<Array<SomeObject>>}*/ ($Arrays.$create([5, 10], SomeObject));
  objects2d = (/**@type {!Array<Array<SomeObject>>}*/ ($Arrays.$stampType([/**@type {!Array<SomeObject>}*/ ($Arrays.$stampType([null, null], SomeObject)), null], SomeObject, 2)));
  objects2d = (/**@type {!Array<Array<SomeObject>>}*/ ($Arrays.$create([20, null], SomeObject)));
  let someObject = objects[0];
  someObject = objects2d[0][1];
  $Arrays.$set(objects, 0, null);
  $Arrays.$set(objects2d[0], 1, null);
 }
 /** @nodts */
 m_testIntArrays__void_$pp_array() {
  let ints = /**@type {!Array<number>}*/ ($Arrays.$create([100], $$int));
  ints = (/**@type {!Array<number>}*/ ($Arrays.$create([0], $$int)));
  ints = (/**@type {!Array<number>}*/ ($Arrays.$stampType([0, 1], $$int)));
  let ints2d = /**@type {!Array<Array<number>>}*/ ($Arrays.$create([5, 10], $$int));
  ints2d = (/**@type {!Array<Array<number>>}*/ ($Arrays.$stampType([/**@type {!Array<number>}*/ ($Arrays.$stampType([1, 2], $$int)), null], $$int, 2)));
  ints2d = (/**@type {!Array<Array<number>>}*/ ($Arrays.$create([20, null], $$int)));
  let n = ints[0];
  n = ints2d[0][1];
  $Arrays.$set(ints, 0, 1);
  $Arrays.$set(ints2d[0], 1, 1);
  let b = 1;
  let c = 97 /* 'a' */;
  ints = (/**@type {!Array<number>}*/ ($Arrays.$create([b], $$int)));
  $Arrays.$set(ints, b, b);
  ints = (/**@type {!Array<number>}*/ ($Arrays.$create([c], $$int)));
  $Arrays.$set(ints, c, c);
  ints = (/**@type {!Array<number>}*/ ($Arrays.$stampType([b, c], $$int)));
 }
 /** @nodts */
 m_testLongArrays__void_$pp_array() {
  let longs = /**@type {!Array<!$Long>}*/ ($Arrays.$create([100], $$long));
  longs = (/**@type {!Array<!$Long>}*/ ($Arrays.$create([0], $$long)));
  longs = (/**@type {!Array<!$Long>}*/ ($Arrays.$stampType([$Long.fromInt(0), $Long.fromInt(1)], $$long)));
  let longs2d = /**@type {!Array<Array<!$Long>>}*/ ($Arrays.$create([5, 10], $$long));
  longs2d = (/**@type {!Array<Array<!$Long>>}*/ ($Arrays.$stampType([/**@type {!Array<!$Long>}*/ ($Arrays.$stampType([$Long.fromInt(1), $Long.fromInt(2)], $$long)), null], $$long, 2)));
  longs2d = (/**@type {!Array<Array<!$Long>>}*/ ($Arrays.$create([20, null], $$long)));
  let n = longs[0];
  n = longs2d[0][1];
  $Arrays.$set(longs, 0, $Long.fromInt(1));
  $Arrays.$set(longs2d[0], 1, $Long.fromInt(1));
  let b = 1;
  let c = 97 /* 'a' */;
  longs = (/**@type {!Array<!$Long>}*/ ($Arrays.$create([b], $$long)));
  $Arrays.$set(longs, b, $Primitives.widenByteToLong(b));
  longs = (/**@type {!Array<!$Long>}*/ ($Arrays.$create([c], $$long)));
  $Arrays.$set(longs, c, $Primitives.widenCharToLong(c));
  longs = (/**@type {!Array<!$Long>}*/ ($Arrays.$stampType([$Primitives.widenByteToLong(b), $Primitives.widenCharToLong(c)], $$long)));
 }
 /** @nodts */
 m_testDevirtualizedTypeArrays__void_$pp_array() {
  let booleans = /**@type {!Array<?boolean>}*/ ($Arrays.$create([100], Boolean));
  booleans = (/**@type {!Array<?boolean>}*/ ($Arrays.$create([0], Boolean)));
  booleans = (/**@type {!Array<?boolean>}*/ ($Arrays.$stampType([true, false], Boolean)));
  let booleans2d = /**@type {!Array<Array<?boolean>>}*/ ($Arrays.$create([5, 10], Boolean));
  booleans2d = (/**@type {!Array<Array<?boolean>>}*/ ($Arrays.$stampType([/**@type {!Array<?boolean>}*/ ($Arrays.$stampType([true, false], Boolean)), null], Boolean, 2)));
  booleans2d = (/**@type {!Array<Array<?boolean>>}*/ ($Arrays.$create([20, null], Boolean)));
  let b = Boolean.m_booleanValue__java_lang_Boolean__boolean(booleans[0]);
  b = Boolean.m_booleanValue__java_lang_Boolean__boolean(booleans2d[0][1]);
  $Arrays.$set(booleans, 0, true);
  $Arrays.$set(booleans2d[0], 1, false);
 }
 /** @nodts */
 m_testStringArrays__void_$pp_array() {
  let strings = /**@type {!Array<?string>}*/ ($Arrays.$create([100], j_l_String));
  strings = (/**@type {!Array<?string>}*/ ($Arrays.$create([0], j_l_String)));
  strings = (/**@type {!Array<?string>}*/ ($Arrays.$stampType([null, null], j_l_String)));
  let strings2d = /**@type {!Array<Array<?string>>}*/ ($Arrays.$create([5, 10], j_l_String));
  strings2d = (/**@type {!Array<Array<?string>>}*/ ($Arrays.$stampType([/**@type {!Array<?string>}*/ ($Arrays.$stampType([null, null], j_l_String)), null], j_l_String, 2)));
  strings2d = (/**@type {!Array<Array<?string>>}*/ ($Arrays.$create([20, null], j_l_String)));
  let b = strings[0];
  b = strings2d[0][1];
  $Arrays.$set(strings, 0, null);
  $Arrays.$set(strings2d[0], 1, null);
 }
 /** @nodts */
 m_testNativeArray__void_$p_array_Arrays() {
  let nativeObjects = new Array(100);
  nativeObjects = new Array(0);
  nativeObjects = [null, null];
  let nativeObjects2d = /**@type {!Array<Array<String>>}*/ ($Arrays.$createNative([5, 10]));
  nativeObjects2d = [[null, null], null];
  nativeObjects2d = (/**@type {!Array<Array<String>>}*/ ($Arrays.$createNative([20, null])));
  let nativeObject = nativeObjects[0];
  nativeObject = nativeObjects2d[0][1];
  $Arrays.$set(nativeObjects, 0, null);
  $Arrays.$set(nativeObjects2d[0], 1, null);
 }
 /** @nodts */
 m_testErasureCastsOnArrayAccess__void() {
  let /** ArrayContainer<?string> */ container = null;
  let s = (/**@type {!Array<?string>}*/ ($Arrays.$castTo(container.f_data__array_Arrays_ArrayContainer, j_l_String, 1)))[0];
 }
 /** @nodts */
 m_testCovariance__void() {
  let /** Array<*> */ objectArray = null;
  let /** Array<?string> */ stringArray = null;
  objectArray = stringArray;
 }
 /** @nodts */
 m_testArraysSupertypeClosureTypes__void() {
  this.m_consumesCloneable__java_lang_Cloneable__void(new Array(10));
  this.m_consumesSerializable__java_io_Serializable__void(new Array(10));
 }
 /** @nodts */
 m_consumesCloneable__java_lang_Cloneable__void(/** (Cloneable|Array) */ cloneable) {}
 /** @nodts */
 m_consumesSerializable__java_io_Serializable__void(/** (Serializable|Array) */ serializable) {}
 /** @nodts */
 static $clinit() {
  Arrays.$clinit = () =>{};
  Arrays.$loadModules();
  j_l_Object.$clinit();
 }
 /** @nodts @return {boolean} */
 static $isInstance(/** ? */ instance) {
  return instance instanceof Arrays;
 }
 
 /** @nodts */
 static $loadModules() {
  SomeObject = goog.module.get('array.Arrays.SomeObject$impl');
  Boolean = goog.module.get('java.lang.Boolean$impl');
  j_l_String = goog.module.get('java.lang.String$impl');
  $Long = goog.module.get('nativebootstrap.Long$impl');
  $Arrays = goog.module.get('vmbootstrap.Arrays$impl');
  $Primitives = goog.module.get('vmbootstrap.Primitives$impl');
  $$int = goog.module.get('vmbootstrap.primitives.$int$impl');
  $$long = goog.module.get('vmbootstrap.primitives.$long$impl');
 }
}
$Util.$setClassMetadata(Arrays, 'array.Arrays');

exports = Arrays;

//# sourceMappingURL=Arrays.js.map
