From bc7cfd2b4894485717a4dd653422c6fc39e957ee Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 15 Sep 2011 18:04:12 +0200 Subject: [PATCH] IDEA-74341 LiveTemplates: templates with 'Other' context are available in the 'HTML Text' context --- .../codeInsight/template/JavaCodeContextType.java | 4 ++++ .../template/impl/TemplateManagerImpl.java | 11 ++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/template/JavaCodeContextType.java b/java/java-impl/src/com/intellij/codeInsight/template/JavaCodeContextType.java index 426239978e16..362256a0002e 100644 --- a/java/java-impl/src/com/intellij/codeInsight/template/JavaCodeContextType.java +++ b/java/java-impl/src/com/intellij/codeInsight/template/JavaCodeContextType.java @@ -129,6 +129,10 @@ public abstract class JavaCodeContextType extends TemplateContextType { return false; } + if (psiElement().withParents(PsiTypeElement.class, PsiClass.class).accepts(parent)) { + return false; + } + ProcessingContext context = new ProcessingContext(); if (psiElement().inside(PsiExpression.class).afterLeaf(psiElement().inside(psiElement(PsiExpression.class).save("prevExpr"))).accepts(element, context)) { PsiExpression prevExpr = (PsiExpression)context.get("prevExpr"); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateManagerImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateManagerImpl.java index 8204f2d20537..8a8a8a819169 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/TemplateManagerImpl.java @@ -430,6 +430,15 @@ public class TemplateManagerImpl extends TemplateManager implements ProjectCompo return result; } + private static List getBases(TemplateContextType type) { + ArrayList list = new ArrayList(); + while (true) { + type = type.getBaseContextType(); + if (type == null) return list; + list.add(type); + } + } + private static Set getDirectlyApplicableContextTypes(@Nullable PsiFile file, int offset, @Nullable FileType fileType) { LinkedHashSet set = new LinkedHashSet(); LinkedList contexts = buildOrderedContextTypes(); @@ -442,7 +451,7 @@ public class TemplateManagerImpl extends TemplateManager implements ProjectCompo removeBases: while (true) { for (TemplateContextType type : set) { - if (set.remove(type.getBaseContextType())) { + if (set.removeAll(getBases(type))) { continue removeBases; } }