package org.fandev.lang.fan.psi.impl.statements.params; import org.fandev.lang.fan.psi.impl.statements.FanVariableBaseImpl; import org.fandev.lang.fan.psi.impl.FanFuncType; import org.fandev.lang.fan.psi.impl.synthetic.FanLightIdentifier; import org.fandev.lang.fan.psi.api.statements.params.FanFormal; import org.fandev.lang.fan.psi.api.statements.FanParameterOwner; import org.fandev.lang.fan.psi.api.statements.expressions.FanClosureExpression; import org.fandev.lang.fan.psi.api.types.FanFuncTypeElement; import org.fandev.lang.fan.FanElementTypes; import org.jetbrains.annotations.NotNull; import com.intellij.lang.ASTNode; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiAnnotation; import com.intellij.psi.PsiIdentifier; import com.intellij.psi.PsiType; import com.intellij.psi.Bottom; import com.intellij.psi.util.PsiTreeUtil; /** * Date: Aug 20, 2009 * Time: 12:43:30 PM * * @author Dror Bereznitsky */ public class FanFormalImpl extends FanVariableBaseImpl implements FanFormal { public FanFormalImpl(final ASTNode astNode) { super(astNode); } @NotNull public PsiElement getDeclarationScope() { final FanFuncTypeElement owner = PsiTreeUtil.getParentOfType(this, FanFuncTypeElement.class); assert owner != null; return owner; } public boolean isVarArgs() { return false; } @NotNull public PsiAnnotation[] getAnnotations() { return PsiAnnotation.EMPTY_ARRAY; } public PsiType getTypeNoResolve() { return getType(); } @Override public PsiIdentifier getNameIdentifier() { final PsiElement ident = findChildByType(FanElementTypes.NAME_ELEMENT); // Formals identifier is not mandatory if (ident != null) { return new FanLightIdentifier(getManager(), getContainingFile(), ident.getTextRange()); } return null; } @Override public String getName() { final PsiIdentifier identifier = getNameIdentifier(); if (identifier != null) { return identifier.getText(); } return null; } }