@Nullable
  public static List<ReadWriteVariableInstruction> findInvalidWriteAccess(@NotNull GroovyControlFlow flow,
                                                                          @NotNull Set<? extends GrVariable> variables,
                                                                          @NotNull Set<? extends GrVariable> alreadyInitialized) {
    DFAEngine<MyData> engine = new DFAEngine<>(flow.getFlow(), new MyDFAInstance(), new MySemilattice());
    final List<@Nullable MyData> dfaResult = engine.performDFAWithTimeout();
    if (dfaResult == null) return null;


    List<ReadWriteVariableInstruction> result = new ArrayList<>();

    Set<Integer> descriptors = variables.stream()
      .filter(Objects::nonNull)
      .map($this$createDescriptor -> flow.getIndex(VariableDescriptorFactory.createDescriptor($this$createDescriptor)))
      .collect(Collectors.toSet());

    Set<Integer> initializedDescriptors = alreadyInitialized.stream()
      .filter(Objects::nonNull)
      .map($this$createDescriptor -> flow.getIndex(VariableDescriptorFactory.createDescriptor($this$createDescriptor)))
      .collect(Collectors.toSet());

    for (int i = 0; i < flow.getFlow().length; i++) {
      Instruction instruction = flow.getFlow()[i];
      if (instruction instanceof ReadWriteVariableInstruction && ((ReadWriteVariableInstruction)instruction).isWrite()) {
        final MyData initialized = dfaResult.get(i);
        int descriptor = ((ReadWriteVariableInstruction)instruction).getDescriptor();
        if (!descriptors.contains(descriptor)) continue;
        if (initializedDescriptors.contains(descriptor)) {
          if (initialized.isInitialized(descriptor)) {
            result.add((ReadWriteVariableInstruction)instruction);
          }
        }
        else {
          if (initialized.isOverInitialized(descriptor)) {
            result.add((ReadWriteVariableInstruction)instruction);
          }
        }
      }
    }


    return result;
  }
@Nullable
  public static List<ReadWriteVariableInstruction> findInvalidWriteAccess(@NotNull GroovyControlFlow flow,
                                                                          @NotNull Set<? extends GrVariable> variables,
                                                                          @NotNull Set<? extends GrVariable> alreadyInitialized)