<%for (GenFeature genFeatureTest : genClass.getGenFeatures()) {%>
  <%if (genFeatureTest.isListType() && genClass.getListConstructor(genFeatureTest).startsWith("SubsetSuperset")) {%>
  /**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
  //@Override
  protected EList<?> createListTest(EStructuralFeature eStructuralFeature)
  {
    <%for (GenFeature genFeature : genClass.getGenFeatures()) {%>
      <%if (genFeature.isListType()) {%>
        <%if (genClass.getListConstructor(genFeature).startsWith("SubsetSuperset")) {%>
    if (eStructuralFeature == <%=genFeature.getQualifiedFeatureAccessor()%>)
    {
      return new <%=genClass.getListConstructor(genFeature)%>;
    }
    
        <%} else {%>
    <%=genFeature.getQualifiedFeatureAccessor()%>.getClass(); // new <%=genClass.getListConstructor(genFeature)%>
      
        <%}%>
      <%}%>
    <%}%>
    return null;
    //return super.createList(eStructuralFeature);
  }
    <%break;%>
  <%}%>
<%}%>
