Improved "if" template, added "if-else" template, removed "if" keyword from completion.
This commit is contained in:
@@ -147,7 +147,6 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
|
|||||||
|
|
||||||
public static class KeywordsCompletionProvider extends CompletionProvider<CompletionParameters> {
|
public static class KeywordsCompletionProvider extends CompletionProvider<CompletionParameters> {
|
||||||
|
|
||||||
private static final JetTemplateInsertHandler TEMPLATE_INSERT_HANDLER = new JetTemplateInsertHandler();
|
|
||||||
private final Collection<LookupElement> elements;
|
private final Collection<LookupElement> elements;
|
||||||
|
|
||||||
public KeywordsCompletionProvider(String ...keywords) {
|
public KeywordsCompletionProvider(String ...keywords) {
|
||||||
@@ -158,7 +157,7 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
|
|||||||
final LookupElementBuilder lookupElementBuilder = LookupElementBuilder.create(keyword).setBold();
|
final LookupElementBuilder lookupElementBuilder = LookupElementBuilder.create(keyword).setBold();
|
||||||
|
|
||||||
if (keyword.contains("<#<")) {
|
if (keyword.contains("<#<")) {
|
||||||
return lookupElementBuilder.setInsertHandler(TEMPLATE_INSERT_HANDLER);
|
return JetTemplateInsertHandler.lookup(keyword);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!FUNCTION_KEYWORDS.contains(keyword)) {
|
if (!FUNCTION_KEYWORDS.contains(keyword)) {
|
||||||
@@ -202,7 +201,7 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
|
|||||||
CATCH_KEYWORD, CLASS_KEYWORD, CONTINUE_KEYWORD,
|
CATCH_KEYWORD, CLASS_KEYWORD, CONTINUE_KEYWORD,
|
||||||
DO_KEYWORD, ELSE_KEYWORD, ENUM_KEYWORD,
|
DO_KEYWORD, ELSE_KEYWORD, ENUM_KEYWORD,
|
||||||
FALSE_KEYWORD, FINALLY_KEYWORD, FOR_KEYWORD,
|
FALSE_KEYWORD, FINALLY_KEYWORD, FOR_KEYWORD,
|
||||||
FUN_KEYWORD, GET_KEYWORD, IF_KEYWORD,
|
FUN_KEYWORD, GET_KEYWORD,
|
||||||
IN_KEYWORD, INLINE_KEYWORD, INTERNAL_KEYWORD,
|
IN_KEYWORD, INLINE_KEYWORD, INTERNAL_KEYWORD,
|
||||||
IS_KEYWORD, NULL_KEYWORD, OBJECT_KEYWORD,
|
IS_KEYWORD, NULL_KEYWORD, OBJECT_KEYWORD,
|
||||||
PRIVATE_KEYWORD, PROTECTED_KEYWORD, PUBLIC_KEYWORD,
|
PRIVATE_KEYWORD, PROTECTED_KEYWORD, PUBLIC_KEYWORD,
|
||||||
@@ -214,19 +213,22 @@ public class JetKeywordCompletionContributor extends CompletionContributor {
|
|||||||
WHILE_KEYWORD);
|
WHILE_KEYWORD);
|
||||||
|
|
||||||
registerScopeKeywordsCompletion(new InPropertyFilter(),
|
registerScopeKeywordsCompletion(new InPropertyFilter(),
|
||||||
ELSE_KEYWORD, FALSE_KEYWORD, IF_KEYWORD,
|
ELSE_KEYWORD, FALSE_KEYWORD,
|
||||||
NULL_KEYWORD, THIS_KEYWORD, TRUE_KEYWORD);
|
NULL_KEYWORD, THIS_KEYWORD, TRUE_KEYWORD);
|
||||||
|
|
||||||
registerScopeKeywordsCompletion(new InParametersFilter(), OUT_KEYWORD);
|
registerScopeKeywordsCompletion(new InParametersFilter(), OUT_KEYWORD);
|
||||||
|
|
||||||
extend(CompletionType.BASIC, getPlacePattern(new InNonClassBlockFilter()), new KeywordsCompletionProvider(
|
// templates
|
||||||
"if (<#<condition>#>) {\n\n}"
|
registerScopeKeywordsCompletion(new InNonClassBlockFilter(), "if (<#<condition>#>) {\n \n}", "if (<#<condition>#>) {\n \n} else {\n \n}");
|
||||||
));
|
}
|
||||||
|
|
||||||
|
private void registerScopeKeywordsCompletion(final ElementFilter placeFilter, String... keywords) {
|
||||||
|
extend(CompletionType.BASIC, getPlacePattern(placeFilter),
|
||||||
|
new KeywordsCompletionProvider(keywords));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerScopeKeywordsCompletion(final ElementFilter placeFilter, JetToken... keywords) {
|
private void registerScopeKeywordsCompletion(final ElementFilter placeFilter, JetToken... keywords) {
|
||||||
extend(CompletionType.BASIC, getPlacePattern(placeFilter),
|
registerScopeKeywordsCompletion(placeFilter, convertTokensToStrings(keywords));
|
||||||
new KeywordsCompletionProvider(convertTokensToStrings(keywords)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String[] convertTokensToStrings(JetToken... keywords) {
|
private static String[] convertTokensToStrings(JetToken... keywords) {
|
||||||
|
|||||||
+41
-3
@@ -4,24 +4,50 @@ import com.intellij.codeInsight.completion.InsertHandler;
|
|||||||
import com.intellij.codeInsight.completion.InsertionContext;
|
import com.intellij.codeInsight.completion.InsertionContext;
|
||||||
import com.intellij.codeInsight.folding.CodeFoldingManager;
|
import com.intellij.codeInsight.folding.CodeFoldingManager;
|
||||||
import com.intellij.codeInsight.lookup.LookupElement;
|
import com.intellij.codeInsight.lookup.LookupElement;
|
||||||
|
import com.intellij.codeInsight.lookup.LookupElementBuilder;
|
||||||
|
import com.intellij.openapi.editor.Document;
|
||||||
import com.intellij.openapi.editor.Editor;
|
import com.intellij.openapi.editor.Editor;
|
||||||
import com.intellij.openapi.editor.SelectionModel;
|
import com.intellij.openapi.editor.SelectionModel;
|
||||||
import com.intellij.psi.codeStyle.CodeStyleManager;
|
import com.intellij.psi.codeStyle.CodeStyleManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Evgeny Gerashchenko
|
|
||||||
* @author max (originally from objc)
|
* @author max (originally from objc)
|
||||||
|
* @author Evgeny Gerashchenko
|
||||||
* @since 1/31/12
|
* @since 1/31/12
|
||||||
*/
|
*/
|
||||||
public class JetTemplateInsertHandler implements InsertHandler<LookupElement> {
|
public class JetTemplateInsertHandler implements InsertHandler<LookupElement> {
|
||||||
|
private String myInsertion;
|
||||||
|
|
||||||
|
public JetTemplateInsertHandler(String insertion) {
|
||||||
|
myInsertion = insertion;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleInsert(InsertionContext context, LookupElement item) {
|
public void handleInsert(InsertionContext context, LookupElement item) {
|
||||||
|
Document document = context.getDocument();
|
||||||
Editor editor = context.getEditor();
|
Editor editor = context.getEditor();
|
||||||
|
|
||||||
|
String insertion = myInsertion;
|
||||||
|
final char currentChar = context.getTailOffset() < document.getTextLength() ? document.getCharsSequence().charAt(context.getTailOffset()) : 0;
|
||||||
|
if (insertion.endsWith(" ") && context.getCompletionChar() != ' ' && (currentChar == ')' || currentChar == ' ' || currentChar == '\t')) {
|
||||||
|
insertion = insertion.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
int tailOffset = context.getStartOffset() + insertion.length();
|
||||||
|
int caretOffset = insertion.indexOf('|');
|
||||||
|
if (caretOffset != -1) {
|
||||||
|
insertion = insertion.replace("|", "");
|
||||||
|
tailOffset = context.getStartOffset() + caretOffset;
|
||||||
|
}
|
||||||
|
|
||||||
|
document.replaceString(context.getStartOffset(), context.getTailOffset(), insertion);
|
||||||
|
|
||||||
|
context.setTailOffset(tailOffset);
|
||||||
|
|
||||||
final CodeFoldingManager foldManager = CodeFoldingManager.getInstance(context.getProject());
|
final CodeFoldingManager foldManager = CodeFoldingManager.getInstance(context.getProject());
|
||||||
foldManager.updateFoldRegions(editor);
|
foldManager.updateFoldRegions(editor);
|
||||||
|
|
||||||
String text = context.getDocument().getText();
|
String text = document.getText();
|
||||||
int firstParamStart = text.indexOf("<#<", context.getStartOffset());
|
int firstParamStart = text.indexOf("<#<", context.getStartOffset());
|
||||||
int firstParamEnd = text.indexOf(">#>", firstParamStart);
|
int firstParamEnd = text.indexOf(">#>", firstParamStart);
|
||||||
|
|
||||||
@@ -30,7 +56,9 @@ public class JetTemplateInsertHandler implements InsertHandler<LookupElement> {
|
|||||||
selectionModel.setSelection(firstParamStart, firstParamEnd + 2);
|
selectionModel.setSelection(firstParamStart, firstParamEnd + 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeStyleManager.getInstance(context.getProject()).reformatText(context.getFile(), context.getStartOffset(), context.getTailOffset());
|
if (!insertion.endsWith(" ")) {
|
||||||
|
CodeStyleManager.getInstance(context.getProject()).reformatText(context.getFile(), context.getStartOffset(), context.getTailOffset());
|
||||||
|
}
|
||||||
|
|
||||||
if (firstParamStart >= 0 && firstParamEnd >= 0 && selectionModel.hasSelection()) {
|
if (firstParamStart >= 0 && firstParamEnd >= 0 && selectionModel.hasSelection()) {
|
||||||
editor.getCaretModel().moveToOffset(selectionModel.getSelectionStart());
|
editor.getCaretModel().moveToOffset(selectionModel.getSelectionStart());
|
||||||
@@ -38,5 +66,15 @@ public class JetTemplateInsertHandler implements InsertHandler<LookupElement> {
|
|||||||
else {
|
else {
|
||||||
editor.getCaretModel().moveToOffset(context.getTailOffset());
|
editor.getCaretModel().moveToOffset(context.getTailOffset());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (context.getCompletionChar() == ' ') {
|
||||||
|
context.setAddCompletionChar(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static LookupElementBuilder lookup(String template) {
|
||||||
|
String presentation = template.replaceAll("<#<(\\w+)>#>", "...");
|
||||||
|
LookupElementBuilder builder = LookupElementBuilder.create(presentation).setBold();
|
||||||
|
return builder.setInsertHandler(new JetTemplateInsertHandler(template));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user