docs: public void parseScope(Element scopeElement, ScopeImpl parentScope) {
  
      // Not yet supported on process level (PVM additions needed):
      // parseProperties(processElement);
  
      // filter activities that must be parsed separately
      List<Element> activityElements = new ArrayList<Element>(scopeElement.elements());
      Map<String, Element> intermediateCatchEvents = filterIntermediateCatchEvents(activityElements);
      activityElements.removeAll(intermediateCatchEvents.values());
      Map<String, Element> compensationHandlers = filterCompensationHandlers(activityElements);
      activityElements.removeAll(compensationHandlers.values());
  
      parseStartEvents(scopeElement, parentScope);
      parseActivities(activityElements, scopeElement, parentScope);
      parseIntermediateCatchEvents(scopeElement, parentScope, intermediateCatchEvents);
      parseEndEvents(scopeElement, parentScope);
      parseBoundaryEvents(scopeElement, parentScope);
      parseSequenceFlow(scopeElement, parentScope, compensationHandlers);
      parseExecutionListenersOnScope(scopeElement, parentScope);
      parseAssociations(scopeElement, parentScope, compensationHandlers);
      parseCompensationHandlers(parentScope, compensationHandlers);
  
      for (ScopeImpl.BacklogErrorCallback callback : parentScope.getBacklogErrorCallbacks()) {
        callback.callback();
      }
  
      if (parentScope instanceof ProcessDefinition) {
        parseProcessDefinitionCustomExtensions(scopeElement, (ProcessDefinition) parentScope);
      }
    }