boolean (@NotNull PsiElement place, PsiElement ancestor) { if (ancestor instanceof PsiDirectoryContainer) { PsiDirectory[] directories = ((PsiDirectoryContainer)ancestor).getDirectories(place.getResolveScope()); for (PsiDirectory directory : directories) { if (isInside(place, directory)) return true; } } if (ancestor instanceof PsiFile) { for (PsiFile file : ((PsiFile)ancestor).getViewProvider().getAllFiles()) { if (PsiTreeUtil.isAncestor(file, place, false)) return true; } } boolean isAncestor = PsiTreeUtil.isAncestor(ancestor, place, false); if (!isAncestor && ancestor instanceof PsiNameIdentifierOwner) { PsiElement nameIdentifier = ((PsiNameIdentifierOwner)ancestor).getNameIdentifier(); if (nameIdentifier != null && !PsiTreeUtil.isAncestor(ancestor, nameIdentifier, true)) { isAncestor = PsiTreeUtil.isAncestor(nameIdentifier.getParent(), place, false); } } if (!isAncestor) { InjectedLanguageManager injectedLanguageManager = InjectedLanguageManager.getInstance(place.getProject()); PsiLanguageInjectionHost host = injectedLanguageManager.getInjectionHost(place); while (host != null) { if (PsiTreeUtil.isAncestor(ancestor, host, false)) { isAncestor = true; break; } host = injectedLanguageManager.getInjectionHost(host); } } return isAncestor; }