public static PsiElement createElement(ASTNode node) {
      IElementType type = node.getElementType();
      if (type == ASTERISK_PATTERN) {
        return new EditorConfigAsteriskPatternImpl(node);
      }
      else if (type == CHAR_CLASS_EXCLAMATION) {
        return new EditorConfigCharClassExclamationImpl(node);
      }
      else if (type == CHAR_CLASS_LETTER) {
        return new EditorConfigCharClassLetterImpl(node);
      }
      else if (type == CHAR_CLASS_PATTERN) {
        return new EditorConfigCharClassPatternImpl(node);
      }
      else if (type == CONCATENATED_PATTERN) {
        return new EditorConfigConcatenatedPatternImpl(node);
      }
      else if (type == DOUBLE_ASTERISK_PATTERN) {
        return new EditorConfigDoubleAsteriskPatternImpl(node);
      }
      else if (type == ENUMERATION_PATTERN) {
        return new EditorConfigEnumerationPatternImpl(node);
      }
      else if (type == FLAT_OPTION_KEY) {
        return new EditorConfigFlatOptionKeyImpl(node);
      }
      else if (type == FLAT_PATTERN) {
        return new EditorConfigFlatPatternImpl(node);
      }
      else if (type == HEADER) {
        return new EditorConfigHeaderImpl(node);
      }
      else if (type == OPTION) {
        return new EditorConfigOptionImpl(node);
      }
      else if (type == OPTION_VALUE_IDENTIFIER) {
        return new EditorConfigOptionValueIdentifierImpl(node);
      }
      else if (type == OPTION_VALUE_LIST) {
        return new EditorConfigOptionValueListImpl(node);
      }
      else if (type == OPTION_VALUE_PAIR) {
        return new EditorConfigOptionValuePairImpl(node);
      }
      else if (type == QUALIFIED_KEY_PART) {
        return new EditorConfigQualifiedKeyPartImpl(node);
      }
      else if (type == QUALIFIED_OPTION_KEY) {
        return new EditorConfigQualifiedOptionKeyImpl(node);
      }
      else if (type == QUESTION_PATTERN) {
        return new EditorConfigQuestionPatternImpl(node);
      }
      else if (type == RAW_OPTION_VALUE) {
        return new EditorConfigRawOptionValueImpl(node);
      }
      else if (type == ROOT_DECLARATION) {
        return new EditorConfigRootDeclarationImpl(node);
      }
      else if (type == ROOT_DECLARATION_KEY) {
        return new EditorConfigRootDeclarationKeyImpl(node);
      }
      else if (type == ROOT_DECLARATION_VALUE) {
        return new EditorConfigRootDeclarationValueImpl(node);
      }
      else if (type == SECTION) {
        return new EditorConfigSectionImpl(node);
      }
      throw new AssertionError("Unknown element type: " + type);
    }
public static PsiElement createElement(ASTNode node)