protected HyperlinkInfo createOpenFileHyperlink(String fileName, final int line, int column) {
    if ((fileName == null || fileName.length() == 0)) {
        if (myBase != null) {
            fileName = myBase.getPresentableUrl();
        } else {
            return null;
        }
    }
    fileName = fileName.replace(File.separatorChar, '/');

    VirtualFile file;
    // try to interpret the filename as URL
    if (URLUtil.containsScheme(fileName)) {
      try {
        file = VfsUtil.findFileByURL(new URL(fileName));
      } catch (MalformedURLException e) {
        file = VirtualFileManager.getInstance().findFileByUrl(VfsUtil.pathToUrl(fileName));
      }
    } else {
      file = VfsUtil.findRelativeFile(fileName, myBase);
    }
    if (file == null) {
      //noinspection ConstantConditions
      return null;
    }

    final FileType fileType = file.getFileType();
    if (fileType != null && column > 0) {
      final Document document = FileDocumentManager.getInstance().getDocument(file);

      final int start = document.getLineStartOffset(line);
      final int max = document.getLineEndOffset(line);
      final int tabSize = CodeStyleSettingsManager.getInstance(myProject).getCurrentSettings().getTabSize(fileType);
      column = EditorUtil.calcColumnNumber(null, document.getCharsSequence(), start, Math.min(start + column, max), tabSize);
    }
    return new OpenFileHyperlinkInfo(myProject, file, line, column);
  }
protected HyperlinkInfo createOpenFileHyperlink(String fileName, final int line, int column)