Made fm live template available only on top level.
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
<template resource-bundle="org.jetbrains.jet.plugin.JetBundle" key="livetemplate.description.fm"
|
<template resource-bundle="org.jetbrains.jet.plugin.JetBundle" key="livetemplate.description.fm"
|
||||||
name="fm" toReformat="true" toShortenFQNames="true" value="fun main(args : Array<String>) { $END$ }">
|
name="fm" toReformat="true" toShortenFQNames="true" value="fun main(args : Array<String>) { $END$ }">
|
||||||
<context>
|
<context>
|
||||||
<option name="KOTLIN" value="true" />
|
<option name="KOTLIN_NAMESPACE" value="true" />
|
||||||
</context>
|
</context>
|
||||||
</template>
|
</template>
|
||||||
<template resource-bundle="org.jetbrains.jet.plugin.JetBundle" key="livetemplate.description.sout"
|
<template resource-bundle="org.jetbrains.jet.plugin.JetBundle" key="livetemplate.description.sout"
|
||||||
|
|||||||
@@ -65,7 +65,8 @@
|
|||||||
<completion.contributor language="jet" implementationClass="org.jetbrains.jet.plugin.completion.JetKeywordCompletionContributor"/>
|
<completion.contributor language="jet" implementationClass="org.jetbrains.jet.plugin.completion.JetKeywordCompletionContributor"/>
|
||||||
<completion.contributor language="jet" implementationClass="org.jetbrains.jet.plugin.completion.JetCompletionContributor"/>
|
<completion.contributor language="jet" implementationClass="org.jetbrains.jet.plugin.completion.JetCompletionContributor"/>
|
||||||
|
|
||||||
<liveTemplateContext implementation="org.jetbrains.jet.plugin.liveTemplates.JetTemplateContextType"/>
|
<liveTemplateContext implementation="org.jetbrains.jet.plugin.liveTemplates.JetTemplateContextType$Generic"/>
|
||||||
|
<liveTemplateContext implementation="org.jetbrains.jet.plugin.liveTemplates.JetTemplateContextType$Namespace"/>
|
||||||
<defaultLiveTemplatesProvider implementation="org.jetbrains.jet.plugin.liveTemplates.JetLiveTemplatesProvider"/>
|
<defaultLiveTemplatesProvider implementation="org.jetbrains.jet.plugin.liveTemplates.JetLiveTemplatesProvider"/>
|
||||||
|
|
||||||
<annotator language="jet" implementationClass="org.jetbrains.jet.plugin.annotations.SoftKeywordsAnnotator"/>
|
<annotator language="jet" implementationClass="org.jetbrains.jet.plugin.annotations.SoftKeywordsAnnotator"/>
|
||||||
|
|||||||
@@ -2,22 +2,70 @@ package org.jetbrains.jet.plugin.liveTemplates;
|
|||||||
|
|
||||||
import com.intellij.codeInsight.template.EverywhereContextType;
|
import com.intellij.codeInsight.template.EverywhereContextType;
|
||||||
import com.intellij.codeInsight.template.TemplateContextType;
|
import com.intellij.codeInsight.template.TemplateContextType;
|
||||||
|
import com.intellij.patterns.PlatformPatterns;
|
||||||
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.psi.PsiFile;
|
import com.intellij.psi.PsiFile;
|
||||||
|
import com.intellij.psi.PsiWhiteSpace;
|
||||||
import com.intellij.psi.util.PsiUtilBase;
|
import com.intellij.psi.util.PsiUtilBase;
|
||||||
|
import org.jetbrains.annotations.NonNls;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
import org.jetbrains.jet.lang.psi.JetClassOrObject;
|
||||||
|
import org.jetbrains.jet.lang.psi.JetNamedFunction;
|
||||||
|
import org.jetbrains.jet.lang.psi.JetProperty;
|
||||||
import org.jetbrains.jet.plugin.JetLanguage;
|
import org.jetbrains.jet.plugin.JetLanguage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Evgeny Gerashchenko
|
* @author Evgeny Gerashchenko
|
||||||
* @since 1/27/12
|
* @since 1/27/12
|
||||||
*/
|
*/
|
||||||
public class JetTemplateContextType extends TemplateContextType {
|
public abstract class JetTemplateContextType extends TemplateContextType {
|
||||||
public JetTemplateContextType() {
|
protected JetTemplateContextType(@NotNull @NonNls String id, @NotNull String presentableName, @Nullable Class<? extends TemplateContextType> baseContextType) {
|
||||||
super("KOTLIN", "Kotlin", EverywhereContextType.class);
|
super(id, presentableName, baseContextType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isInContext(@NotNull PsiFile file, int offset) {
|
public boolean isInContext(@NotNull PsiFile file, int offset) {
|
||||||
return PsiUtilBase.getLanguageAtOffset(file, offset).isKindOf(JetLanguage.INSTANCE);
|
if (PsiUtilBase.getLanguageAtOffset(file, offset).isKindOf(JetLanguage.INSTANCE)) {
|
||||||
|
PsiElement element = file.findElementAt(offset);
|
||||||
|
if (element instanceof PsiWhiteSpace) {
|
||||||
|
|
||||||
|
}
|
||||||
|
return element != null && isInContext(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract boolean isInContext(@NotNull PsiElement element);
|
||||||
|
|
||||||
|
public static class Generic extends JetTemplateContextType {
|
||||||
|
public Generic() {
|
||||||
|
super("KOTLIN", "Kotlin", EverywhereContextType.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean isInContext(@NotNull PsiElement element) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class Namespace extends JetTemplateContextType {
|
||||||
|
public Namespace() {
|
||||||
|
super("KOTLIN_NAMESPACE", "Namespace", Generic.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean isInContext(@NotNull PsiElement element) {
|
||||||
|
PsiElement e = element;
|
||||||
|
while (e != null) {
|
||||||
|
if (e instanceof JetProperty || e instanceof JetNamedFunction
|
||||||
|
|| e instanceof JetClassOrObject) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
e = e.getParent();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user