package org.fandev.lang.fan.psi.api.statements.typeDefs;
import com.intellij.psi.*;
import com.intellij.util.IncorrectOperationException;
import org.fandev.lang.fan.psi.stubs.FanTypeDefinitionStub;
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.FanField;
import org.fandev.lang.fan.psi.api.statements.FanTopLevelDefintion;
import org.fandev.lang.fan.psi.api.topLevel.FanTopStatement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author Dror Bereznitsky
* @date Jan 7, 2009 5:42:21 PM
*/
public interface FanTypeDefinition extends StubBasedPsiElement<FanTypeDefinitionStub>, PsiNamedElement, PsiClass, FanTopLevelDefintion, FanTopStatement {
@NotNull
String getPodName();
@NotNull
FanSlot[] getSlots();
@NotNull
FanSlot[] getSlots(final String modifier);
@NotNull
FanMethod[] getFanMethods();
@NotNull
FanMethod[] getFanMethods(final String modifier);
@NotNull
FanField[] getFanFields();
@NotNull
FanField[] getFanFields(final String modifier);
FanField getFieldByName(final String name);
@Nullable
FanMethod getMethodByName(@NotNull final String name);
FanTypeDefinition getSuperType();
String getJavaQualifiedName();
PsiElement getBodyElement();
PsiElement addMemberDeclaration(@NotNull final PsiElement decl, final PsiElement anchorBefore)
throws IncorrectOperationException;
}