From 9663d292ac50dbc91ce1fba6ebd62de6e5a3deac Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Thu, 26 Apr 2012 13:39:21 +0400 Subject: [PATCH] (-JS) use explicit getInjectionHost() method instead of getContext(), since some injected files can override the latter --- .../intellij/usages/impl/rules/ClassGroupingRule.java | 4 +++- .../usages/impl/rules/MethodGroupingRule.java | 4 +++- .../com/intellij/psi/PsiLanguageInjectionHost.java | 2 +- .../com/intellij/codeInspection/ProblemsHolder.java | 5 +++-- .../daemon/impl/GeneralHighlightingPass.java | 2 +- .../codeInsight/daemon/impl/LocalInspectionsPass.java | 2 +- .../generation/CommentByLineCommentHandler.java | 3 ++- .../intellij/codeInspection/GlobalInspectionUtil.java | 3 ++- .../com/intellij/ide/util/PlatformPackageUtil.java | 3 ++- .../internal/psiView/ViewerTreeStructure.java | 11 ++++++++--- .../com/intellij/psi/impl/PsiDocumentManagerImpl.java | 2 +- .../impl/smartPointers/SmartPointerManagerImpl.java | 3 ++- .../smartPointers/SmartPsiElementPointerImpl.java | 3 ++- .../reference/impl/providers/FileReference.java | 3 ++- .../tree/injected/InjectedFileViewProvider.java | 3 ++- .../tree/injected/InjectedLanguageManagerImpl.java | 3 ++- .../source/tree/injected/InjectedLanguageUtil.java | 6 +++--- .../rename/inplace/InplaceRefactoring.java | 3 ++- .../src/com/intellij/usageView/UsageViewUtil.java | 2 +- .../intellij/lang/properties/references/I18nUtil.java | 3 ++- .../daemon/impl/analysis/XmlHighlightVisitor.java | 5 +++-- .../intellij/psi/impl/source/xml/XmlDoctypeImpl.java | 4 +++- 22 files changed, 51 insertions(+), 28 deletions(-) diff --git a/java/java-impl/src/com/intellij/usages/impl/rules/ClassGroupingRule.java b/java/java-impl/src/com/intellij/usages/impl/rules/ClassGroupingRule.java index dd2b88ffc624..8b40b441006b 100644 --- a/java/java-impl/src/com/intellij/usages/impl/rules/ClassGroupingRule.java +++ b/java/java-impl/src/com/intellij/usages/impl/rules/ClassGroupingRule.java @@ -15,6 +15,7 @@ */ package com.intellij.usages.impl.rules; +import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.navigation.NavigationItemFileStatus; import com.intellij.openapi.actionSystem.DataKey; import com.intellij.openapi.actionSystem.DataSink; @@ -52,7 +53,8 @@ public class ClassGroupingRule implements UsageGroupingRule { if (!(topLevelFile instanceof PsiJavaFile) || topLevelFile instanceof JspFile) { return null; } - PsiElement containingClass = topLevelFile == containingFile ? psiElement : containingFile.getContext(); + PsiElement containingClass = topLevelFile == containingFile ? psiElement : InjectedLanguageManager + .getInstance(containingFile.getProject()).getInjectionHost(containingFile); do { containingClass = PsiTreeUtil.getParentOfType(containingClass, PsiClass.class, true); if (containingClass == null || ((PsiClass)containingClass).getQualifiedName() != null) break; diff --git a/java/java-impl/src/com/intellij/usages/impl/rules/MethodGroupingRule.java b/java/java-impl/src/com/intellij/usages/impl/rules/MethodGroupingRule.java index aeed05d46bc9..ec3e39f92939 100644 --- a/java/java-impl/src/com/intellij/usages/impl/rules/MethodGroupingRule.java +++ b/java/java-impl/src/com/intellij/usages/impl/rules/MethodGroupingRule.java @@ -15,6 +15,7 @@ */ package com.intellij.usages.impl.rules; +import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.navigation.NavigationItemFileStatus; import com.intellij.openapi.actionSystem.DataKey; import com.intellij.openapi.actionSystem.DataSink; @@ -52,7 +53,8 @@ public class MethodGroupingRule implements UsageGroupingRule { PsiFile containingFile = psiElement.getContainingFile(); PsiFile topLevelFile = InjectedLanguageUtil.getTopLevelFile(containingFile); if (topLevelFile instanceof PsiJavaFile) { - PsiElement containingMethod = topLevelFile == containingFile ? psiElement : containingFile.getContext(); + PsiElement containingMethod = topLevelFile == containingFile ? psiElement : InjectedLanguageManager + .getInstance(containingFile.getProject()).getInjectionHost(containingFile); if (usage instanceof UsageInfo2UsageAdapter && topLevelFile == containingFile) { int offset = ((UsageInfo2UsageAdapter)usage).getUsageInfo().getNavigationOffset(); containingMethod = containingFile.findElementAt(offset); diff --git a/platform/core-api/src/com/intellij/psi/PsiLanguageInjectionHost.java b/platform/core-api/src/com/intellij/psi/PsiLanguageInjectionHost.java index fa12107c5996..3d84036b7ae7 100644 --- a/platform/core-api/src/com/intellij/psi/PsiLanguageInjectionHost.java +++ b/platform/core-api/src/com/intellij/psi/PsiLanguageInjectionHost.java @@ -34,7 +34,7 @@ import java.util.List; * * Currently, language can be injected into string literals, XML tag contents and XML attributes. * You don't have to implement PsiLanguageInjectionHost by yourself, unless you want to inject something into your own custom PSI. - * For all returned injected PSI elements, {@link PsiElement#getContext()} method returns PsiLanguageInjectionHost they were injected into. + * For all returned injected PSI elements, {@link InjectedLanguageManager#getInjectionHost(PsiElement)} returns PsiLanguageInjectionHost they were injected into. */ public interface PsiLanguageInjectionHost extends PsiElement { boolean isValidHost(); diff --git a/platform/lang-api/src/com/intellij/codeInspection/ProblemsHolder.java b/platform/lang-api/src/com/intellij/codeInspection/ProblemsHolder.java index 8933cb6006b8..d455d29e6c29 100644 --- a/platform/lang-api/src/com/intellij/codeInspection/ProblemsHolder.java +++ b/platform/lang-api/src/com/intellij/codeInspection/ProblemsHolder.java @@ -18,6 +18,7 @@ package com.intellij.codeInspection; import com.intellij.codeInsight.CodeInsightBundle; import com.intellij.codeInsight.daemon.EmptyResolveMessageProvider; +import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.TextRange; @@ -77,8 +78,8 @@ public class ProblemsHolder { } PsiFile containingFile = element.getContainingFile(); - PsiElement context = containingFile.getContext(); - PsiElement myContext = myFile.getContext(); + PsiElement context = InjectedLanguageManager.getInstance(containingFile.getProject()).getInjectionHost(containingFile); + PsiElement myContext = InjectedLanguageManager.getInstance(myFile.getProject()).getInjectionHost(myFile); LOG.error("Reported element " + element + " is not from the file '" + myFile + "' the inspection was invoked for. Message: '" + problemDescriptor.getDescriptionTemplate()+"'.\n" + "Element' containing file: "+ containingFile +"; context: "+(context == null ? null : context.getContainingFile())+"\n" +"Inspection invoked for file: "+ myFile +"; context: "+(myContext == null ? null : myContext.getContainingFile())+"\n" diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java index 03436a5f91d7..9c8af680b995 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java @@ -298,7 +298,7 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP if (!documentRange.isValid()) continue; PsiFile file = PsiDocumentManager.getInstance(myProject).getPsiFile(documentRange); if (file == null) continue; - PsiElement context = file.getContext(); + PsiElement context = InjectedLanguageManager.getInstance(file.getProject()).getInjectionHost(file); if (context != null && context.isValid() && !file.getProject().isDisposed() diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java index 91505f61655e..f17a5504853a 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java @@ -725,7 +725,7 @@ public class LocalInspectionsPass extends ProgressableTextEditorHighlightingPass @NotNull final ProgressIndicator indicator, @NotNull InspectionManagerEx iManager, final boolean inVisibleRange, List wrappers, boolean checkDumbAwareness) { - final PsiElement host = injectedPsi.getContext(); + final PsiElement host = InjectedLanguageManager.getInstance(injectedPsi.getProject()).getInjectionHost(injectedPsi); final List elements = getElementsFrom(injectedPsi); if (elements.isEmpty()) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByLineCommentHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByLineCommentHandler.java index f6f6856b0775..c90b15b822a8 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByLineCommentHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByLineCommentHandler.java @@ -24,6 +24,7 @@ import com.intellij.injected.editor.EditorWindow; import com.intellij.lang.Commenter; import com.intellij.lang.Language; import com.intellij.lang.LanguageCommenters; +import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.openapi.actionSystem.IdeActions; import com.intellij.openapi.actionSystem.ex.ActionManagerEx; import com.intellij.openapi.editor.*; @@ -70,7 +71,7 @@ public class CommentByLineCommentHandler implements CodeInsightActionHandler { myFile = file.getViewProvider().getPsi(file.getViewProvider().getBaseLanguage()); myEditor = editor; - PsiElement context = myFile.getContext(); + PsiElement context = InjectedLanguageManager.getInstance(myFile.getProject()).getInjectionHost(myFile); if (context != null && (context.textContains('\'') || context.textContains('\"'))) { String s = context.getText(); diff --git a/platform/lang-impl/src/com/intellij/codeInspection/GlobalInspectionUtil.java b/platform/lang-impl/src/com/intellij/codeInspection/GlobalInspectionUtil.java index 6a08801721e9..04214ea5be0b 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/GlobalInspectionUtil.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/GlobalInspectionUtil.java @@ -17,6 +17,7 @@ package com.intellij.codeInspection; import com.intellij.codeInspection.reference.RefElement; +import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; @@ -34,7 +35,7 @@ public class GlobalInspectionUtil { PsiFile elementFile = element.getContainingFile(); RefElement refElement = globalContext.getRefManager().getReference(elementFile); if (refElement == null) { - PsiElement context = elementFile.getContext(); + PsiElement context = InjectedLanguageManager.getInstance(elementFile.getProject()).getInjectionHost(elementFile); if (context != null) refElement = globalContext.getRefManager().getReference(context.getContainingFile()); } return refElement; diff --git a/platform/lang-impl/src/com/intellij/ide/util/PlatformPackageUtil.java b/platform/lang-impl/src/com/intellij/ide/util/PlatformPackageUtil.java index e0a9f80fd90a..a63e725e25c8 100644 --- a/platform/lang-impl/src/com/intellij/ide/util/PlatformPackageUtil.java +++ b/platform/lang-impl/src/com/intellij/ide/util/PlatformPackageUtil.java @@ -16,6 +16,7 @@ package com.intellij.ide.util; import com.intellij.ide.IdeBundle; +import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.module.Module; @@ -274,7 +275,7 @@ public class PlatformPackageUtil { @Nullable public static PsiDirectory getDirectory(PsiElement element) { PsiFile file = element.getContainingFile(); - final PsiElement context = file.getContext(); + final PsiElement context = InjectedLanguageManager.getInstance(file.getProject()).getInjectionHost(file); if (context != null) { file = context.getContainingFile(); } diff --git a/platform/lang-impl/src/com/intellij/internal/psiView/ViewerTreeStructure.java b/platform/lang-impl/src/com/intellij/internal/psiView/ViewerTreeStructure.java index 77fff7a7c9db..ff65a900ea5a 100644 --- a/platform/lang-impl/src/com/intellij/internal/psiView/ViewerTreeStructure.java +++ b/platform/lang-impl/src/com/intellij/internal/psiView/ViewerTreeStructure.java @@ -24,6 +24,7 @@ package com.intellij.internal.psiView; import com.intellij.ide.util.treeView.AbstractTreeStructure; import com.intellij.ide.util.treeView.NodeDescriptor; import com.intellij.lang.ASTNode; +import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; import com.intellij.psi.*; @@ -138,10 +139,14 @@ public class ViewerTreeStructure extends AbstractTreeStructure { if (element == myRootPsiElement) { return myRootElement; } - if (element instanceof PsiFile && ((PsiFile)element).getContext() != null) { - return new Inject(((PsiFile)element).getContext(), (PsiElement)element); + if (element instanceof PsiFile && + InjectedLanguageManager.getInstance(((PsiFile)element).getProject()).getInjectionHost(((PsiFile)element)) != null) { + return new Inject(InjectedLanguageManager.getInstance(((PsiFile)element).getProject()).getInjectionHost(((PsiFile)element)), + (PsiElement)element); } - return element instanceof Inject ? ((Inject)element).getParent() :((PsiElement)element).getContext(); + return element instanceof Inject + ? ((Inject)element).getParent() + : InjectedLanguageManager.getInstance(((PsiElement)element).getProject()).getInjectionHost(((PsiElement)element)); } @Override diff --git a/platform/lang-impl/src/com/intellij/psi/impl/PsiDocumentManagerImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/PsiDocumentManagerImpl.java index 2d97fc4052a7..db6c920f0b19 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/PsiDocumentManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/PsiDocumentManagerImpl.java @@ -765,7 +765,7 @@ public class PsiDocumentManagerImpl extends PsiDocumentManager implements Projec error += "psi: '" + psiFile.getText() + "'\n"; error += "ast: '" + psiFile.getNode().getText() + "'\n"; error += psiFile.getLanguage()+"\n"; - PsiElement context = psiFile.getContext(); + PsiElement context = InjectedLanguageManager.getInstance(psiFile.getProject()).getInjectionHost(psiFile); if (context != null) { error += "context: " + context +"; text: '" + context.getText() + "'\n"; error += "context file: " + context.getContainingFile() + "\n"; diff --git a/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java index e3e6af37658d..fb8722d0156b 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java @@ -18,6 +18,7 @@ package com.intellij.psi.impl.smartPointers; import com.intellij.injected.editor.DocumentWindow; import com.intellij.lang.Language; +import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; @@ -81,7 +82,7 @@ public class SmartPointerManagerImpl extends SmartPointerManager { } private static RangeMarker getCachedRangeMarkerToInjectedFragment(@NotNull PsiFile injectedFile) { - PsiElement hostContext = injectedFile.getContext(); + PsiElement hostContext = InjectedLanguageManager.getInstance(injectedFile.getProject()).getInjectionHost(injectedFile); RangeMarker cachedMarker = null; if (hostContext != null) { SmartPsiElementPointer cachedPointer = getCachedPointer(hostContext); diff --git a/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SmartPsiElementPointerImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SmartPsiElementPointerImpl.java index ad73760f78ed..325d4045175c 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SmartPsiElementPointerImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SmartPsiElementPointerImpl.java @@ -16,6 +16,7 @@ package com.intellij.psi.impl.smartPointers; +import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; @@ -163,7 +164,7 @@ class SmartPsiElementPointerImpl implements SmartPointerEx FileViewProvider viewProvider = containingFile.getViewProvider(); if (viewProvider instanceof InjectedFileViewProvider) { - PsiElement hostContext = containingFile.getContext(); + PsiElement hostContext = InjectedLanguageManager.getInstance(containingFile.getProject()).getInjectionHost(containingFile); if (hostContext != null) return new InjectedSelfElementInfo(project, element, hostContext); } diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReference.java b/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReference.java index daf16ea09850..7173fa966295 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReference.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReference.java @@ -23,6 +23,7 @@ import com.intellij.codeInsight.lookup.LookupElementBuilder; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.LocalQuickFixProvider; import com.intellij.lang.LangBundle; +import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; @@ -414,7 +415,7 @@ public class FileReference implements FileReferenceOwner, PsiPolyVariantReferenc if (dstVFile == null) throw new IncorrectOperationException("Cannot bind to non-physical element:" + element); PsiFile file = getElement().getContainingFile(); - PsiElement contextPsiFile = file.getContext(); + PsiElement contextPsiFile = InjectedLanguageManager.getInstance(file.getProject()).getInjectionHost(file); if (contextPsiFile != null) file = contextPsiFile.getContainingFile(); // use host file! final VirtualFile curVFile = file.getVirtualFile(); if (curVFile == null) throw new IncorrectOperationException("Cannot bind from non-physical element:" + file); diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedFileViewProvider.java b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedFileViewProvider.java index ba1429324613..4cd558854598 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedFileViewProvider.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedFileViewProvider.java @@ -89,7 +89,8 @@ public class InjectedFileViewProvider extends SingleRootFileViewProvider impleme final PsiDocumentManager documentManager = PsiDocumentManager.getInstance(getManager().getProject()); PsiFile hostFile = documentManager.getPsiFile(hostDocument); Language language = getBaseLanguage(); - final Language hostFileLanguage = getPsi(language).getContext().getContainingFile().getLanguage(); + PsiFile file = getPsi(language); + final Language hostFileLanguage = InjectedLanguageUtil.getTopLevelFile(file).getLanguage(); PsiFile hostPsiFileCopy = (PsiFile)hostFile.copy(); Segment firstTextRange = oldDocumentWindow.getHostRanges()[0]; PsiElement hostElementCopy = hostPsiFileCopy.getViewProvider().findElementAt(firstTextRange.getStartOffset(), hostFileLanguage); diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java index 481a700e5613..7aa201ea2521 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java @@ -47,6 +47,7 @@ import com.intellij.openapi.util.TextRange; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.impl.PsiDocumentManagerImpl; +import com.intellij.psi.impl.source.resolve.FileContextUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.Processor; import com.intellij.util.containers.ConcurrentHashMap; @@ -225,7 +226,7 @@ public class InjectedLanguageManagerImpl extends InjectedLanguageManager impleme final PsiFile file = element.getContainingFile(); final VirtualFile virtualFile = file == null ? null : file.getVirtualFile(); if (virtualFile instanceof VirtualFileWindow) { - PsiElement host = file.getContext(); + PsiElement host = FileContextUtil.getFileContext(file); // use utility method in case the file's overridden getContext() if (host instanceof PsiLanguageInjectionHost) { return (PsiLanguageInjectionHost)host; } diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageUtil.java b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageUtil.java index fc045412e9e6..11784f3dcfb9 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageUtil.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageUtil.java @@ -121,7 +121,7 @@ public class InjectedLanguageUtil { @NotNull PsiLanguageInjectionHost.InjectedPsiVisitor visitor) { //do not inject into nonphysical files except during completion if (!containingFile.isPhysical() && containingFile.getOriginalFile() == containingFile) { - final PsiElement context = containingFile.getContext(); + final PsiElement context = InjectedLanguageManager.getInstance(containingFile.getProject()).getInjectionHost(containingFile); if (context == null) return; final PsiFile file = context.getContainingFile(); @@ -349,7 +349,7 @@ public class InjectedLanguageUtil { PsiManagerEx psiManagerEx = (PsiManagerEx)injected.getManager(); if (psiManagerEx.getProject().isDisposed()) return; psiManagerEx.getFileManager().setViewProvider(virtualFile, null); - PsiElement context = injected.getContext(); + PsiElement context = InjectedLanguageManager.getInstance(injected.getProject()).getInjectionHost(injected); PsiFile hostFile; if (context != null) { hostFile = context.getContainingFile(); @@ -397,7 +397,7 @@ public class InjectedLanguageUtil { PsiFile containingFile = element.getContainingFile(); Document document = PsiDocumentManager.getInstance(element.getProject()).getCachedDocument(containingFile); if (document instanceof DocumentWindow) { - PsiElement host = containingFile.getContext(); + PsiElement host = InjectedLanguageManager.getInstance(containingFile.getProject()).getInjectionHost(containingFile); if (host != null) containingFile = host.getContainingFile(); } return containingFile; diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/InplaceRefactoring.java b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/InplaceRefactoring.java index aac593fec3d6..cd1797075c0c 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/InplaceRefactoring.java +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/InplaceRefactoring.java @@ -26,6 +26,7 @@ import com.intellij.codeInsight.template.impl.TemplateState; import com.intellij.injected.editor.VirtualFileWindow; import com.intellij.lang.Language; import com.intellij.lang.LanguageNamesValidation; +import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.lang.refactoring.NamesValidator; import com.intellij.openapi.actionSystem.Shortcut; import com.intellij.openapi.application.ApplicationManager; @@ -213,7 +214,7 @@ public abstract class InplaceRefactoring { final Collection> stringUsages, final PsiElement scope, final PsiFile containingFile) { - final PsiElement context = containingFile.getContext(); + final PsiElement context = InjectedLanguageManager.getInstance(containingFile.getProject()).getInjectionHost(containingFile); myScope = context != null ? context.getContainingFile() : scope; final TemplateBuilderImpl builder = new TemplateBuilderImpl(myScope); diff --git a/platform/lang-impl/src/com/intellij/usageView/UsageViewUtil.java b/platform/lang-impl/src/com/intellij/usageView/UsageViewUtil.java index 23cdb902ef73..cebccff1c1cc 100644 --- a/platform/lang-impl/src/com/intellij/usageView/UsageViewUtil.java +++ b/platform/lang-impl/src/com/intellij/usageView/UsageViewUtil.java @@ -113,7 +113,7 @@ public class UsageViewUtil { PsiFile file = usage.getFile(); if (file != null) { - PsiElement context = file.getContext(); + PsiElement context = InjectedLanguageManager.getInstance(file.getProject()).getInjectionHost(file); if (context != null) { PsiElement usageElement = usage.getElement(); diff --git a/plugins/properties/src/com/intellij/lang/properties/references/I18nUtil.java b/plugins/properties/src/com/intellij/lang/properties/references/I18nUtil.java index 305ef90798fe..8c4b23f6651a 100644 --- a/plugins/properties/src/com/intellij/lang/properties/references/I18nUtil.java +++ b/plugins/properties/src/com/intellij/lang/properties/references/I18nUtil.java @@ -15,6 +15,7 @@ */ package com.intellij.lang.properties.references; +import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.lang.properties.IProperty; import com.intellij.lang.properties.PropertiesFileProcessor; import com.intellij.lang.properties.PropertiesReferenceManager; @@ -40,7 +41,7 @@ public class I18nUtil { @NotNull public static List propertiesFilesByBundleName(final String resourceBundleName, final PsiElement context) { PsiFile containingFile = context.getContainingFile(); - PsiElement containingFileContext = containingFile.getContext(); + PsiElement containingFileContext = InjectedLanguageManager.getInstance(containingFile.getProject()).getInjectionHost(containingFile); if (containingFileContext != null) containingFile = containingFileContext.getContainingFile(); VirtualFile virtualFile = containingFile.getVirtualFile(); diff --git a/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlHighlightVisitor.java b/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlHighlightVisitor.java index 9708c56408dd..5177c4a9f020 100644 --- a/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlHighlightVisitor.java +++ b/xml/impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlHighlightVisitor.java @@ -403,7 +403,8 @@ public class XmlHighlightVisitor extends XmlElementVisitor implements HighlightV } private static boolean isInjectedHtmlTagForWhichNoProblemsReporting(HtmlTag tag) { - PsiElement context = tag.getContainingFile().getContext(); + PsiElement context = + InjectedLanguageManager.getInstance(tag.getContainingFile().getProject()).getInjectionHost(tag.getContainingFile()); return context != null && skipValidation(context); } @@ -698,7 +699,7 @@ public class XmlHighlightVisitor extends XmlElementVisitor implements HighlightV addElementsForTagWithManyQuickFixes((XmlTag)context, message, defaultInfoType, fixes); } else { - final PsiElement contextOfFile = containingFile.getContext(); + final PsiElement contextOfFile = InjectedLanguageManager.getInstance(containingFile.getProject()).getInjectionHost(containingFile); final HighlightInfo highlightInfo; if (contextOfFile != null) { diff --git a/xml/impl/src/com/intellij/psi/impl/source/xml/XmlDoctypeImpl.java b/xml/impl/src/com/intellij/psi/impl/source/xml/XmlDoctypeImpl.java index 676c536e4579..231c82998227 100644 --- a/xml/impl/src/com/intellij/psi/impl/source/xml/XmlDoctypeImpl.java +++ b/xml/impl/src/com/intellij/psi/impl/source/xml/XmlDoctypeImpl.java @@ -16,6 +16,7 @@ package com.intellij.psi.impl.source.xml; import com.intellij.lang.ASTNode; +import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.util.text.StringUtil; @@ -104,7 +105,8 @@ public class XmlDoctypeImpl extends XmlElementImpl implements XmlDoctype { private static boolean hasInjectedEscapingQuotes(PsiElement element, String text) { if (text.startsWith("\\") && text.length() >= 4) { char escapedChar = text.charAt(1); - PsiElement context = element.getContainingFile().getContext(); + PsiElement context = + InjectedLanguageManager.getInstance(element.getContainingFile().getProject()).getInjectionHost(element.getContainingFile()); if (context != null && context.textContains(escapedChar) &&