From 621276aafea94b674ba2deb5c102c6bca02719e1 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Wed, 4 Feb 2015 18:37:44 +0100 Subject: [PATCH] live template context type for comments in Kotlin; disable other contexts inside doc comments #KT-6735 fixed --- idea/src/META-INF/plugin.xml | 1 + .../liveTemplates/JetTemplateContextType.java | 30 ++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 2c078548bed..e2992bda0ae 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -305,6 +305,7 @@ + diff --git a/idea/src/org/jetbrains/kotlin/idea/liveTemplates/JetTemplateContextType.java b/idea/src/org/jetbrains/kotlin/idea/liveTemplates/JetTemplateContextType.java index 30dbfea44a1..9a274b3fb1d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/liveTemplates/JetTemplateContextType.java +++ b/idea/src/org/jetbrains/kotlin/idea/liveTemplates/JetTemplateContextType.java @@ -43,9 +43,12 @@ public abstract class JetTemplateContextType extends TemplateContextType { public boolean isInContext(@NotNull PsiFile file, int offset) { if (PsiUtilBase.getLanguageAtOffset(file, offset).isKindOf(JetLanguage.INSTANCE)) { PsiElement element = file.findElementAt(offset); - if (element instanceof PsiWhiteSpace || element instanceof PsiComment) { + if (element instanceof PsiWhiteSpace) { return false; } + else if (PsiTreeUtil.getParentOfType(element, PsiComment.class, false) != null) { + return isCommentInContext(); + } else if (PsiTreeUtil.getParentOfType(element, JetPackageDirective.class) != null || PsiTreeUtil.getParentOfType(element, JetImportDirective.class) != null) { return false; @@ -71,6 +74,10 @@ public abstract class JetTemplateContextType extends TemplateContextType { return false; } + protected boolean isCommentInContext() { + return false; + } + protected abstract boolean isInContext(@NotNull PsiElement element); public static class Generic extends JetTemplateContextType { @@ -82,6 +89,11 @@ public abstract class JetTemplateContextType extends TemplateContextType { protected boolean isInContext(@NotNull PsiElement element) { return true; } + + @Override + protected boolean isCommentInContext() { + return true; + } } public static class TopLevel extends JetTemplateContextType { @@ -170,4 +182,20 @@ public abstract class JetTemplateContextType extends TemplateContextType { && !(element.getParent() instanceof JetParameter); } } + + public static class Comment extends JetTemplateContextType { + public Comment() { + super("KOTLIN_COMMENT", "Comment", Generic.class); + } + + @Override + protected boolean isInContext(@NotNull PsiElement element) { + return false; + } + + @Override + protected boolean isCommentInContext() { + return true; + } + } }