package org.fandev.lang.fan.psi.impl.statements.typedefs; import org.fandev.lang.fan.psi.api.statements.typeDefs.FanEnumDefinition; import org.fandev.lang.fan.psi.api.statements.typeDefs.FanClassDefinition; import org.fandev.lang.fan.psi.api.statements.typeDefs.members.FanField; import org.fandev.lang.fan.psi.api.statements.typeDefs.members.FanSlot; import org.fandev.lang.fan.psi.api.statements.typeDefs.members.FanMethod; import org.fandev.lang.fan.psi.api.statements.typeDefs.members.FanEnumValue; import org.fandev.lang.fan.psi.stubs.FanTypeDefinitionStub; import org.fandev.lang.fan.FanElementTypes; import org.fandev.icons.Icons; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import com.intellij.lang.ASTNode; import com.intellij.psi.*; import com.intellij.psi.tree.IElementType; import com.intellij.psi.impl.ElementBase; import com.intellij.psi.impl.ElementPresentationUtil; import com.intellij.psi.javadoc.PsiDocComment; import com.intellij.util.IncorrectOperationException; import com.intellij.util.VisibilityIcons; import com.intellij.openapi.util.Pair; import com.intellij.ui.RowIcon; import javax.swing.*; import java.util.List; import java.util.ArrayList; import java.util.Collection; /** * Date: Mar 28, 2009 * Time: 3:38:11 PM * @author Dror Bereznitsky */ public class FanEnumDefinitionImpl extends FanTypeDefinitionImpl implements FanEnumDefinition { FanEnumValue[] fanEnumValues; public FanEnumDefinitionImpl(final FanTypeDefinitionStub stubElement) { super(stubElement, FanElementTypes.CLASS_DEFINITION); } public FanEnumDefinitionImpl(final ASTNode astNode) { super(astNode); } public String toString() { return "Enum definition"; } public PsiElement setName(@NonNls final String name) throws IncorrectOperationException { // TODO rename return this; } public boolean isInterface() { return false; } public boolean isAnnotationType() { return false; } public boolean isEnum() { return false; } public PsiClass[] getInterfaces() { return PsiClass.EMPTY_ARRAY; } @Override public void subtreeChanged() { this.fanSlots = null; this.fanFields = null; this.fanMethods = null; super.subtreeChanged(); } @NotNull public PsiField[] getFields() { return getFanFields(); } public FanEnumValue[] getEnumValues() { if (fanEnumValues == null) { final PsiElement element = findChildByType(FanElementTypes.ENUM_BODY); final List<FanEnumValue> list = new ArrayList<FanEnumValue>(); if (element != null) { final PsiElement[] bodyEls = element.getChildren(); for (final PsiElement bodyEl : bodyEls) { if (bodyEl instanceof FanEnumValue) { list.add((FanEnumValue) bodyEl); } } } fanEnumValues = list.toArray(new FanEnumValue[0]); } return fanEnumValues; } @NotNull public PsiMethod[] getMethods() { return getFanMethods(); } @NotNull public PsiMethod[] getConstructors() { return PsiMethod.EMPTY_ARRAY; } @NotNull public PsiClass[] getInnerClasses() { return PsiClass.EMPTY_ARRAY; } @NotNull public PsiClassInitializer[] getInitializers() { return PsiClassInitializer.EMPTY_ARRAY; } @NotNull public PsiField[] getAllFields() { return PsiField.EMPTY_ARRAY; } @NotNull public PsiMethod[] getAllMethods() { return PsiMethod.EMPTY_ARRAY; } @NotNull public PsiClass[] getAllInnerClasses() { return PsiClass.EMPTY_ARRAY; } public PsiField findFieldByName(@NonNls final String name, final boolean checkBases) { return null; } public PsiMethod findMethodBySignature(final PsiMethod patternMethod, final boolean checkBases) { return null; } @NotNull public PsiMethod[] findMethodsBySignature(final PsiMethod patternMethod, final boolean checkBases) { return PsiMethod.EMPTY_ARRAY; } @NotNull public PsiMethod[] findMethodsByName(@NonNls final String name, final boolean checkBases) { return PsiMethod.EMPTY_ARRAY; } @NotNull public List<Pair<PsiMethod, PsiSubstitutor>> findMethodsAndTheirSubstitutorsByName(@NonNls final String name, final boolean checkBases) { return null; } @NotNull public List<Pair<PsiMethod, PsiSubstitutor>> getAllMethodsAndTheirSubstitutors() { return null; } public PsiClass findInnerClassByName(@NonNls final String name, final boolean checkBases) { return null; } public PsiJavaToken getLBrace() { return null; } public PsiJavaToken getRBrace() { return null; } public PsiElement getScope() { return null; } public boolean isInheritor(@NotNull final PsiClass baseClass, final boolean checkDeep) { return false; } public boolean isInheritorDeep(final PsiClass baseClass, @Nullable final PsiClass classToByPass) { return false; } public PsiClass getContainingClass() { return null; } @NotNull public Collection<HierarchicalMethodSignature> getVisibleSignatures() { return null; } public PsiDocComment getDocComment() { return null; } public boolean isDeprecated() { return false; } public boolean hasTypeParameters() { return false; } public PsiTypeParameterList getTypeParameterList() { return null; } @NotNull public PsiTypeParameter[] getTypeParameters() { return PsiTypeParameter.EMPTY_ARRAY; } @Override protected Icon getIconInner() { return Icons.ENUM; } protected IElementType getBodyElementType() { return FanElementTypes.ENUM_BODY; } }