@Override
  public void documentChanged(@NotNull DocumentEvent event) {
    RangeMarker marker = event.getDocument().createRangeMarker(event.getOffset(), event.getOffset());
    myDocumentManager.performWhenAllCommitted(() -> {
      if (myDetector == null) {
        return;
      }
      PsiFile file = myDocumentManager.getPsiFile(event.getDocument());
      if (file == null) {
        return;
      }
      PsiElement element = file.findElementAt(marker.getStartOffset());
      marker.dispose();
      if (element == null || myDetector.ignoreChanges(element)) return;

      if (element instanceof PsiWhiteSpace) {
        PsiElement method = myStableChange.getMethod();
        if (PsiTreeUtil.skipWhitespacesForward(element) == method) {
          return;
        }
      }

      if (!myDetector.isChangeSignatureAvailableOnElement(element, myStableChange)) {
        detach();
        return;
      }

      updateCurrentInfo();
    });
  }
@Override
  public void documentChanged(@NotNull DocumentEvent event)