From 95f7b0d3f1f13a615f839b513795d22eb0d765d1 Mon Sep 17 00:00:00 2001 From: Sergey Simonchik Date: Thu, 24 Mar 2016 21:57:02 +0300 Subject: [PATCH] use file's directory as context root when resolving references in FileIncludeProvider (fixes WEB-20021 for IntelliJ IDEA) --- .../impl/include/FileIncludeManagerImpl.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/platform/lang-impl/src/com/intellij/psi/impl/include/FileIncludeManagerImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/include/FileIncludeManagerImpl.java index a79e85e91f4d..98e327097cf2 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/include/FileIncludeManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/include/FileIncludeManagerImpl.java @@ -30,6 +30,7 @@ import com.intellij.psi.PsiFileFactory; import com.intellij.psi.PsiFileSystemItem; import com.intellij.psi.PsiManager; import com.intellij.psi.impl.source.PsiFileImpl; +import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReferenceHelper; import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReferenceSet; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.util.CachedValueProvider; @@ -181,9 +182,35 @@ public class FileIncludeManagerImpl extends FileIncludeManager { protected boolean useIncludingFileAsContext() { return false; } + + @NotNull + @Override + public Collection computeDefaultContexts() { + Collection contexts = super.computeDefaultContexts(); + if (!isAbsolutePathReference()) { + return addFileDirectoryToContexts(contexts, context); + } + return contexts; + } }.resolve(); } + @NotNull + private static Collection addFileDirectoryToContexts(@NotNull Collection contexts, + @NotNull PsiFile context) { + VirtualFile file = context.getOriginalFile().getVirtualFile(); + VirtualFile dir = file == null ? null : file.getParent(); + if (dir != null) { + PsiFileSystemItem item = FileReferenceHelper.getPsiFileSystemItem(context.getManager(), dir); + if (item != null && !contexts.contains(item)) { + List result = ContainerUtil.newArrayList(contexts); + result.add(item); + return result; + } + } + return contexts; + } + private abstract class IncludeCacheHolder { private final Key> COMPILE_TIME_KEY; -- 2.23.3