public void processClass(@NotNull String qualifiedName, @NotNull File file)
      throws IOException, LinkageError, UnsupportedOperationException {

      final List<ReferenceType> vmClasses = myVirtualMachineProxy.classesByName(qualifiedName);
      if (vmClasses.isEmpty()) {
        return;
      }

      final byte[] content = FileUtil.loadFileBytes(file);
      if (vmClasses.size() == 1) {
        myRedefineMap.put(vmClasses.get(0), content);
        if (myRedefineMap.size() >= CLASSES_CHUNK_SIZE) {
          processChunk();
        }
        return;
      }

      int redefinedVersionsCount = 0;
      LinkageError error = null;
      UnsupportedOperationException exception = null;
      for (ReferenceType vmClass : vmClasses) {
        try {
          myVirtualMachineProxy.redefineClasses(Collections.singletonMap(vmClass, content));
          redefinedVersionsCount++;
        }
        catch (LinkageError e) {
          error = e;
        }
        catch (UnsupportedOperationException e) {
          exception = e;
        }
      }
      if (redefinedVersionsCount == 0) {
        if (error != null) throw error;
        assert exception != null;
        throw exception;
      }

      if (redefinedVersionsCount < vmClasses.size()) {
        myPartiallyRedefinedClassesCount++;
      }
      myProcessedClassesCount++;
    }
public void processClass(@NotNull String qualifiedName, @NotNull File file)