PsiElement (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); }