package org.fandev.lang.fan.parser; import com.intellij.extapi.psi.ASTWrapperPsiElement; import com.intellij.lang.ASTNode; import com.intellij.psi.PsiElement; import com.intellij.psi.tree.IElementType; import static org.fandev.lang.fan.FanElementTypes.*; import org.fandev.lang.fan.psi.impl.statements.blocks.FanPsiCodeBlockImpl; import org.fandev.lang.fan.psi.impl.statements.typedefs.*; import org.fandev.lang.fan.psi.impl.statements.typedefs.members.FanConstructorImpl; import org.fandev.lang.fan.psi.impl.statements.typedefs.members.FanFieldImpl; import org.fandev.lang.fan.psi.impl.statements.typedefs.members.FanMethodImpl; import org.fandev.lang.fan.psi.impl.statements.typedefs.members.FanEnumValueImpl; import org.fandev.lang.fan.psi.impl.statements.params.*; import org.fandev.lang.fan.psi.impl.statements.FanVariableImpl; import org.fandev.lang.fan.psi.impl.statements.FanDefaultValueImpl; import org.fandev.lang.fan.psi.impl.statements.arguments.FanArgumentListImpl; import org.fandev.lang.fan.psi.impl.statements.arguments.FanArgumentImpl; import org.fandev.lang.fan.psi.impl.statements.expressions.*; import org.fandev.lang.fan.psi.impl.modifiers.FanModifierListImpl; import org.fandev.lang.fan.psi.impl.types.*; /** * @author Dror Bereznitsky * @date Jan 7, 2009 3:05:16 PM */ public class FanPsiCreator { public static PsiElement createElement(final ASTNode node) { final IElementType elem = node.getElementType(); if (elem == CLASS_DEFINITION) return new FanClassDefinitionImpl(node); if (elem == MIXIN_DEFINITION) return new FanMixinDefinitionImpl(node); if (elem == ENUM_DEFINITION) return new FanEnumDefinitionImpl(node); if (elem == BUILDSCRIPT_DEFINITION) return new FanBuildScriptDefinitionImpl(node); if (elem == CLASS_BODY || elem == ENUM_BODY || elem == MIXIN_BODY) return new FanTypeDefinitionBodyImpl(node); if (elem == STATIC_BLOCK) return new FanMethodImpl(node); if (elem == CTOR_DEFINITION) return new FanConstructorImpl(node); if (elem == METHOD_DEFINITION) return new FanMethodImpl(node); if (BLOCK_ELEMENTS.contains(elem)) return new FanPsiCodeBlockImpl(node); if (elem == FIELD_DEFINITION) return new FanFieldImpl(node); if (elem == ENUM_VALUE) return new FanEnumValueImpl(node); if (elem == ID_EXPR) return new FanReferenceExpressionImpl(node); if (elem == REFERENCE_ELEMENT) return new FanCodeReferenceElementImpl(node); if (elem == CLASS_TYPE_ELEMENT) return new FanClassTypeElementImpl(node); if (elem == LIST_TYPE) return new FanListTypeElementImpl(node); if (elem == FUNC_TYPE) return new FanFuncTypeElementImpl(node); if (elem == MAP_TYPE) return new FanMapTypeElementImpl(node); if (elem == INHERITANCE_CLAUSE) return new FanInheritanceClauseImpl(node); if (elem == MODIFIERS) return new FanModifierListImpl(node); if (elem == TYPE_PARAMETER_LIST) return new FanParameterListImpl(node); if (elem == TYPE_PARAMETER) return new FanParameterImpl(node); if (elem == LOCAL_DEF_STATEMENT) return new FanVariableImpl(node); if (elem == THIS_REFERENCE_EXPRESSION) return new FanThisReferenceExpressionImpl(node); if (elem == SUPER_REFERENCE_EXPRESSION) return new FanSuperReferenceExpressionImpl(node); if (elem == POD_REFERENCE) return new PodReferenceExpressionImpl(node); if (elem == CLOSURE_EXPR) return new FanClosureExpressionImpl(node); if (elem == FORMALS) return new FanFormalsImpl(node); if (elem == FORMAL) return new FanFormalImpl(node); if (elem == PARAM_DEFAULT) return new FanDefaultValueImpl(node); if (elem == INDEX_EXPR) return new FanIndexExpressionImpl(node); if (elem == ARGUMENT_LIST) return new FanArgumentListImpl(node); if (elem == ARGUMENT_EXPR) return new FanArgumentImpl(node); return new ASTWrapperPsiElement(node); } }