ImmutableList fetchLocationFromPosition()

in tools/languageserver/src/main/java/com/google/cloud/verticals/foundations/dataharmonization/lsp/SymbolLookup.java [121:167]


  ImmutableList<Location> fetchLocationFromPosition(
      String documentUri, int lineNumber, int columnPosition, Set<String> documentImportURIs) {

    SymbolWithPosition referenceSymbol =
        documentUriToReferenceSymbols.get(documentUri).stream()
            .filter(
                symbolSourceReference ->
                    lineAndColumnInSource(
                        symbolSourceReference.getZeroBasedSource(), lineNumber, columnPosition))
            .min(this::compareSymbolRefSize)
            .orElse(null);

    if (referenceSymbol == null) {
      // Try searching through write symbols
      SymbolWithPosition writeSymbol =
          documentUriToWriteSymbols.get(documentUri).stream()
              .filter(
                  symbolSourceReference ->
                      lineAndColumnInSource(
                          symbolSourceReference.getZeroBasedSource(), lineNumber, columnPosition))
              .min(this::compareSymbolRefSize)
              .orElse(null);
      if (writeSymbol != null) {
        // Search through both other write and definition symbols for this write symbol
        ImmutableList<Location> foundDefSymbol =
            searchSymbolCollection(
                documentUriToDefinitionSymbols.get(documentUri), writeSymbol, lineNumber);
        return !foundDefSymbol.isEmpty()
            ? foundDefSymbol
            : searchSymbolCollection(
                documentUriToWriteSymbols.get(documentUri), writeSymbol, lineNumber);
      }
      // Nothing found, no symbols at this location.
      logger.atInfo().log("No symbol found at position %s:%s", lineNumber, columnPosition);
      return ImmutableList.of();
    }
    // Search through both write and definition symbols for the reference symbol
    ImmutableList<Location> foundWriteSymbol =
        searchSymbolCollection(
            documentUriToWriteSymbols.get(documentUri), referenceSymbol, lineNumber);

    // If no write symbols are found in the current file, we search through all definition symbols
    // in the current file, and any imports it includes.
    return !foundWriteSymbol.isEmpty()
        ? foundWriteSymbol
        : searchDefinitionSymbols(documentUri, referenceSymbol, documentImportURIs, lineNumber);
  }