package org.fandev.lang.fan.psi.impl.statements;
import org.fandev.lang.fan.psi.api.statements.FanVariable;
import org.fandev.lang.fan.psi.api.statements.FanDefaultValue;
import org.fandev.lang.fan.psi.api.statements.expressions.FanUnaryExpression;
import org.fandev.lang.fan.psi.api.types.FanTypeElement;
import org.fandev.lang.fan.psi.impl.synthetic.FanLightIdentifier;
import org.fandev.lang.fan.FanElementTypes;
import org.jetbrains.annotations.NotNull;
import com.intellij.psi.stubs.StubElement;
import com.intellij.psi.stubs.IStubElementType;
import com.intellij.psi.PsiIdentifier;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiType;
import com.intellij.psi.Bottom;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.lang.ASTNode;
/**
* Date: May 2, 2009
* Time: 3:17:34 PM
*
* @author Dror Bereznitsky
*/
public class FanVariableImpl extends FanVariableBaseImpl implements FanVariable {
public FanVariableImpl(final StubElement stubElement, @NotNull final IStubElementType iStubElementType) {
super(stubElement, iStubElementType);
}
public FanVariableImpl(final ASTNode astNode) {
super(astNode);
}
@Override
public PsiIdentifier getNameIdentifier() {
final PsiElement ident = findChildByType(FanElementTypes.NAME_ELEMENT);
assert ident != null;
return new FanLightIdentifier(getManager(), getContainingFile(), ident.getTextRange());
}
public PsiType getTypeNoResolve() {
// What does it mean no resolve?
return Bottom.BOTTOM;
}
@Override
public String getName() {
return getNameIdentifier().getText();
}
@Override
public FanTypeElement getTypeElementFan() {
final FanTypeElement type = super.getTypeElementFan();
if (type == null) {
//TODO [Dror] handle type inference - probably any expression should have a getType method
}
return type;
}
}