public static PsiElement getUpperScope(final PsiElement element) { if (element instanceof PsiPackage) { return ((PsiPackage) element).getParentPackage(); } if (element instanceof PbFile) { JavaPsiFacade facade = JavaPsiFacade.getInstance(element.getManager().getProject()); return facade.findPackage(((PbFile) element).getPackageName()); } if (element instanceof PbPsiElement) { PbPsiElement scope = (PbPsiElement) element.getParent(); while (scope != null && !(scope instanceof PbFile) && !(scope instanceof PbBlock)) { scope = (PbPsiElement) scope.getParent(); } /* // TC: This seems to skip from message block scope to package scope, preventing finding other messages defined in the same file. Commenting out for now, since I don't see a good reason for it. if (scope instanceof PbFile) { JavaPsiFacade facade = JavaPsiFacade.getInstance(scope.getManager().getProject()); return facade.findPackage(((PbFile) scope).getPackageName()); }*/ return scope; } assert false; return null; }
public static PsiElement getRootScope(final PsiElement element) { return JavaPsiFacade.getInstance(element.getManager().getProject()).findPackage(""); }