diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 1c2b9b48355..1bf7a41f0a9 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -91,6 +91,7 @@ + diff --git a/idea/src/org/jetbrains/jet/plugin/liveTemplates/JetTemplateContextType.java b/idea/src/org/jetbrains/jet/plugin/liveTemplates/JetTemplateContextType.java index 924f3158bf7..817dda34f65 100644 --- a/idea/src/org/jetbrains/jet/plugin/liveTemplates/JetTemplateContextType.java +++ b/idea/src/org/jetbrains/jet/plugin/liveTemplates/JetTemplateContextType.java @@ -17,7 +17,7 @@ import org.jetbrains.jet.plugin.JetLanguage; * @since 1/27/12 */ public abstract class JetTemplateContextType extends TemplateContextType { - protected JetTemplateContextType(@NotNull @NonNls String id, @NotNull String presentableName, @Nullable Class baseContextType) { + protected JetTemplateContextType(@NotNull @NonNls String id, @NotNull String presentableName, @Nullable java.lang.Class baseContextType) { super(id, presentableName, baseContextType); } @@ -74,6 +74,32 @@ public abstract class JetTemplateContextType extends TemplateContextType { } } + public static class Class extends JetTemplateContextType { + public Class() { + super("KOTLIN_CLASS", "Class", Generic.class); + } + + @Override + protected boolean isInContext(@NotNull PsiElement element) { + PsiElement e = element; + while (e != null && !(e instanceof JetClassOrObject)) { + if (e instanceof JetModifierList) { + // skip property/function/class or object which is owner of modifier list + e = e.getParent(); + if (e != null) { + e = e.getParent(); + } + continue; + } + if (e instanceof JetProperty || e instanceof JetNamedFunction) { + return false; + } + e = e.getParent(); + } + return true; + } + } + public static class Statement extends JetTemplateContextType { public Statement() { super("KOTLIN_STATEMENT", "Statement", Generic.class);