public Type asUninitialized(int newAt) {
    if (newAt < 0) {
      throw new IllegalArgumentException("newAt < 0");
    }

    if (!isReference()) {
      throw new IllegalArgumentException("not a reference type: " + descriptor);
    }

    if (isUninitialized()) {
      /*
       * Dealing with uninitialized types as a starting point is
       * a pain, and it's not clear that it'd ever be used, so
       * just disallow it.
       */
      throw new IllegalArgumentException("already uninitialized: " + descriptor);
    }

    /*
     * Create a new descriptor that is unique and shouldn't conflict
     * with "normal" type descriptors
     */
    String newDesc = 'N' + Hex.u2(newAt) + descriptor;
    Type result = new Type(newDesc, BT_OBJECT, newAt);
    result.initializedType = this;
    return putIntern(result);
  }
Returns a new interned instance which is identical to this one, except it is indicated as
uninitialized and allocated at the given bytecode index. This instance must be an initialized
object type.

@param newAt {@code >= 0;} the allocation bytecode index
@return {@code non-null;} an appropriately-constructed instance
android/android_framework/dex-maker/src/main/java/com/android/dx/rop/type/Type.java