Delete paired > after deleting < after any identifier, not just a class-like one

#KT-13279 Fixed
This commit is contained in:
Dmitry Jemerov
2016-11-18 13:28:51 +01:00
parent baf321a193
commit ab8abc9c62
5 changed files with 18 additions and 4 deletions
@@ -19,15 +19,20 @@ package org.jetbrains.kotlin.idea.editor;
import com.intellij.codeInsight.editorActions.BackspaceHandlerDelegate;
import com.intellij.openapi.editor.Editor;
import com.intellij.psi.PsiFile;
import org.jetbrains.kotlin.lexer.KtTokens;
import org.jetbrains.kotlin.psi.KtFile;
import static org.jetbrains.kotlin.idea.editor.LtGtTypingUtils.isAfterToken;
public class KotlinBackspaceHandler extends BackspaceHandlerDelegate {
private boolean deleteGt;
@Override
public void beforeCharDeleted(char c, PsiFile file, Editor editor) {
int offset = editor.getCaretModel().getOffset() - 1;
deleteGt = c =='<' && file instanceof KtFile && LtGtTypingUtils.shouldAutoCloseAngleBracket(offset, editor);
deleteGt = c =='<' && file instanceof KtFile &&
(isAfterToken(offset, editor, KtTokens.FUN_KEYWORD) ||
isAfterToken(offset, editor, KtTokens.IDENTIFIER));
}
@Override
@@ -22,6 +22,7 @@ import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.ex.EditorEx;
import com.intellij.openapi.editor.highlighter.HighlighterIterator;
import com.intellij.psi.tree.TokenSet;
import org.jetbrains.kotlin.lexer.KtToken;
import org.jetbrains.kotlin.lexer.KtTokens;
final class LtGtTypingUtils {
@@ -43,7 +44,7 @@ final class LtGtTypingUtils {
}
static boolean shouldAutoCloseAngleBracket(int offset, Editor editor) {
return isAfterClassIdentifier(offset, editor) || isAfterFunKeyword(offset, editor);
return isAfterClassIdentifier(offset, editor) || isAfterToken(offset, editor, KtTokens.FUN_KEYWORD);
}
private static boolean isAfterClassIdentifier(int offset, Editor editor) {
@@ -59,7 +60,7 @@ final class LtGtTypingUtils {
return JavaTypedHandler.isClassLikeIdentifier(offset, editor, iterator, KtTokens.IDENTIFIER);
}
private static boolean isAfterFunKeyword(int offset, Editor editor) {
static boolean isAfterToken(int offset, Editor editor, KtToken tokenType) {
HighlighterIterator iterator = ((EditorEx) editor).getHighlighter().createIterator(offset);
if (iterator.atEnd()) {
return false;
@@ -73,6 +74,6 @@ final class LtGtTypingUtils {
iterator.retreat();
}
return iterator.getTokenType() == KtTokens.FUN_KEYWORD;
return iterator.getTokenType() == tokenType;
}
}
@@ -0,0 +1 @@
val f = ContainerUtil.newArrayList<<caret>>()
@@ -0,0 +1 @@
val f = ContainerUtil.newArrayList<caret>()
@@ -36,6 +36,12 @@ public class BackspaceHandlerTestGenerated extends AbstractBackspaceHandlerTest
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/editor/backspaceHandler"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true);
}
@TestMetadata("typeArguments.kt")
public void testTypeArguments() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/editor/backspaceHandler/typeArguments.kt");
doTest(fileName);
}
@TestMetadata("idea/testData/editor/backspaceHandler/stringTemplate")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)