def map()

in scala/scala-impl/src/org/jetbrains/plugins/scala/lang/parser/ASTNodeToPsiElement.scala [19:178]


  def map(node: ASTNode): PsiElement = {
    import ScalaElementType._

    node.getElementType match {
      case creator: SelfPsiCreator => creator.createElement(node) // stub elements still implement this trait

      case ScCodeBlockElementType.BlockExpression =>
        PsiUtilCore.NULL_PSI_ELEMENT

      /* Definition parts */
      case CONSTRUCTOR => new ScConstructorInvocationImpl(node)
      case PARAM_TYPE => new ScParameterTypeImpl(node)
      case SEQUENCE_ARG => new ScSequenceArgImpl(node)
      case REFERENCE => new ScStableCodeReferenceImpl(node)
      case DOC_REFERENCE =>
        /* NOTE: only created to be used from
         * [[org.jetbrains.plugins.scala.lang.psi.impl.ScalaPsiElementFactory#createDocReferenceFromText]]
         * to create a syntetic reference from doc
         */
        new ScDocResolvableCodeReferenceImpl(node)

      case ANNOTATION_EXPR => new ScAnnotationExprImpl(node)
      case END_STMT => new ScEndImpl(node)

      /* Types */
      case COMPOUND_TYPE => new ScCompoundTypeElementImpl(node)
      case EXISTENTIAL_TYPE => new ScExistentialTypeElementImpl(node)
      case SIMPLE_TYPE => new ScSimpleTypeElementImpl(node)
      case INFIX_TYPE => new ScInfixTypeElementImpl(node)
      case TYPE => new ScFunctionalTypeElementImpl(node)
      case ANNOT_TYPE => new ScAnnotTypeElementImpl(node)
      case WILDCARD_TYPE => new ScWildcardTypeElementImpl(node)
      case TUPLE_TYPE => new ScTupleTypeElementImpl(node)
      case NAMED_TUPLE_TYPE => new ScNamedTupleTypeElementImpl(node)
      case TYPE_IN_PARENTHESIS => new ScParenthesisedTypeElementImpl(node)
      case TYPE_PROJECTION => new ScTypeProjectionImpl(node)
      case TYPE_GENERIC_CALL => new ScParameterizedTypeElementImpl(node)
      case LITERAL_TYPE => new ScLiteralTypeElementImpl(node)
      case TYPE_VARIABLE => new ScTypeVariableTypeElementImpl(node)
      case SPLICED_BLOCK_TYPE => new ScSplicedBlockImpl(node)
      case SPLICED_PATTERN_EXPR => new ScSplicedPatternExprImpl(node)
      case TYPE_LAMBDA => new ScTypeLambdaTypeElementImpl(node)
      case MATCH_TYPE => new ScMatchTypeElementImpl(node)
      case POLY_FUNCTION_TYPE => new ScPolyFunctionTypeElementImpl(node)
      case DEPENDENT_FUNCTION_TYPE => new ScDependentFunctionTypeElementImpl(node)
      case CAPTURE_TYPE => new ScCaptureTypeElementImpl(node)

      /* Type parts */
      case TYPE_ARGS => new ScTypeArgsImpl(node)
      case EXISTENTIAL_CLAUSE => new ScExistentialClauseImpl(node)
      case TYPES => new ScTypesImpl(node)
      case TYPE_CASE_CLAUSES => new ScMatchTypeCasesImpl(node)
      case TYPE_CASE_CLAUSE => new ScMatchTypeCaseImpl(node)
      case CONTEXT_BOUND    => new ScContextBoundImpl(node)
      case NAMED_TUPLE_TYPE_COMPONENT => new ScNamedTupleTypeComponentImpl(node)

      /* Expressions */
      case PREFIX_EXPR => new ScPrefixExprImpl(node)
      case POSTFIX_EXPR => new ScPostfixExprImpl(node)
      case INFIX_EXPR => new ScInfixExprImpl(node)
      case PLACEHOLDER_EXPR => new ScUnderscoreSectionImpl(node)
      case PARENT_EXPR => new ScParenthesisedExprImpl(node)
      case METHOD_CALL => new ScMethodCallImpl(node)
      case REFERENCE_EXPRESSION => new ScReferenceExpressionImpl(node)
      case THIS_REFERENCE => new ScThisReferenceImpl(node)
      case SUPER_REFERENCE => new ScSuperReferenceImpl(node)
      case GENERIC_CALL => new ScGenericCallImpl(node)
      case FUNCTION_EXPR => new ScFunctionExprImpl(node)
      case POLY_FUNCTION_EXPR => new ScPolyFunctionExprImpl(node)
      case BLOCK => new ScBlockImpl(node)
      case SPLICED_BLOCK_EXPR => new ScSplicedBlockImpl(node)
      case QUOTED_BLOCK => new ScQuotedBlockImpl(node)
      case QUOTED_TYPE => new ScQuotedTypeImpl(node)
      case TUPLE => new ScTupleImpl(node)
      case NAMED_TUPLE => new ScNamedTupleImpl(node)
      case UNIT_EXPR => new ScUnitExprImpl(node)
      case CONSTR_BLOCK_EXPR => new ScConstrBlockExprImpl(node)
      case SELF_INVOCATION => new ScSelfInvocationImpl(node)
      case NullLiteral => new ScNullLiteralImpl(node, NullLiteral.toString)
      case LongLiteral => new ScLongLiteralImpl(node, LongLiteral.toString)
      case IntegerLiteral => new ScIntegerLiteralImpl(node, IntegerLiteral.toString)
      case DoubleLiteral => new ScDoubleLiteralImpl(node, DoubleLiteral.toString)
      case FloatLiteral => new ScFloatLiteralImpl(node, FloatLiteral.toString)
      case BooleanLiteral => new ScBooleanLiteralImpl(node, BooleanLiteral.toString)
      case SymbolLiteral => new ScSymbolLiteralImpl(node, SymbolLiteral.toString)
      case CharLiteral => new ScCharLiteralImpl(node, CharLiteral.toString)
      case StringLiteral => new ScStringLiteralImpl(node, StringLiteral.toString)
      case InterpolatedString => new ScInterpolatedStringLiteralImpl(node, InterpolatedString.toString)
      case INTERPOLATED_PREFIX_LITERAL_REFERENCE => new ScInterpolatedExpressionPrefix(node)

      /* Composite expressions */
      case IF_STMT => new ScIfImpl(node)
      case FOR_STMT => new ScForImpl(node)
      case DO_STMT => new ScDoImpl(node)
      case TRY_STMT => new ScTryImpl(node)
      case CATCH_BLOCK => new ScCatchBlockImpl(node)
      case FINALLY_BLOCK => new ScFinallyBlockImpl(node)
      case WHILE_STMT => new ScWhileImpl(node)
      case RETURN_STMT => new ScReturnImpl(node)
      case THROW_STMT => new ScThrowImpl(node)
      case ASSIGN_STMT => new ScAssignmentImpl(node)
      case MATCH_STMT => new ScMatchImpl(node)
      case TYPED_EXPR_STMT => new ScTypedExpressionImpl(node)

      /* Expression Parts */
      case GENERATOR => new ScGeneratorImpl(node)
      case FOR_BINDING => new ScForBindingImpl(node)
      case ENUMERATORS => new ScEnumeratorsImpl(node)
      case GUARD => new ScGuardImpl(node)
      case ARG_EXPRS => new ScArgumentExprListImpl(node)
      case INTERPOLATED_PREFIX_PATTERN_REFERENCE => new ScInterpolatedPatternPrefix(node)
      case NAMED_TUPLE_COMPONENT => new ScNamedTupleExprComponentImpl(node)

      /* Patterns */
      case TUPLE_PATTERN => new ScTuplePatternImpl(node)
      case CONSTRUCTOR_PATTERN => new ScConstructorPatternImpl(node)
      case PATTERN_ARGS => new ScPatternArgumentListImpl(node)
      case INFIX_PATTERN => new ScInfixPatternImpl(node)
      case PATTERN => new ScCompositePatternImpl(node)
      case PATTERNS => new ScPatternsImpl(node)
      case WILDCARD_PATTERN => new ScWildcardPatternImpl(node)
      case CASE_CLAUSE => new ScCaseClauseImpl(node)
      case CASE_CLAUSES => new ScCaseClausesImpl(node)
      case LITERAL_PATTERN => new ScLiteralPatternImpl(node)
      case QUOTED_PATTERN => new ScQuotedPatternImpl(node)
      case INTERPOLATION_PATTERN => new ScInterpolationPatternImpl(node)
      case StableReferencePattern =>
        new ScStableReferencePatternImpl(node, StableReferencePattern.toString)
      case PATTERN_IN_PARENTHESIS => new ScParenthesisedPatternImpl(node)
      case GIVEN_PATTERN => new ScGivenPatternImpl(node)
      case SCALA3_TYPED_PATTERN => new Sc3TypedPatternImpl(node)
      case NAMED_TUPLE_PATTERN => new ScNamedTuplePatternImpl(node)
      case NAMED_TUPLE_PATTERN_COMPONENT => new ScNamedTuplePatternComponentImpl(node)
      case NAMED_CONSTRUCTOR_ARG_PATTERN => new ScNamedConstructorArgPatternImpl(node)

      /* Type patterns */
      case TYPE_PATTERN => new ScTypePatternImpl(node)
      case REFINEMENT => new ScRefinementImpl(node)

      /* Capture set */
      case CAPTURE_SET => new ScCaptureSetImpl(node)
      case CAPTURE_REF => new ScCaptureRefImpl(node)
      case CAPTURE_FILTER => new ScCaptureFilterImpl(node)

      /* XML */
      case XML_EXPR => new ScXmlExprImpl(node)
      case XML_START_TAG => new ScXmlStartTagImpl(node)
      case XML_END_TAG => new ScXmlEndTagImpl(node)
      case XML_EMPTY_TAG => new ScXmlEmptyTagImpl(node)
      case XML_PI => new ScXmlPIImpl(node)
      case XML_CD_SECT => new ScXmlCDSectImpl(node)
      case XML_ATTRIBUTE => new ScXmlAttributeImpl(node)
      case XML_PATTERN => new ScXmlPatternImpl(node)
      case XML_COMMENT => new ScXmlCommentImpl(node)
      case XML_ELEMENT => new ScXmlElementImpl(node)

      /* Default case */
      case _ => new ASTWrapperPsiElement(node)
    }
  }