public static PsiElement createElement(ASTNode node) {
      IElementType type = node.getElementType();
      if (type == AUTHORITY) {
        return new AuthorityImpl(node);
      }
      else if (type == BINARY_LIST) {
        return new BinaryListImpl(node);
      }
      else if (type == CONSTRAINT_REQ) {
        return new ConstraintReqImpl(node);
      }
      else if (type == DEC_OCTET) {
        return new DecOctetImpl(node);
      }
      else if (type == EDITABLE_REQ) {
        return new EditableReqImpl(node);
      }
      else if (type == ENV_VARIABLE) {
        return new EnvVariableImpl(node);
      }
      else if (type == EXTRAS) {
        return new ExtrasImpl(node);
      }
      else if (type == EXTRAS_LIST) {
        return new ExtrasListImpl(node);
      }
      else if (type == EXTRA_INDEX_URL_REQ) {
        return new ExtraIndexUrlReqImpl(node);
      }
      else if (type == FIND_LINKS_REQ) {
        return new FindLinksReqImpl(node);
      }
      else if (type == FRAGMENT) {
        return new FragmentImpl(node);
      }
      else if (type == HASH_OPTION) {
        return new HashOptionImpl(node);
      }
      else if (type == HEXDIG) {
        return new HexdigImpl(node);
      }
      else if (type == HIER_PART) {
        return new HierPartImpl(node);
      }
      else if (type == HOST) {
        return new HostImpl(node);
      }
      else if (type == H_16) {
        return new H16Impl(node);
      }
      else if (type == H_16_COLON) {
        return new H16ColonImpl(node);
      }
      else if (type == INDEX_URL_REQ) {
        return new IndexUrlReqImpl(node);
      }
      else if (type == IP_LITERAL) {
        return new IPLiteralImpl(node);
      }
      else if (type == I_PV_4_ADDRESS) {
        return new IPv4AddressImpl(node);
      }
      else if (type == I_PV_6_ADDRESS) {
        return new IPv6AddressImpl(node);
      }
      else if (type == I_PV_FUTURE) {
        return new IPvFutureImpl(node);
      }
      else if (type == LS_32) {
        return new Ls32Impl(node);
      }
      else if (type == MARKER_AND) {
        return new MarkerAndImpl(node);
      }
      else if (type == MARKER_EXPR) {
        return new MarkerExprImpl(node);
      }
      else if (type == MARKER_OP) {
        return new MarkerOpImpl(node);
      }
      else if (type == MARKER_OR) {
        return new MarkerOrImpl(node);
      }
      else if (type == MARKER_VAR) {
        return new MarkerVarImpl(node);
      }
      else if (type == NAME_REQ) {
        return new NameReqImpl(node);
      }
      else if (type == NO_BINARY_REQ) {
        return new NoBinaryReqImpl(node);
      }
      else if (type == NO_INDEX_REQ) {
        return new NoIndexReqImpl(node);
      }
      else if (type == NZ) {
        return new NzImpl(node);
      }
      else if (type == ONLY_BINARY_REQ) {
        return new OnlyBinaryReqImpl(node);
      }
      else if (type == OPTION) {
        return new OptionImpl(node);
      }
      else if (type == PATH_ABEMPTY) {
        return new PathAbemptyImpl(node);
      }
      else if (type == PATH_ABSOLUTE) {
        return new PathAbsoluteImpl(node);
      }
      else if (type == PATH_EMPTY) {
        return new PathEmptyImpl(node);
      }
      else if (type == PATH_NOSCHEME) {
        return new PathNoschemeImpl(node);
      }
      else if (type == PATH_REQ) {
        return new PathReqImpl(node);
      }
      else if (type == PATH_ROOTLESS) {
        return new PathRootlessImpl(node);
      }
      else if (type == PCHAR) {
        return new PcharImpl(node);
      }
      else if (type == PCT_ENCODED) {
        return new PctEncodedImpl(node);
      }
      else if (type == PORT) {
        return new PortImpl(node);
      }
      else if (type == PREFER_BINARY_REQ) {
        return new PreferBinaryReqImpl(node);
      }
      else if (type == PRE_REQ) {
        return new PreReqImpl(node);
      }
      else if (type == PYTHON_STR) {
        return new PythonStrImpl(node);
      }
      else if (type == QUERY) {
        return new QueryImpl(node);
      }
      else if (type == QUOTED_MARKER) {
        return new QuotedMarkerImpl(node);
      }
      else if (type == REFER_REQ) {
        return new ReferReqImpl(node);
      }
      else if (type == REG_NAME) {
        return new RegNameImpl(node);
      }
      else if (type == RELATIVE_PART) {
        return new RelativePartImpl(node);
      }
      else if (type == RELATIVE_REF) {
        return new RelativeRefImpl(node);
      }
      else if (type == REQUIRE_HASHES_REQ) {
        return new RequireHashesReqImpl(node);
      }
      else if (type == SCHEME) {
        return new SchemeImpl(node);
      }
      else if (type == SEGMENT) {
        return new SegmentImpl(node);
      }
      else if (type == SEGMENT_NZ) {
        return new SegmentNzImpl(node);
      }
      else if (type == SEGMENT_NZ_NC) {
        return new SegmentNzNcImpl(node);
      }
      else if (type == SIMPLE_NAME) {
        return new SimpleNameImpl(node);
      }
      else if (type == TRUSTED_HOST_REQ) {
        return new TrustedHostReqImpl(node);
      }
      else if (type == UNRESERVED) {
        return new UnreservedImpl(node);
      }
      else if (type == URI) {
        return new UriImpl(node);
      }
      else if (type == URI_REFERENCE) {
        return new UriReferenceImpl(node);
      }
      else if (type == URLSPEC) {
        return new UrlspecImpl(node);
      }
      else if (type == URL_REQ) {
        return new UrlReqImpl(node);
      }
      else if (type == USERINFO) {
        return new UserinfoImpl(node);
      }
      else if (type == USE_FEATURE_REQ) {
        return new UseFeatureReqImpl(node);
      }
      else if (type == VARIABLE_NAME) {
        return new VariableNameImpl(node);
      }
      else if (type == VERSIONSPEC) {
        return new VersionspecImpl(node);
      }
      else if (type == VERSION_CMP_STMT) {
        return new VersionCmpStmtImpl(node);
      }
      else if (type == VERSION_ONE) {
        return new VersionOneImpl(node);
      }
      else if (type == VERSION_STMT) {
        return new VersionStmtImpl(node);
      }
      throw new AssertionError("Unknown element type: " + type);
    }
public static PsiElement createElement(ASTNode node)