package org.jetbrains.plugins.clojure.parser; import com.intellij.lang.ASTNode; import com.intellij.psi.PsiElement; import com.intellij.psi.tree.IElementType; import org.jetbrains.plugins.clojure.psi.impl.*; import org.jetbrains.plugins.clojure.psi.impl.ns.ClNsImpl; import org.jetbrains.plugins.clojure.psi.impl.ns.ClInNsImpl; import org.jetbrains.plugins.clojure.psi.impl.ns.ClCreateNsImpl; import org.jetbrains.plugins.clojure.psi.impl.defs.ClDefImpl; import org.jetbrains.plugins.clojure.psi.impl.defs.ClDefnMethodImpl; import org.jetbrains.plugins.clojure.psi.impl.list.ClListImpl; import org.jetbrains.plugins.clojure.psi.impl.symbols.ClImplicitArgumentImpl; import org.jetbrains.plugins.clojure.psi.impl.symbols.ClSymbolImpl; /** * @author ilyas */ public class ClojurePsiCreator { public static PsiElement createElement(ASTNode node) { final IElementType elementType = node.getElementType(); if (elementType == ClojureElementTypes.LIST) return new ClListImpl(node); if (elementType == ClojureElementTypes.VECTOR) return new ClVectorImpl(node); if (elementType == ClojureElementTypes.MAP) return new ClMapImpl(node); if (elementType == ClojureElementTypes.SET) return new ClSetImpl(node); if (elementType == ClojureElementTypes.MAP_ENTRY) return new ClMapEntryImpl(node); if (elementType == ClojureElementTypes.QUOTED_FORM) return new ClQuotedFormImpl(node); if (elementType == ClojureElementTypes.META_FORM) return new ClMetaForm(node); if (elementType == ClojureElementTypes.METADATA) return new ClMetadataImpl(node); if (elementType == ClojureElementTypes.SYMBOL) return new ClSymbolImpl(node); if (elementType == ClojureElementTypes.IMPLICIT_ARG) return new ClImplicitArgumentImpl(node); if (elementType == ClojureElementTypes.DEF) return new ClDefImpl(node); if (elementType == ClojureElementTypes.DEFMETHOD) return new ClDefnMethodImpl(node); if (elementType == ClojureElementTypes.NS) return new ClNsImpl(node); if (elementType == ClojureElementTypes.IN_NS) return new ClInNsImpl(node); if (elementType == ClojureElementTypes.CREATE_NS) return new ClCreateNsImpl(node); if (elementType == ClojureElementTypes.BINDINGS) return new ClBindings(node); if (elementType == ClojureElementTypes.KEYWORD) return new ClKeywordImpl(node); if (elementType == ClojureElementTypes.LITERAL) return new ClLiteralImpl(node); if (elementType == ClojureElementTypes.BACKQUOTED_EXPRESSION) return new ClBackQuotedExpression(node); if (elementType == ClojureElementTypes.SHARP_EXPRESSION) return new ClSharp(node); if (elementType == ClojureElementTypes.TILDA_EXPRESSION) return new ClTilda(node); if (elementType == ClojureElementTypes.AT_EXPRESSION) return new ClAt(node); if (elementType == ClojureElementTypes.TILDAAT_EXPRESSION) return new ClTildaAt(node); throw new Error("Unexpected ASTNode: " + node.getElementType()); } }