package org.fandev.utils; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.compiler.CompilerConfiguration; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.NotNull; import org.fandev.lang.fan.psi.api.statements.FanTopLevelDefintion; import org.fandev.lang.fan.psi.api.types.FanCodeReferenceElement; /** * @author Dror Bereznitsky * @date Feb 21, 2009 3:30:29 PM */ public class PsiUtil { public static boolean isAccessible(final PsiElement place, final PsiMember member) { return com.intellij.psi.util.PsiUtil.isAccessible(member, place, null); } public static int getFlags(final PsiModifierListOwner paramPsiModifierListOwner, final boolean paramBoolean) { final PsiFile localPsiFile = paramPsiModifierListOwner.getContainingFile(); final VirtualFile localVirtualFile = (localPsiFile == null) ? null : localPsiFile.getVirtualFile(); final int enumFlag = ((paramPsiModifierListOwner instanceof PsiClass) && (((PsiClass) paramPsiModifierListOwner).isEnum())) ? 1 : 0; int mainFlag = (((paramPsiModifierListOwner.hasModifierProperty("final")) && (enumFlag == 0)) ? 1024 : 0) | (((paramPsiModifierListOwner.hasModifierProperty("static")) && (enumFlag == 0)) ? 512 : 0) | ((paramBoolean) ? 2048 : 0) | ((isExcluded(localVirtualFile, paramPsiModifierListOwner.getProject())) ? 4096 : 0); if (paramPsiModifierListOwner instanceof PsiClass) { if ((paramPsiModifierListOwner.hasModifierProperty("abstract")) && (!(((PsiClass) paramPsiModifierListOwner).isInterface()))) { mainFlag |= 256; } } return mainFlag; } public static boolean isExcluded(final VirtualFile paramVirtualFile, final Project paramProject) { return ((paramVirtualFile != null) && (ProjectRootManager.getInstance(paramProject).getFileIndex().isInSource(paramVirtualFile)) && (CompilerConfiguration.getInstance(paramProject).isExcludedFromCompilation(paramVirtualFile))); } @Nullable public static FanTopLevelDefintion findPreviousTopLevelElementByThisElement(final PsiElement element) { PsiElement parent = element.getParent(); while (parent != null && !(parent instanceof FanTopLevelDefintion)) { parent = parent.getParent(); } if (parent == null){ return null; } return ((FanTopLevelDefintion) parent); } }