Added if block template and generic template insertion handler
This commit is contained in:
@@ -21,6 +21,7 @@ import org.jetbrains.jet.lang.psi.*;
|
||||
import org.jetbrains.jet.lexer.JetToken;
|
||||
import org.jetbrains.jet.plugin.completion.handlers.JetFunctionInsertHandler;
|
||||
import org.jetbrains.jet.plugin.completion.handlers.JetKeywordInsertHandler;
|
||||
import org.jetbrains.jet.plugin.completion.handlers.JetTemplateInsertHandler;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
@@ -146,6 +147,7 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
|
||||
|
||||
public static class KeywordsCompletionProvider extends CompletionProvider<CompletionParameters> {
|
||||
|
||||
private static final JetTemplateInsertHandler TEMPLATE_INSERT_HANDLER = new JetTemplateInsertHandler();
|
||||
private final Collection<LookupElement> elements;
|
||||
|
||||
public KeywordsCompletionProvider(String ...keywords) {
|
||||
@@ -155,6 +157,10 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
|
||||
public LookupElement apply(String keyword) {
|
||||
final LookupElementBuilder lookupElementBuilder = LookupElementBuilder.create(keyword).setBold();
|
||||
|
||||
if (keyword.contains("<#<")) {
|
||||
return lookupElementBuilder.setInsertHandler(TEMPLATE_INSERT_HANDLER);
|
||||
}
|
||||
|
||||
if (!FUNCTION_KEYWORDS.contains(keyword)) {
|
||||
return lookupElementBuilder.setInsertHandler(KEYWORDS_INSERT_HANDLER);
|
||||
}
|
||||
@@ -169,6 +175,7 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
|
||||
@NotNull CompletionResultSet result) {
|
||||
result.addAllElements(elements);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public JetKeywordCompletionContributor() {
|
||||
@@ -211,6 +218,10 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
|
||||
NULL_KEYWORD, THIS_KEYWORD, TRUE_KEYWORD);
|
||||
|
||||
registerScopeKeywordsCompletion(new InParametersFilter(), OUT_KEYWORD);
|
||||
|
||||
extend(CompletionType.BASIC, getPlacePattern(new InNonClassBlockFilter()), new KeywordsCompletionProvider(
|
||||
"if (<#<condition>#>) {\n\n}"
|
||||
));
|
||||
}
|
||||
|
||||
private void registerScopeKeywordsCompletion(final ElementFilter placeFilter, JetToken... keywords) {
|
||||
@@ -231,4 +242,5 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
|
||||
return PlatformPatterns.psiElement().and(
|
||||
new FilterPattern(new AndFilter(GENERAL_FILTER, placeFilter)));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
package org.jetbrains.jet.plugin.completion.handlers;
|
||||
|
||||
import com.intellij.codeInsight.completion.InsertHandler;
|
||||
import com.intellij.codeInsight.completion.InsertionContext;
|
||||
import com.intellij.codeInsight.folding.CodeFoldingManager;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.SelectionModel;
|
||||
import com.intellij.psi.codeStyle.CodeStyleManager;
|
||||
|
||||
/**
|
||||
* @author Evgeny Gerashchenko
|
||||
* @author max (originally from objc)
|
||||
* @since 1/31/12
|
||||
*/
|
||||
public class JetTemplateInsertHandler implements InsertHandler<LookupElement> {
|
||||
@Override
|
||||
public void handleInsert(InsertionContext context, LookupElement item) {
|
||||
Editor editor = context.getEditor();
|
||||
|
||||
final CodeFoldingManager foldManager = CodeFoldingManager.getInstance(context.getProject());
|
||||
foldManager.updateFoldRegions(editor);
|
||||
|
||||
String text = context.getDocument().getText();
|
||||
int firstParamStart = text.indexOf("<#<", context.getStartOffset());
|
||||
int firstParamEnd = text.indexOf(">#>", firstParamStart);
|
||||
|
||||
SelectionModel selectionModel = editor.getSelectionModel();
|
||||
if (firstParamStart >= 0 && firstParamEnd >= 0 && firstParamStart < context.getTailOffset()) {
|
||||
selectionModel.setSelection(firstParamStart, firstParamEnd + 2);
|
||||
}
|
||||
|
||||
CodeStyleManager.getInstance(context.getProject()).reformatText(context.getFile(), context.getStartOffset(), context.getTailOffset());
|
||||
|
||||
if (firstParamStart >= 0 && firstParamEnd >= 0 && selectionModel.hasSelection()) {
|
||||
editor.getCaretModel().moveToOffset(selectionModel.getSelectionStart());
|
||||
}
|
||||
else {
|
||||
editor.getCaretModel().moveToOffset(context.getTailOffset());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user