override fun close()

in sources/java-incremental-compilation/intellij-build-zip/src/ZipArchiveOutputStream.kt [435:488]


  override fun close() {
    if (finished) {
      return
    }

    try {
      try {
        val packageIndexBuilder = zipIndexWriter.packageIndexBuilder
        val indexDataEnd = if (packageIndexBuilder == null || zipIndexWriter.isEmpty()) {
          -1
        }
        else {
          packageIndexBuilder.writePackageIndex {
            addDirEntries(it)
          }

          val indexWriter = packageIndexBuilder.indexWriter
          // ditto on macOS doesn't like arbitrary data in zip file - wrap into zip entry
          val indexDataSize = indexWriter.dataSize()
          val indexDataEnd = flushBufferIfNeeded() + indexDataSize + 30 + INDEX_FILENAME_BYTES.size
          writeIndex(indexWriter, indexDataSize, this)
          indexDataEnd.toInt()
        }

        val unwrittenDataSize = buffer.readableBytes()

        // write central directory file header
        val zipIndexData = zipIndexWriter.finish(centralDirectoryOffset = channelPosition + unwrittenDataSize, indexDataEnd = indexDataEnd)
        if (unwrittenDataSize != 0 && buffer.writableBytes() >= zipIndexData.readableBytes()) {
          buffer.writeBytes(zipIndexData)
          writeBuffer(buffer)
        }
        else {
          if (unwrittenDataSize != 0) {
            writeBuffer(buffer)
          }
          writeBuffer(zipIndexData)
        }

        finished = true
      }
      finally {
        dataWriter.close(channelPosition)
      }
    }
    finally {
      try {
        zipIndexWriter.release()
      }
      finally {
        buffer.release()
      }
    }
  }