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; } }