@NotNull
 public static Collection<FqName> getTopLevelFunctionFqNames(
     @NotNull Project project, @NotNull GlobalSearchScope scope, boolean shouldBeExtension) {
   Collection<FqName> result = Sets.newHashSet();
   Collection<PsiClass> packageClasses =
       getClassesByAnnotation(KotlinPackage.class.getSimpleName(), project, scope);
   for (PsiClass psiClass : packageClasses) {
     String qualifiedName = psiClass.getQualifiedName();
     if (qualifiedName == null) {
       continue;
     }
     FqName packageFqName = new FqName(qualifiedName).parent();
     PackageData data = getPackageData(psiClass);
     if (data == null) {
       continue;
     }
     NameResolver nameResolver = data.getNameResolver();
     for (ProtoBuf.Callable callable : data.getPackageProto().getMemberList()) {
       if (callable.hasReceiverType() == shouldBeExtension) {
         Name name = nameResolver.getName(callable.getName());
         result.add(packageFqName.child(name));
       }
     }
   }
   return result;
 }
  @Nullable
  static FqName getJetTopLevelDeclarationFQN(@NotNull PsiMethod method) {
    PsiClass containingClass = method.getContainingClass();

    if (containingClass != null) {
      String qualifiedName = containingClass.getQualifiedName();
      assert qualifiedName != null;

      FqName classFQN = new FqName(qualifiedName);

      if (JavaResolverPsiUtils.isCompiledKotlinPackageClass(containingClass)) {
        FqName classParentFQN = QualifiedNamesUtil.withoutLastSegment(classFQN);
        return QualifiedNamesUtil.combine(classParentFQN, Name.identifier(method.getName()));
      }
    }

    return null;
  }