package org.fandev.lang.fan.psi.impl; import com.intellij.extapi.psi.StubBasedPsiElementBase; import com.intellij.lang.ASTNode; import com.intellij.lang.Language; import com.intellij.psi.PsiElement; import com.intellij.psi.stubs.IStubElementType; import com.intellij.psi.stubs.StubElement; import org.fandev.index.FanIndex; import org.fandev.lang.fan.FanSupportLoader; import org.fandev.lang.fan.psi.FanElement; import org.fandev.lang.fan.psi.FanFile; import org.fandev.lang.fan.psi.api.statements.typeDefs.FanTypeDefinition; import org.jetbrains.annotations.NotNull; /** * @author Dror Bereznitsky * @date Jan 7, 2009 3:45:31 PM */ public class FanBaseElementImpl<T extends StubElement> extends StubBasedPsiElementBase<T> implements FanElement { public FanBaseElementImpl(final T t, @NotNull final IStubElementType iStubElementType) { super(t, iStubElementType); } public FanBaseElementImpl(final ASTNode astNode) { super(astNode); } @NotNull public Language getLanguage() { return FanSupportLoader.FAN.getLanguage(); } @Override public PsiElement getParent() { return getParentByStub(); } protected FanTypeDefinition getFanObjType() { return getFanTypeByName("Obj"); } protected FanTypeDefinition getVoidType() { return getFanTypeByName("Void"); } protected FanTypeDefinition getFanTypeByName(final String name) { final FanIndex index = (FanIndex) getProject().getComponent(FanIndex.COMPONENT_NAME); final FanFile objFile = index.getFanFileByTypeName(name); if (objFile != null) { final FanTypeDefinition[] typeDefinitions = objFile.getTypeDefinitions(); if (typeDefinitions != null && typeDefinitions.length == 1) { return typeDefinitions[0]; } } return null; } }