private static Collection<FqName> getJetExtensionFunctions(
      @NotNull final String referenceName,
      @NotNull JetSimpleNameExpression expression,
      @NotNull Project project) {
    JetShortNamesCache namesCache = JetCacheManager.getInstance(project).getNamesCache();
    Collection<DeclarationDescriptor> jetCallableExtensions =
        namesCache.getJetCallableExtensions(
            new Condition<String>() {
              @Override
              public boolean value(String callableExtensionName) {
                return callableExtensionName.equals(referenceName);
              }
            },
            expression,
            GlobalSearchScope.allScope(project));

    return Sets.newHashSet(
        Collections2.transform(
            jetCallableExtensions,
            new Function<DeclarationDescriptor, FqName>() {
              @Override
              public FqName apply(@Nullable DeclarationDescriptor declarationDescriptor) {
                assert declarationDescriptor != null;
                return DescriptorUtils.getFQName(declarationDescriptor).toSafe();
              }
            }));
  }
  private static Collection<FqName> getJetTopLevelFunctions(
      @NotNull String referenceName, JetSimpleNameExpression expression, @NotNull Project project) {
    JetShortNamesCache namesCache = JetCacheManager.getInstance(project).getNamesCache();
    Collection<FunctionDescriptor> topLevelFunctions =
        namesCache.getTopLevelFunctionDescriptorsByName(
            referenceName, expression, GlobalSearchScope.allScope(project));

    return Sets.newHashSet(
        Collections2.transform(
            topLevelFunctions,
            new Function<DeclarationDescriptor, FqName>() {
              @Override
              public FqName apply(@Nullable DeclarationDescriptor declarationDescriptor) {
                assert declarationDescriptor != null;
                return DescriptorUtils.getFQName(declarationDescriptor).toSafe();
              }
            }));
  }