package org.fandev.lang.fan.psi.impl.statements.typedefs.members; import org.fandev.lang.fan.psi.api.statements.typeDefs.members.FanEnumValue; import org.fandev.lang.fan.psi.api.statements.typeDefs.FanEnumDefinition; import org.fandev.lang.fan.psi.stubs.FanEnumValueStub; import org.fandev.lang.fan.psi.impl.FanBaseElementImpl; import org.fandev.lang.fan.psi.impl.FanEnumReferenceType; import org.fandev.lang.fan.psi.impl.synthetic.FanLightIdentifier; import org.fandev.lang.fan.FanElementTypes; import org.fandev.icons.Icons; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NonNls; import com.intellij.psi.*; import com.intellij.psi.stubs.IStubElementType; import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.util.IncorrectOperationException; import com.intellij.lang.ASTNode; import com.intellij.navigation.ItemPresentation; import com.intellij.openapi.util.Iconable; import com.intellij.openapi.editor.colors.TextAttributesKey; import javax.swing.*; /** * Date: Mar 31, 2009 * Time: 11:24:38 PM * * @author Dror Bereznitsky */ public class FanEnumValueImpl extends FanBaseElementImpl<FanEnumValueStub> implements FanEnumValue { public FanEnumValueImpl(final FanEnumValueStub fanEnumValueStub, @NotNull final IStubElementType iStubElementType) { super(fanEnumValueStub, iStubElementType); } public FanEnumValueImpl(final ASTNode astNode) { super(astNode); } public void setInitializer(@Nullable final PsiExpression initializer) throws IncorrectOperationException { //TODO implement } @NotNull public PsiType getType() { return new FanEnumReferenceType((FanEnumDefinition) getContainingClass()); } public PsiType getTypeNoResolve() { return getType(); } public PsiTypeElement getTypeElement() { //TODO implement return null; } @Override public int getTextOffset() { final PsiIdentifier identifier = getNameIdentifier(); return identifier == null ? 0 : identifier.getTextRange().getStartOffset(); } public PsiExpression getInitializer() { //TODO implement return null; } public boolean hasInitializer() { //TODO implement return false; } public void normalizeDeclaration() throws IncorrectOperationException { //TODO implement } @Nullable public Object computeConstantValue() { return null; } @Override public String getName() { final PsiIdentifier psiId = getNameIdentifier(); return psiId == null ? null : psiId.getText(); } @NotNull public PsiIdentifier getNameIdentifier() { final PsiElement element = findChildByType(FanElementTypes.NAME_ELEMENT); if (element != null) { return new FanLightIdentifier(getManager(), getContainingFile(), element.getTextRange()); } return null; } public PsiClass getContainingClass() { // Parent is body, grand parent is class final PsiElement parent = getParent().getParent(); if (parent instanceof FanEnumDefinition) { return (PsiClass) parent; } throw new IllegalStateException("Have an enum value " + getName() + " with no enum: " + this); } public boolean isDeprecated() { return false; } @Nullable public PsiModifierList getModifierList() { return null; } public boolean hasModifierProperty(@Modifier final String name) { // TODO return false; } public PsiElement setName(@NonNls final String name) throws IncorrectOperationException { //TODO implement method return this; } @Nullable public PsiDocComment getDocComment() { //TODO implement method return null; } @Override public Icon getIcon(final int flags) { return Icons.ENUM; } @Override public ItemPresentation getPresentation() { return new ItemPresentation() { public String getPresentableText() { return getName(); } @Nullable public String getLocationString() { final PsiClass clazz = getContainingClass(); final String name = clazz.getQualifiedName(); assert name != null; return "(in " + name + ")"; } @Nullable public Icon getIcon(final boolean open) { return FanEnumValueImpl.this.getIcon(Iconable.ICON_FLAG_VISIBILITY | Iconable.ICON_FLAG_READ_STATUS); } @Nullable public TextAttributesKey getTextAttributesKey() { return null; } }; } }