code: private void parseAttributesSheet(
        Repository<Entity> attributesRepo, IntermediateParseResults intermediateResults) {
      for (Attribute attr : attributesRepo.getEntityType().getAtomicAttributes()) {
        checkAttrSheetHeaders(attr);
      }
  
      Map<String, Map<String, EmxAttribute>> attributesMap = newLinkedHashMap();
  
      // 1st pass: create attribute stubs
      int rowIndex = 1; // Header
      createAttributeStubs(attributesRepo, attributesMap, rowIndex);
  
      // 2nd pass: set all properties on attribute stubs except for attribute relations
      rowIndex = 1; // Header
      for (Entity emxAttrEntity : attributesRepo) {
        rowIndex++;
        parseSingleAttribute(intermediateResults, attributesMap, rowIndex, emxAttrEntity);
      }
  
      // 3rd pass
      Map<String, Set<String>> rootAttributes =
          validateAndCreateAttributeRelationships(attributesRepo, attributesMap);
  
      // store attributes with entities
      storeAttributes(intermediateResults, attributesMap, rootAttributes);
    }
docs: Load all attributes from the source repository and add it to the {@link
  IntermediateParseResults}.
  
  @param attributesRepo Repository for the attributes
  @param intermediateResults {@link IntermediateParseResults} with the tags already parsed