diff --git a/plugins/groovy/src/org/intellij/plugins/intelliLang/inject/groovy/PatternEditorContextMembersProvider.java b/plugins/groovy/src/org/intellij/plugins/intelliLang/inject/groovy/PatternEditorContextMembersProvider.java index 6f046b039215..8369d6ffbb04 100644 --- a/plugins/groovy/src/org/intellij/plugins/intelliLang/inject/groovy/PatternEditorContextMembersProvider.java +++ b/plugins/groovy/src/org/intellij/plugins/intelliLang/inject/groovy/PatternEditorContextMembersProvider.java @@ -101,11 +101,7 @@ public class PatternEditorContextMembersProvider extends NonCodeMembersContribut @Nullable private static CachedValueProvider> createDevProvider(final PsiFile file) { - final SmartPsiElementPointer pointer = file.getUserData(FileContextUtil.INJECTED_IN_ELEMENT); - if (pointer == null) return null; - final PsiElement element = pointer.getElement(); - if (!(element instanceof XmlText)) return null; - final XmlTag tag = ((XmlText)element).getParentTag(); + final XmlTag tag = getTagByInjectedFile(file); final XmlTag parentTag = tag == null ? null : tag.getParentTag(); final String parentTagName = parentTag == null ? null : parentTag.getName(); final String name = tag == null ? null : tag.getName(); @@ -113,6 +109,9 @@ public class PatternEditorContextMembersProvider extends NonCodeMembersContribut return new CachedValueProvider>() { @Override public Result> compute() { + final XmlTag tag = getTagByInjectedFile(file); + final XmlTag parentTag = tag == null ? null : tag.getParentTag(); + if (parentTag == null) return Result.create(Collections.emptyList(), file); return new Result>(getRootsByClassNames(file, parentTag.getAttributeValue("injector-id")), parentTag.getContainingFile()); } }; @@ -121,13 +120,22 @@ public class PatternEditorContextMembersProvider extends NonCodeMembersContribut return new CachedValueProvider>() { @Override public Result> compute() { - return new Result>(getRootsByClassNames(file, tag.getAttributeValue("type")), parentTag.getContainingFile()); + final XmlTag tag = getTagByInjectedFile(file); + if (tag == null) return Result.create(Collections.emptyList(), file); + return new Result>(getRootsByClassNames(file, tag.getAttributeValue("type")), tag.getContainingFile()); } }; } else return null; } + @Nullable + private static XmlTag getTagByInjectedFile(final PsiFile file) { + final SmartPsiElementPointer pointer = file.getUserData(FileContextUtil.INJECTED_IN_ELEMENT); + final PsiElement element = pointer == null? null : pointer.getElement(); + return element instanceof XmlText ? ((XmlText)element).getParentTag() : null; + } + private static List getRootsByClassNames(PsiFile file, String type) { final List roots = ContainerUtil.createEmptyCOWList();