@Override
  public PsiReference @NotNull [] getReferencesByElement(@NotNull PsiElement element, @NotNull ProcessingContext context) {
    if (!shouldAddReference(element)) {
      // Add reference to element with one child or leaf element only to avoid performance problem.
      return PsiReference.EMPTY_ARRAY;
    }

    if (!MavenDomUtil.isFilteredResourceFile(element)) return PsiReference.EMPTY_ARRAY;

    String text = element.getText();
    if (StringUtil.isEmptyOrSpaces(text)) return PsiReference.EMPTY_ARRAY;

    MavenProject mavenProject = MavenDomUtil.findContainingProject(element);
    if (mavenProject == null) return PsiReference.EMPTY_ARRAY;

    List<PsiReference> res = null;
    
    Pattern pattern = getDelimitersPattern(mavenProject);

    Matcher matcher = pattern.matcher(text);
    
    int groupCount = matcher.groupCount();
    
    while (matcher.find()) {
      String propertyName = null;
      int from = 0;
      
      for (int i = 0; i < groupCount; i++) {
        propertyName = matcher.group(i + 1);
        if (propertyName != null) {
          from = matcher.start(i + 1);
          break;
        }
      }

      assert propertyName != null;

      if (res == null) {
        res = new ArrayList<>();
      }

      TextRange range = TextRange.from(from, propertyName.length());

      res.add(new MavenFilteredPropertyPsiReference(mavenProject, element, propertyName, range));
    }

    return res == null ? PsiReference.EMPTY_ARRAY : res.toArray(PsiReference.EMPTY_ARRAY);
  }
@Override
  public PsiReference @NotNull [] getReferencesByElement(@NotNull PsiElement element, @NotNull ProcessingContext context)