public boolean canReference(TwelfFile user, TwelfFile declaration) {
    boolean declared = false;
    for (TwelfIdentifierReference member : getMemberFiles()) {
      if (!declared && member.getCanonicalText().equals(declaration.getName())) {
        declared = true;
      }
      if (member.getCanonicalText().equals(user.getName())) {
        return declared;
      }
    }

    throw new IllegalArgumentException("Not a member file: " + user.getName());
  }
 public Collection<LfGlobalVariable> getAllDeclarations(String name, TwelfFile beforeFile) {
   TwelfFileReference[] memberFiles = getMemberFiles();
   ArrayList<LfGlobalVariable> result = new ArrayList<LfGlobalVariable>();
   for (TwelfFileReference member : memberFiles) {
     TwelfFile file = member.resolve();
     if (file == null) {
       continue;
     }
     if (PsiEquivalenceUtil.areElementsEquivalent(file, beforeFile)) {
       break;
     }
     result.addAll(file.getAllDeclarations(name, Integer.MAX_VALUE));
   }
   return result;
 }
 public LfGlobalVariable getLastDeclaration(
     String name, TwelfFile beforeFile, @Nullable CodeInsightsHolder callback) {
   TwelfFileReference[] memberFiles = getMemberFiles();
   LfGlobalVariable result = null;
   for (TwelfFileReference member : memberFiles) {
     TwelfFile file = member.resolve();
     if (file == null) {
       continue;
     }
     if (PsiEquivalenceUtil.areElementsEquivalent(file, beforeFile)) {
       break;
     }
     LfGlobalVariable lastDeclaration = file.getLastDeclaration(name, Integer.MAX_VALUE);
     if (lastDeclaration != null) {
       if (result != null && callback != null) {
         callback.hidesOtherDeclaration(lastDeclaration, this);
       }
       result = lastDeclaration;
     }
   }
   return result;
 }