IDEA-74341 LiveTemplates: templates with 'Other' context are available in the 'HTML Text' context

This commit is contained in:
peter
2011-09-15 18:16:58 +02:00
parent cff59322c1
commit bc7cfd2b48
2 changed files with 14 additions and 1 deletions
@@ -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");
@@ -430,6 +430,15 @@ public class TemplateManagerImpl extends TemplateManager implements ProjectCompo
return result;
}
private static List<TemplateContextType> getBases(TemplateContextType type) {
ArrayList<TemplateContextType> list = new ArrayList<TemplateContextType>();
while (true) {
type = type.getBaseContextType();
if (type == null) return list;
list.add(type);
}
}
private static Set<TemplateContextType> getDirectlyApplicableContextTypes(@Nullable PsiFile file, int offset, @Nullable FileType fileType) {
LinkedHashSet<TemplateContextType> set = new LinkedHashSet<TemplateContextType>();
LinkedList<TemplateContextType> 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;
}
}