@RequiresBackgroundThread
  private static @NotNull @NlsContexts.Label String getTextWithClassFileInfo(@NotNull VirtualFile file) {
    LanguageLevel level = JavaMultiReleaseUtil.getVersion(file);
    @Nls StringBuilder info = new StringBuilder();
    if (level != null) {
      info.append(JavaUiBundle.message("class.file.multi.release.decompiled.text", level.feature()));
    } else {
      info.append(JavaUiBundle.message("class.file.decompiled.text"));
    }

    try {
      byte[] data = file.contentsToByteArray(false);
      if (data.length > 8) {
        try (DataInputStream stream = new DataInputStream(new ByteArrayInputStream(data))) {
          if (stream.readInt() == 0xCAFEBABE) {
            int minor = stream.readUnsignedShort();
            int major = stream.readUnsignedShort();
            info.append(", ")
              .append(JavaUiBundle.message("class.file.decompiled.bytecode.version.text", major, minor));

            JavaSdkVersion sdkVersion = ClsParsingUtil.getJdkVersionByBytecode(major);
            if (sdkVersion != null) {
              info.append(" ")
                .append(JavaUiBundle.message("class.file.decompiled.sdk.version.text",
                                             getSdkDescription(sdkVersion, ClsParsingUtil.isPreviewLevel(minor))));
            }
          }
        }
      }
    }
    catch (IOException ignored) { }

    return info.toString();
  }
@RequiresBackgroundThread
  private static @NotNull @NlsContexts.Label String getTextWithClassFileInfo(@NotNull VirtualFile file)