private void addRegisterResourceFactoryMethod(JavaComposite sc) {
    final String secondaryConcreteSyntaxName =
        csUtil.getSecondarySyntaxName(getContext().getConcreteSyntax());

    sc.add("public void registerResourceFactory() {");
    if (secondaryConcreteSyntaxName == null) {
      sc.add("// if no resource factory registered, register delegator");

      sc.add(
          "if ("
              + RESOURCE_FACTORY(sc)
              + ".Registry.INSTANCE.getExtensionToFactoryMap().get(getSyntaxName()) == null) {");
      sc.add(
          RESOURCE_FACTORY(sc)
              + ".Registry.INSTANCE.getExtensionToFactoryMap().put(getSyntaxName(), new "
              + resourceFactoryDelegatorClassName
              + "());");
      sc.add("}");
    } else {
      // if this is a secondary syntax, the ResourceFactory is registered
      // using the 'additional_extension_parser' extension point.
      // Unfortunately, we do not know the name of the corresponding
      // registry because it can be implemented in arbitrary ways in the
      // base resource plug-in.
      sc.addComment(
          "This is a secondary syntax. "
              + "Registering the resource factory is done via the 'additional_extension_parser' extension point.");
    }

    // Register resource factory for additional file extensions if required.
    GenerationContext context = getContext();
    ConcreteSyntax syntax = context.getConcreteSyntax();
    Collection<String> additionalFileExtensions =
        OptionManager.INSTANCE.getStringOptionValueAsCollection(
            syntax, OptionTypes.ADDITIONAL_FILE_EXTENSIONS);

    if (additionalFileExtensions != null && !additionalFileExtensions.isEmpty()) {
      sc.addLineBreak();
      sc.add("Factory.Registry registry = " + RESOURCE_FACTORY(sc) + ".Registry.INSTANCE;");
      sc.add(
          MAP(sc)
              + "<String, Object> extensionToFactoryMap = registry.getExtensionToFactoryMap();");
      sc.addLineBreak();
      sc.add(
          resourceFactoryClassName + " resourceFactory = new " + resourceFactoryClassName + "();");
      sc.addLineBreak();
      sc.addComment("Register resource factory for additional extensions.");

      for (String additionalFileExtension : additionalFileExtensions) {
        additionalFileExtension = additionalFileExtension.trim();

        sc.add("if (extensionToFactoryMap.get(\"" + additionalFileExtension + "\") == null) {");
        sc.add("extensionToFactoryMap.put(\"" + additionalFileExtension + "\", resourceFactory);");
        sc.add("}");
        sc.addLineBreak();
      }
    }

    sc.add("}");
    sc.addLineBreak();
  }