package org.fandev.lang.fan.psi.impl.statements.params;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiAnnotation;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiIdentifier;
import com.intellij.psi.util.PsiTreeUtil;
import org.fandev.lang.fan.FanElementTypes;
import org.fandev.lang.fan.psi.api.statements.FanDefaultValue;
import org.fandev.lang.fan.psi.api.statements.FanParameterOwner;
import org.fandev.lang.fan.psi.api.statements.params.FanParameter;
import org.fandev.lang.fan.psi.impl.statements.FanVariableBaseImpl;
import org.fandev.lang.fan.psi.impl.synthetic.FanLightIdentifier;
import org.jetbrains.annotations.NotNull;
import com.intellij.psi.stubs.StubElement;
import com.intellij.psi.stubs.IStubElementType;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiAnnotation;
import com.intellij.psi.PsiIdentifier;
import com.intellij.psi.PsiType;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.lang.ASTNode;
/**
* Date: Apr 29, 2009
* Time: 11:08:53 PM
*
* @author Dror Bereznitsky
*/
public class FanParameterImpl extends FanVariableBaseImpl implements FanParameter {
public FanParameterImpl(final ASTNode astNode) {
super(astNode);
}
@NotNull
public PsiElement getDeclarationScope() {
final FanParameterOwner owner = PsiTreeUtil.getParentOfType(this, FanParameterOwner.class);
assert owner != null;
return owner;
}
public boolean isVarArgs() {
return false;
}
@NotNull
public PsiAnnotation[] getAnnotations() {
//TODO [Dror] Implement
return new PsiAnnotation[0];
}
@Override
public String toString() {
return "Parameter";
}
@Override
public PsiIdentifier getNameIdentifier() {
final PsiElement ident = findChildByType(FanElementTypes.NAME_ELEMENT);
assert ident != null;
return new FanLightIdentifier(getManager(), getContainingFile(), ident.getTextRange());
}
@Override
public String getName() {
return getNameIdentifier().getText();
}
public PsiType getTypeNoResolve() {
return getType();
}
public FanDefaultValue getDefaultValue() {
return findChildByClass(FanDefaultValue.class);
}
}